diff --git a/AUTHORS b/AUTHORS
index cc668c7..d0d2926 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -275,6 +275,7 @@
 Eduardo Lima (Etrunko) <eduardo.lima@intel.com>
 Edward Baker <edward.baker@intel.com>
 Edward Crossman <tedoc2000@gmail.com>
+Edward Trist <edwardtrist@gmail.com>
 Eero Häkkinen <e.hakkinen@samsung.com>
 Eero Häkkinen <eero.hakkinen@intel.com>
 Egor Starkov <egor.starkov@samsung.com>
diff --git a/DEPS b/DEPS
index 2eecdd7..9149e5c 100644
--- a/DEPS
+++ b/DEPS
@@ -182,11 +182,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': 'ad56c4c143cf6f4cdc79cc129b2bc1d3093ce856',
+  'skia_revision': '47b06754624e7745c6911d4c77adbd41dbc63ee8',
   # 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': 'e02ac97561412ebf74a1b3b59b0ae0d3402ec882',
+  'v8_revision': '9b08c186c5e3e12215c16ae2f65b7bfe836856d9',
   # 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.
@@ -194,7 +194,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': 'be04c04729df41e359ebce625690af4368f12142',
+  'angle_revision': 'd80adf4e137da54db7e755b9f1d153117f6fc5f2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -202,14 +202,14 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '6389dd16373131129808537a893c53817e5f7ca7',
+  'pdfium_revision': '8d477f73bf8bc4f618e83b46a73cd5f7765e43b8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
   #
   # Note this revision should be updated with
   # third_party/boringssl/roll_boringssl.py, not roll-dep.
-  'boringssl_revision': '2309f645e509507a1cc8f9845771110fcf986fd9',
+  'boringssl_revision': '88024df12147e56b6abd66b743ff441a0aaa09a8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -217,7 +217,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling googletest
   # and whatever else without interference from each other.
-  'googletest_revision': 'cb44c86c1aaf31b26797728e93acc950c01dbd5b',
+  'googletest_revision': '4fe018038f87675c083d0cfb6a6b57c274fb1753',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling lighttpd
   # and whatever else without interference from each other.
@@ -253,7 +253,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '597115926cf7d0a1fcdfc71df0521fe74e99ff8a',
+  'devtools_frontend_revision': '8667db035ed2cbd4fdd503b78f9c9465f2a08bc5',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -305,7 +305,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': '45aed839e9c5647375bbc0249cc1b298f53ad190',
+  'dawn_revision': 'a2fe305797833acfa4fa3866b06f369c243c8bce',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -720,7 +720,7 @@
   },
 
   'src/third_party/android_sdk/androidx_browser/src': {
-      'url': Var('chromium_git') + '/external/gob/android/platform/frameworks/support/browser.git' + '@' + 'd05290c8d9d8630ced1e4472e73d47751f23ada9',
+      'url': Var('chromium_git') + '/external/gob/android/platform/frameworks/support/browser.git' + '@' + 'ac2f9c348999e8943567c6e4d50a82a5010ca263',
       'condition': 'checkout_android',
   },
 
@@ -875,7 +875,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'd27e40cf55af8f1aa2068bc425c6a7c616ea9db7',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'a85d58e50e33dc98e3faa2837a65a02ad288ae8b',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1207,7 +1207,7 @@
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + 'a5473711f3e20c6bd1c33d81b6c7b9a0618aa18f',
 
   'src/third_party/openscreen/src':
-    Var('chromium_git') + '/openscreen' + '@' + 'c9201dd611b0aa8d66fe7ef2749c7ce0c157f0a1',
+    Var('chromium_git') + '/openscreen' + '@' + '1e53576f0a3fd0e420288959829d94b3de8785a5',
 
   'src/third_party/openxr/src': {
     'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '9e97b73e7dd2bfc07745489d728f6a36665c648f',
@@ -1224,7 +1224,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'bc9475ac0bf57ff18e9fea4fc10b6e3eb8f09247',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '3755aca72039c54e42fded4b16a1f2ac2c48fbf5',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1452,7 +1452,7 @@
   },
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '8e75bd40e04742bc8e4bf3ed36c2eafbfa0858ad',
+    Var('webrtc_git') + '/src.git' + '@' + '506d4eb7e4ef214ec29fd86ea51a6edaeecb81c3',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1524,7 +1524,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@73c5db6dfb0ce532882a6fc83f9232ce1cd1f6c7',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@84f0a85ccafe7a4046fd7dbe5eecbdbe79a2b1c2',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/browser/BUILD.gn b/android_webview/browser/BUILD.gn
index 5ffbfd4..52f78f7 100644
--- a/android_webview/browser/BUILD.gn
+++ b/android_webview/browser/BUILD.gn
@@ -202,6 +202,7 @@
     "//components/cdm/browser",
     "//components/content_capture/android",
     "//components/content_capture/browser",
+    "//components/flags_ui",
 
     # Called via JNI in CrashpadMain
     "//components/crash/android:crashpad_main",
diff --git a/android_webview/browser/DEPS b/android_webview/browser/DEPS
index 1140212..263485c 100644
--- a/android_webview/browser/DEPS
+++ b/android_webview/browser/DEPS
@@ -16,6 +16,7 @@
   "+components/crash/core",
   "+components/download/public/common",
   "+components/embedder_support/android/metrics",
+  "+components/flags_ui",
   "+components/heap_profiling",
   "+components/keyed_service/core",
   "+components/minidump_uploader",
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 39c4b8b3..331d5f1 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -402,6 +402,9 @@
 void AwContentBrowserClient::AppendExtraCommandLineSwitches(
     base::CommandLine* command_line,
     int child_process_id) {
+  // AppCache should always be enabled for WebView until it is removed.
+  command_line->AppendSwitch(switches::kAppCacheForceEnabled);
+
   if (!command_line->HasSwitch(switches::kSingleProcess)) {
     // The only kind of a child process WebView can have is renderer or utility.
     std::string process_type =
diff --git a/android_webview/browser/aw_contents_statics.cc b/android_webview/browser/aw_contents_statics.cc
index c5109a14..af635b6 100644
--- a/android_webview/browser/aw_contents_statics.cc
+++ b/android_webview/browser/aw_contents_statics.cc
@@ -14,6 +14,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/command_line.h"
+#include "components/flags_ui/flags_ui_metrics.h"
 #include "components/google/core/common/google_util.h"
 #include "components/security_interstitials/core/urls.h"
 #include "components/version_info/version_info.h"
@@ -139,6 +140,23 @@
 }
 
 // static
+void JNI_AwContentsStatics_LogFlagMetrics(
+    JNIEnv* env,
+    const JavaParamRef<jobjectArray>& jswitches,
+    const JavaParamRef<jobjectArray>& jfeatures) {
+  std::set<std::string> switches;
+  for (const auto& jswitch : jswitches.ReadElements<jstring>()) {
+    switches.insert(ConvertJavaStringToUTF8(jswitch));
+  }
+  std::set<std::string> features;
+  for (const auto& jfeature : jfeatures.ReadElements<jstring>()) {
+    features.insert(ConvertJavaStringToUTF8(jfeature));
+  }
+  flags_ui::ReportAboutFlagsHistogram("Launch.FlagsAtStartup", switches,
+                                      features);
+}
+
+// static
 jboolean JNI_AwContentsStatics_IsMultiProcessEnabled(JNIEnv* env) {
   return !content::RenderProcessHost::run_renderer_in_process();
 }
diff --git a/android_webview/browser/aw_web_contents_delegate.cc b/android_webview/browser/aw_web_contents_delegate.cc
index fdeb58f0..99994550 100644
--- a/android_webview/browser/aw_web_contents_delegate.cc
+++ b/android_webview/browser/aw_web_contents_delegate.cc
@@ -111,16 +111,6 @@
       request_id, number_of_matches, active_match_ordinal, final_update);
 }
 
-void AwWebContentsDelegate::CanDownload(
-    const GURL& url,
-    const std::string& request_method,
-    base::OnceCallback<void(bool)> callback) {
-  // Android webview intercepts download in its resource dispatcher host
-  // delegate, so should not reach here.
-  NOTREACHED();
-  std::move(callback).Run(false);
-}
-
 void AwWebContentsDelegate::RunFileChooser(
     content::RenderFrameHost* render_frame_host,
     std::unique_ptr<content::FileSelectListener> listener,
diff --git a/android_webview/browser/aw_web_contents_delegate.h b/android_webview/browser/aw_web_contents_delegate.h
index b2bef05..3ddd1e8 100644
--- a/android_webview/browser/aw_web_contents_delegate.h
+++ b/android_webview/browser/aw_web_contents_delegate.h
@@ -35,9 +35,6 @@
                  const gfx::Rect& selection_rect,
                  int active_match_ordinal,
                  bool final_update) override;
-  void CanDownload(const GURL& url,
-                   const std::string& request_method,
-                   base::OnceCallback<void(bool)> callback) override;
   void RunFileChooser(content::RenderFrameHost* render_frame_host,
                       std::unique_ptr<content::FileSelectListener> listener,
                       const blink::mojom::FileChooserParams& params) override;
diff --git a/android_webview/browser/js_java_interaction/js_to_java_messaging.cc b/android_webview/browser/js_java_interaction/js_to_java_messaging.cc
index fb295ae..549fa3aa 100644
--- a/android_webview/browser/js_java_interaction/js_to_java_messaging.cc
+++ b/android_webview/browser/js_java_interaction/js_to_java_messaging.cc
@@ -4,7 +4,6 @@
 
 #include "android_webview/browser/js_java_interaction/js_to_java_messaging.h"
 
-#include "android_webview/browser/aw_contents.h"
 #include "android_webview/browser_jni_headers/WebMessageListenerHolder_jni.h"
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
diff --git a/android_webview/docs/developer-ui.md b/android_webview/docs/developer-ui.md
index ee359a6c..e95ea2b 100644
--- a/android_webview/docs/developer-ui.md
+++ b/android_webview/docs/developer-ui.md
@@ -155,6 +155,9 @@
 Finch experiment), we **highly encourage** you to [add to the
 list](/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java)
 (ex. [CL](https://crrev.com/c/2008007), [CL](https://crrev.com/c/2066144)).
+After that, follow [these
+steps](/tools/metrics/histograms/README.md#Flag-Histograms) to collect metrics
+about your feature usage.
 
 Exposing your feature this way has several benefits:
 
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
index 9da5e541..f0ff07ac 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
@@ -32,6 +32,7 @@
 
 import org.chromium.android_webview.AwBrowserContext;
 import org.chromium.android_webview.AwBrowserProcess;
+import org.chromium.android_webview.AwContentsStatics;
 import org.chromium.android_webview.AwSettings;
 import org.chromium.android_webview.ProductConfig;
 import org.chromium.android_webview.WebViewChromiumRunQueue;
@@ -332,13 +333,13 @@
                     developerModeEnd - developerModeStart);
             RecordHistogram.recordBooleanHistogram(
                     "Android.WebView.DevUi.DeveloperModeEnabled", isDeveloperModeEnabled);
+            Map<String, Boolean> flagOverrides = null;
             if (isDeveloperModeEnabled) {
                 long start = SystemClock.elapsedRealtime();
                 try {
                     FlagOverrideHelper helper =
                             new FlagOverrideHelper(ProductionSupportedFlagList.sFlagList);
-                    Map<String, Boolean> flagOverrides =
-                            DeveloperModeUtils.getFlagOverrides(webViewPackageName);
+                    flagOverrides = DeveloperModeUtils.getFlagOverrides(webViewPackageName);
                     helper.applyFlagOverrides(flagOverrides);
 
                     RecordHistogram.recordCount100Histogram(
@@ -375,6 +376,10 @@
 
             // Now safe to use WebView data directory.
 
+            if (flagOverrides != null) {
+                AwContentsStatics.logFlagOverridesWithNative(flagOverrides);
+            }
+
             mAwInit.startVariationsInit();
 
             mShouldDisableThreadChecking = shouldDisableThreadChecking(ctx);
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsStatics.java b/android_webview/java/src/org/chromium/android_webview/AwContentsStatics.java
index bf02fda8..07a30a91d 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsStatics.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsStatics.java
@@ -7,16 +7,22 @@
 import android.content.Context;
 import android.net.Uri;
 
+import org.chromium.android_webview.common.Flag;
+import org.chromium.android_webview.common.FlagOverrideHelper;
 import org.chromium.android_webview.common.PlatformServiceBridge;
+import org.chromium.android_webview.common.ProductionSupportedFlagList;
 import org.chromium.base.Callback;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.task.PostTask;
+import org.chromium.base.task.TaskTraits;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Implementations of various static methods, and also a home for static
@@ -129,6 +135,29 @@
         AwContentsStaticsJni.get().logCommandLineForDebugging();
     }
 
+    public static void logFlagOverridesWithNative(Map<String, Boolean> flagOverrides) {
+        // Do work asynchronously to avoid blocking startup.
+        PostTask.postTask(TaskTraits.THREAD_POOL_BEST_EFFORT, () -> {
+            FlagOverrideHelper helper =
+                    new FlagOverrideHelper(ProductionSupportedFlagList.sFlagList);
+            ArrayList<String> switches = new ArrayList<>();
+            ArrayList<String> features = new ArrayList<>();
+            for (Map.Entry<String, Boolean> entry : flagOverrides.entrySet()) {
+                Flag flag = helper.getFlagForName(entry.getKey());
+                boolean enabled = entry.getValue();
+                if (flag.isBaseFeature()) {
+                    features.add(flag.getName() + (enabled ? ":enabled" : ":disabled"));
+                } else if (enabled) {
+                    switches.add("--" + flag.getName());
+                }
+                // Only insert enabled switches; ignore explicitly disabled switches since this is
+                // usually a NOOP.
+            }
+            AwContentsStaticsJni.get().logFlagMetrics(
+                    switches.toArray(new String[0]), features.toArray(new String[0]));
+        });
+    }
+
     /**
      * Return the first substring consisting of the address of a physical location.
      * @see {@link android.webkit.WebView#findAddress(String)}
@@ -153,6 +182,7 @@
     @NativeMethods
     interface Natives {
         void logCommandLineForDebugging();
+        void logFlagMetrics(String[] switches, String[] features);
 
         String getSafeBrowsingPrivacyPolicyUrl();
         void clearClientCertPreferences(Runnable callback);
diff --git a/android_webview/java/src/org/chromium/android_webview/common/FlagOverrideHelper.java b/android_webview/java/src/org/chromium/android_webview/common/FlagOverrideHelper.java
index 160be447..5f88035 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/FlagOverrideHelper.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/FlagOverrideHelper.java
@@ -96,7 +96,7 @@
      * @return the desired {@link Flag}.
      * @throws RuntimeException if this cannot find {@code name} in the list.
      */
-    private Flag getFlagForName(@NonNull String name) {
+    public Flag getFlagForName(@NonNull String name) {
         if (mFlagMap.containsKey(name)) {
             return mFlagMap.get(name);
         }
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index 4d32492..d5d64fc 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -22,7 +22,9 @@
     private ProductionSupportedFlagList() {}
 
     /**
-     * A list of commandline flags supported on user devices.
+     * A list of commandline flags supported on user devices. If updating this list, please also
+     * update enums.xml. See android_webview/docs/developer-ui.md
+     * (https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/developer-ui.md#Adding-your-flags-and-features-to-the-UI).
      */
     public static final Flag[] sFlagList = {
             Flag.commandLine(AwSwitches.HIGHLIGHT_ALL_WEBVIEWS,
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/services/MetricsBridgeServiceTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/services/MetricsBridgeServiceTest.java
index 26f11f4d..8e2db6d6 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/services/MetricsBridgeServiceTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/services/MetricsBridgeServiceTest.java
@@ -42,6 +42,16 @@
 @RunWith(AwJUnit4ClassRunner.class)
 @OnlyRunIn(SINGLE_PROCESS)
 public class MetricsBridgeServiceTest {
+    private static final HistogramRecord PARSING_LOG_RESULT_SUCCESS_RECORD =
+            HistogramRecord.newBuilder()
+                    .setRecordType(RecordType.HISTOGRAM_LINEAR)
+                    .setHistogramName("Android.WebView.NonEmbeddedMetrics.ParsingLogResult")
+                    .setSample(MetricsBridgeService.ParsingLogResult.SUCCESS)
+                    .setMin(1)
+                    .setMax(MetricsBridgeService.ParsingLogResult.COUNT)
+                    .setNumBuckets(MetricsBridgeService.ParsingLogResult.COUNT + 1)
+                    .build();
+
     private File mTempFile;
 
     @Before
@@ -131,9 +141,9 @@
         stub.recordMetrics(recordBooleanProto.toByteArray());
         List<byte[]> retrievedDataList = stub.retrieveNonembeddedMetrics();
 
-        byte[][] expectedData =
-                new byte[][] {recordBooleanProto.toByteArray(), recordLinearProto.toByteArray(),
-                        recordBooleanProto.toByteArray(), recordBooleanProto.toByteArray()};
+        byte[][] expectedData = new byte[][] {recordBooleanProto.toByteArray(),
+                recordLinearProto.toByteArray(), recordBooleanProto.toByteArray(),
+                PARSING_LOG_RESULT_SUCCESS_RECORD.toByteArray(), recordBooleanProto.toByteArray()};
 
         // Assert file is deleted after the retrieve call
         Assert.assertFalse(
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/MetricsBridgeService.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/MetricsBridgeService.java
index 59f77bb..4a0b57a 100644
--- a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/MetricsBridgeService.java
+++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/MetricsBridgeService.java
@@ -9,12 +9,14 @@
 import android.os.IBinder;
 import android.os.Process;
 
+import androidx.annotation.IntDef;
 import androidx.annotation.VisibleForTesting;
 
 import com.google.protobuf.InvalidProtocolBufferException;
 
 import org.chromium.android_webview.common.services.IMetricsBridgeService;
 import org.chromium.android_webview.proto.MetricsBridgeRecords.HistogramRecord;
+import org.chromium.android_webview.proto.MetricsBridgeRecords.HistogramRecord.RecordType;
 import org.chromium.base.Log;
 import org.chromium.base.PathUtils;
 import org.chromium.base.task.PostTask;
@@ -47,6 +49,39 @@
     private FileOutputStream mFileOutputStream;
     private List<byte[]> mRecordsList = new ArrayList<>();
 
+    // These values are persisted to logs. Entries should not be renumbered and
+    // numeric values should never be reused.
+    @VisibleForTesting
+    @IntDef({ParsingLogResult.SUCCESS, ParsingLogResult.MALFORMED_PROTOBUF,
+            ParsingLogResult.IO_EXCEPTION})
+    public @interface ParsingLogResult {
+        int SUCCESS = 0;
+        int MALFORMED_PROTOBUF = 1;
+        int IO_EXCEPTION = 2;
+        int COUNT = 3;
+    }
+
+    // Adding a histogram record to list and not calling base.metrics.RecordHistogram to avoid the
+    // service calling itself.
+    private void logParsingLogResult(@ParsingLogResult int sample) {
+        // Similar to calling RecordHistogram.recordEnumeratedHistogram(
+        //        "Android.WebView.NonEmbeddedMetrics.ParsingLogResult", sample,
+        //        ParsingLogResult.COUNT);
+        HistogramRecord record =
+                HistogramRecord.newBuilder()
+                        .setRecordType(RecordType.HISTOGRAM_LINEAR)
+                        .setHistogramName("Android.WebView.NonEmbeddedMetrics.ParsingLogResult")
+                        .setSample(sample)
+                        .setMin(1)
+                        .setMax(ParsingLogResult.COUNT)
+                        .setNumBuckets(ParsingLogResult.COUNT + 1)
+                        .build();
+        // Add to the in-memory list but never written to file to avoid filling up the record list
+        // and file with redundant records. However, this means when this record is sent to embedded
+        // WebView it represents the parsing result for the most recent service start only.
+        mRecordsList.add(record.toByteArray());
+    }
+
     // To avoid any potential synchronization issues as well as avoid blocking the caller thread
     // (e.g when the caller is a thread from the same process.), we post all read/write operations
     // to be run serially using a SequencedTaskRunner instead of using a lock.
@@ -66,10 +101,13 @@
                     // serialization.
                     mRecordsList.add(proto.toByteArray());
                 }
+                logParsingLogResult(ParsingLogResult.SUCCESS);
             } catch (InvalidProtocolBufferException e) {
                 Log.e(TAG, "Malformed metrics log proto", e);
+                logParsingLogResult(ParsingLogResult.MALFORMED_PROTOBUF);
                 deleteMetricsLogFile();
             } catch (IOException e) {
+                logParsingLogResult(ParsingLogResult.IO_EXCEPTION);
                 Log.e(TAG, "Failed reading proto log file", e);
             }
         });
@@ -98,7 +136,8 @@
                 // Make sure that we don't add records indefinitely in case of no embedded
                 // WebView connects to the service to retrieve and clear the records.
                 if (mRecordsList.size() >= MAX_HISTOGRAM_COUNT) {
-                    // TODO(https://crbug.com/1073683) add a histogram to log request overflow.
+                    // TODO(https://crbug.com/1088467) add a histogram to log the number of dropped
+                    // histograms.
                     Log.w(TAG, "retained records has reached the max capacity, dropping record");
                     return;
                 }
@@ -177,9 +216,8 @@
     }
 
     /**
-     * Block until all the tasks in the local {@code mSequencedTaskRunner} are finished.
-     *
-     * @param timeoutMillis timeout in milliseconds.
+     * Add a FutureTask that can be used to block until all the tasks in the local
+     * {@code mSequencedTaskRunner} are finished for testing.
      */
     @VisibleForTesting
     public FutureTask addTaskToBlock() {
diff --git a/ash/accelerators/accelerator_table_unittest.cc b/ash/accelerators/accelerator_table_unittest.cc
index 4e1b529..c11837b 100644
--- a/ash/accelerators/accelerator_table_unittest.cc
+++ b/ash/accelerators/accelerator_table_unittest.cc
@@ -17,10 +17,10 @@
 namespace {
 
 // The number of non-Search-based accelerators.
-constexpr int kNonSearchAcceleratorsNum = 101;
+constexpr int kNonSearchAcceleratorsNum = 102;
 // The hash of non-Search-based accelerators. See HashAcceleratorData().
 constexpr char kNonSearchAcceleratorsHash[] =
-    "e7990dc7f5ebdc3dfe8baabe60eea382";
+    "75a67571e0b9a4ab7515360d1c474729";
 
 struct Cmp {
   bool operator()(const AcceleratorData& lhs,
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 72c6a34b..3e04356 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -1155,6 +1155,10 @@
   keyboard_traversal_engaged_ = false;
 }
 
+bool AppListControllerImpl::AppListTargetVisibility() const {
+  return last_target_visible_;
+}
+
 void AppListControllerImpl::ViewClosing() {
   if (presenter_.GetView()->search_box_view()->is_search_box_active()) {
     // Close the virtual keyboard before the app list view is dismissed.
diff --git a/ash/app_list/app_list_controller_impl.h b/ash/app_list/app_list_controller_impl.h
index 46126a1..096fed6 100644
--- a/ash/app_list/app_list_controller_impl.h
+++ b/ash/app_list/app_list_controller_impl.h
@@ -175,6 +175,7 @@
       const std::string& result_id,
       GetContextMenuModelCallback callback) override;
   void ViewShown(int64_t display_id) override;
+  bool AppListTargetVisibility() const override;
   void ViewClosing() override;
   void ViewClosed() override;
   const std::vector<SkColor>& GetWallpaperProminentColors() override;
diff --git a/ash/app_list/app_list_view_delegate.h b/ash/app_list/app_list_view_delegate.h
index 9aa083c1d..e67cfc2 100644
--- a/ash/app_list/app_list_view_delegate.h
+++ b/ash/app_list/app_list_view_delegate.h
@@ -216,6 +216,10 @@
   // space. This prevents 1px gaps on displays with non-integer scale factors.
   virtual gfx::Rect SnapBoundsToDisplayEdge(const gfx::Rect& bounds) = 0;
 
+  // Returns whether the app list is visible on the display. This checks that
+  // the app list windows is open and not obstructed by another window.
+  virtual bool AppListTargetVisibility() const = 0;
+
   // Gets the current shelf height (or width for side-shelf) from the
   // ShelfConfig.
   virtual int GetShelfSize() = 0;
diff --git a/ash/app_list/test/app_list_test_view_delegate.cc b/ash/app_list/test/app_list_test_view_delegate.cc
index 6ab66fe..b02c7553 100644
--- a/ash/app_list/test/app_list_test_view_delegate.cc
+++ b/ash/app_list/test/app_list_test_view_delegate.cc
@@ -207,6 +207,10 @@
   return 56;
 }
 
+bool AppListTestViewDelegate::AppListTargetVisibility() const {
+  return true;
+}
+
 bool AppListTestViewDelegate::IsInTabletMode() {
   return is_tablet_mode_;
 }
diff --git a/ash/app_list/test/app_list_test_view_delegate.h b/ash/app_list/test/app_list_test_view_delegate.h
index 62c6fd1a..8fa361f 100644
--- a/ash/app_list/test/app_list_test_view_delegate.h
+++ b/ash/app_list/test/app_list_test_view_delegate.h
@@ -119,6 +119,7 @@
       AppLaunchedMetricParams* metric_params) override;
   gfx::Rect SnapBoundsToDisplayEdge(const gfx::Rect& bounds) override;
   int GetShelfSize() override;
+  bool AppListTargetVisibility() const override;
   bool IsInTabletMode() override;
   AppListNotifier* GetNotifier() override;
 
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc
index 4aca39e..899821f 100644
--- a/ash/app_list/views/app_list_view.cc
+++ b/ash/app_list/views/app_list_view.cc
@@ -1209,8 +1209,15 @@
 }
 
 void AppListView::MaybeCreateAccessibilityEvent(AppListViewState new_state) {
-  if (new_state != AppListViewState::kPeeking &&
-      new_state != AppListViewState::kFullscreenAllApps)
+  if (new_state == app_list_state_)
+    return;
+
+  if ((new_state != AppListViewState::kPeeking &&
+       new_state != AppListViewState::kFullscreenAllApps)) {
+    return;
+  }
+
+  if (!delegate_->AppListTargetVisibility())
     return;
 
   base::string16 state_announcement;
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index c57a017..3f87603 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -2362,7 +2362,13 @@
         <ph name="TOTAL_TIME">{0}<ex>10m</ex></ph> timer
       </message>
       <message name="IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WITH_LABEL" desc="Message for Assistant timer notification. Example: 10m timer · Eggs.">
-        <ph name="TOTAL_TIME">{0}<ex>10m</ex></ph> timer · <ph name="LABEL">{1}<ex>Eggs</ex></ph>
+        <ph name="TOTAL_TIME">{0}<ex>10m</ex></ph> timer &#x00B7; <ph name="LABEL">{1}<ex>Eggs</ex></ph>
+      </message>
+      <message name="IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WHEN_FIRED" desc="Message for Assistant timer notification once the timer has fired.">
+        Time's up
+      </message>
+      <message name="IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WHEN_FIRED_WITH_LABEL" desc="Message for Assistant timer notification once the timer has fired. Example: Time's up · Eggs.">
+        Time's up &#x00B7; <ph name="LABEL">{1}<ex>Eggs</ex></ph>
       </message>
       <message name="IDS_ASSISTANT_TIMER_NOTIFICATION_FORMATTED_TIME_NEGATE" desc="Negates a formatted time string. Example: -10:27.">
         -<ph name="FORMATTED_TIME">{0}<ex>10:27</ex></ph>
diff --git a/ash/assistant/assistant_alarm_timer_controller_impl.cc b/ash/assistant/assistant_alarm_timer_controller_impl.cc
index 9eca4d3..fb78d6e 100644
--- a/ash/assistant/assistant_alarm_timer_controller_impl.cc
+++ b/ash/assistant/assistant_alarm_timer_controller_impl.cc
@@ -146,14 +146,17 @@
       return base::UTF16ToUTF8(
           base::i18n::MessageFormatter::FormatWithNumberedArgs(
               l10n_util::GetStringUTF16(
-                  IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE),
+                  timer.state == AssistantTimerState::kFired
+                      ? IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WHEN_FIRED
+                      : IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE),
               ToOriginalDurationString(timer)));
     }
-    return base::UTF16ToUTF8(
-        base::i18n::MessageFormatter::FormatWithNumberedArgs(
-            l10n_util::GetStringUTF16(
-                IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WITH_LABEL),
-            ToOriginalDurationString(timer), timer.label));
+    return base::UTF16ToUTF8(base::i18n::MessageFormatter::FormatWithNumberedArgs(
+        l10n_util::GetStringUTF16(
+            timer.state == AssistantTimerState::kFired
+                ? IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WHEN_FIRED_WITH_LABEL
+                : IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WITH_LABEL),
+        ToOriginalDurationString(timer), timer.label));
   }
   return ToRemainingTimeString(timer);
 }
@@ -275,6 +278,7 @@
   notification->client_id = CreateTimerNotificationId(timer);
   notification->grouping_key = kTimerNotificationGroupingKey;
   notification->priority = CreateTimerNotificationPriority(timer);
+  notification->is_pinned = IsTimersV2Enabled();
   return notification;
 }
 
diff --git a/ash/assistant/assistant_alarm_timer_controller_unittest.cc b/ash/assistant/assistant_alarm_timer_controller_unittest.cc
index dc4f53e..ff5b7aaa 100644
--- a/ash/assistant/assistant_alarm_timer_controller_unittest.cc
+++ b/ash/assistant/assistant_alarm_timer_controller_unittest.cc
@@ -43,38 +43,6 @@
 constexpr char kTimerId[] = "1";
 constexpr char kClientId[] = "assistant/timer1";
 
-// Macros ----------------------------------------------------------------------
-
-#define EXPECT_NOTIFICATION_EQ(expected_notif_, notif_)                 \
-  {                                                                     \
-    ASSERT_NE(nullptr, notif_);                                         \
-    if (expected_notif_.client_id_.has_value())                         \
-      EXPECT_EQ(expected_notif_.client_id_.value(), notif_->client_id); \
-    if (expected_notif_.message_.has_value())                           \
-      EXPECT_EQ(expected_notif_.message_.value(), notif_->message);     \
-    if (expected_notif_.priority_.has_value())                          \
-      EXPECT_EQ(expected_notif_.priority_.value(), notif_->priority);   \
-    if (expected_notif_.remove_on_click_.has_value()) {                 \
-      EXPECT_EQ(expected_notif_.remove_on_click_.value(),               \
-                notif_->remove_on_click);                               \
-    }                                                                   \
-    if (expected_notif_.title_.has_value())                             \
-      EXPECT_EQ(expected_notif_.title_.value(), notif_->title);         \
-  }
-
-#define EXPECT_BUTTON_EQ(expected_btn_, btn_)                         \
-  {                                                                   \
-    ASSERT_NE(nullptr, btn_.get());                                   \
-    if (expected_btn_.action_url_.has_value())                        \
-      EXPECT_EQ(expected_btn_.action_url_.value(), btn_->action_url); \
-    if (expected_btn_.label_.has_value())                             \
-      EXPECT_EQ(expected_btn_.label_.value(), btn_->label);           \
-    if (expected_btn_.remove_notification_on_click_.has_value()) {    \
-      EXPECT_EQ(expected_btn_.remove_notification_on_click_.value(),  \
-                btn_->remove_notification_on_click);                  \
-    }                                                                 \
-  }
-
 // Mocks -----------------------------------------------------------------------
 
 class MockAssistantAlarmTimerModelObserver
@@ -172,11 +140,41 @@
   ExpectedNotification& operator=(const ExpectedNotification&) = delete;
   ~ExpectedNotification() = default;
 
+  friend std::ostream& operator<<(std::ostream& os,
+                                  const ExpectedNotification& notif) {
+    if (notif.client_id_.has_value())
+      os << "\nclient_id: '" << notif.client_id_.value() << "'";
+    if (notif.is_pinned_.has_value())
+      os << "\nis_pinned: '" << notif.is_pinned_.value() << "'";
+    if (notif.message_.has_value())
+      os << "\nmessage: '" << notif.message_.value() << "'";
+    if (notif.priority_.has_value())
+      os << "\npriority: '" << notif.priority_.value() << "'";
+    if (notif.remove_on_click_.has_value())
+      os << "\nremove_on_click: '" << notif.remove_on_click_.value() << "'";
+    return os;
+  }
+
+  bool operator==(const AssistantNotificationPtr& ptr) const {
+    return ptr && ptr->client_id == client_id_.value_or(ptr->client_id) &&
+           ptr->is_pinned == is_pinned_.value_or(ptr->is_pinned) &&
+           ptr->message == message_.value_or(ptr->message) &&
+           ptr->priority == priority_.value_or(ptr->priority) &&
+           ptr->remove_on_click ==
+               remove_on_click_.value_or(ptr->remove_on_click) &&
+           ptr->title == title_.value_or(ptr->title);
+  }
+
   ExpectedNotification& WithClientId(const std::string& client_id) {
     client_id_ = client_id;
     return *this;
   }
 
+  ExpectedNotification& WithIsPinned(bool is_pinned) {
+    is_pinned_ = is_pinned;
+    return *this;
+  }
+
   ExpectedNotification& WithMessage(const std::string& message) {
     message_ = message;
     return *this;
@@ -201,7 +199,9 @@
     return WithTitle(l10n_util::GetStringUTF8(title_id));
   }
 
+ private:
   base::Optional<std::string> client_id_;
+  base::Optional<bool> is_pinned_;
   base::Optional<std::string> message_;
   base::Optional<AssistantNotificationPriority> priority_;
   base::Optional<bool> remove_on_click_;
@@ -215,6 +215,26 @@
   ExpectedButton& operator=(const ExpectedButton&) = delete;
   ~ExpectedButton() = default;
 
+  friend std::ostream& operator<<(std::ostream& os, const ExpectedButton& btr) {
+    if (btr.action_url_.has_value())
+      os << "\naction_url: '" << btr.action_url_.value() << "'";
+    if (btr.label_.has_value())
+      os << "\nlabel: '" << btr.label_.value() << "'";
+    if (btr.remove_notification_on_click_.has_value()) {
+      os << "\nremove_notification_on_click: '"
+         << btr.remove_notification_on_click_.value() << "'";
+    }
+    return os;
+  }
+
+  bool operator==(const AssistantNotificationButtonPtr& ptr) const {
+    return ptr && ptr->action_url == action_url_.value_or(ptr->action_url) &&
+           ptr->label == label_.value_or(ptr->label) &&
+           ptr->remove_notification_on_click ==
+               remove_notification_on_click_.value_or(
+                   ptr->remove_notification_on_click);
+  }
+
   ExpectedButton& WithActionUrl(const GURL& action_url) {
     action_url_ = action_url;
     return *this;
@@ -231,6 +251,7 @@
     return *this;
   }
 
+ private:
   base::Optional<GURL> action_url_;
   base::Optional<std::string> label_;
   base::Optional<bool> remove_notification_on_click_;
@@ -267,8 +288,8 @@
     last_notification_ = notification->Clone();
   }
 
-  const AssistantNotification* last_notification() const {
-    return last_notification_.get();
+  const AssistantNotificationPtr& last_notification() const {
+    return last_notification_;
   }
 
  private:
@@ -395,16 +416,15 @@
   ASSERT_FALSE(chromeos::assistant::features::IsTimersV2Enabled());
 
   // Observe notifications.
-  ScopedNotificationModelObserver notification_model_observer;
+  ScopedNotificationModelObserver observer;
 
   // Fire a timer.
   FireTimer{kTimerId};
 
   // We expect that a notification exists w/ an internationalized title.
-  EXPECT_NOTIFICATION_EQ(
-      ExpectedNotification().WithClientId(kClientId).WithTitleId(
-          IDS_ASSISTANT_TIMER_NOTIFICATION_TITLE),
-      notification_model_observer.last_notification());
+  EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithTitleId(
+                IDS_ASSISTANT_TIMER_NOTIFICATION_TITLE),
+            observer.last_notification());
 }
 
 // Tests that a notification is added for a timer and has the expected title at
@@ -455,7 +475,7 @@
     base::test::ScopedRestoreICUDefaultLocale locale(i18n_test_case.locale);
 
     // Observe notifications.
-    ScopedNotificationModelObserver notification_model_observer;
+    ScopedNotificationModelObserver observer;
 
     // Schedule a timer.
     ScheduleTimer(kTimerId).WithRemainingTime(base::TimeDelta::FromHours(1) +
@@ -468,10 +488,9 @@
       AdvanceClock(tick.advance_clock);
 
       // Make assertions about the notification.
-      EXPECT_NOTIFICATION_EQ(
-          ExpectedNotification().WithClientId(kClientId).WithTitle(
-              tick.expected_string),
-          notification_model_observer.last_notification());
+      EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithTitle(
+                    tick.expected_string),
+                observer.last_notification());
     }
   }
 }
@@ -514,7 +533,7 @@
     base::test::ScopedRestoreICUDefaultLocale locale(i18n_test_case.locale);
 
     // Observe notifications.
-    ScopedNotificationModelObserver notification_model_observer;
+    ScopedNotificationModelObserver observer;
 
     // Fire a timer.
     FireTimer{kTimerId};
@@ -525,10 +544,9 @@
       AdvanceClock(tick.advance_clock);
 
       // Make assertions about the notification.
-      EXPECT_NOTIFICATION_EQ(
-          ExpectedNotification().WithClientId(kClientId).WithMessage(
-              tick.expected_string),
-          notification_model_observer.last_notification());
+      EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithMessage(
+                    tick.expected_string),
+                observer.last_notification());
     }
   }
 }
@@ -553,7 +571,8 @@
   typedef struct {
     base::TimeDelta original_duration;
     std::string label;
-    std::string expected_message;
+    std::string expected_message_when_scheduled;
+    std::string expected_message_when_fired;
   } TestTimer;
 
   // We're going to run our test over a few locales to ensure i18n compliance.
@@ -569,12 +588,14 @@
       /*locale=*/"en_US",
       /*timers=*/
       {
-          {kOneSec, kEmptyLabel, "1s timer"},
-          {kOneSec, "Eggs", "1s timer · Eggs"},
-          {kOneSec + kOneMin, kEmptyLabel, "1m 1s timer"},
-          {kOneSec + kOneMin, "Eggs", "1m 1s timer · Eggs"},
-          {kOneSec + kOneMin + kOneHour, kEmptyLabel, "1h 1m 1s timer"},
-          {kOneSec + kOneMin + kOneHour, "Eggs", "1h 1m 1s timer · Eggs"},
+          {kOneSec, kEmptyLabel, "1s timer", "Time's up"},
+          {kOneSec, "Eggs", "1s timer · Eggs", "Time's up · Eggs"},
+          {kOneSec + kOneMin, kEmptyLabel, "1m 1s timer", "Time's up"},
+          {kOneSec + kOneMin, "Eggs", "1m 1s timer · Eggs", "Time's up · Eggs"},
+          {kOneSec + kOneMin + kOneHour, kEmptyLabel, "1h 1m 1s timer",
+           "Time's up"},
+          {kOneSec + kOneMin + kOneHour, "Eggs", "1h 1m 1s timer · Eggs",
+           "Time's up · Eggs"},
       },
   });
 
@@ -583,20 +604,29 @@
     base::test::ScopedRestoreICUDefaultLocale locale(i18n_test_case.locale);
 
     // Observe notifications.
-    ScopedNotificationModelObserver notification_model_observer;
+    ScopedNotificationModelObserver observer;
 
     // Run each timer in the test.
     for (auto& timer : i18n_test_case.timers) {
-      // Schedule a timer.
+      // Schedule timer.
       ScheduleTimer(kTimerId)
           .WithLabel(timer.label)
           .WithOriginalDuration(timer.original_duration);
 
       // Make assertions about the notification.
-      EXPECT_NOTIFICATION_EQ(
-          ExpectedNotification().WithClientId(kClientId).WithMessage(
-              timer.expected_message),
-          notification_model_observer.last_notification());
+      EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithMessage(
+                    timer.expected_message_when_scheduled),
+                observer.last_notification());
+
+      // Fire timer.
+      FireTimer(kTimerId)
+          .WithLabel(timer.label)
+          .WithOriginalDuration(timer.original_duration);
+
+      // Make assertions about the notification.
+      EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithMessage(
+                    timer.expected_message_when_fired),
+                observer.last_notification());
     }
   }
 }
@@ -608,29 +638,28 @@
   ASSERT_FALSE(chromeos::assistant::features::IsTimersV2Enabled());
 
   // Observe notifications.
-  ScopedNotificationModelObserver notification_model_observer;
+  ScopedNotificationModelObserver observer;
 
   // Fire a timer.
   FireTimer{kTimerId};
 
   // We expect the timer notification to have two buttons.
-  auto* last_notification = notification_model_observer.last_notification();
-  ASSERT_EQ(2u, last_notification->buttons.size());
+  ASSERT_NE(nullptr, observer.last_notification().get());
+  ASSERT_EQ(2u, observer.last_notification()->buttons.size());
 
   // We expect a "STOP" button which will remove the timer.
-  EXPECT_BUTTON_EQ(
-      ExpectedButton()
-          .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_STOP_BUTTON)
-          .WithActionUrl(
-              assistant::util::CreateAlarmTimerDeepLink(
-                  assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
-                  kTimerId)
-                  .value())
-          .WithRemoveNotificationOnClick(true),
-      last_notification->buttons.at(0));
+  EXPECT_EQ(ExpectedButton()
+                .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_STOP_BUTTON)
+                .WithActionUrl(
+                    assistant::util::CreateAlarmTimerDeepLink(
+                        assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
+                        kTimerId)
+                        .value())
+                .WithRemoveNotificationOnClick(true),
+            observer.last_notification()->buttons.at(0));
 
   // We expect an "ADD 1 MIN" button which will add time to the timer.
-  EXPECT_BUTTON_EQ(
+  EXPECT_EQ(
       ExpectedButton()
           .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_ADD_1_MIN_BUTTON)
           .WithActionUrl(assistant::util::CreateAlarmTimerDeepLink(
@@ -638,7 +667,7 @@
                              kTimerId, base::TimeDelta::FromMinutes(1))
                              .value())
           .WithRemoveNotificationOnClick(true),
-      last_notification->buttons.at(1));
+      observer.last_notification()->buttons.at(1));
 }
 
 // Tests that a notification is added for a timer and has the expected buttons
@@ -653,7 +682,7 @@
   ASSERT_TRUE(chromeos::assistant::features::IsTimersV2Enabled());
 
   // Observe notifications.
-  ScopedNotificationModelObserver notification_model_observer;
+  ScopedNotificationModelObserver observer;
 
   constexpr base::TimeDelta kTimeRemaining = base::TimeDelta::FromMinutes(1);
 
@@ -661,11 +690,11 @@
   ScheduleTimer(kTimerId).WithRemainingTime(kTimeRemaining);
 
   // We expect the timer notification to have two buttons.
-  auto* last_notification = notification_model_observer.last_notification();
-  ASSERT_EQ(2u, last_notification->buttons.size());
+  ASSERT_NE(nullptr, observer.last_notification().get());
+  ASSERT_EQ(2u, observer.last_notification()->buttons.size());
 
   // We expect a "PAUSE" button which will pause the timer.
-  EXPECT_BUTTON_EQ(
+  EXPECT_EQ(
       ExpectedButton()
           .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_PAUSE_BUTTON)
           .WithActionUrl(
@@ -673,29 +702,28 @@
                   assistant::util::AlarmTimerAction::kPauseTimer, kTimerId)
                   .value())
           .WithRemoveNotificationOnClick(false),
-      last_notification->buttons.at(0));
+      observer.last_notification()->buttons.at(0));
 
   // We expect a "CANCEL" button which will remove the timer.
-  EXPECT_BUTTON_EQ(
-      ExpectedButton()
-          .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_CANCEL_BUTTON)
-          .WithActionUrl(
-              assistant::util::CreateAlarmTimerDeepLink(
-                  assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
-                  kTimerId)
-                  .value())
-          .WithRemoveNotificationOnClick(true),
-      last_notification->buttons.at(1));
+  EXPECT_EQ(ExpectedButton()
+                .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_CANCEL_BUTTON)
+                .WithActionUrl(
+                    assistant::util::CreateAlarmTimerDeepLink(
+                        assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
+                        kTimerId)
+                        .value())
+                .WithRemoveNotificationOnClick(true),
+            observer.last_notification()->buttons.at(1));
 
   // Pause the timer.
   PauseTimer(kTimerId).WithRemainingTime(kTimeRemaining);
 
   // We expect the timer notification to have two buttons.
-  last_notification = notification_model_observer.last_notification();
-  ASSERT_EQ(2u, last_notification->buttons.size());
+  ASSERT_NE(nullptr, observer.last_notification().get());
+  ASSERT_EQ(2u, observer.last_notification()->buttons.size());
 
   // We expect a "RESUME" button which will resume the timer.
-  EXPECT_BUTTON_EQ(
+  EXPECT_EQ(
       ExpectedButton()
           .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_RESUME_BUTTON)
           .WithActionUrl(
@@ -703,41 +731,39 @@
                   assistant::util::AlarmTimerAction::kResumeTimer, kTimerId)
                   .value())
           .WithRemoveNotificationOnClick(false),
-      last_notification->buttons.at(0));
+      observer.last_notification()->buttons.at(0));
 
   // We expect a "CANCEL" button which will remove the timer.
-  EXPECT_BUTTON_EQ(
-      ExpectedButton()
-          .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_CANCEL_BUTTON)
-          .WithActionUrl(
-              assistant::util::CreateAlarmTimerDeepLink(
-                  assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
-                  kTimerId)
-                  .value())
-          .WithRemoveNotificationOnClick(true),
-      last_notification->buttons.at(1));
+  EXPECT_EQ(ExpectedButton()
+                .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_CANCEL_BUTTON)
+                .WithActionUrl(
+                    assistant::util::CreateAlarmTimerDeepLink(
+                        assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
+                        kTimerId)
+                        .value())
+                .WithRemoveNotificationOnClick(true),
+            observer.last_notification()->buttons.at(1));
 
   // Fire the timer.
   FireTimer{kTimerId};
 
   // We expect the timer notification to have two buttons.
-  last_notification = notification_model_observer.last_notification();
-  ASSERT_EQ(2u, last_notification->buttons.size());
+  ASSERT_NE(nullptr, observer.last_notification().get());
+  ASSERT_EQ(2u, observer.last_notification()->buttons.size());
 
   // We expect a "CANCEL" button which will remove the timer.
-  EXPECT_BUTTON_EQ(
-      ExpectedButton()
-          .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_CANCEL_BUTTON)
-          .WithActionUrl(
-              assistant::util::CreateAlarmTimerDeepLink(
-                  assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
-                  kTimerId)
-                  .value())
-          .WithRemoveNotificationOnClick(true),
-      last_notification->buttons.at(0));
+  EXPECT_EQ(ExpectedButton()
+                .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_CANCEL_BUTTON)
+                .WithActionUrl(
+                    assistant::util::CreateAlarmTimerDeepLink(
+                        assistant::util::AlarmTimerAction::kRemoveAlarmOrTimer,
+                        kTimerId)
+                        .value())
+                .WithRemoveNotificationOnClick(true),
+            observer.last_notification()->buttons.at(0));
 
   // We expect an "ADD 1 MIN" button which will add time to the timer.
-  EXPECT_BUTTON_EQ(
+  EXPECT_EQ(
       ExpectedButton()
           .WithLabel(IDS_ASSISTANT_TIMER_NOTIFICATION_ADD_1_MIN_BUTTON)
           .WithActionUrl(assistant::util::CreateAlarmTimerDeepLink(
@@ -745,7 +771,7 @@
                              kTimerId, base::TimeDelta::FromMinutes(1))
                              .value())
           .WithRemoveNotificationOnClick(false),
-      last_notification->buttons.at(1));
+      observer.last_notification()->buttons.at(1));
 }
 
 // Tests that a notification is added for a timer and has the expected value to
@@ -753,15 +779,15 @@
 TEST_F(AssistantAlarmTimerControllerTest,
        TimerNotificationHasExpectedRemoveOnClick) {
   // Observe notifications.
-  ScopedNotificationModelObserver notification_model_observer;
+  ScopedNotificationModelObserver observer;
 
   // Fire a timer.
   FireTimer{kTimerId};
 
   // Make assertions about the notification.
-  EXPECT_NOTIFICATION_EQ(
+  EXPECT_EQ(
       ExpectedNotification().WithClientId(kClientId).WithRemoveOnClick(true),
-      notification_model_observer.last_notification());
+      observer.last_notification());
 }
 
 // Tests that a notification is added for a timer and has the expected priority.
@@ -777,10 +803,9 @@
   FireTimer{kTimerId};
 
   // Make assertions about the notification.
-  EXPECT_NOTIFICATION_EQ(
-      ExpectedNotification().WithClientId(kClientId).WithPriority(
-          AssistantNotificationPriority::kHigh),
-      notification_model_observer.last_notification());
+  EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithPriority(
+                AssistantNotificationPriority::kHigh),
+            notification_model_observer.last_notification());
 }
 
 // Tests that a notification is added for a timer and has the expected priority
@@ -801,29 +826,62 @@
   ScheduleTimer{kTimerId};
 
   // Make assertions about the notification.
-  EXPECT_NOTIFICATION_EQ(
-      ExpectedNotification().WithClientId(kClientId).WithPriority(
-          AssistantNotificationPriority::kDefault),
-      notification_model_observer.last_notification());
+  EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithPriority(
+                AssistantNotificationPriority::kDefault),
+            notification_model_observer.last_notification());
 
   // Advance the clock.
   // NOTE: Six seconds is the threshold for popping up our notification.
   AdvanceClock(base::TimeDelta::FromSeconds(6));
 
   // Make assertions about the notification.
-  EXPECT_NOTIFICATION_EQ(
-      ExpectedNotification().WithClientId(kClientId).WithPriority(
-          AssistantNotificationPriority::kLow),
-      notification_model_observer.last_notification());
+  EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithPriority(
+                AssistantNotificationPriority::kLow),
+            notification_model_observer.last_notification());
 
   // Fire the timer.
   FireTimer{kTimerId};
 
   // Make assertions about the notification.
-  EXPECT_NOTIFICATION_EQ(
-      ExpectedNotification().WithClientId(kClientId).WithPriority(
-          AssistantNotificationPriority::kHigh),
-      notification_model_observer.last_notification());
+  EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithPriority(
+                AssistantNotificationPriority::kHigh),
+            notification_model_observer.last_notification());
+}
+
+// Tests that a notification is added for a timer and is not pinned.
+// NOTE: This test is only applicable to timers v1.
+TEST_F(AssistantAlarmTimerControllerTest, TimerNotificationIsNotPinned) {
+  ASSERT_FALSE(chromeos::assistant::features::IsTimersV2Enabled());
+
+  // Observe notifications.
+  ScopedNotificationModelObserver observer;
+
+  // Fire a timer.
+  FireTimer{kTimerId};
+
+  // Make assertions about the notification.
+  EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithIsPinned(false),
+            observer.last_notification());
+}
+
+// Tests that a notification is added for a timer and is pinned.
+// NOTE: This test is only applicable to timers v2.
+TEST_F(AssistantAlarmTimerControllerTest, TimerNotificationIsPinned) {
+  // Enable timers v2.
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      chromeos::assistant::features::kAssistantTimersV2);
+  ASSERT_TRUE(chromeos::assistant::features::IsTimersV2Enabled());
+
+  // Observe notifications.
+  ScopedNotificationModelObserver observer;
+
+  // Schedule a timer.
+  ScheduleTimer{kTimerId};
+
+  // Make assertions about the notification.
+  EXPECT_EQ(ExpectedNotification().WithClientId(kClientId).WithIsPinned(true),
+            observer.last_notification());
 }
 
 }  // namespace ash
diff --git a/ash/assistant/assistant_notification_controller.cc b/ash/assistant/assistant_notification_controller.cc
index 2ad678b0..c2aada7 100644
--- a/ash/assistant/assistant_notification_controller.cc
+++ b/ash/assistant/assistant_notification_controller.cc
@@ -53,6 +53,8 @@
           /*delegate=*/nullptr, kNotificationAssistantIcon,
           message_center::SystemNotificationWarningLevel::NORMAL);
 
+  system_notification->set_pinned(notification->is_pinned);
+
   switch (notification->priority) {
     case chromeos::assistant::mojom::AssistantNotificationPriority::kLow:
       system_notification->set_priority(message_center::LOW_PRIORITY);
diff --git a/ash/assistant/assistant_notification_controller_unittest.cc b/ash/assistant/assistant_notification_controller_unittest.cc
index d5a11bb9..5989b0c 100644
--- a/ash/assistant/assistant_notification_controller_unittest.cc
+++ b/ash/assistant/assistant_notification_controller_unittest.cc
@@ -85,6 +85,11 @@
     return *this;
   }
 
+  AssistantNotificationBuilder& WithIsPinned(bool is_pinned) {
+    notification_->is_pinned = is_pinned;
+    return *this;
+  }
+
   AssistantNotificationBuilder& WithPriority(
       AssistantNotificationPriority priority) {
     notification_->priority = priority;
@@ -503,4 +508,37 @@
   }
 }
 
+TEST_F(AssistantNotificationControllerTest, ShouldPropagateIsPinned) {
+  constexpr char kId[] = "id";
+
+  // Create an Assistant notification w/ default pin behavior.
+  AddOrUpdateNotification(AssistantNotificationBuilder().WithId(kId).Build());
+
+  // Verify expected system notification.
+  auto* system_notification =
+      message_center::MessageCenter::Get()->FindVisibleNotificationById(kId);
+  ASSERT_NE(nullptr, system_notification);
+  EXPECT_FALSE(system_notification->pinned());
+
+  // Create an Assistant notification w/ explicitly disabled pin behavior.
+  AddOrUpdateNotification(
+      AssistantNotificationBuilder().WithId(kId).WithIsPinned(false).Build());
+
+  // Verify expected system notification.
+  system_notification =
+      message_center::MessageCenter::Get()->FindVisibleNotificationById(kId);
+  ASSERT_NE(nullptr, system_notification);
+  EXPECT_FALSE(system_notification->pinned());
+
+  // Create an Assistant notification w/ explicitly enabled pin behavior.
+  AddOrUpdateNotification(
+      AssistantNotificationBuilder().WithId(kId).WithIsPinned(true).Build());
+
+  // Verify expected system notification.
+  system_notification =
+      message_center::MessageCenter::Get()->FindVisibleNotificationById(kId);
+  ASSERT_NE(nullptr, system_notification);
+  EXPECT_TRUE(system_notification->pinned());
+}
+
 }  // namespace ash
diff --git a/ash/public/cpp/accelerators.cc b/ash/public/cpp/accelerators.cc
index e0b90740..168f8d1 100644
--- a/ash/public/cpp/accelerators.cc
+++ b/ash/public/cpp/accelerators.cc
@@ -163,6 +163,8 @@
     {true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, TOGGLE_MAXIMIZED},
     {true, ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN, FOCUS_NEXT_PANE},
     {true, ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN, FOCUS_PREVIOUS_PANE},
+    {true, ui::VKEY_BROWSER_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
+     FOCUS_NEXT_PANE},
     {true, ui::VKEY_BROWSER_BACK, ui::EF_NONE, MINIMIZE_TOP_WINDOW_ON_BACK},
 
     // Moving active window between displays shortcut.
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc
index 0729f86..b98e4f2 100644
--- a/ash/public/cpp/ash_features.cc
+++ b/ash/public/cpp/ash_features.cc
@@ -19,9 +19,6 @@
 const base::Feature kAutoNightLight{"AutoNightLight",
                                     base::FEATURE_DISABLED_BY_DEFAULT};
 
-const base::Feature kCornerShortcuts{"CornerShortcuts",
-                                     base::FEATURE_DISABLED_BY_DEFAULT};
-
 const base::Feature kContextualNudges{"ContextualNudges",
                                       base::FEATURE_ENABLED_BY_DEFAULT};
 
@@ -251,10 +248,6 @@
   return base::FeatureList::IsEnabled(kContextualNudges);
 }
 
-bool IsCornerShortcutsEnabled() {
-  return base::FeatureList::IsEnabled(kCornerShortcuts);
-}
-
 bool IsSystemTrayMicGainSettingEnabled() {
   return base::FeatureList::IsEnabled(kSystemTrayMicGainSetting);
 }
diff --git a/ash/public/cpp/ash_features.h b/ash/public/cpp/ash_features.h
index 0cfa7e5a..b23c26d 100644
--- a/ash/public/cpp/ash_features.h
+++ b/ash/public/cpp/ash_features.h
@@ -24,9 +24,6 @@
 // Enables contextual nudges for gesture education.
 ASH_PUBLIC_EXPORT extern const base::Feature kContextualNudges;
 
-// Enables shortcuts on corners of the display.
-ASH_PUBLIC_EXPORT extern const base::Feature kCornerShortcuts;
-
 // Enables indicators to hint where displays are connected.
 ASH_PUBLIC_EXPORT extern const base::Feature kDisplayAlignAssist;
 
@@ -219,8 +216,6 @@
 
 ASH_PUBLIC_EXPORT bool AreContextualNudgesEnabled();
 
-ASH_PUBLIC_EXPORT bool IsCornerShortcutsEnabled();
-
 ASH_PUBLIC_EXPORT bool IsSystemTrayMicGainSettingEnabled();
 
 ASH_PUBLIC_EXPORT bool IsDisplayIdentificationEnabled();
diff --git a/ash/public/cpp/caption_buttons/frame_caption_button_container_view.cc b/ash/public/cpp/caption_buttons/frame_caption_button_container_view.cc
index e43ae5ee..896bc49 100644
--- a/ash/public/cpp/caption_buttons/frame_caption_button_container_view.cc
+++ b/ash/public/cpp/caption_buttons/frame_caption_button_container_view.cc
@@ -277,6 +277,13 @@
       model_->IsVisible(views::CAPTION_BUTTON_ICON_CLOSE));
 }
 
+void FrameCaptionButtonContainerView::UpdateSizeButtonTooltip(
+    bool use_restore_frame) {
+  size_button_->SetTooltipText(
+      use_restore_frame ? l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MAXIMIZE)
+                        : l10n_util::GetStringUTF16(IDS_APP_ACCNAME_RESTORE));
+}
+
 void FrameCaptionButtonContainerView::SetButtonSize(const gfx::Size& size) {
   menu_button_->SetPreferredSize(size);
   minimize_button_->SetPreferredSize(size);
diff --git a/ash/public/cpp/caption_buttons/frame_caption_button_container_view.h b/ash/public/cpp/caption_buttons/frame_caption_button_container_view.h
index 43db0df..61cd215 100644
--- a/ash/public/cpp/caption_buttons/frame_caption_button_container_view.h
+++ b/ash/public/cpp/caption_buttons/frame_caption_button_container_view.h
@@ -93,6 +93,8 @@
   // state. A parent view should relayout to reflect the change in states.
   void UpdateCaptionButtonState(bool animate);
 
+  void UpdateSizeButtonTooltip(bool use_restore_frame);
+
   // Sets the size of the buttons in this container.
   void SetButtonSize(const gfx::Size& size);
 
diff --git a/ash/public/cpp/frame_header.cc b/ash/public/cpp/frame_header.cc
index 70f9579..97ad1644 100644
--- a/ash/public/cpp/frame_header.cc
+++ b/ash/public/cpp/frame_header.cc
@@ -280,10 +280,14 @@
   const gfx::VectorIcon& maximize_icon =
       use_zoom_icons ? kWindowControlZoomIcon
                      : views::kWindowControlMaximizeIcon;
-  const gfx::VectorIcon& icon =
-      ash::ShouldUseRestoreFrame(target_widget_) ? maximize_icon : restore_icon;
+  // TODO(crbug.com/1092005): Investigate if we can move this to
+  // CaptionButtonModel and just check the model in
+  // FrameCaptionButtonContainerView.
+  const bool use_restore_frame = ash::ShouldUseRestoreFrame(target_widget_);
   caption_button_container()->SetButtonImage(
-      views::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE, icon);
+      views::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE,
+      use_restore_frame ? maximize_icon : restore_icon);
+  caption_button_container()->UpdateSizeButtonTooltip(use_restore_frame);
 
   caption_button_container()->SetButtonSize(
       views::GetCaptionButtonLayoutSize(GetButtonLayoutSize()));
diff --git a/ash/public/cpp/shelf_types.h b/ash/public/cpp/shelf_types.h
index 5cb93be..c3e1bf38 100644
--- a/ash/public/cpp/shelf_types.h
+++ b/ash/public/cpp/shelf_types.h
@@ -39,6 +39,9 @@
 
   // Hotseat is shown above the shelf.
   kExtended,
+
+  // No value,
+  kNone
 };
 
 // Defines the density of hotseat. Hotseat is "denser" if it can accommodate
diff --git a/ash/quick_answers/quick_answers_controller_impl.cc b/ash/quick_answers/quick_answers_controller_impl.cc
index 189c35c7..e6e10e8 100644
--- a/ash/quick_answers/quick_answers_controller_impl.cc
+++ b/ash/quick_answers/quick_answers_controller_impl.cc
@@ -88,10 +88,10 @@
 
 void QuickAnswersControllerImpl::DismissQuickAnswers(bool is_active) {
   MaybeDismissQuickAnswersConsent();
-  quick_answers_ui_controller_->CloseQuickAnswersView();
+  bool closed = quick_answers_ui_controller_->CloseQuickAnswersView();
   quick_answers_client_->OnQuickAnswersDismissed(
       quick_answer_ ? quick_answer_->result_type : ResultType::kNoResult,
-      is_active);
+      is_active && closed);
 }
 
 chromeos::quick_answers::QuickAnswersDelegate*
diff --git a/ash/quick_answers/quick_answers_ui_controller.cc b/ash/quick_answers/quick_answers_ui_controller.cc
index 41e51e0f..ec63efd 100644
--- a/ash/quick_answers/quick_answers_ui_controller.cc
+++ b/ash/quick_answers/quick_answers_ui_controller.cc
@@ -44,18 +44,22 @@
 }
 
 void QuickAnswersUiController::OnQuickAnswersViewPressed() {
-  CloseQuickAnswersView();
+  // Route dismissal through |controller_| for logging impressions.
+  controller_->DismissQuickAnswers(/*is_active=*/true);
+
   ash::AssistantInteractionController::Get()->StartTextInteraction(
       query_, /*allow_tts=*/false,
       chromeos::assistant::mojom::AssistantQuerySource::kQuickAnswers);
   controller_->OnQuickAnswerClick();
 }
 
-void QuickAnswersUiController::CloseQuickAnswersView() {
+bool QuickAnswersUiController::CloseQuickAnswersView() {
   if (quick_answers_view_) {
     quick_answers_view_->GetWidget()->Close();
     quick_answers_view_ = nullptr;
+    return true;
   }
+  return false;
 }
 
 void QuickAnswersUiController::OnRetryLabelPressed() {
@@ -101,11 +105,13 @@
   user_consent_view_->GetWidget()->ShowInactive();
 }
 
-void QuickAnswersUiController::CloseUserConsentView() {
+bool QuickAnswersUiController::CloseUserConsentView() {
   if (user_consent_view_) {
     user_consent_view_->GetWidget()->Close();
     user_consent_view_ = nullptr;
+    return true;
   }
+  return false;
 }
 
 void QuickAnswersUiController::OnConsentGrantedButtonPressed() {
@@ -118,11 +124,9 @@
 }
 
 void QuickAnswersUiController::OnDogfoodButtonPressed() {
-  // Close Quick-Answers related views and open the Dogfood link.
-  if (quick_answers_view_)
-    CloseQuickAnswersView();
-  if (user_consent_view_)
-    CloseUserConsentView();
+  // Route dismissal through |controller_| for logging impressions.
+  controller_->DismissQuickAnswers(/*is_active=*/true);
+
   controller_->OpenQuickAnswersDogfoodLink();
 }
 
diff --git a/ash/quick_answers/quick_answers_ui_controller.h b/ash/quick_answers/quick_answers_ui_controller.h
index 3f77eb3..88f1c15 100644
--- a/ash/quick_answers/quick_answers_ui_controller.h
+++ b/ash/quick_answers/quick_answers_ui_controller.h
@@ -39,7 +39,8 @@
                               const std::string& title,
                               const std::string& query);
 
-  void CloseQuickAnswersView();
+  // Returns true if there was a QuickAnswersView to close.
+  bool CloseQuickAnswersView();
 
   void OnQuickAnswersViewPressed();
 
@@ -61,7 +62,8 @@
   // anchor.
   void CreateUserConsentView(const gfx::Rect& anchor_bounds);
 
-  void CloseUserConsentView();
+  // Returns true if there was a UserConsentView to close.
+  bool CloseUserConsentView();
 
   // Invoked when user clicks the consent button to grant consent for using
   // Quick Answers.
diff --git a/ash/shelf/hotseat_widget.cc b/ash/shelf/hotseat_widget.cc
index 0b16331a..566e7d4 100644
--- a/ash/shelf/hotseat_widget.cc
+++ b/ash/shelf/hotseat_widget.cc
@@ -434,7 +434,7 @@
 int HotseatWidget::CalculateHotseatYInScreen(
     HotseatState hotseat_target_state) const {
   DCHECK(shelf_->IsHorizontalAlignment());
-  int hotseat_distance_from_bottom_of_display;
+  int hotseat_distance_from_bottom_of_display = 0;
   const int hotseat_size = GetHotseatSize();
   switch (hotseat_target_state) {
     case HotseatState::kShownClamshell:
@@ -457,6 +457,8 @@
           ShelfConfig::Get()->in_app_shelf_size() +
           ShelfConfig::Get()->hotseat_bottom_padding() + hotseat_size;
       break;
+    case HotseatState::kNone:
+      NOTREACHED();
   }
   const int target_shelf_size =
       shelf_->shelf_widget()->GetTargetBounds().size().height();
@@ -548,28 +550,22 @@
     shelf_view_layer->SetOpacity(new_layout_inputs.shelf_view_opacity);
   }
 
-  ui::Layer* hotseat_layer = GetNativeView()->layer();
-  {
-    ui::ScopedLayerAnimationSettings animation_setter(
-        hotseat_layer->GetAnimator());
-    animation_setter.SetTransitionDuration(
-        animate ? ShelfConfig::Get()->shelf_animation_duration()
-                : base::TimeDelta::FromMilliseconds(0));
-    animation_setter.SetTweenType(gfx::Tween::EASE_OUT);
-    animation_setter.SetPreemptionStrategy(
-        ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
-    animation_setter.SetAnimationMetricsReporter(
-        shelf_->GetHotseatTransitionMetricsReporter(state_));
+  // If shelf view is invisible, the hotseat should be as well. Otherwise the
+  // hotseat opacit should be 1.0f to preserve background blur.
+  const double target_opacity =
+      (new_layout_inputs.shelf_view_opacity == 0.f ? 0.f : 1.f);
+  const gfx::Rect& target_bounds = new_layout_inputs.bounds;
 
-    // If shelf view is invisible, the hotseat should be as well. Otherwise the
-    // hotseat opacit should be 1.0f to preserve background blur.
-    hotseat_layer->SetOpacity(
-        new_layout_inputs.shelf_view_opacity == 0.0f ? 0.0f : 1.0f);
-    SetBounds(new_layout_inputs.bounds);
-    layout_inputs_ = new_layout_inputs;
-    delegate_view_->UpdateTranslucentBackground();
+  if (animate) {
+    LayoutHotseatByAnimation(target_opacity, target_bounds);
+  } else {
+    GetNativeView()->layer()->SetOpacity(target_opacity);
+    SetBounds(target_bounds);
   }
 
+  layout_inputs_ = new_layout_inputs;
+  delegate_view_->UpdateTranslucentBackground();
+
   // Setting visibility during an animation causes the visibility property to
   // animate. Set the visibility property without an animation.
   if (new_layout_inputs.shelf_view_opacity != 0.0f &&
@@ -647,6 +643,7 @@
   if (state_ == state)
     return;
 
+  old_state_ = state_;
   state_ = state;
 
   // If the hotseat is not extended we can use the normal targeting as the
@@ -719,4 +716,50 @@
   return HotseatDensity::kDense;
 }
 
+void HotseatWidget::LayoutHotseatByAnimation(double target_opacity,
+                                             const gfx::Rect& target_bounds) {
+  ui::Layer* hotseat_layer = GetNativeView()->layer();
+
+  ui::ScopedLayerAnimationSettings animation_setter(
+      hotseat_layer->GetAnimator());
+  animation_setter.SetTransitionDuration(
+      ShelfConfig::Get()->shelf_animation_duration());
+  animation_setter.SetTweenType(gfx::Tween::EASE_OUT);
+  animation_setter.SetPreemptionStrategy(
+      ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
+  animation_setter.SetAnimationMetricsReporter(
+      shelf_->GetHotseatTransitionMetricsReporter(state_));
+
+  hotseat_layer->SetOpacity(target_opacity);
+  SetBounds(target_bounds);
+}
+
+HotseatWidget::StateTransition HotseatWidget::CalculateHotseatStateTransition()
+    const {
+  if (old_state_ == HotseatState::kNone || state_ == HotseatState::kNone)
+    return StateTransition::kOther;
+
+  if (old_state_ == state_)
+    return StateTransition::kOther;
+
+  const bool related_to_homelauncher =
+      (old_state_ == HotseatState::kShownHomeLauncher ||
+       state_ == HotseatState::kShownHomeLauncher);
+  const bool related_to_extended = (old_state_ == HotseatState::kExtended ||
+                                    state_ == HotseatState::kExtended);
+  const bool related_to_hidden =
+      (old_state_ == HotseatState::kHidden || state_ == HotseatState::kHidden);
+
+  if (related_to_homelauncher && related_to_extended)
+    return StateTransition::kHomeLauncherAndExtended;
+
+  if (related_to_homelauncher && related_to_hidden)
+    return StateTransition::kHomeLauncherAndHidden;
+
+  if (related_to_extended && related_to_hidden)
+    return StateTransition::kHiddenAndExtended;
+
+  return StateTransition::kOther;
+}
+
 }  // namespace ash
diff --git a/ash/shelf/hotseat_widget.h b/ash/shelf/hotseat_widget.h
index 9447fb54..5ec272e 100644
--- a/ash/shelf/hotseat_widget.h
+++ b/ash/shelf/hotseat_widget.h
@@ -138,6 +138,20 @@
  private:
   class DelegateView;
 
+  // Defines the hotseat transition types.
+  enum class StateTransition {
+    // Hotseat state transits between kShownHomeLauncher and kExtended.
+    kHomeLauncherAndExtended,
+
+    // Hotseat state transits between kShownHomeLauncher and kHidden.
+    kHomeLauncherAndHidden,
+
+    // Hotseat state transits between kHidden and kExtended.
+    kHiddenAndExtended,
+
+    kOther
+  };
+
   struct LayoutInputs {
     gfx::Rect bounds;
     float shelf_view_opacity = 0.0f;
@@ -162,13 +176,22 @@
       const gfx::Size& available_size,
       HotseatState hotseat_target_state) const;
 
+  // Animates the hotseat to the target opacity/bounds.
+  void LayoutHotseatByAnimation(double target_opacity,
+                                const gfx::Rect& target_bounds);
+
+  // Calculates the state transition type before animating the hotseat.
+  StateTransition CalculateHotseatStateTransition() const;
+
   // The set of inputs that impact this widget's layout. The assumption is that
   // this widget needs a relayout if, and only if, one or more of these has
   // changed.
   base::Optional<LayoutInputs> layout_inputs_;
 
   gfx::Rect target_bounds_;
-  HotseatState state_ = HotseatState::kShownClamshell;
+
+  HotseatState old_state_ = HotseatState::kNone;
+  HotseatState state_ = HotseatState::kNone;
 
   Shelf* shelf_ = nullptr;
 
diff --git a/ash/shelf/hotseat_widget_unittest.cc b/ash/shelf/hotseat_widget_unittest.cc
index f69287a..1bcc53e1 100644
--- a/ash/shelf/hotseat_widget_unittest.cc
+++ b/ash/shelf/hotseat_widget_unittest.cc
@@ -995,6 +995,37 @@
   }
 }
 
+// Verifies that the hotseat widget and the status area widget are animated to
+// the target location when entering overview mode in home launcher
+// (https://crbug.com/1079347).
+TEST_P(HotseatWidgetTest, VerifyShelfAnimationWhenEnteringOverview) {
+  GetPrimaryShelf()->SetAutoHideBehavior(shelf_auto_hide_behavior());
+  TabletModeControllerTestApi().EnterTabletMode();
+
+  ui::ScopedAnimationDurationScaleMode non_zero_duration_mode(
+      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
+
+  HotseatWidget* hotseat_widget = GetPrimaryShelf()->hotseat_widget();
+  ASSERT_EQ(HotseatState::kShownHomeLauncher, hotseat_widget->state());
+
+  ui::LayerAnimator* hotseat_layer_animator =
+      hotseat_widget->GetNativeView()->layer()->GetAnimator();
+  ui::LayerAnimator* status_area_layer_animator = GetShelfWidget()
+                                                      ->status_area_widget()
+                                                      ->GetNativeView()
+                                                      ->layer()
+                                                      ->GetAnimator();
+  ASSERT_FALSE(hotseat_layer_animator->is_animating());
+  ASSERT_FALSE(status_area_layer_animator->is_animating());
+
+  OverviewAnimationWaiter waiter;
+  StartOverview();
+  EXPECT_TRUE(hotseat_layer_animator->is_animating());
+  EXPECT_TRUE(status_area_layer_animator->is_animating());
+  waiter.Wait();
+  ASSERT_EQ(HotseatState::kExtended, hotseat_widget->state());
+}
+
 // Tests that home -> in-app results in only one state change.
 TEST_P(HotseatWidgetTest, HomeToInAppChangesStateOnce) {
   GetPrimaryShelf()->SetAutoHideBehavior(shelf_auto_hide_behavior());
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 62d2b76b..da6a88f 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -1474,7 +1474,7 @@
       return hotseat_state();
   }
   NOTREACHED();
-  return HotseatState::kShownHomeLauncher;
+  return HotseatState::kNone;
 }
 
 ShelfVisibilityState ShelfLayoutManager::CalculateShelfVisibility() {
@@ -2049,7 +2049,8 @@
 
   if (IsHotseatEnabled()) {
     if (features::IsDragFromShelfToHomeOrOverviewEnabled() &&
-        hotseat_state() != HotseatState::kShownHomeLauncher) {
+        hotseat_state() != HotseatState::kShownHomeLauncher &&
+        hotseat_state() != HotseatState::kNone) {
       // If hotseat is hidden or extended (in-app or in-overview), do not let
       // HomeLauncherGestureHandler to handle the events.
       return false;
diff --git a/ash/shortcut_viewer/keyboard_shortcut_viewer_metadata.cc b/ash/shortcut_viewer/keyboard_shortcut_viewer_metadata.cc
index eb8b5ec0..3d3c8bd 100644
--- a/ash/shortcut_viewer/keyboard_shortcut_viewer_metadata.cc
+++ b/ash/shortcut_viewer/keyboard_shortcut_viewer_metadata.cc
@@ -1084,8 +1084,9 @@
        // |accelerator_ids|
        {},
        // |shortcut_key_codes|
-       {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_LEFT, ui::VKEY_CONTROL,
-        ui::VKEY_UNKNOWN, ui::VKEY_RIGHT}},
+       {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_BROWSER_BACK,
+        ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN,
+        ui::VKEY_BROWSER_BACK}},
 
       {// |categories|
        {ShortcutCategory::kAccessibility},
@@ -1184,9 +1185,9 @@
       {// |categories|
        {ShortcutCategory::kPageAndBrowser},
        IDS_KSV_DESCRIPTION_FOCUS_NEXT_PANE,
-       IDS_KSV_SHORTCUT_ONE_MODIFIER_ONE_KEY,
+       IDS_KSV_SHORTCUT_TWO_MODIFIERS_ONE_KEY,
        // |accelerator_ids|
-       {{ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN}}},
+       {{ui::VKEY_BROWSER_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}},
 
       {// |categories|
        {ShortcutCategory::kPageAndBrowser},
diff --git a/ash/shortcut_viewer/shortcut_viewer_strings.grdp b/ash/shortcut_viewer/shortcut_viewer_strings.grdp
index 0d645b9..358b72c 100644
--- a/ash/shortcut_viewer/shortcut_viewer_strings.grdp
+++ b/ash/shortcut_viewer/shortcut_viewer_strings.grdp
@@ -514,7 +514,7 @@
     Switch focus between: Status area (where your account picture appears), Launcher, Address bar, Bookmarks bar (if visible), The webpage that's open, and Downloads bar (if visible).
   </message>
   <message name="IDS_KSV_SHORTCUT_SWITCH_FOCUS" desc="Human readable version of the keyboard shortcut.">
-    <ph name="ctrl1">$1<ex>Ctrl</ex></ph><ph name="separator1">$2<ex>+</ex></ph><ph name="left">$3<ex>v</ex></ph> or <ph name="ctrl2">$4<ex>Ctrl</ex></ph><ph name="separator2">$5<ex>+</ex></ph><ph name="right">$6<ex>v</ex></ph>
+    <ph name="ctrl1">$1<ex>Ctrl</ex></ph><ph name="separator1">$2<ex>+</ex></ph><ph name="back1">$3<ex>v</ex></ph> or <ph name="ctrl2">$4<ex>Ctrl</ex></ph><ph name="separator2">$5<ex>+</ex></ph><ph name="shift">$6<ex>Shift</ex></ph><ph name="separator3">$7<ex>+</ex></ph><ph name="back2">$8<ex>v</ex></ph>
   </message>
   <message name="IDS_KSV_DESCRIPTION_OPEN_RIGHT_CLICK_MENU_FOR_HIGHLIGHTED_ITEM" desc="Description of the command in keyboard shortcut viewer.">
     Open right-click menu for highlighted item
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 0d71df08..8a912d7 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -63,6 +63,7 @@
 <translation id="1654477262762802994">音声検索を開始</translation>
 <translation id="1658406695958299976">パスワードをまだ確認できません。注: パスワードを最近変更した場合、新しいパスワードはログアウトした後に適用されます。こちらでは古いパスワードを使用してください。</translation>
 <translation id="1677472565718498478">残り <ph name="TIME" /></translation>
+<translation id="1698080062160024910"><ph name="TOTAL_TIME" /> タイマー · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6 アドレス: <ph name="ADDRESS" /></translation>
 <translation id="1709762881904163296">ネットワーク設定</translation>
 <translation id="1743570585616704562">認識されませんでした</translation>
@@ -335,6 +336,7 @@
 <translation id="4924411785043111640">再起動してリセット</translation>
 <translation id="495046168593986294">上にスクロール</translation>
 <translation id="4961318399572185831">画面をキャスト</translation>
+<translation id="4969092041573468113"><ph name="HOURS" />時間<ph name="MINUTES" />分<ph name="SECONDS" />秒</translation>
 <translation id="5030687792513154421">時間切れです</translation>
 <translation id="5035236842988137213"><ph name="DEVICE_NAME" /> が新しいスマートフォンに接続されました</translation>
 <translation id="5035389544768382859">ディスプレイ設定の確定</translation>
@@ -620,10 +622,12 @@
 <translation id="8517041960877371778"><ph name="DEVICE_TYPE" /> は電源がオンのままでは充電できない可能性があります。</translation>
 <translation id="8563862697512465947">通知設定</translation>
 <translation id="857201607579416096">メニューは画面右下に移動しました。</translation>
+<translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation>
 <translation id="8627191004499078455"><ph name="DEVICE_NAME" /> と接続しました</translation>
 <translation id="8631727435199967028">ユーザー補助機能の設定</translation>
 <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />、信号強度 <ph name="SIGNAL_STRENGTH" />、管理者によって管理</translation>
 <translation id="8639760480004882931">バッテリー残量: <ph name="PERCENTAGE" /></translation>
+<translation id="8646417893960517480"><ph name="TOTAL_TIME" /> タイマー</translation>
 <translation id="8649101189709089199">選択して読み上げ</translation>
 <translation id="8652175077544655965">設定を閉じます</translation>
 <translation id="8653151467777939995">通知設定を表示します。通知はオンです</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index ed27e1d..441b936c 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -63,6 +63,7 @@
 <translation id="1654477262762802994">Bắt đầu đặt câu hỏi bằng giọng nói</translation>
 <translation id="1658406695958299976">Rất tiếc, chúng tôi vẫn không thể xác minh được mật khẩu của bạn. Lưu ý: nếu gần đây bạn đã đổi mật khẩu thì mật khẩu mới của bạn sẽ được áp dụng sau khi bạn đăng xuất. Vui lòng sử dụng mật khẩu cũ của bạn tại đây.</translation>
 <translation id="1677472565718498478">Còn <ph name="TIME" /></translation>
+<translation id="1698080062160024910">Đồng hồ hẹn giờ <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Địa chỉ IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1709762881904163296">Cài đặt mạng</translation>
 <translation id="1743570585616704562">Không nhận dạng được</translation>
@@ -335,6 +336,7 @@
 <translation id="4924411785043111640">Khởi động lại và đặt lại</translation>
 <translation id="495046168593986294">Cuộn lên</translation>
 <translation id="4961318399572185831">Truyền màn hình</translation>
+<translation id="4969092041573468113"><ph name="HOURS" /> giờ <ph name="MINUTES" /> phút <ph name="SECONDS" /> giây</translation>
 <translation id="5030687792513154421">Đã hết thời gian</translation>
 <translation id="5035236842988137213">Đã kết nối <ph name="DEVICE_NAME" /> với một điện thoại mới</translation>
 <translation id="5035389544768382859">Xác nhận cấu hình của màn hình</translation>
@@ -619,10 +621,12 @@
 <translation id="8517041960877371778"><ph name="DEVICE_TYPE" /> của bạn có thể không sạc khi được bật.</translation>
 <translation id="8563862697512465947">Cài đặt Thông báo</translation>
 <translation id="857201607579416096">Đã di chuyển trình đơn vào góc dưới cùng bên phải màn hình.</translation>
+<translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation>
 <translation id="8627191004499078455">Đã kết nối với <ph name="DEVICE_NAME" /></translation>
 <translation id="8631727435199967028">Cài đặt hỗ trợ tiếp cận</translation>
 <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, Cường độ tín hiệu <ph name="SIGNAL_STRENGTH" />, Do quản trị viên của bạn quản lý</translation>
 <translation id="8639760480004882931">Còn <ph name="PERCENTAGE" /></translation>
+<translation id="8646417893960517480">Đồng hồ hẹn giờ <ph name="TOTAL_TIME" /></translation>
 <translation id="8649101189709089199">Chọn để nói</translation>
 <translation id="8652175077544655965">Đóng cài đặt</translation>
 <translation id="8653151467777939995">Hiển thị các tùy chọn cài đặt thông báo. Thông báo đang bật</translation>
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index bf86e164..9922ed0d 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -211,10 +211,7 @@
   if (layout_inputs_ == new_layout_inputs)
     return;
 
-  // Do not animate size changes, as they only really occur when tray items are
-  // added and removed. See crbug.com/1067199.
-  if (layout_inputs_ &&
-      layout_inputs_->bounds.size() != new_layout_inputs.bounds.size())
+  if (!new_layout_inputs.should_animate)
     animate = false;
 
   for (TrayBackgroundView* tray_button : tray_buttons_)
@@ -467,9 +464,25 @@
     if (tray_buttons_[i]->GetVisible())
       child_visibility_bitmask |= 1 << i;
   }
+
+  bool should_animate = true;
+
+  // Do not animate when tray items are added and removed (See
+  // crbug.com/1067199).
+  if (layout_inputs_) {
+    const bool is_horizontal_alignment = shelf_->IsHorizontalAlignment();
+    const gfx::Rect current_bounds = layout_inputs_->bounds;
+    if ((is_horizontal_alignment &&
+         current_bounds.width() != target_bounds_.width()) ||
+        (!is_horizontal_alignment &&
+         current_bounds.height() != target_bounds_.height())) {
+      should_animate = false;
+    }
+  }
+
   return {target_bounds_, CalculateCollapseState(),
           shelf_->shelf_layout_manager()->GetOpacity(),
-          child_visibility_bitmask};
+          child_visibility_bitmask, should_animate};
 }
 
 }  // namespace ash
diff --git a/ash/system/status_area_widget.h b/ash/system/status_area_widget.h
index d9ca0d1..dadf582 100644
--- a/ash/system/status_area_widget.h
+++ b/ash/system/status_area_widget.h
@@ -156,6 +156,12 @@
     // Each bit keep track of one child's visibility.
     unsigned int child_visibility_bitmask = 0;
 
+    // Indicates whether animation is allowed.
+    bool should_animate = true;
+
+    // |should_animate| does not affect the status area widget's target
+    // layout. So it is not taken into consideration when comparing LayoutInputs
+    // instances.
     bool operator==(const LayoutInputs& other) const {
       return bounds == other.bounds && collapse_state == other.collapse_state &&
              opacity == other.opacity &&
diff --git a/ash/wm/collision_detection/collision_detection_utils.cc b/ash/wm/collision_detection/collision_detection_utils.cc
index 9aba4c3..aeee409 100644
--- a/ash/wm/collision_detection/collision_detection_utils.cc
+++ b/ash/wm/collision_detection/collision_detection_utils.cc
@@ -100,6 +100,7 @@
                              root_window->bounds().width(),
                              hotseat_window->GetTargetBounds().height()};
       if (hotseat_widget->state() != HotseatState::kHidden &&
+          hotseat_widget->state() != HotseatState::kNone &&
           !ShouldIgnoreWindowForCollision(hotseat_window, priority)) {
         rects.push_back(ComputeCollisionRectFromBounds(
             hotseat_rect, hotseat_window->parent()));
diff --git a/ash/wm/overview/overview_controller.cc b/ash/wm/overview/overview_controller.cc
index 05309be8..5e1badac 100644
--- a/ash/wm/overview/overview_controller.cc
+++ b/ash/wm/overview/overview_controller.cc
@@ -31,6 +31,7 @@
 #include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "ui/views/widget/widget.h"
+#include "ui/wm/core/window_util.h"
 #include "ui/wm/public/activation_client.h"
 
 namespace ash {
@@ -289,12 +290,24 @@
   auto windows =
       Shell::Get()->mru_window_tracker()->BuildMruWindowList(kActiveDesk);
 
-  // Hidden windows will be removed by window_util::ShouldExcludeForOverview so
-  // we must copy them out first.
+  // Hidden windows are a subset of the window excluded from overview in
+  // window_util::ShouldExcludeForOverview. Excluded window won't be on the grid
+  // but their visibility will remain untouched. Hidden windows will be also
+  // excluded and their visibility will be set to false for the duration of
+  // overview mode.
+  auto should_hide_for_overview = [](aura::Window* w) -> bool {
+    // Explicity hidden windows always get hidden.
+    if (w->GetProperty(kHideInOverviewKey))
+      return true;
+    // Since overview allows moving windows, don't show window that can't be
+    // moved. If they are a transient ancestor of a postionable window then they
+    // can be shown and movied with their transient root.
+    return w == wm::GetTransientRoot(w) &&
+           !WindowState::Get(w)->IsUserPositionable();
+  };
   std::vector<aura::Window*> hide_windows(windows.size());
-  auto end = std::copy_if(
-      windows.begin(), windows.end(), hide_windows.begin(),
-      [](aura::Window* w) { return w->GetProperty(kHideInOverviewKey); });
+  auto end = std::copy_if(windows.begin(), windows.end(), hide_windows.begin(),
+                          should_hide_for_overview);
   hide_windows.resize(end - hide_windows.begin());
   base::EraseIf(windows, window_util::ShouldExcludeForOverview);
   // Overview windows will handle showing their transient related windows, so if
diff --git a/ash/wm/overview/overview_controller_unittest.cc b/ash/wm/overview/overview_controller_unittest.cc
index f093edb4..76174ed5 100644
--- a/ash/wm/overview/overview_controller_unittest.cc
+++ b/ash/wm/overview/overview_controller_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "ash/wm/overview/overview_controller.h"
 
+#include <memory>
+
 #include "ash/app_list/test/app_list_test_helper.h"
 #include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
@@ -12,6 +14,7 @@
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/public/cpp/overview_test_api.h"
 #include "ash/public/cpp/test/shell_test_api.h"
+#include "ash/public/cpp/window_properties.h"
 #include "ash/root_window_controller.h"
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
@@ -25,8 +28,10 @@
 #include "ash/wm/wm_event.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
+#include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "chromeos/constants/chromeos_features.h"
+#include "ui/aura/client/window_types.h"
 #include "ui/base/hit_test.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/events/test/event_generator.h"
@@ -396,6 +401,44 @@
   GetAppListTestHelper()->CheckVisibility(false);
 }
 
+// Tests that windows that are excluded from overview, are actually not shown in
+// overview.
+TEST_F(OverviewControllerTest, ExcludedWindowsHidden) {
+  // Create three windows, one normal, one which is not user positionable (and
+  // so should be hidden) and one specifically set to be hidden in overview.
+  std::unique_ptr<aura::Window> window1 = CreateTestWindow();
+  std::unique_ptr<aura::Window> window2 =
+      CreateTestWindow(gfx::Rect(), aura::client::WINDOW_TYPE_POPUP);
+  std::unique_ptr<aura::Window> window3 = CreateTestWindow();
+  window3->SetProperty(kHideInOverviewKey, true);
+
+  // After creation, all windows are visible.
+  ASSERT_TRUE(window1->IsVisible());
+  ASSERT_TRUE(window2->IsVisible());
+  ASSERT_TRUE(window3->IsVisible());
+
+  // Enter overview. Only one of the three windows is in overview, and visible.
+  auto* controller = Shell::Get()->overview_controller();
+  controller->StartOverview();
+  auto* session = controller->overview_session();
+  ASSERT_TRUE(session);
+  EXPECT_TRUE(session->IsWindowInOverview(window1.get()));
+  EXPECT_FALSE(session->IsWindowInOverview(window2.get()));
+  EXPECT_FALSE(session->IsWindowInOverview(window3.get()));
+  EXPECT_TRUE(window1->IsVisible());
+  EXPECT_FALSE(window2->IsVisible());
+  EXPECT_FALSE(window3->IsVisible());
+
+  // On exiting overview, the windows should all be visible. Use a run loop
+  // since |session| is destroyed in a post task, and the restoring windows'
+  // previous visibility happens in the destructor.
+  controller->EndOverview();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(window1->IsVisible());
+  EXPECT_TRUE(window2->IsVisible());
+  EXPECT_TRUE(window3->IsVisible());
+}
+
 // Some ash codes are reliant on some OverviewObserver calls matching (i.e. the
 // amount of starts should match the amount of ends). This test verifies that
 // behavior. Tests for both tablet and clamshell mode.
diff --git a/ash/wm/overview/scoped_overview_hide_windows.cc b/ash/wm/overview/scoped_overview_hide_windows.cc
index 1ab5470..b7dabf1 100644
--- a/ash/wm/overview/scoped_overview_hide_windows.cc
+++ b/ash/wm/overview/scoped_overview_hide_windows.cc
@@ -21,11 +21,10 @@
 }
 
 ScopedOverviewHideWindows::~ScopedOverviewHideWindows() {
-  for (auto iter = window_visibility_.begin(); iter != window_visibility_.end();
-       iter++) {
-    iter->first->RemoveObserver(this);
-    if (iter->second)
-      iter->first->Show();
+  for (const auto& element : window_visibility_) {
+    element.first->RemoveObserver(this);
+    if (element.second)
+      element.first->Show();
   }
 }
 
diff --git a/ash/wm/overview/scoped_overview_hide_windows.h b/ash/wm/overview/scoped_overview_hide_windows.h
index 5f784d09..e7fd295b 100644
--- a/ash/wm/overview/scoped_overview_hide_windows.h
+++ b/ash/wm/overview/scoped_overview_hide_windows.h
@@ -6,10 +6,7 @@
 #define ASH_WM_OVERVIEW_SCOPED_OVERVIEW_HIDE_WINDOWS_H_
 
 #include <map>
-#include <vector>
 
-#include "ash/ash_export.h"
-#include "base/macros.h"
 #include "ui/aura/window_observer.h"
 
 namespace aura {
@@ -20,13 +17,16 @@
 
 // ScopedOverviewHideWindows hides the list of windows in overview mode,
 // remembers their visibility and recovers the visibility after overview mode.
-class ASH_EXPORT ScopedOverviewHideWindows : public aura::WindowObserver {
+class ScopedOverviewHideWindows : public aura::WindowObserver {
  public:
   // |windows| the list of windows to hide in overview mode. If |force_hidden|
   // is true, the hidden windows may have their visibility altered during
   // overview, but we want to keep them hidden.
   ScopedOverviewHideWindows(const std::vector<aura::Window*>& windows,
                             bool force_hidden);
+  ScopedOverviewHideWindows(const ScopedOverviewHideWindows&) = delete;
+  ScopedOverviewHideWindows& operator=(const ScopedOverviewHideWindows&) =
+      delete;
   ~ScopedOverviewHideWindows() override;
 
   // aura::WindowObserver:
@@ -36,8 +36,6 @@
  private:
   std::map<aura::Window*, bool> window_visibility_;
   bool force_hidden_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedOverviewHideWindows);
 };
 
 }  // namespace ash
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 9523677..feb30e90 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -2752,6 +2752,7 @@
     "sequenced_task_runner_unittest.cc",
     "stl_util_unittest.cc",
     "strings/char_traits_unittest.cc",
+    "strings/no_trigraphs_unittest.cc",
     "strings/nullable_string16_unittest.cc",
     "strings/pattern_unittest.cc",
     "strings/safe_sprintf_unittest.cc",
diff --git a/base/android/proguard/chromium_apk.flags b/base/android/proguard/chromium_apk.flags
index d23027e4..5d3c676 100644
--- a/base/android/proguard/chromium_apk.flags
+++ b/base/android/proguard/chromium_apk.flags
@@ -27,6 +27,29 @@
   public <init>();
 }
 
+# AndroidX classes that are inflated via reflection.
+-keep public class androidx.preference.Preference {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.PreferenceScreen {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.PreferenceCategory {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.ListPreference {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+# SearchView is used in website_preferences_menu.xml and is constructed by
+# Android using reflection.
+-keep class androidx.appcompat.widget.SearchView {
+  public <init>(...);
+}
+
+# Referenced by android.support.v7.preference.PreferenceInflater.
+-keep public class androidx.preference.SwitchPreference {}
+
 # Don't obfuscate Parcelables as they might be marshalled outside Chrome.
 # If we annotated all Parcelables that get put into Bundles other than
 # for saveInstanceState (e.g. PendingIntents), then we could actually keep the
diff --git a/base/message_loop/message_pump_win.cc b/base/message_loop/message_pump_win.cc
index 5dd5bef..a2d45ef7 100644
--- a/base/message_loop/message_pump_win.cc
+++ b/base/message_loop/message_pump_win.cc
@@ -24,11 +24,12 @@
 // opportunity to yield to other threads according to some heuristics (e.g.
 // presumably when there's no input but perhaps a single WM_USER message posted
 // later than another thread was readied). MessagePumpForUI doesn't intend to
-// give this opportunity to the kernel when invoking ::PeekMessage however as it
-// runs most tasks out-of-band. Hence, PM_NOYIELD should be used to tell
-// ::PeekMessage it's not the only source of work for this thread.
-const Feature kNoYieldFromNativePeek{"NoYieldFromNativePeek",
-                                     FEATURE_DISABLED_BY_DEFAULT};
+// give this opportunity to the kernel when invoking ::PeekMessage however. This
+// experiment attempts to regain control of the pump (behind an experiment
+// because of how fragile this code is -- experiments help external contributors
+// diagnose regressions, e.g. crbug.com/1078475).
+const Feature kPreventMessagePumpHangs{"PreventMessagePumpHangs",
+                                       FEATURE_DISABLED_BY_DEFAULT};
 
 enum MessageLoopProblems {
   MESSAGE_POST_ERROR,
@@ -298,13 +299,10 @@
       }
 
       {
-        static const auto kAdditionalFlags =
-            FeatureList::IsEnabled(kNoYieldFromNativePeek) ? PM_NOYIELD : 0x0;
-
         MSG msg;
         // Trace as in ProcessNextWindowsMessage().
         TRACE_EVENT0("base", "MessagePumpForUI::WaitForWork PeekMessage");
-        if (::PeekMessage(&msg, nullptr, 0, 0, kAdditionalFlags | PM_NOREMOVE))
+        if (::PeekMessage(&msg, nullptr, 0, 0, PM_NOREMOVE))
           return;
       }
 
@@ -488,17 +486,13 @@
     // when ::PeekMessage turns out to be a no-op).
     state_->delegate->BeforeDoInternalWork();
 
-    static const auto kAdditionalFlags =
-        FeatureList::IsEnabled(kNoYieldFromNativePeek) ? PM_NOYIELD : 0x0;
-
     // PeekMessage can run a message if there are sent messages, trace that and
     // emit the boolean param to see if it ever janks independently (ref.
     // comment on GetQueueStatus).
     TRACE_EVENT1("base",
                  "MessagePumpForUI::ProcessNextWindowsMessage PeekMessage",
                  "sent_messages_in_queue", more_work_is_plausible);
-    has_msg = ::PeekMessage(&msg, nullptr, 0, 0,
-                            kAdditionalFlags | PM_REMOVE) != FALSE;
+    has_msg = ::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE) != FALSE;
   }
   if (has_msg)
     more_work_is_plausible |= ProcessMessageHelper(msg);
@@ -553,13 +547,33 @@
   // that peeked replacement. Note that the re-post of kMsgHaveWork may be
   // asynchronous to this thread!!
 
-  // As in ProcessNextWindowsMessage() since ::PeekMessage() may process
-  // sent-messages.
+  // Bump the work id since ::PeekMessage may process internal events.
   state_->delegate->BeforeDoInternalWork();
 
+  // The system headers don't define this; it's equivalent to PM_QS_INPUT |
+  // PM_QS_PAINT | PM_QS_POSTMESSAGE. i.e., anything but QS_SENDMESSAGE. Since
+  // we're looking to replace our kMsgHaveWork posted message, we can ignore
+  // sent messages (which never compete with posted messages in the initial
+  // PeekMessage call).
+  constexpr auto PM_QS_ALLEVENTS = QS_ALLEVENTS << 16;
+  static_assert(
+      PM_QS_ALLEVENTS == (PM_QS_INPUT | PM_QS_PAINT | PM_QS_POSTMESSAGE), "");
+  static_assert((PM_QS_ALLEVENTS & PM_QS_SENDMESSAGE) == 0, "");
+
   MSG msg;
-  const bool have_message =
-      ::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE) != FALSE;
+  bool have_message = false;
+  {
+    TRACE_EVENT0("base",
+                 "MessagePumpForUI::ProcessPumpReplacementMessage PeekMessage");
+
+    static const auto peek_replacement_message_modifier =
+        base::FeatureList::IsEnabled(kPreventMessagePumpHangs) ? PM_QS_ALLEVENTS
+                                                               : 0;
+
+    have_message =
+        ::PeekMessage(&msg, nullptr, 0, 0,
+                      PM_REMOVE | peek_replacement_message_modifier) != FALSE;
+  }
 
   // Expect no message or a message different than kMsgHaveWork.
   DCHECK(!have_message || kMsgHaveWork != msg.message ||
diff --git a/base/strings/no_trigraphs_unittest.cc b/base/strings/no_trigraphs_unittest.cc
new file mode 100644
index 0000000..736679b9
--- /dev/null
+++ b/base/strings/no_trigraphs_unittest.cc
@@ -0,0 +1,10 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/strings/strcat.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+TEST(NoTrigraphs, Basic) {
+  EXPECT_EQ("??=", base::StrCat({"?", "?", "="}));
+}
diff --git a/base/version_unittest.cc b/base/version_unittest.cc
index 12b80639..4d04083 100644
--- a/base/version_unittest.cc
+++ b/base/version_unittest.cc
@@ -196,4 +196,28 @@
   }
 }
 
+TEST(VersionTest, LeadingZeros) {
+  {
+    // Leading zeros in the first component are not allowed.
+    base::Version v("01.1");
+    EXPECT_FALSE(v.IsValid());
+  }
+
+  {
+    // Leading zeros in subsequent components are allowed (and this behavior is
+    // now important for compatibility with existing modules, like extensions),
+    // but are ignored because the value is parsed as an integer...
+    base::Version v1("1.01");
+    EXPECT_TRUE(v1.IsValid());
+    // ...and as a result, v1.01 == v1.1.
+    EXPECT_EQ("1.1", v1.GetString());
+    base::Version v2("1.1");
+    EXPECT_EQ(v1, v2);
+  }
+
+  // Similarly, since leading zeros are ignored, v1.02 > v1.1 (because
+  // v1.02 is translated to 1.2).
+  EXPECT_GT(base::Version("1.02"), base::Version("1.1"));
+}
+
 }  // namespace
diff --git a/build/config/android/config.gni b/build/config/android/config.gni
index a04218a2..7573ce37 100644
--- a/build/config/android/config.gni
+++ b/build/config/android/config.gni
@@ -45,6 +45,11 @@
     # repositories to support both public only and internal builds.
     enable_chrome_android_internal = has_chrome_android_internal
 
+    # The default to use for android:minSdkVersion for targets that do
+    # not explicitly set it. This can generally be set higher than the
+    # default, but not lower.
+    default_min_sdk_version = 19
+
     # Android API level for 32 bits platforms
     android32_ndk_api_level = 16
 
@@ -68,9 +73,6 @@
     }
   }
 
-  # Our build rules support only KitKat+.
-  default_min_sdk_version = 19
-
   if (!defined(default_android_ndk_root)) {
     default_android_ndk_root = "//third_party/android_ndk"
     default_android_ndk_version = "r20"
diff --git a/build/config/chromeos/rules.gni b/build/config/chromeos/rules.gni
index d648e81..1829e97 100644
--- a/build/config/chromeos/rules.gni
+++ b/build/config/chromeos/rules.gni
@@ -14,49 +14,6 @@
                cros_board == "betty-pi-arc"
 }
 
-# Determine the real paths for various items in the SDK, which may be used
-# in the 'generate_runner_script' template below. We do so outside the template
-# to confine exec_script to a single invocation.
-if (is_chromeos_device && cros_sdk_version != "") {
-  _cache_path_prefix =
-      "//build/cros_cache/chrome-sdk/symlinks/${cros_board}+${cros_sdk_version}"
-  _symlinks = [
-    # Tast harness & test data.
-    rebase_path("${_cache_path_prefix}+chromeos-base/tast-cmd"),
-    rebase_path("${_cache_path_prefix}+chromeos-base/tast-remote-tests-cros"),
-
-    # Binutils (and other toolchain tools) used to deploy Chrome to the device.
-    rebase_path(
-        "${_cache_path_prefix}+environment_chromeos-base_chromeos-chrome.tar.xz"),
-    rebase_path("${_cache_path_prefix}+target_toolchain"),
-  ]
-  if (cros_is_vm) {
-    # VM-related tools.
-    _symlinks += [
-      rebase_path("${_cache_path_prefix}+sys-firmware/seabios"),
-      rebase_path("${_cache_path_prefix}+chromiumos_qemu_image.tar.xz"),
-      rebase_path("${_cache_path_prefix}+app-emulation/qemu"),
-    ]
-  }
-  _symlink_targets =
-      exec_script("//build/get_symlink_targets.py", _symlinks, "list lines")
-  tast_sdk_items = [
-    _symlink_targets[0],
-    _symlink_targets[1],
-  ]
-  toolchain_sdk_items = [
-    _symlink_targets[2],
-    _symlink_targets[3],
-  ]
-  if (cros_is_vm) {
-    vm_sdk_items = [
-      _symlink_targets[4],
-      _symlink_targets[5],
-      _symlink_targets[6],
-    ]
-  }
-}
-
 # Creates a script at $generated_script that can be used to launch a cros VM
 # and optionally run a test within it.
 # Args:
@@ -87,6 +44,12 @@
     deploy_chrome = false
   }
 
+  # These are the only 2 conditions when ${_cache_path_prefix} is used, so
+  # initialize it in a conditional.
+  if (deploy_chrome || cros_is_vm) {
+    _cache_path_prefix = "//build/cros_cache/chrome-sdk/tarballs/"
+  }
+
   assert(defined(generated_script),
          "Must specify where to place generated test launcher script via " +
              "'generated_script'")
@@ -127,6 +90,24 @@
       "//third_party/chromite/",
     ]
 
+    # Add the VM/QEMU-launching bits if needed.
+    if (cros_is_vm) {
+      assert(defined(_cache_path_prefix))
+      _vm_image_path = "${_cache_path_prefix}/chromiumos_qemu_image.tar.xz/"
+      _qemu_dir = "${_cache_path_prefix}/app-emulation/"
+      _firmware_dir = "${_cache_path_prefix}/sys-firmware/"
+      data += [
+        _firmware_dir,
+        _vm_image_path,
+        _qemu_dir,
+      ]
+    }
+    if (is_tast) {
+      data += [
+        "${_cache_path_prefix}/chromeos-base/tast-cmd/",
+        "${_cache_path_prefix}/chromeos-base/tast-remote-tests-cros/",
+      ]
+    }
     if (defined(invoker.data)) {
       deps += invoker.data
     }
@@ -153,24 +134,15 @@
 
     if (deploy_chrome) {
       args += [ "--deploy-chrome" ]
-    }
 
-    # If we're in the cros chrome-sdk (and not the raw ebuild), the test will
-    # need some additional runtime data located in the SDK cache.
-    if (cros_sdk_version != "") {
-      # Add the VM/QEMU-launching bits if needed.
-      if (cros_is_vm) {
-        data += vm_sdk_items
-      }
-      if (is_tast) {
-        data += tast_sdk_items
-      }
-      if (deploy_chrome) {
-        # To deploy chrome to the VM, it needs to be stripped down to fit into
-        # the VM. This is done by using binutils in the toolchain. So add the
-        # toolchain to the data.
-        data += toolchain_sdk_items
-      }
+      # To deploy chrome to the VM, it needs to be stripped down to fit into
+      # the VM. This is done by using binutils in the toolchain. So add the
+      # toolchain to the data.
+      assert(defined(_cache_path_prefix))
+      data += [
+        "${_cache_path_prefix}/environment_chromeos-base_chromeos-chrome.tar.xz",
+        "${_cache_path_prefix}/target_toolchain/",
+      ]
     }
 
     # When --test-exe is specified, test_runner.py will push the exe to the VM
@@ -219,8 +191,7 @@
     # The following expression filters out all non-critical tests. See the link
     # below for more details:
     # https://chromium.googlesource.com/chromiumos/platform/tast/+/master/docs/test_attributes.md
-    tast_attr_expr =
-        "!disabled && (\"group:mainline\" || !\"group:*\") && \"dep:chrome\""
+    tast_attr_expr = "\"group:mainline\" && \"dep:chrome\""
 
     if (defined(enable_tast_informational_tests) &&
         enable_tast_informational_tests) {
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index a849424..538bee5 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -552,6 +552,23 @@
     }
   }
 
+  # C++17 removes trigraph support, so preemptively disable trigraphs. This is
+  # especially useful given the collision with ecmascript's logical assignment
+  # operators: https://github.com/tc39/proposal-logical-assignment
+  if (is_clang) {
+    # clang-cl disables trigraphs by default
+    if (!is_win) {
+      # The gnu variants of C++11 and C++14 already disable trigraph support,
+      # but when building with clang, we use -std=c++11 / -std=c++14, which
+      # enables trigraph support: override that here.
+      cflags_cc += [ "-fno-trigraphs" ]
+    }
+
+    # Don't warn that trigraphs are ignored, since trigraphs are disabled
+    # anyway.
+    cflags_cc += [ "-Wno-trigraphs" ]
+  }
+
   if (is_mac) {
     # The system libc++ on Mac doesn't have aligned allocation in C++17.
     defines += [ "_LIBCPP_HAS_NO_ALIGNED_ALLOCATION" ]
diff --git a/build/config/win/BUILD.gn b/build/config/win/BUILD.gn
index 7b44f0e..bd5f8a8 100644
--- a/build/config/win/BUILD.gn
+++ b/build/config/win/BUILD.gn
@@ -82,6 +82,10 @@
     # Don't look for includes in %INCLUDE%.
     cflags += [ "/X" ]
 
+    # Required to make the 19041 SDK compatible with clang-cl.
+    # See https://crbug.com/1089996 issue #2 for details.
+    cflags += [ "/D__WRL_ENABLE_FUNCTION_STATICS__" ]
+
     # Tell clang which version of MSVC to emulate.
     cflags += [ "-fmsc-version=1916" ]
 
diff --git a/build/dotfile_settings.gni b/build/dotfile_settings.gni
index de5479fc..74f7677 100644
--- a/build/dotfile_settings.gni
+++ b/build/dotfile_settings.gni
@@ -10,7 +10,6 @@
     "//build/config/android/config.gni",
     "//build/config/android/internal_rules.gni",
     "//build/config/android/rules.gni",
-    "//build/config/chromeos/rules.gni",
     "//build/config/compiler/BUILD.gn",
     "//build/config/compiler/pgo/BUILD.gn",
     "//build/config/gcc/gcc_version.gni",
diff --git a/build/fuchsia/emu_target.py b/build/fuchsia/emu_target.py
index aca332ed..4e2f0b9 100644
--- a/build/fuchsia/emu_target.py
+++ b/build/fuchsia/emu_target.py
@@ -74,7 +74,7 @@
                                          env=emu_env)
 
     try:
-      self._WaitUntilReady(ssh_diagnostic_log_file=stdout);
+      self._WaitUntilReady();
     except target.FuchsiaTargetException:
       if temporary_system_log_file:
         logging.info('Kernel logs:\n' +
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 6dd4dc8..d7513d4 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-0.20200605.1.1
+0.20200605.3.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 6dd4dc8..d3910068 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-0.20200605.1.1
+0.20200605.2.2
diff --git a/build/fuchsia/target.py b/build/fuchsia/target.py
index 56a16e1d..d8c1741f 100644
--- a/build/fuchsia/target.py
+++ b/build/fuchsia/target.py
@@ -211,28 +211,20 @@
   def _AssertIsStarted(self):
     assert self.IsStarted()
 
-  def _WaitUntilReady(self, ssh_diagnostic_log_file=None):
+  def _WaitUntilReady(self):
     logging.info('Connecting to Fuchsia using SSH.')
 
-    if ssh_diagnostic_log_file is None:
-      ssh_diagnostic_log_file = open(os.devnull, 'w')
-
     host, port = self._GetEndpoint()
     end_time = time.time() + _ATTACH_RETRY_SECONDS
     while time.time() < end_time:
       runner = remote_cmd.CommandRunner(self._GetSshConfigPath(), host, port)
-      ssh_proc = runner.RunCommandPiped(['true'],
-                                        ssh_args=['-v'],
-                                        stdout=ssh_diagnostic_log_file,
-                                        stderr=subprocess.STDOUT)
-      if ssh_proc.wait() == 0:
+      if runner.RunCommand(['true'], True) == 0:
         logging.info('Connected!')
         self._started = True
         return True
       time.sleep(_ATTACH_RETRY_INTERVAL)
 
     logging.error('Timeout limit reached.')
-    log_file.flush()
 
     raise FuchsiaTargetException('Couldn\'t connect using SSH.')
 
diff --git a/build/get_symlink_targets.py b/build/get_symlink_targets.py
deleted file mode 100755
index 3285ff1..0000000
--- a/build/get_symlink_targets.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2019 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""Prints the target paths of the given symlinks.
-
-Prints out each target in the order that the links were passed in.
-"""
-
-import os
-import sys
-
-
-def main():
-  for link_name in sys.argv[1:]:
-    if not os.path.islink(link_name):
-      sys.stderr.write("%s is not a link" % link_name)
-      return 1
-    target = os.readlink(link_name)
-    if not os.path.isabs(target):
-      target = os.path.join(os.path.dirname(link_name), target)
-    print(os.path.realpath(target))
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/build/gn_helpers.py b/build/gn_helpers.py
index 9e24c79..a240d80 100644
--- a/build/gn_helpers.py
+++ b/build/gn_helpers.py
@@ -34,51 +34,121 @@
   pass
 
 
-def ToGNString(value, allow_dicts=True):
+# Computes ASCII code of an element of encoded Python 2 str / Python 3 bytes.
+_Ord = ord if sys.version_info.major < 3 else lambda c: c
+
+
+def _TranslateToGnChars(s):
+  for decoded_ch in s.encode('utf-8'):  # str in Python 2, bytes in Python 3.
+    code = _Ord(decoded_ch)  # int
+    if code in (34, 36, 92):  # For '"', '$', or '\\'.
+      yield '\\' + chr(code)
+    elif 32 <= code < 127:
+      yield chr(code)
+    else:
+      yield '$0x%02X' % code
+
+
+def ToGNString(value, pretty=False):
   """Returns a stringified GN equivalent of a Python value.
 
   Args:
     value: The Python value to convert.
-    allow_dicts: Whether to enable converting dictionaries to GN scopes. This is
-      only possible at the top level (GN scope cannot be nested in a list), so
-      recursive calls should set this to False.
-
+    pretty: Whether to pretty print. If true, then non-empty lists are rendered
+        recursively with one item per line, with indents. Otherwise lists are
+        rendered without new line.
   Returns:
     The stringified GN equivalent to |value|.
 
   Raises:
     GNError: |value| cannot be printed to GN.
   """
-  if isinstance(value, str):
-    if value.find('\n') >= 0:
-      raise GNError('Trying to print a string with a newline in it.')
-    return '"' + \
-        value.replace('\\', '\\\\').replace('"', '\\"').replace('$', '\\$') + \
-        '"'
 
-  if sys.version_info.major < 3 and isinstance(value, unicode):
-    return ToGNString(value.encode('utf-8'))
+  if sys.version_info.major < 3:
+    basestring_compat = basestring
+  else:
+    basestring_compat = str
 
-  if isinstance(value, bool):
-    return 'true' if value else 'false'
+  # Emits all output tokens without intervening whitespaces.
+  def GenerateTokens(v, level):
+    if isinstance(v, basestring_compat):
+      yield '"' + ''.join(_TranslateToGnChars(v)) + '"'
 
-  if isinstance(value, list):
-    return '[ %s ]' % ', '.join(ToGNString(v) for v in value)
+    elif isinstance(v, bool):
+      yield 'true' if v else 'false'
 
-  if isinstance(value, dict):
-    if not allow_dicts:
-      raise GNError('Attempting to recursively print a dictionary.')
-    result = ''
-    for key in sorted(value):
-      if not isinstance(key, str) and not isinstance(key, unicode):
-        raise GNError('Dictionary key is not a string.')
-      result += '%s = %s\n' % (key, ToGNString(value[key], False))
-    return result
+    elif isinstance(v, int):
+      yield str(v)
 
-  if isinstance(value, int):
-    return str(value)
+    elif isinstance(v, list):
+      yield '['
+      for i, item in enumerate(v):
+        if i > 0:
+          yield ','
+        for tok in GenerateTokens(item, level + 1):
+          yield tok
+      yield ']'
 
-  raise GNError('Unsupported type when printing to GN.')
+    elif isinstance(v, dict):
+      if level > 0:
+        raise GNError('Attempting to recursively print a dictionary.')
+      for key in sorted(v):
+        if not isinstance(key, basestring_compat):
+          raise GNError('Dictionary key is not a string.')
+        if not key or key[0].isdigit() or not key.replace('_', '').isalnum():
+          raise GNError('Dictionary key is not a valid GN identifier.')
+        yield key  # No quotations.
+        yield '='
+        for tok in GenerateTokens(value[key], level + 1):
+          yield tok
+
+    else:  # Not supporting float: Add only when needed.
+      raise GNError('Unsupported type when printing to GN.')
+
+  can_start = lambda tok: tok and tok not in ',]='
+  can_end = lambda tok: tok and tok not in ',[='
+
+  # Adds whitespaces, trying to keep everything (except dicts) in 1 line.
+  def PlainGlue(gen):
+    prev_tok = None
+    for i, tok in enumerate(gen):
+      if i > 0:
+        if can_end(prev_tok) and can_start(tok):
+          yield '\n'  # New dict item.
+        elif prev_tok == '[' and tok == ']':
+          yield '  '  # Special case for [].
+        elif tok != ',':
+          yield ' '
+      yield tok
+      prev_tok = tok
+
+  # Adds whitespaces so non-empty lists can span multiple lines, with indent.
+  def PrettyGlue(gen):
+    prev_tok = None
+    level = 0
+    for i, tok in enumerate(gen):
+      if i > 0:
+        if can_end(prev_tok) and can_start(tok):
+          yield '\n' + '  ' * level  # New dict item.
+        elif tok == '=' or prev_tok in '=':
+          yield ' '  # Separator before and after '=', on same line.
+      if tok == ']':
+        level -= 1
+      if int(prev_tok == '[') + int(tok == ']') == 1:  # Exclude '[]' case.
+        yield '\n' + '  ' * level
+      yield tok
+      if tok == '[':
+        level += 1
+      if tok == ',':
+        yield '\n' + '  ' * level
+      prev_tok = tok
+
+  token_gen = GenerateTokens(value, 0)
+  ret = ''.join((PrettyGlue if pretty else PlainGlue)(token_gen))
+  # Add terminating '\n' for dict |value| or multi-line output.
+  if isinstance(value, dict) or '\n' in ret:
+    return ret + '\n'
+  return ret
 
 
 def FromGNString(input_string):
diff --git a/build/gn_helpers_unittest.py b/build/gn_helpers_unittest.py
index 9356f6a..5886577 100644
--- a/build/gn_helpers_unittest.py
+++ b/build/gn_helpers_unittest.py
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import mock
+import sys
 import textwrap
 import unittest
 
@@ -11,9 +12,56 @@
 
 class UnitTest(unittest.TestCase):
   def test_ToGNString(self):
-    self.assertEqual(
-        gn_helpers.ToGNString([1, 'two', [ '"thr$\\', True, False, [] ]]),
-        '[ 1, "two", [ "\\"thr\\$\\\\", true, false, [  ] ] ]')
+    test_cases = [
+        (42, '42', '42'), ('foo', '"foo"', '"foo"'), (True, 'true', 'true'),
+        (False, 'false', 'false'), ('', '""', '""'),
+        ('\\$"$\\', '"\\\\\\$\\"\\$\\\\"', '"\\\\\\$\\"\\$\\\\"'),
+        (' \t\r\n', '" $0x09$0x0D$0x0A"', '" $0x09$0x0D$0x0A"'),
+        (u'\u2713', '"$0xE2$0x9C$0x93"', '"$0xE2$0x9C$0x93"'),
+        ([], '[  ]', '[]'), ([1], '[ 1 ]', '[\n  1\n]\n'),
+        ([3, 1, 4, 1], '[ 3, 1, 4, 1 ]', '[\n  3,\n  1,\n  4,\n  1\n]\n'),
+        (['a', True, 2], '[ "a", true, 2 ]', '[\n  "a",\n  true,\n  2\n]\n'),
+        ({
+            'single': 'item'
+        }, 'single = "item"\n', 'single = "item"\n'),
+        ({
+            'kEy': 137,
+            '_42A_Zaz_': [False, True]
+        }, '_42A_Zaz_ = [ false, true ]\nkEy = 137\n',
+         '_42A_Zaz_ = [\n  false,\n  true\n]\nkEy = 137\n'),
+        ([1, 'two',
+          ['"thr,.$\\', True, False, [],
+           u'(\u2713)']], '[ 1, "two", [ "\\"thr,.\\$\\\\", true, false, ' +
+         '[  ], "($0xE2$0x9C$0x93)" ] ]', '''[
+  1,
+  "two",
+  [
+    "\\"thr,.\\$\\\\",
+    true,
+    false,
+    [],
+    "($0xE2$0x9C$0x93)"
+  ]
+]
+'''),
+        ({
+            's': 'foo',
+            'n': 42,
+            'b': True,
+            'a': [3, 'x']
+        }, 'a = [ 3, "x" ]\nb = true\nn = 42\ns = "foo"\n',
+         'a = [\n  3,\n  "x"\n]\nb = true\nn = 42\ns = "foo"\n'),
+        (
+            [[[], [[]]], []],
+            '[ [ [  ], [ [  ] ] ], [  ] ]',
+            '[\n  [\n    [],\n    [\n      []\n    ]\n  ],\n  []\n]\n',
+        )
+    ]
+    for obj, exp_ugly, exp_pretty in test_cases:
+      out_ugly = gn_helpers.ToGNString(obj)
+      self.assertEqual(exp_ugly, out_ugly)
+      out_pretty = gn_helpers.ToGNString(obj, pretty=True)
+      self.assertEqual(exp_pretty, out_pretty)
 
   def test_UnescapeGNString(self):
     # Backslash followed by a \, $, or " means the folling character without
@@ -139,7 +187,7 @@
         some_arg2 = "val2"
     """))
     parser.ReplaceImports()
-    self.assertEquals(
+    self.assertEqual(
         parser.input,
         textwrap.dedent("""
         some_arg1 = "val1"
@@ -155,9 +203,11 @@
         some_arg2 = "val2"
     """))
     fake_import = 'some_imported_arg = "imported_val"'
-    with mock.patch('__builtin__.open', mock.mock_open(read_data=fake_import)):
+    builtin_var = '__builtin__' if sys.version_info.major < 3 else 'builtins'
+    open_fun = '{}.open'.format(builtin_var)
+    with mock.patch(open_fun, mock.mock_open(read_data=fake_import)):
       parser.ReplaceImports()
-    self.assertEquals(
+    self.assertEqual(
         parser.input,
         textwrap.dedent("""
         some_arg1 = "val1"
diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py
index f3557ad..32bd5db 100755
--- a/build/vs_toolchain.py
+++ b/build/vs_toolchain.py
@@ -164,7 +164,8 @@
                               '/Microsoft Visual Studio/%s' % version)
     if path and any(
         os.path.exists(os.path.join(path, edition))
-        for edition in ('Enterprise', 'Professional', 'Community', 'Preview')):
+        for edition in ('Enterprise', 'Professional', 'Community', 'Preview',
+                        'BuildTools')):
       available_versions.append(version)
       break
 
@@ -199,6 +200,9 @@
                          version_as_year),
       os.path.expandvars('%ProgramFiles(x86)%' +
                          '/Microsoft Visual Studio/%s/Preview' %
+                         version_as_year),
+      os.path.expandvars('%ProgramFiles(x86)%' +
+                         '/Microsoft Visual Studio/%s/BuildTools' %
                          version_as_year)):
     if path and os.path.exists(path):
       return path
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc
index 738b51c..0baee75 100644
--- a/cc/layers/picture_layer.cc
+++ b/cc/layers/picture_layer.cc
@@ -290,14 +290,6 @@
   if (!picture_layer_inputs_.transformed_rasterization_allowed)
     return false;
 
-  // Background color overfill is undesirable with transformed rasterization.
-  // However, without background overfill, the tiles will be non-opaque on
-  // external edges, and layer opaque region can't be computed in layer space
-  // due to rounding under extreme scaling. This defeats many opaque layer
-  // optimization. Prefer optimization over quality for this particular case.
-  if (contents_opaque())
-    return false;
-
   const TransformTree& transform_tree =
       layer_tree_host()->property_trees()->transform_tree;
   DCHECK(!transform_tree.needs_update());
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index 83ec1ab..91a1e27 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -846,16 +846,18 @@
     return LCDTextDisallowedReason::kContentsNotOpaque;
   }
 
-  if (!GetTransformTree()
-           .Node(transform_tree_index())
-           ->node_and_ancestors_have_only_integer_translation)
-    return LCDTextDisallowedReason::kNonIntegralTranslation;
-  if (static_cast<int>(offset_to_transform_parent().x()) !=
-      offset_to_transform_parent().x())
-    return LCDTextDisallowedReason::kNonIntegralXOffset;
-  if (static_cast<int>(offset_to_transform_parent().y()) !=
-      offset_to_transform_parent().y())
-    return LCDTextDisallowedReason::kNonIntegralYOffset;
+  if (!use_transformed_rasterization_) {
+    if (!GetTransformTree()
+             .Node(transform_tree_index())
+             ->node_and_ancestors_have_only_integer_translation)
+      return LCDTextDisallowedReason::kNonIntegralTranslation;
+    if (static_cast<int>(offset_to_transform_parent().x()) !=
+        offset_to_transform_parent().x())
+      return LCDTextDisallowedReason::kNonIntegralXOffset;
+    if (static_cast<int>(offset_to_transform_parent().y()) !=
+        offset_to_transform_parent().y())
+      return LCDTextDisallowedReason::kNonIntegralYOffset;
+  }
 
   if (has_will_change_transform_hint())
     return LCDTextDisallowedReason::kWillChangeTransform;
@@ -1074,6 +1076,14 @@
     return;
 
   use_transformed_rasterization_ = use;
+  // With transformed rasterization, the pixels along the edge of the layer may
+  // become translucent, so clear contents_opaque.
+  if (use) {
+    // This doesn't affect contents_opaque_for_text.
+    bool opaque_for_text = contents_opaque_for_text();
+    SetContentsOpaque(false);
+    SetContentsOpaqueForText(opaque_for_text);
+  }
   NoteLayerPropertyChanged();
 }
 
@@ -1565,6 +1575,8 @@
   if (!use_transformed_rasterization_)
     return gfx::Vector2dF();
 
+  DCHECK(!contents_opaque());
+
   gfx::Transform draw_transform = DrawTransform();
   // TODO(enne): for performance reasons, we should only have a raster
   // translation when the screen space transform is not animating.  We try to
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 25fff7c..624de37 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -5981,5 +5981,24 @@
   EXPECT_RECT_EQ(gfx::Rect(1000, 10000), shared_quad_state->quad_layer_rect);
   EXPECT_TRUE(shared_quad_state->quad_to_target_transform.IsIdentity());
 }
+
+TEST_F(LegacySWPictureLayerImplTest,
+       TransformedRasterizationAndContentsOpaqueAndLCDText) {
+  SetupDefaultTreesWithInvalidation(gfx::Size(200, 200), Region());
+
+  pending_layer()->SetContentsOpaque(true);
+  pending_layer()->SetOffsetToTransformParent(gfx::Vector2dF(0.2, 0.3));
+  EXPECT_TRUE(pending_layer()->contents_opaque());
+  EXPECT_TRUE(pending_layer()->contents_opaque_for_text());
+  EXPECT_EQ(LCDTextDisallowedReason::kNonIntegralXOffset,
+            pending_layer()->ComputeLCDTextDisallowedReasonForTesting());
+
+  pending_layer()->SetUseTransformedRasterization(true);
+  EXPECT_FALSE(pending_layer()->contents_opaque());
+  EXPECT_TRUE(pending_layer()->contents_opaque_for_text());
+  EXPECT_EQ(LCDTextDisallowedReason::kNone,
+            pending_layer()->ComputeLCDTextDisallowedReasonForTesting());
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/metrics/compositor_frame_reporting_controller.h b/cc/metrics/compositor_frame_reporting_controller.h
index fb6b219..5d3d13a9 100644
--- a/cc/metrics/compositor_frame_reporting_controller.h
+++ b/cc/metrics/compositor_frame_reporting_controller.h
@@ -98,6 +98,9 @@
   base::TimeTicks Now() const;
 
   bool HasReporterAt(PipelineStage stage) const;
+  bool next_activate_has_invalidation() const {
+    return next_activate_has_invalidation_;
+  }
 
  private:
   void AdvanceReporterStage(PipelineStage start, PipelineStage target);
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index bc9ff8c..ca75a1b 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -516,20 +516,19 @@
             ->BeginMainFrameQueueDurationNotCriticalEstimate();
   }
 
-  // We defer the invalidation if we expect the main thread to respond within
-  // this frame, and our prediction in the last frame was correct. That
-  // is, if we predicted the main thread to be fast and it fails to respond
-  // before the deadline in the previous frame, we don't defer the invalidation
-  // in the next frame.
-  const bool main_thread_response_expected_before_deadline =
-      bmf_sent_to_ready_to_commit_estimate - time_since_main_frame_sent <
-      bmf_to_activate_threshold;
-  const bool previous_invalidation_maybe_skipped_for_main_frame =
-      state_machine_.should_defer_invalidation_for_fast_main_frame() &&
-      state_machine_.main_thread_failed_to_respond_last_deadline();
+  bool main_thread_response_expected_before_deadline;
+  if (time_since_main_frame_sent > bmf_to_activate_threshold) {
+    // If the response to a main frame is pending past the desired duration
+    // then proactively assume that the main thread is slow instead of late
+    // correction through the frame history.
+    main_thread_response_expected_before_deadline = false;
+  } else {
+    main_thread_response_expected_before_deadline =
+        bmf_sent_to_ready_to_commit_estimate - time_since_main_frame_sent <
+        bmf_to_activate_threshold;
+  }
   state_machine_.set_should_defer_invalidation_for_fast_main_frame(
-      main_thread_response_expected_before_deadline &&
-      !previous_invalidation_maybe_skipped_for_main_frame);
+      main_thread_response_expected_before_deadline);
 
   base::TimeDelta bmf_to_activate_estimate = bmf_to_activate_estimate_critical;
   if (!begin_main_frame_args_.on_critical_path) {
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index e69c54ce4..2dcc5e4 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -1191,8 +1191,6 @@
   // then the main thread is in a high latency mode.
   main_thread_missed_last_deadline_ =
       CommitPending() || has_pending_tree_ || active_tree_needs_first_draw_;
-  main_thread_failed_to_respond_last_deadline_ =
-      begin_main_frame_state_ == BeginMainFrameState::SENT;
 
   // If we're entering a state where we won't get BeginFrames set all the
   // funnels so that we don't perform any actions that we shouldn't.
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
index f6a8d0a3..97b2571f 100644
--- a/cc/scheduler/scheduler_state_machine.h
+++ b/cc/scheduler/scheduler_state_machine.h
@@ -344,10 +344,6 @@
     return should_defer_invalidation_for_fast_main_frame_;
   }
 
-  bool main_thread_failed_to_respond_last_deadline() const {
-    return main_thread_failed_to_respond_last_deadline_;
-  }
-
  protected:
   bool BeginFrameRequiredForAction() const;
   bool BeginFrameNeededForVideo() const;
@@ -471,10 +467,6 @@
   // tree. During this time we should not activate the pending tree.
   bool processing_paint_worklets_for_pending_tree_ = false;
 
-  // Set to true if the main thread fails to respond with a commit or abort the
-  // main frame before the draw deadline on the previous impl frame.
-  bool main_thread_failed_to_respond_last_deadline_ = false;
-
   bool previous_pending_tree_was_impl_side_ = false;
   bool current_pending_tree_is_impl_side_ = false;
 
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index a59a2a4..b9f879aa 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -4362,5 +4362,46 @@
             begin_main_frame_args.frame_id.sequence_number);
 }
 
+TEST_F(SchedulerTest,
+       HighImplLatencyModePrioritizesMainFramesOverImplInvalidation) {
+  scheduler_settings_.enable_main_latency_recovery = false;
+  scheduler_settings_.enable_impl_latency_recovery = false;
+  SetUpScheduler(EXTERNAL_BFS);
+  fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
+
+  // Place the impl thread in high latency mode.
+  scheduler_->SetNeedsImplSideInvalidation(true);
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTIONS("WillBeginImplFrame",
+                 "ScheduledActionPerformImplSideInvalidation");
+
+  // Request a main frame and start the next impl frame. Since we have an impl
+  // side pending tree, we will activate and draw it. This finishes the impl
+  // frame before the main thread can respond causing the scheduler to
+  // incorrectly assume the main thread is slow.
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTIONS("WillBeginImplFrame");
+  client_->Reset();
+  scheduler_->SetNeedsBeginMainFrame();
+  EXPECT_ACTIONS("ScheduledActionSendBeginMainFrame");
+  fake_compositor_timing_history_->SetBeginMainFrameSentTime(
+      task_runner_->NowTicks() + base::TimeDelta::FromMilliseconds(8));
+  client_->Reset();
+  scheduler_->NotifyReadyToActivate();
+  task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
+  EXPECT_ACTIONS("ScheduledActionActivateSyncTree",
+                 "ScheduledActionDrawIfPossible");
+
+  // Start a new frame. We should not assume the main thread is slow.
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  scheduler_->SetNeedsImplSideInvalidation(true);
+  // No invalidation should be performed since we are waiting for the main
+  // thread to respond and merge with the commit.
+  EXPECT_ACTIONS("WillBeginImplFrame");
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/test/fake_compositor_frame_reporting_controller.cc b/cc/test/fake_compositor_frame_reporting_controller.cc
index ea3dc87..40e4627 100644
--- a/cc/test/fake_compositor_frame_reporting_controller.cc
+++ b/cc/test/fake_compositor_frame_reporting_controller.cc
@@ -52,13 +52,19 @@
 }
 
 void FakeCompositorFrameReportingController::WillActivate() {
-  if (!HasReporterAt(PipelineStage::kCommit))
+  // Pending trees for impl-side invalidations are created without a prior
+  // commit.
+  if (!HasReporterAt(PipelineStage::kCommit) &&
+      !next_activate_has_invalidation())
     DidCommit();
   CompositorFrameReportingController::WillActivate();
 }
 
 void FakeCompositorFrameReportingController::DidActivate() {
-  if (!HasReporterAt(PipelineStage::kCommit))
+  // Pending trees for impl-side invalidations are created without a prior
+  // commit.
+  if (!HasReporterAt(PipelineStage::kCommit) &&
+      !next_activate_has_invalidation())
     WillActivate();
   CompositorFrameReportingController::DidActivate();
 }
diff --git a/cc/test/scheduler_test_common.cc b/cc/test/scheduler_test_common.cc
index 03fd59b..def8e36f 100644
--- a/cc/test/scheduler_test_common.cc
+++ b/cc/test/scheduler_test_common.cc
@@ -96,6 +96,11 @@
   draw_duration_ = duration;
 }
 
+void FakeCompositorTimingHistory::SetBeginMainFrameSentTime(
+    base::TimeTicks time) {
+  begin_main_frame_sent_time_ = time;
+}
+
 base::TimeDelta
 FakeCompositorTimingHistory::BeginMainFrameQueueDurationCriticalEstimate()
     const {
diff --git a/cc/test/scheduler_test_common.h b/cc/test/scheduler_test_common.h
index 2f6e208..e8ad3b4f 100644
--- a/cc/test/scheduler_test_common.h
+++ b/cc/test/scheduler_test_common.h
@@ -45,6 +45,7 @@
   void SetPrepareTilesDurationEstimate(base::TimeDelta duration);
   void SetActivateDurationEstimate(base::TimeDelta duration);
   void SetDrawDurationEstimate(base::TimeDelta duration);
+  void SetBeginMainFrameSentTime(base::TimeTicks time);
 
   base::TimeDelta BeginMainFrameQueueDurationCriticalEstimate() const override;
   base::TimeDelta BeginMainFrameQueueDurationNotCriticalEstimate()
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index d5049dbd..1fae1d57 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -8903,28 +8903,11 @@
   }
 
   void NotifyThroughputTrackerResults(CustomTrackerResults results) override {
+    // Check that data for kSequenceId is captured. Ideally, we should get
+    // 2 frame_expected and 2 frame_produced. But on slow bots, it is difficult
+    // to infer the correct numbers. Both frame_expected and frame_produced
+    // could drop to 1 (or even below). So no sanity check on data itself.
     ASSERT_TRUE(base::Contains(results, kSequenceId));
-    const auto& throughput = results[kSequenceId];
-    // Frame 3 and 4 are counted. See the sequence in DidCommit comment for
-    // normal case that expects 2 for both frames_expected and frames_produced.
-    //
-    // However, on slow bots, things could be different.
-    // - Begin frame could be skipped but still counted as expected frames,
-    //
-    //     e(5,5)b(8)B(0,8)E(8)s(3)S(8)e(8,8)b(11)
-    //         B(8,11)E(11)ts(4)S(11)e(11,11)P(3)e(14,14)P(4)
-    //
-    //   B(0, 8) and B(8, 11) make frame_expected to be 4, more than 2 expected
-    //   by test.
-    //
-    // - Finish before frame 4 is presented in multi-thread mode.
-    //
-    //     e(3,3)b(4)B(0,4)E(4)s(2)e(4,4)b(6)B(4,6)E(6)s(3)S(4)e(6,6)
-    //         P(2)e(7,7)P(3)
-    //
-    //   Only P(3) is counted thus frames_produced is 1.
-    EXPECT_GE(throughput.frames_expected, 2u);
-    EXPECT_GE(throughput.frames_produced, 1u);
 
     EndTest();
   }
diff --git a/chrome/VERSION b/chrome/VERSION
index 37de60ae..4a282494 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=85
 MINOR=0
-BUILD=4166
+BUILD=4167
 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index fd66d51..f2d40f99 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -934,6 +934,7 @@
     "//chrome/browser/ui/messages/android:java",
     "//chrome/browser/util:java",
     "//chrome/test:sync_integration_test_support_java",
+    "//chrome/test/android:chrome_java_test_pagecontroller",
     "//chrome/test/android:chrome_java_test_support",
     "//chrome/test/android/test_trusted_web_activity:test_trusted_web_activity_java",
     "//components/autofill/android:autofill_java",
@@ -1095,9 +1096,11 @@
     "//components/test/data/payments/",
     "//content/test/data/browsing_data/",
     "//content/test/data/android/authenticator.html",
+    "//content/test/data/android/auto_downloads_permissions.html",
     "//content/test/data/android/geolocation.html",
     "//content/test/data/android/installedapp.html",
     "//content/test/data/android/media_permissions.html",
+    "//content/test/data/android/midi_permissions.html",
     "//content/test/data/android/permission_navigation.html",
     "//content/test/data/android/quota_permissions.html",
     "//content/test/data/android/webshare.html",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index 469449f..e9c4c91f 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -1561,7 +1561,6 @@
   "java/src/org/chromium/chrome/browser/tabmodel/AsyncTabParams.java",
   "java/src/org/chromium/chrome/browser/tabmodel/AsyncTabParamsManager.java",
   "java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java",
-  "java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java",
   "java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModelFilter.java",
   "java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModelSelectorObserver.java",
   "java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModel.java",
@@ -1583,7 +1582,6 @@
   "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabModelObserver.java",
   "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java",
   "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorUma.java",
-  "java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java",
   "java/src/org/chromium/chrome/browser/tabmodel/TabPersistencePolicy.java",
   "java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java",
   "java/src/org/chromium/chrome/browser/tabmodel/TabPersister.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index fc79998..2763bde 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -152,6 +152,7 @@
   "javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java",
   "javatests/src/org/chromium/chrome/browser/dom_distiller/DistilledPagePrefsTest.java",
   "javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeTest.java",
+  "javatests/src/org/chromium/chrome/browser/download/AutoDownloadsTest.java",
   "javatests/src/org/chromium/chrome/browser/download/ChromeDownloadDelegateTest.java",
   "javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceManagerTest.java",
   "javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceTest.java",
@@ -413,10 +414,13 @@
   "javatests/src/org/chromium/chrome/browser/payments/SkipToGPayHelperTest.java",
   "javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java",
   "javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java",
+  "javatests/src/org/chromium/chrome/browser/permissions/MIDITest.java",
   "javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java",
+  "javatests/src/org/chromium/chrome/browser/permissions/NotificationTest.java",
   "javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java",
   "javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java",
   "javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java",
+  "javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java",
   "javatests/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHostTest.java",
   "javatests/src/org/chromium/chrome/browser/photo_picker/DecoderServiceTest.java",
   "javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java",
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn
index 2458468..9d44b9b 100644
--- a/chrome/android/features/autofill_assistant/BUILD.gn
+++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -276,6 +276,7 @@
     "//chrome/browser/password_manager/android_test_helpers:test_support_java",
     "//chrome/browser/preferences:java",
     "//chrome/browser/tab:java",
+    "//chrome/browser/tabmodel:java",
     "//chrome/browser/util:java",
     "//chrome/test/android:chrome_java_test_support",
     "//components/autofill_assistant/browser:proto_java",
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceStreamLifecycleManager.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceStreamLifecycleManager.java
index 1540aa3..e9ecc3fa 100644
--- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceStreamLifecycleManager.java
+++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceStreamLifecycleManager.java
@@ -40,7 +40,7 @@
         // Stream#onShow to prevent feed services from being warmed up if the user
         // has opted out during the previous session.
         return (!mHasHeader
-                || PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE));
+                || PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE));
     }
     // TODO(crbug.com/982018): Save and restore instance state when opening the feeds in normal
     // Tabs.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
index d53b5c26..0d46d2e 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
@@ -258,8 +258,8 @@
                                     public void onCancel() {}
                                 })
                                 .build();
-                mShareDelegateSupplier.get().share(shareParams,
-                        new ChromeShareExtras(/*saveLastUsed=*/true, /*shareDirectly=*/false));
+                mShareDelegateSupplier.get().share(
+                        shareParams, new ChromeShareExtras.Builder().setSaveLastUsed(true).build());
             }
         };
 
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
index 9fbc7d52..63ebb299 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
@@ -177,8 +177,7 @@
                     return;
                 }
 
-                if (TabUiFeatureUtilities.isConditionalTabStripEnabled()
-                        && (mIsTabGroupUiVisible || mIsShowingOverViewMode)) {
+                if (TabUiFeatureUtilities.isConditionalTabStripEnabled() && mIsTabGroupUiVisible) {
                     return;
                 }
                 // TODO(995956): Optimization we can do here if we decided always hide the strip if
@@ -231,7 +230,7 @@
 
             @Override
             public void tabClosureUndone(Tab tab) {
-                if (!mIsTabGroupUiVisible && !mIsShowingOverViewMode) {
+                if (!mIsTabGroupUiVisible) {
                     resetTabStripWithRelatedTabsForId(tab.getId());
                 }
             }
@@ -278,9 +277,6 @@
             @Override
             public void onTabModelSelected(TabModel newModel, TabModel oldModel) {
                 mSnackbarManageable.getSnackbarManager().dismissSnackbars(TabGroupUiMediator.this);
-                if (mIsShowingOverViewMode) {
-                    return;
-                }
                 resetTabStripWithRelatedTabsForId(mTabModelSelector.getCurrentTabId());
             }
         };
@@ -418,10 +414,16 @@
      *            not, associated tabs from #getTabsToShowForID will be showing in the tab strip.
      */
     private void resetTabStripWithRelatedTabsForId(int id) {
-        // When conditional tab strip feature is turned on but the feature is not activated (i.e.
-        // forbidden or default), keep the tab strip hidden.
-        if (TabUiFeatureUtilities.isConditionalTabStripEnabled()
-                && ConditionalTabStripUtils.getFeatureStatus() != FeatureStatus.ACTIVATED) {
+        // TODO(crbug.com/1090655): We should be able to guard this call behind some checks so that
+        // we can assert here that 1) mIsShowingOverViewMode is false 2) mIsTabGroupUiVisible with
+        // valid id is false.
+        // When overview mode is showing or conditional tab strip feature is
+        // turned on but the feature is not activated (i.e. forbidden or default), keep the tab
+        // strip hidden.
+        if (mIsShowingOverViewMode
+                || (TabUiFeatureUtilities.isConditionalTabStripEnabled()
+                        && ConditionalTabStripUtils.getFeatureStatus()
+                                != FeatureStatus.ACTIVATED)) {
             id = Tab.INVALID_TAB_ID;
         }
         List<Tab> listOfTabs = getTabsToShowForId(id);
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ConditionalTabStripTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ConditionalTabStripTest.java
index fd591c7..40c5111 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ConditionalTabStripTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ConditionalTabStripTest.java
@@ -20,6 +20,8 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import static org.chromium.chrome.browser.flags.ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID;
@@ -38,6 +40,7 @@
 import android.support.test.espresso.contrib.RecyclerViewActions;
 import android.support.test.filters.MediumTest;
 import android.view.View;
+import android.widget.ListView;
 
 import androidx.recyclerview.widget.RecyclerView;
 
@@ -55,6 +58,9 @@
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.TabsTest.SimulateClickOnMainThread;
 import org.chromium.chrome.browser.TabsTest.SimulateTabSwipeOnMainThread;
+import org.chromium.chrome.browser.accessibility_tab_switcher.AccessibilityTabModelListItem;
+import org.chromium.chrome.browser.accessibility_tab_switcher.AccessibilityTabModelWrapper;
+import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone;
 import org.chromium.chrome.browser.compositor.layouts.components.LayoutTab;
@@ -67,6 +73,9 @@
 import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tasks.ConditionalTabStripUtils;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController;
+import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
 import org.chromium.chrome.tab_ui.R;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
@@ -591,6 +600,59 @@
         assertEquals(-1, ConditionalTabStripUtils.getContinuousDismissCount());
     }
 
+    @Test
+    @MediumTest
+    public void testUndoClosure_AccessibilityMode() throws Exception {
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> ChromeAccessibilityUtil.get().setAccessibilityEnabledForTesting(true));
+        ChromeTabbedActivity cta = mActivityTestRule.getActivity();
+        SnackbarManager snackbarManager = mActivityTestRule.getActivity().getSnackbarManager();
+        createTabs(cta, false, 3);
+        verifyShowingStrip(cta, false, 3);
+        verifyStripSelectedPosition(cta, 2);
+        assertNull(snackbarManager.getCurrentSnackbarForTesting());
+
+        // Click the selected item in strip to close a tab. The undo snack bar should show, and
+        // clicking on the snack bar button should undo the closure.
+        clickNthItemInStrip(2);
+        verifyShowingStrip(cta, false, 2);
+        assertTrue(snackbarManager.getCurrentSnackbarForTesting().getController()
+                           instanceof UndoBarController);
+        CriteriaHelper.pollInstrumentationThread(TabUiTestHelper::verifyUndoBarShowingAndClickUndo);
+        verifyShowingStrip(cta, false, 3);
+        verifyStripSelectedPosition(cta, 2);
+
+        // The undo snack bar should still work after entering overview mode.
+        clickNthItemInStrip(2);
+        verifyShowingStrip(cta, false, 2);
+        assertTrue(snackbarManager.getCurrentSnackbarForTesting().getController()
+                           instanceof UndoBarController);
+        enterTabSwitcher(cta);
+        verifyHidingStrip();
+        assertNotNull(snackbarManager.getCurrentSnackbarForTesting());
+        assertEquals(3, getAccessibilityOverviewList().getCount());
+        verifyAccessibilityTabClosing(2, true);
+        CriteriaHelper.pollInstrumentationThread(TabUiTestHelper::verifyUndoBarShowingAndClickUndo);
+        verifyAccessibilityTabClosing(2, false);
+
+        // The undo snack bar should not show when closure happens in accessibility tab switcher.
+        AccessibilityTabModelListItem item = getAccessibilityOverviewListItem(0);
+        verifyAccessibilityTabClosing(0, false);
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> item.findViewById(R.id.end_button).performClick());
+        assertNull(snackbarManager.getCurrentSnackbarForTesting());
+        verifyAccessibilityTabClosing(0, true);
+        assertEquals(3, getAccessibilityOverviewList().getCount());
+    }
+
+    private void verifyAccessibilityTabClosing(int index, boolean isClosing) {
+        CriteriaHelper.pollUiThread(() -> {
+            AccessibilityTabModelListItem item = getAccessibilityOverviewListItem(index);
+            assertEquals(isClosing ? View.VISIBLE : View.INVISIBLE,
+                    item.findViewById(R.id.undo_contents).getVisibility());
+        });
+    }
+
     private ChromeTabbedActivity restartChrome() throws Exception {
         TabUiTestHelper.finishActivity(mActivityTestRule.getActivity());
         mActivityTestRule.startMainActivityFromLauncher();
@@ -776,4 +838,16 @@
         mTabsViewWidthDp = tabsView.getWidth() * mPxToDp;
         return mActivityTestRule.getActivity().getLayoutManager();
     }
+
+    // Utility methods from OverviewListLayoutTest.java.
+    private ListView getAccessibilityOverviewList() {
+        AccessibilityTabModelWrapper container =
+                ((OverviewListLayout) mActivityTestRule.getActivity().getOverviewListLayout())
+                        .getContainer();
+        return (ListView) container.findViewById(R.id.list_view);
+    }
+
+    private AccessibilityTabModelListItem getAccessibilityOverviewListItem(int index) {
+        return (AccessibilityTabModelListItem) getAccessibilityOverviewList().getChildAt(index);
+    }
 }
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java
index 2646672..1afdc0a 100644
--- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java
+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java
@@ -740,8 +740,8 @@
         mTabModelObserverArgumentCaptor.getValue().tabClosureUndone(mTab2);
 
         // Since overview mode is showing, we should not show strip.
-        mVisibilityControllerInOrder.verify(mVisibilityController, never())
-                .setBottomControlsVisible(anyBoolean());
+        mVisibilityControllerInOrder.verify(mVisibilityController, times(2))
+                .setBottomControlsVisible(eq(false));
     }
 
     @Test
@@ -1121,7 +1121,7 @@
         mTabModelObserverArgumentCaptor.getValue().tabClosureUndone(mTab3);
 
         // Since overview mode is showing, we should not show strip.
-        verifyNeverReset();
+        verifyResetStrip(false, null);
     }
 
     @Test
@@ -1165,7 +1165,7 @@
 
     @Test
     @Features.EnableFeatures(ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID)
-    public void onResumeWithNative_featureEnabled_CTS() {
+    public void onResumeWithNative_featureActivated_CTS() {
         initAndAssertProperties(mTab1);
 
         ConditionalTabStripUtils.setFeatureStatus(FeatureStatus.ACTIVATED);
@@ -1176,7 +1176,7 @@
 
     @Test
     @Features.EnableFeatures(ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID)
-    public void onResumeWithNative_featureDisabled_CTS() {
+    public void onResumeWithNative_featureForbidden_CTS() {
         initAndAssertProperties(mTab1);
 
         ConditionalTabStripUtils.setFeatureStatus(FeatureStatus.FORBIDDEN);
@@ -1187,7 +1187,7 @@
 
     @Test
     @Features.EnableFeatures(ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID)
-    public void onResumeWithNative_featureExpired_CTS() {
+    public void onResumeWithNative_featureDefault_CTS() {
         initAndAssertProperties(mTab1);
 
         ConditionalTabStripUtils.setFeatureStatus(FeatureStatus.DEFAULT);
@@ -1198,6 +1198,24 @@
 
     @Test
     @Features.EnableFeatures(ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID)
+    public void onResumeWithNative_featureActivated_ShowingOverviewMode_CTS() {
+        initAndAssertProperties(mTab1);
+
+        // Mock that the overview mode is showing.
+        mOverviewModeObserverArgumentCaptor.getValue().onOverviewModeStartedShowing(true);
+        verifyResetStrip(false, null);
+        assertThat(mTabGroupUiMediator.getIsShowingOverViewModeForTesting(), equalTo(true));
+
+        // When overview mode is showing before native resume, i,e. ReturnToClank enabled, strip
+        // should not be showing.
+        ConditionalTabStripUtils.setFeatureStatus(FeatureStatus.ACTIVATED);
+        mPauseResumeWithNativeObserverArgumentCaptor.getValue().onResumeWithNative();
+
+        verifyResetStrip(false, null);
+    }
+
+    @Test
+    @Features.EnableFeatures(ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID)
     public void destroy_CTS() {
         initAndAssertProperties(mTab1);
 
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java
index 7b52c559..1b0f641 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java
@@ -131,7 +131,7 @@
         // assume who will be called first. See https://crbug.com/896468.
         if (!sEverDisabledForPolicy) {
             sEverDisabledForPolicy =
-                    !PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_SECTION_ENABLED);
+                    !PrefServiceBridge.getInstance().getBoolean(Pref.ENABLE_SNIPPETS);
         }
         return !sEverDisabledForPolicy;
     }
@@ -142,10 +142,10 @@
         if (!isFeedProcessEnabled()) return;
 
         sArticlesVisibleDuringSession =
-                PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE);
+                PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE);
         sPrefChangeRegistrar = new PrefChangeRegistrar();
-        sPrefChangeRegistrar.addObserver(Pref.NTP_ARTICLES_SECTION_ENABLED,
-                FeedProcessScopeFactory::articlesEnabledPrefChange);
+        sPrefChangeRegistrar.addObserver(
+                Pref.ENABLE_SNIPPETS, FeedProcessScopeFactory::articlesEnabledPrefChange);
 
         Profile profile = Profile.getLastUsedRegularProfile();
         Configuration configHostApi = FeedConfiguration.createConfiguration();
@@ -271,7 +271,7 @@
     static boolean areArticlesVisibleDuringSession() {
         // Skip the native call if sArticlesVisibleDuringSession is already true to reduce overhead.
         if (!sArticlesVisibleDuringSession
-                && PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE)) {
+                && PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE)) {
             sArticlesVisibleDuringSession = true;
         }
 
@@ -280,7 +280,7 @@
 
     private static void articlesEnabledPrefChange() {
         // Cannot assume this is called because of an actual change. May be going from true to true.
-        if (!PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_SECTION_ENABLED)) {
+        if (!PrefServiceBridge.getInstance().getBoolean(Pref.ENABLE_SNIPPETS)) {
             // There have been quite a few crashes/bugs that happen when code does not correctly
             // handle the scenario where Feed suddenly becomes disabled and the above getters start
             // returning nulls. Having this log a warning helps diagnose this pattern from the
@@ -294,7 +294,7 @@
     /** Clears out all static state. */
     private static void destroy() {
         if (sPrefChangeRegistrar != null) {
-            sPrefChangeRegistrar.removeObserver(Pref.NTP_ARTICLES_SECTION_ENABLED);
+            sPrefChangeRegistrar.removeObserver(Pref.ENABLE_SNIPPETS);
             sPrefChangeRegistrar.destroy();
             sPrefChangeRegistrar = null;
         }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
index ea717e9..eba3ef7 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
@@ -98,7 +98,7 @@
 
         mPrefChangeRegistrar = new PrefChangeRegistrar();
         mHasHeader = mCoordinator.getSectionHeaderView() != null;
-        mPrefChangeRegistrar.addObserver(Pref.NTP_ARTICLES_SECTION_ENABLED, this::updateContent);
+        mPrefChangeRegistrar.addObserver(Pref.ENABLE_SNIPPETS, this::updateContent);
         mHasHeaderMenu = ChromeFeatureList.isEnabled(ChromeFeatureList.REPORT_FEED_USER_ACTIONS);
 
         // Check that there is a navigation delegate when using the feed header menu.
@@ -181,13 +181,12 @@
         stream.addOnContentChangedListener(mStreamContentChangedListener);
 
         boolean suggestionsVisible =
-                PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE);
+                PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE);
 
         if (mHasHeader) {
             mSectionHeader = new SectionHeader(getSectionHeaderText(suggestionsVisible),
                     suggestionsVisible, this::onSectionHeaderToggled);
-            mPrefChangeRegistrar.addObserver(
-                    Pref.NTP_ARTICLES_LIST_VISIBLE, this::updateSectionHeader);
+            mPrefChangeRegistrar.addObserver(Pref.ARTICLES_LIST_VISIBLE, this::updateSectionHeader);
             TemplateUrlServiceFactory.get().addObserver(this);
             mCoordinator.getSectionHeaderView().setHeader(mSectionHeader);
 
@@ -272,7 +271,7 @@
             mSignInPromo = null;
         }
 
-        mPrefChangeRegistrar.removeObserver(Pref.NTP_ARTICLES_LIST_VISIBLE);
+        mPrefChangeRegistrar.removeObserver(Pref.ARTICLES_LIST_VISIBLE);
         TemplateUrlServiceFactory.get().removeObserver(this);
         mSigninManager.getIdentityManager().removeObserver(this);
     }
@@ -295,7 +294,7 @@
         }
 
         boolean suggestionsVisible =
-                PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE);
+                PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE);
         if (mSectionHeader.isExpanded() != suggestionsVisible) mSectionHeader.toggleHeader();
         if (mSignInPromo != null) {
             mSignInPromo.setCanShowPersonalizedSuggestions(suggestionsVisible);
@@ -311,7 +310,7 @@
      */
     private void onSectionHeaderToggled() {
         PrefServiceBridge.getInstance().setBoolean(
-                Pref.NTP_ARTICLES_LIST_VISIBLE, mSectionHeader.isExpanded());
+                Pref.ARTICLES_LIST_VISIBLE, mSectionHeader.isExpanded());
         mCoordinator.getStream().setStreamContentVisibility(mSectionHeader.isExpanded());
         // TODO(huayinz): Update the section header view through a ModelChangeProcessor.
         mCoordinator.getSectionHeaderView().updateVisuals();
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManager.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManager.java
index 39cea06..c51aea3 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManager.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManager.java
@@ -85,7 +85,7 @@
         // We don't call Stream#onShow to prevent feed services from being warmed up if the user
         // has opted out from article suggestions during the previous session.
         return super.canShow()
-                && PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE)
+                && PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE)
                 && !mTab.isHidden();
     }
 
@@ -93,7 +93,7 @@
     @Override
     protected boolean canActivate() {
         return super.canActivate()
-                && PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE)
+                && PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE)
                 && mTab.isUserInteractable();
     }
 
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/ProcessScope.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/ProcessScope.java
index 210e918..d49541b 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/ProcessScope.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/ProcessScope.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.feed.library.api.client.scope;
 
-import android.content.Context;
+import android.app.Activity;
 
 import org.chromium.chrome.browser.feed.library.api.client.knowncontent.KnownContent;
 import org.chromium.chrome.browser.feed.library.api.client.lifecycle.AppLifecycleListener;
@@ -35,7 +35,7 @@
     KnownContent getKnownContent();
 
     /** Returns a {@link StreamScopeBuilder.Builder}. */
-    StreamScopeBuilder createStreamScopeBuilder(Context context, ImageLoaderApi imageLoaderApi,
+    StreamScopeBuilder createStreamScopeBuilder(Activity activity, ImageLoaderApi imageLoaderApi,
             ActionApi actionApi, StreamConfiguration streamConfiguration,
             CardConfiguration cardConfiguration, SnackbarApi snackbarApi,
             OfflineIndicatorApi offlineIndicatorApi, TooltipApi tooltipApi,
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilder.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilder.java
index a5d7865e9..5242d0e 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilder.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilder.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.feed.library.api.client.scope;
 
-import android.content.Context;
+import android.app.Activity;
 
 import org.chromium.base.FeatureList;
 import org.chromium.chrome.browser.feed.library.api.host.action.ActionApi;
@@ -48,7 +48,7 @@
 /** A builder that creates a {@link StreamScope}. */
 public final class StreamScopeBuilder {
     // Required external dependencies.
-    private final Context mContext;
+    private final Activity mActivity;
     private final ActionApi mActionApi;
     private final ImageLoaderApi mImageLoaderApi;
 
@@ -84,7 +84,7 @@
     private HostBindingProvider mHostBindingProvider;
 
     /** Construct this builder using {@link ProcessScope#createStreamScopeBuilder} */
-    public StreamScopeBuilder(Context context, ActionApi actionApi, ImageLoaderApi imageLoaderApi,
+    public StreamScopeBuilder(Activity activity, ActionApi actionApi, ImageLoaderApi imageLoaderApi,
             ProtocolAdapter protocolAdapter, FeedSessionManager feedSessionManager,
             ThreadUtils threadUtils, TimingUtils timingUtils, TaskQueue taskQueue,
             MainThreadRunner mainThreadRunner, Clock clock, DebugBehavior debugBehavior,
@@ -94,7 +94,7 @@
             FeedKnownContent feedKnownContent, TooltipApi tooltipApi,
             TooltipSupportedApi tooltipSupportedApi, ApplicationInfo applicationInfo,
             FeedExtensionRegistry feedExtensionRegistry, SnackbarManager snackbarManager) {
-        this.mContext = context;
+        this.mActivity = activity;
         this.mActionApi = actionApi;
         this.mImageLoaderApi = imageLoaderApi;
         this.mProtocolAdapter = protocolAdapter;
@@ -166,12 +166,12 @@
         }
         if (FeatureList.isInitialized()
                 && ChromeFeatureList.isEnabled(ChromeFeatureList.INTEREST_FEED_V2)) {
-            mStream = new FeedStream(mContext, mIsBackgroundDark, mSnackbarManager);
+            mStream = new FeedStream(mActivity, mIsBackgroundDark, mSnackbarManager);
         } else {
             if (mStreamFactory == null) {
                 mStreamFactory = new BasicStreamFactory();
             }
-            mStream = mStreamFactory.build(Validators.checkNotNull(mActionParserFactory), mContext,
+            mStream = mStreamFactory.build(Validators.checkNotNull(mActionParserFactory), mActivity,
                     mApplicationInfo.getBuildType(), mCardConfiguration, mImageLoaderApi,
                     Validators.checkNotNull(mCustomElementProvider), mDebugBehavior, mClock,
                     Validators.checkNotNull(mModelProviderFactory),
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/scope/FeedProcessScope.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/scope/FeedProcessScope.java
index aa1c573..2186560 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/scope/FeedProcessScope.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/scope/FeedProcessScope.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.feed.library.api.internal.scope;
 
-import android.content.Context;
+import android.app.Activity;
 
 import org.chromium.chrome.browser.feed.library.api.client.knowncontent.KnownContent;
 import org.chromium.chrome.browser.feed.library.api.client.lifecycle.AppLifecycleListener;
@@ -175,12 +175,12 @@
      * <p>This is called by hosts so it must be public
      */
     @Override
-    public StreamScopeBuilder createStreamScopeBuilder(Context context,
+    public StreamScopeBuilder createStreamScopeBuilder(Activity activity,
             ImageLoaderApi imageLoaderApi, ActionApi actionApi,
             StreamConfiguration streamConfiguration, CardConfiguration cardConfiguration,
             SnackbarApi snackbarApi, OfflineIndicatorApi offlineIndicatorApi, TooltipApi tooltipApi,
             SnackbarManager snackbarManager) {
-        return new StreamScopeBuilder(context, actionApi, imageLoaderApi, mProtocolAdapter,
+        return new StreamScopeBuilder(activity, actionApi, imageLoaderApi, mProtocolAdapter,
                 mFeedSessionManager, mThreadUtils, mTimingUtils, mTaskQueue, mMainThreadRunner,
                 mClock, mDebugBehavior, streamConfiguration, cardConfiguration, mActionManager,
                 mConfiguration, snackbarApi, mBasicLoggingApi, offlineIndicatorApi,
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java
index e9dc9b0..5965433 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java
@@ -4,8 +4,7 @@
 
 package org.chromium.chrome.browser.feed.v2;
 
-import android.content.Context;
-import android.view.ContextThemeWrapper;
+import android.app.Activity;
 import android.view.View;
 
 import androidx.annotation.Nullable;
@@ -28,7 +27,7 @@
 public class FeedStream implements Stream {
     private static final String TAG = "FeedStream";
 
-    private final Context mContext;
+    private final Activity mActivity;
     private final FeedStreamSurface mFeedStreamSurface;
     private final ObserverList<ScrollListener> mScrollListeners;
 
@@ -36,10 +35,12 @@
     // TODO(jianli): To be used.
     private boolean mIsStreamContentVisible = true;
 
-    public FeedStream(Context context, boolean isBackgroundDark, SnackbarManager snackbarManager) {
-        this.mFeedStreamSurface = new FeedStreamSurface(null, () -> null, context, snackbarManager);
-        this.mContext =
-                new ContextThemeWrapper(context, (isBackgroundDark ? R.style.Dark : R.style.Light));
+    public FeedStream(
+            Activity activity, boolean isBackgroundDark, SnackbarManager snackbarManager) {
+        // TODO(petewil): Use isBackgroundDark to turn on dark theme.
+        this.mActivity = activity;
+        this.mFeedStreamSurface =
+                new FeedStreamSurface(null, () -> null, activity, snackbarManager);
         this.mScrollListeners = new ObserverList<ScrollListener>();
     }
 
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java
index 9322e4c0..136d2eb 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.feed.v2;
 
+import android.app.Activity;
 import android.content.Context;
 import android.view.View;
 import android.widget.TextView;
@@ -61,6 +62,7 @@
     private final View mRootView;
     private final HybridListRenderer mHybridListRenderer;
     private final SnackbarManager mSnackbarManager;
+    private final Activity mActivity;
 
     private int mHeaderCount;
 
@@ -120,17 +122,18 @@
      * client implementation.
      */
     public FeedStreamSurface(TabModelSelector tabModelSelector, Supplier<Tab> tabProvider,
-            Context activityContext, SnackbarManager snackbarManager) {
+            Activity activity, SnackbarManager snackbarManager) {
         mNativeFeedStreamSurface = FeedStreamSurfaceJni.get().init(FeedStreamSurface.this);
         mTabModelSelector = tabModelSelector;
         mTabProvider = tabProvider;
         mSnackbarManager = snackbarManager;
+        mActivity = activity;
 
         mContentManager = new FeedListContentManager(this, this);
 
         ProcessScope processScope = xSurfaceProcessScope();
         if (processScope != null) {
-            mSurfaceScope = xSurfaceProcessScope().obtainSurfaceScope(activityContext);
+            mSurfaceScope = xSurfaceProcessScope().obtainSurfaceScope(mActivity);
         } else {
             mSurfaceScope = null;
         }
@@ -138,7 +141,7 @@
         if (mSurfaceScope != null) {
             mHybridListRenderer = mSurfaceScope.provideListRenderer();
         } else {
-            mHybridListRenderer = new NativeViewListRenderer(activityContext);
+            mHybridListRenderer = new NativeViewListRenderer(mActivity);
         }
 
         if (mHybridListRenderer != null) {
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedAppLifecycleTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedAppLifecycleTest.java
index 0b64398..12fc70b8 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedAppLifecycleTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedAppLifecycleTest.java
@@ -307,7 +307,7 @@
     public void testClearDataAfterDisablingDoesNotCrash() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             FeedProcessScopeFactory.clearFeedProcessScopeForTesting();
-            PrefServiceBridge.getInstance().setBoolean(Pref.NTP_ARTICLES_SECTION_ENABLED, false);
+            PrefServiceBridge.getInstance().setBoolean(Pref.ENABLE_SNIPPETS, false);
             FeedLifecycleBridge.onCachedDataCleared();
             FeedLifecycleBridge.onHistoryDeleted();
         });
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageCardRenderTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageCardRenderTest.java
index 7d7c4e1b..b43be34 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageCardRenderTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageCardRenderTest.java
@@ -154,6 +154,6 @@
 
     private boolean getPreferenceForArticleSectionHeader() throws Exception {
         return ThreadUtils.runOnUiThreadBlocking(
-                () -> PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE));
+                () -> PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE));
     }
 }
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageTest.java
index 1e9c77c..0f485a95 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageTest.java
@@ -391,9 +391,7 @@
     public void testFeedDisabledByPolicy() throws Exception {
         openNewTabPage();
         final boolean pref = TestThreadUtils.runOnUiThreadBlocking(
-                ()
-                        -> PrefServiceBridge.getInstance().getBoolean(
-                                Pref.NTP_ARTICLES_SECTION_ENABLED));
+                () -> PrefServiceBridge.getInstance().getBoolean(Pref.ENABLE_SNIPPETS));
 
         // Policy is disabled. Verify the NTP root view contains only the Stream view as child.
         ViewGroup rootView = (ViewGroup) mNtp.getView();
@@ -407,9 +405,7 @@
         // Simulate that policy is enabled. Verify the NTP root view contains only the view for
         // policy as child.
         TestThreadUtils.runOnUiThreadBlocking(
-                ()
-                        -> PrefServiceBridge.getInstance().setBoolean(
-                                Pref.NTP_ARTICLES_SECTION_ENABLED, false));
+                () -> PrefServiceBridge.getInstance().setBoolean(Pref.ENABLE_SNIPPETS, false));
         Assert.assertNotNull(mNtp.getCoordinatorForTesting().getScrollViewForPolicy());
         Assert.assertNull(mNtp.getCoordinatorForTesting().getStreamForTesting());
         Assert.assertEquals(1, rootView.getChildCount());
@@ -431,9 +427,7 @@
         // Simulate that policy is disabled. Verify the NTP root view is the view for policy. We
         // don't re-enable the Feed until the next restart.
         TestThreadUtils.runOnUiThreadBlocking(
-                ()
-                        -> PrefServiceBridge.getInstance().setBoolean(
-                                Pref.NTP_ARTICLES_SECTION_ENABLED, true));
+                () -> PrefServiceBridge.getInstance().setBoolean(Pref.ENABLE_SNIPPETS, true));
         Assert.assertNotNull(ntp2.getCoordinatorForTesting().getScrollViewForPolicy());
         Assert.assertNull(ntp2.getCoordinatorForTesting().getStream());
         Assert.assertEquals(1, rootView2.getChildCount());
@@ -450,9 +444,7 @@
 
         // Reset state.
         TestThreadUtils.runOnUiThreadBlocking(
-                ()
-                        -> PrefServiceBridge.getInstance().setBoolean(
-                                Pref.NTP_ARTICLES_SECTION_ENABLED, pref));
+                () -> PrefServiceBridge.getInstance().setBoolean(Pref.ENABLE_SNIPPETS, pref));
     }
 
     /**
@@ -472,6 +464,6 @@
 
     private boolean getPreferenceForArticleSectionHeader() throws Exception {
         return TestThreadUtils.runOnUiThreadBlocking(
-                () -> PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE));
+                () -> PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE));
     }
 }
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilderTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilderTest.java
index d7a17dc3..079383e 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilderTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/api/client/scope/StreamScopeBuilderTest.java
@@ -12,7 +12,6 @@
 import static org.mockito.MockitoAnnotations.initMocks;
 
 import android.app.Activity;
-import android.content.Context;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -108,7 +107,7 @@
     @Mock
     private SnackbarManager mSnackbarManager;
 
-    private Context mContext;
+    private Activity mActivity;
     private MainThreadRunner mMainThreadRunner;
     private ThreadUtils mThreadUtils;
     private TimingUtils mTimingUtils;
@@ -119,12 +118,12 @@
     @Before
     public void setUp() {
         initMocks(this);
-        mContext = Robolectric.buildActivity(Activity.class).get();
+        mActivity = Robolectric.buildActivity(Activity.class).get();
         mMainThreadRunner = new MainThreadRunner();
         mThreadUtils = new ThreadUtils();
         mTimingUtils = new TimingUtils();
         mClock = new FakeClock();
-        mApplicationInfo = new ApplicationInfo.Builder(mContext).setBuildType(BUILD_TYPE).build();
+        mApplicationInfo = new ApplicationInfo.Builder(mActivity).setBuildType(BUILD_TYPE).build();
         when(mConfig.getValueOrDefault(
                      eq(ConfigKey.LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS), anyLong()))
                 .thenReturn(1000L);
@@ -134,7 +133,7 @@
 
     @Test
     public void testBasicBuild() {
-        StreamScope streamScope = new StreamScopeBuilder(mContext, mActionApi, mImageLoaderApi,
+        StreamScope streamScope = new StreamScopeBuilder(mActivity, mActionApi, mImageLoaderApi,
                 mProtocolAdapter, mFeedSessionManager, mThreadUtils, mTimingUtils, mTaskQueue,
                 mMainThreadRunner, mClock, DEBUG_BEHAVIOR, mStreamConfiguration, mCardConfiguration,
                 mActionManager, mConfig, mSnackbarApi, mBasicLoggingApi, mOfflineIndicatorApi,
@@ -147,7 +146,7 @@
 
     @Test
     public void testComplexBuild() {
-        StreamScope streamScope = new StreamScopeBuilder(mContext, mActionApi, mImageLoaderApi,
+        StreamScope streamScope = new StreamScopeBuilder(mActivity, mActionApi, mImageLoaderApi,
                 mProtocolAdapter, mFeedSessionManager, mThreadUtils, mTimingUtils, mTaskQueue,
                 mMainThreadRunner, mClock, DEBUG_BEHAVIOR, mStreamConfiguration, mCardConfiguration,
                 mActionManager, mConfig, mSnackbarApi, mBasicLoggingApi, mOfflineIndicatorApi,
@@ -165,7 +164,7 @@
     public void testStreamFactoryBuild() {
         setupStreamFactory(mStream);
 
-        StreamScope streamScope = new StreamScopeBuilder(mContext, mActionApi, mImageLoaderApi,
+        StreamScope streamScope = new StreamScopeBuilder(mActivity, mActionApi, mImageLoaderApi,
                 mProtocolAdapter, mFeedSessionManager, mThreadUtils, mTimingUtils, mTaskQueue,
                 mMainThreadRunner, mClock, DEBUG_BEHAVIOR, mStreamConfiguration, mCardConfiguration,
                 mActionManager, mConfig, mSnackbarApi, mBasicLoggingApi, mOfflineIndicatorApi,
diff --git a/chrome/android/java/monochrome_public_bundle.proguard_flags.expected b/chrome/android/java/monochrome_public_bundle.proguard_flags.expected
index 48f80a19..a7d802cf 100644
--- a/chrome/android/java/monochrome_public_bundle.proguard_flags.expected
+++ b/chrome/android/java/monochrome_public_bundle.proguard_flags.expected
@@ -105,6 +105,29 @@
   public <init>();
 }
 
+# AndroidX classes that are inflated via reflection.
+-keep public class androidx.preference.Preference {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.PreferenceScreen {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.PreferenceCategory {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.ListPreference {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+# SearchView is used in website_preferences_menu.xml and is constructed by
+# Android using reflection.
+-keep class androidx.appcompat.widget.SearchView {
+  public <init>(...);
+}
+
+# Referenced by android.support.v7.preference.PreferenceInflater.
+-keep public class androidx.preference.SwitchPreference {}
+
 # Don't obfuscate Parcelables as they might be marshalled outside Chrome.
 # If we annotated all Parcelables that get put into Bundles other than
 # for saveInstanceState (e.g. PendingIntents), then we could actually keep the
@@ -337,23 +360,6 @@
   public <init>();
 }
 
-# Referenced by android.support.v7.preference.PreferenceInflater
--keep public class androidx.preference.SwitchPreference {}
-
-# Inflated via reflection
--keep public class androidx.preference.Preference {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
--keep public class androidx.preference.PreferenceScreen {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
--keep public class androidx.preference.PreferenceCategory {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
--keep public class androidx.preference.ListPreference {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
-
 # These classes aren't themselves referenced, but __ProcessService[0,1,2...] are
 # referenced, and we look up these services by appending a number onto the name
 # of the base class. Thus, we need to keep the base class name around so that
@@ -380,12 +386,6 @@
     boolean mShiftingMode;
 }
 
-# SearchView is used in website_preferences_menu.xml and is constructed by
-# Android using reflection.
--keep class androidx.appcompat.widget.SearchView {
-  public <init>(...);
-}
-
 # This class member is referenced in BottomSheetBottomNav as a temporary
 # measure until the support library contains a solution for disabling shifting
 # mode. TODO(twellington): remove once support library has a fix and is rolled.
@@ -676,20 +676,6 @@
 -keep public class androidx.versionedparcelable.ParcelImpl
 
 ################################################################################
-# obj/third_party/android_deps/com_android_support_support_compat_java/proguard.txt
-################################################################################
-# aapt2 is not (yet) keeping FQCNs defined in the appComponentFactory <application> attribute
--keep class android.support.v4.app.CoreComponentFactory
-
-################################################################################
-# obj/third_party/android_deps/com_android_support_versionedparcelable_java/proguard.txt
-################################################################################
--keep public class * extends androidx.versionedparcelable.VersionedParcelable
--keep public class android.support.**Parcelizer { *; }
--keep public class androidx.**Parcelizer { *; }
--keep public class androidx.versionedparcelable.ParcelImpl
-
-################################################################################
 # obj/third_party/android_deps/google_play_services_base_java/proguard.txt
 ################################################################################
 # b/35135904 Ensure that proguard will not strip the mResultGuardian.
diff --git a/chrome/android/java/proguard.flags b/chrome/android/java/proguard.flags
index 9a31184..7a6bbd25 100644
--- a/chrome/android/java/proguard.flags
+++ b/chrome/android/java/proguard.flags
@@ -8,23 +8,6 @@
   public <init>();
 }
 
-# Referenced by android.support.v7.preference.PreferenceInflater
--keep public class androidx.preference.SwitchPreference {}
-
-# Inflated via reflection
--keep public class androidx.preference.Preference {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
--keep public class androidx.preference.PreferenceScreen {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
--keep public class androidx.preference.PreferenceCategory {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
--keep public class androidx.preference.ListPreference {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
-
 # These classes aren't themselves referenced, but __ProcessService[0,1,2...] are
 # referenced, and we look up these services by appending a number onto the name
 # of the base class. Thus, we need to keep the base class name around so that
@@ -51,12 +34,6 @@
     boolean mShiftingMode;
 }
 
-# SearchView is used in website_preferences_menu.xml and is constructed by
-# Android using reflection.
--keep class androidx.appcompat.widget.SearchView {
-  public <init>(...);
-}
-
 # This class member is referenced in BottomSheetBottomNav as a temporary
 # measure until the support library contains a solution for disabling shifting
 # mode. TODO(twellington): remove once support library has a fix and is rolled.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
index 0490b781..fc7ce43 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
@@ -235,13 +235,13 @@
                 Settings.System.getInt(ContextUtils.getApplicationContext().getContentResolver(),
                         Settings.System.TEXT_SHOW_PASSWORD, 1)
                 == 1;
-        if (PrefServiceBridge.getInstance().getBoolean(Pref.WEBKIT_PASSWORD_ECHO_ENABLED)
+        if (PrefServiceBridge.getInstance().getBoolean(Pref.WEB_KIT_PASSWORD_ECHO_ENABLED)
                 == systemEnabled) {
             return;
         }
 
         PrefServiceBridge.getInstance().setBoolean(
-                Pref.WEBKIT_PASSWORD_ECHO_ENABLED, systemEnabled);
+                Pref.WEB_KIT_PASSWORD_ECHO_ENABLED, systemEnabled);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 485ca17..797b10f9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -1553,8 +1553,8 @@
         mContentContainer = (ViewGroup) findViewById(android.R.id.content);
         mControlContainer = (ToolbarControlContainer) findViewById(R.id.control_container);
 
-        mUndoBarPopupController =
-                new UndoBarController(this, mTabModelSelectorImpl, this::getSnackbarManager);
+        mUndoBarPopupController = new UndoBarController(
+                this, mTabModelSelectorImpl, this::getSnackbarManager, getOverviewModeBehavior());
 
         mInactivityTracker = new ChromeInactivityTracker(
                 ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
index 42b4500..9c96cdd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -187,6 +187,17 @@
     public static final String EXTRA_INCOGNITO_MODE = "org.chromium.chrome.browser.incognito_mode";
 
     /**
+     * Byte array for the POST data when load a url, only Intents sent by Chrome can use this.
+     */
+    public static final String EXTRA_POST_DATA = "com.android.chrome.post_data";
+
+    /**
+     * The type of the POST data, need to be added to the HTTP request header, only Intents sent by
+     * Chrome can use this.
+     */
+    public static final String EXTRA_POST_DATA_TYPE = "com.android.chrome.post_data_type";
+
+    /**
      * Fake ComponentName used in constructing TRUSTED_APPLICATION_CODE_EXTRA.
      */
     private static ComponentName sFakeComponentName;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
index afa6f71..acd3edf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
@@ -73,7 +73,7 @@
         ChromeBaseCheckBoxPreference readerForAccessibilityPref =
                 (ChromeBaseCheckBoxPreference) findPreference(PREF_READER_FOR_ACCESSIBILITY);
         readerForAccessibilityPref.setChecked(
-                PrefServiceBridge.getInstance().getBoolean(Pref.READER_FOR_ACCESSIBILITY_ENABLED));
+                PrefServiceBridge.getInstance().getBoolean(Pref.READER_FOR_ACCESSIBILITY));
         readerForAccessibilityPref.setOnPreferenceChangeListener(this);
 
         ChromeBaseCheckBoxPreference mAccessibilityTabSwitcherPref =
@@ -120,7 +120,7 @@
             mFontSizePrefs.setForceEnableZoomFromUser((Boolean) newValue);
         } else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) {
             PrefServiceBridge.getInstance().setBoolean(
-                    Pref.READER_FOR_ACCESSIBILITY_ENABLED, (Boolean) newValue);
+                    Pref.READER_FOR_ACCESSIBILITY, (Boolean) newValue);
         }
         return true;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelListItem.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelListItem.java
index 64c661b..aee5895 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelListItem.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelListItem.java
@@ -643,7 +643,7 @@
     }
 
     @VisibleForTesting
-    View getCloseButtonForTests() {
+    public View getCloseButtonForTests() {
         return mCloseButton;
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java
index f079a229..5a7fb84 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java
@@ -172,7 +172,7 @@
                     }
                 };
 
-                Bundle executionResult = service.extraCommand(
+                Bundle executionResult = service.sendExtraCommand(
                         CHECK_LOCATION_PERMISSION_COMMAND_NAME, Bundle.EMPTY, resultCallback);
                 // Set permission to false if the service does not know how to handle the
                 // extraCommand.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
index df6c910..297c4448f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -650,8 +650,8 @@
             recordContextMenuSelection(params, ContextMenuUma.Action.SHARE_LINK);
             ShareParams linkShareParams =
                     new ShareParams.Builder(getWindow(), params.getUrl(), params.getUrl()).build();
-            mShareDelegateSupplier.get().share(linkShareParams,
-                    new ChromeShareExtras(/*saveLastUsed=*/true, /*shareDirectly=*/false));
+            mShareDelegateSupplier.get().share(
+                    linkShareParams, new ChromeShareExtras.Builder().setSaveLastUsed(true).build());
         } else if (itemId == R.id.contextmenu_search_with_google_lens) {
             recordContextMenuSelection(params, ContextMenuUma.Action.SEARCH_WITH_GOOGLE_LENS);
             searchWithGoogleLens(params, renderFrameHost, mDelegate.isIncognito());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerTabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerTabUtils.java
index 77df5d5..92b08af 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerTabUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerTabUtils.java
@@ -99,7 +99,7 @@
      */
     public static boolean shouldExcludeMobileFriendly() {
         if (sExcludeMobileFriendlyForTesting != null) return sExcludeMobileFriendlyForTesting;
-        return !PrefServiceBridge.getInstance().getBoolean(Pref.READER_FOR_ACCESSIBILITY_ENABLED)
+        return !PrefServiceBridge.getInstance().getBoolean(Pref.READER_FOR_ACCESSIBILITY)
                 && getDistillerHeuristics() == DistillerHeuristicsType.ADABOOST_MODEL;
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/PrefetchEnabledSupplier.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/PrefetchEnabledSupplier.java
index bbf775f8..1ff3800 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/PrefetchEnabledSupplier.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/PrefetchEnabledSupplier.java
@@ -44,8 +44,7 @@
     private void startTrackingPref() {
         if (mPrefChangeRegistrar != null) return;
         mPrefChangeRegistrar = new PrefChangeRegistrar();
-        mPrefChangeRegistrar.addObserver(
-                Pref.OFFLINE_PREFETCH_USER_SETTING_ENABLED, this::notifyObservers);
+        mPrefChangeRegistrar.addObserver(Pref.USER_SETTING_ENABLED, this::notifyObservers);
     }
 
     private void stopTrackingPref() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java b/chrome/android/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java
index 846bb6fc7..dc18dc45 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java
@@ -52,7 +52,7 @@
      * @param enabled the new state of the web content dark mode
      */
     private static void enableWebContentsDarkMode(boolean enabled) {
-        PrefServiceBridge.getInstance().setBoolean(Pref.WEBKIT_FORCE_DARK_MODE_ENABLED, enabled);
+        PrefServiceBridge.getInstance().setBoolean(Pref.WEB_KIT_FORCE_DARK_MODE_ENABLED, enabled);
     }
 
     private static boolean shouldEnableWebContentsDarkMode() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageUma.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageUma.java
index 8809f425..d79bed85 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageUma.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageUma.java
@@ -307,10 +307,10 @@
     public void recordContentSuggestionsDisplayStatus() {
         @ContentSuggestionsDisplayStatus
         int status = ContentSuggestionsDisplayStatus.VISIBLE;
-        if (!PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_SECTION_ENABLED)) {
+        if (!PrefServiceBridge.getInstance().getBoolean(Pref.ENABLE_SNIPPETS)) {
             // Disabled by policy.
             status = ContentSuggestionsDisplayStatus.DISABLED_BY_POLICY;
-        } else if (!PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE)) {
+        } else if (!PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE)) {
             // Articles are collapsed.
             status = ContentSuggestionsDisplayStatus.COLLAPSED;
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java
index 415645a..e5dcd53 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java
@@ -46,6 +46,7 @@
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.modelutil.LazyConstructionPropertyMcp;
 import org.chromium.ui.modelutil.MVCListAdapter;
+import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
 import org.chromium.ui.modelutil.PropertyModel;
 
 import java.util.ArrayList;
@@ -335,6 +336,11 @@
         return mMediator;
     }
 
+    @VisibleForTesting
+    ModelList getSuggestionModelList() {
+        return mMediator.getSuggestionModelList();
+    }
+
     private void onTileSelected(QueryTile queryTile) {
         mMediator.onQueryTileSelected(queryTile);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionView.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionView.java
index d3537c3..86a177d5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/base/BaseSuggestionView.java
@@ -14,6 +14,7 @@
 
 import androidx.annotation.DrawableRes;
 import androidx.annotation.LayoutRes;
+import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.widget.AppCompatImageView;
 
 import org.chromium.chrome.R;
@@ -175,7 +176,8 @@
     }
 
     /** @return Decorated suggestion view. */
-    DecoratedSuggestionView<T> getDecoratedSuggestionView() {
+    @VisibleForTesting
+    public DecoratedSuggestionView<T> getDecoratedSuggestionView() {
         return mDecoratedView;
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java
index 7e54b7c..75ac009 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerLauncher.java
@@ -56,7 +56,7 @@
                     "PasswordManager.ManagePasswordsReferrerSignedInAndSyncing", referrer,
                     ManagePasswordsReferrer.MAX_VALUE + 1);
             if (!PrefServiceBridge.getInstance().isManagedPreference(
-                        Pref.REMEMBER_PASSWORDS_ENABLED)) {
+                        Pref.CREDENTIALS_ENABLE_SERVICE)) {
                 if (tryShowingTheGooglePasswordManager(activity)) return;
             }
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
index 49c89e9..5246d49 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -428,13 +428,13 @@
         mSavePasswordsSwitch.setSummaryOff(R.string.text_off);
         mSavePasswordsSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
             PrefServiceBridge.getInstance().setBoolean(
-                    Pref.REMEMBER_PASSWORDS_ENABLED, (boolean) newValue);
+                    Pref.CREDENTIALS_ENABLE_SERVICE, (boolean) newValue);
             return true;
         });
         mSavePasswordsSwitch.setManagedPreferenceDelegate(
                 (ChromeManagedPreferenceDelegate) preference
                 -> PrefServiceBridge.getInstance().isManagedPreference(
-                        Pref.REMEMBER_PASSWORDS_ENABLED));
+                        Pref.CREDENTIALS_ENABLE_SERVICE));
 
         try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
             getPreferenceScreen().addPreference(mSavePasswordsSwitch);
@@ -445,7 +445,7 @@
         // (e.g. the switch will say "On" when save passwords is really turned off), so
         // .setChecked() should be called after .addPreference()
         mSavePasswordsSwitch.setChecked(
-                PrefServiceBridge.getInstance().getBoolean(Pref.REMEMBER_PASSWORDS_ENABLED));
+                PrefServiceBridge.getInstance().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE));
     }
 
     private void createAutoSignInCheckbox() {
@@ -456,15 +456,15 @@
         mAutoSignInSwitch.setSummary(R.string.passwords_auto_signin_description);
         mAutoSignInSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
             PrefServiceBridge.getInstance().setBoolean(
-                    Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED, (boolean) newValue);
+                    Pref.CREDENTIALS_ENABLE_AUTOSIGNIN, (boolean) newValue);
             return true;
         });
         mAutoSignInSwitch.setManagedPreferenceDelegate((ChromeManagedPreferenceDelegate) preference
                 -> PrefServiceBridge.getInstance().isManagedPreference(
-                        Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED));
+                        Pref.CREDENTIALS_ENABLE_AUTOSIGNIN));
         getPreferenceScreen().addPreference(mAutoSignInSwitch);
-        mAutoSignInSwitch.setChecked(PrefServiceBridge.getInstance().getBoolean(
-                Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED));
+        mAutoSignInSwitch.setChecked(
+                PrefServiceBridge.getInstance().getBoolean(Pref.CREDENTIALS_ENABLE_AUTOSIGNIN));
     }
 
     private void displayManageAccountLink() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerVideoPlayer.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerVideoPlayer.java
index 58edd93..f00aef01 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerVideoPlayer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerVideoPlayer.java
@@ -25,6 +25,7 @@
 import android.widget.TextView;
 import android.widget.VideoView;
 
+import androidx.annotation.IntDef;
 import androidx.annotation.VisibleForTesting;
 import androidx.core.math.MathUtils;
 import androidx.core.view.GestureDetectorCompat;
@@ -34,6 +35,9 @@
 import org.chromium.chrome.R;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * Encapsulates the video player functionality of the Photo Picker dialog.
  */
@@ -49,6 +53,38 @@
 
         // Called when the video stops playing.
         void onVideoEnded();
+
+        // Animation events for UI elements (views) fading in and out of view.
+        void onAnimationStart(long viewId, float currentAlpha);
+        void onAnimationCancel(long viewId, float currentAlpha);
+        void onAnimationEnd(long viewId, float currentAlpha);
+    }
+
+    // The possible types of fade out animations.
+    @IntDef({FadeOut.NO_FADE_OUT, FadeOut.FADE_OUT_PLAY_QUICKLY, FadeOut.FADE_OUT_ALL_SLOWLY,
+            FadeOut.FADE_OUT_ALL_QUICKLY})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FadeOut {
+        // This is used when the video controls should remain on screen and not fade away, for
+        // example when the video playback reaches the end.
+        int NO_FADE_OUT = 0;
+
+        // This is used when the controls should fade out, with the Play button fading out faster
+        // than the rest of the controls. This is appropriate to use when the goal is to get to
+        // viewing a video quickly, for example when the video starts playing initially, or after
+        // the user seeks during video playback.
+        int FADE_OUT_PLAY_QUICKLY = 1;
+
+        // This is used when all the controls, including the Play button, should fade out at the
+        // same slow pace. This is appropriate to use when giving the user enough time to react
+        // before the controls disappear again. For example, when the user has single-tapped on the
+        // video to explicitly show the controls or when seeking while video playback is paused (due
+        // to a high chance of the Play button being pressed).
+        int FADE_OUT_ALL_SLOWLY = 2;
+
+        // This is used when all the controls should fade out quickly, such as when the user single-
+        // taps the video, to explicitly request that the controls disappear from view.
+        int FADE_OUT_ALL_QUICKLY = 3;
     }
 
     // The callback to use for reporting playback progress in tests.
@@ -57,6 +93,24 @@
     // The amount of time (in milliseconds) to skip when fast forwarding/rewinding.
     private static final int SKIP_LENGTH_IN_MS = 10000;
 
+    // The time (in milliseconds) to wait before animating controls away.
+    private static final int OVERLAY_FADE_OUT_DELAY_MS = 2500;
+    private static final int PLAY_BUTTON_FADE_OUT_DELAY_MS = 250;
+
+    // Durations for fade-out animations (in milliseconds).
+    private static final int PLAY_BUTTON_FADE_OUT_DURATION_MS = 750;
+    private static final int OVERLAY_CONTROLS_FADE_OUT_DURATION_MS = 750;
+    private static final int OVERLAY_SCRIM_FADE_OUT_DURATION_MS = 1000;
+
+    // Durations for fade-in animation (in milliseconds).
+    private static final int PLAY_BUTTON_FADE_IN_DURATION_MS = 250;
+    private static final int OVERLAY_CONTROLS_FADE_IN_DURATION_MS = 500;
+    private static final int OVERLAY_SCRIM_FADE_IN_DURATION_MS = 250;
+
+    // Whether to turn on shorter animation timings and delays. When |true| all delays and
+    // durations are 1/10th of normal length.
+    private static boolean sShortAnimationTimesForTesting;
+
     // The DecorView for the dialog the player is shown in.
     private View mDecorView;
 
@@ -78,9 +132,16 @@
     // The container view for all the UI elements overlaid on top of the video.
     private final View mVideoOverlayContainer;
 
+    // Whether the overlay controls are currently showing. Set to true from the moment they start
+    // animating into view and false once the Play/Pause button starts animating away.
+    private boolean mOverlayControlsShowing;
+
     // The container view for the UI video controls within the overlaid window.
     private final View mVideoControls;
 
+    // The scrim at the bottom of the video (highlighting the smaller video controls).
+    private final View mVideoControlsGradient;
+
     // The large Play button overlaid on top of the video.
     private final ImageView mLargePlayButton;
 
@@ -109,6 +170,9 @@
     // The SeekBar showing the video playback progress (allows user seeking).
     private final SeekBar mSeekBar;
 
+    // Whether a seek operation happened while playback was taking place.
+    private boolean mSeekDuringPlayback;
+
     // A flag to control when the playback monitor schedules new tasks.
     private boolean mRunPlaybackMonitoringTask;
 
@@ -121,8 +185,13 @@
     // An OnGestureListener class for handling double tap.
     private class DoubleTapGestureListener extends GestureDetector.SimpleOnGestureListener {
         @Override
+        public boolean onSingleTapConfirmed(MotionEvent e) {
+            return onSingleTapVideo();
+        }
+
+        @Override
         public boolean onDoubleTap(MotionEvent e) {
-            return onDoubleTapVideo(e);
+            return onDoubleTapVideo(e.getX());
         }
     }
 
@@ -140,6 +209,7 @@
         mVideoView = findViewById(R.id.video_player);
         mVideoOverlayContainer = findViewById(R.id.video_overlay_container);
         mVideoControls = findViewById(R.id.video_controls);
+        mVideoControlsGradient = findViewById(R.id.video_controls_gradient);
         mLargePlayButton = findViewById(R.id.video_player_play_button);
         mMuteButton = findViewById(R.id.mute);
         mMuteButton.setImageResource(R.drawable.ic_volume_on_white_24dp);
@@ -228,7 +298,7 @@
                 // from the start, by pressing Play.
                 switchToPlayButton();
                 updateProgress();
-                showOverlayControls(/*animateAway=*/false);
+                showAndMaybeHideVideoControls(/* animateIn= */ false, FadeOut.NO_FADE_OUT);
                 if (sProgressCallback != null) {
                     sProgressCallback.onVideoEnded();
                 }
@@ -253,18 +323,33 @@
         return true;
     }
 
-    public boolean onDoubleTapVideo(MotionEvent e) {
+    private boolean onSingleTapVideo() {
+        if (mOverlayControlsShowing) {
+            // A tap when overlays are showing is treated as a request for the controls to
+            // disappear as soon as possible.
+            fadeAwayVideoControls(FadeOut.FADE_OUT_ALL_QUICKLY);
+        } else {
+            // A tap when the overlay controls are hidden should be treated as a high likelihood of
+            // the user wanting to interact with the controls, so they should remain on screen
+            // longer.
+            showAndMaybeHideVideoControls(/* animateIn= */ true, FadeOut.FADE_OUT_ALL_SLOWLY);
+        }
+        return true;
+    }
+
+    private boolean onDoubleTapVideo(float x) {
         int videoPos = mMediaPlayer.getCurrentPosition();
         int duration = mMediaPlayer.getDuration();
 
         // A click to the left (of the center of) the Play button counts as rewinding, and a click
         // to the right of it counts as fast forwarding.
-        float x = e.getX();
         float midX = mLargePlayButton.getX() + (mLargePlayButton.getWidth() / 2);
         videoPos += (x > midX) ? SKIP_LENGTH_IN_MS : -SKIP_LENGTH_IN_MS;
         MathUtils.clamp(videoPos, 0, duration);
 
         videoSeekTo(videoPos);
+        updateProgress();
+        showAndMaybeHideVideoControls(/* animateIn= */ false, FadeOut.FADE_OUT_PLAY_QUICKLY);
         return true;
     }
 
@@ -273,9 +358,7 @@
     @Override
     public void onClick(View view) {
         int id = view.getId();
-        if (id == R.id.video_overlay_container) {
-            showOverlayControls(/*animateAway=*/true);
-        } else if (id == R.id.video_player_play_button) {
+        if (id == R.id.video_player_play_button) {
             toggleVideoPlayback();
         } else if (id == R.id.back_button) {
             closeVideoPlayer();
@@ -315,14 +398,6 @@
     @Override
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
         if (fromUser) {
-            final boolean seekDuringPlay = mVideoView.isPlaying();
-            mMediaPlayer.setOnSeekCompleteListener(mp -> {
-                mMediaPlayer.setOnSeekCompleteListener(null);
-                if (seekDuringPlay) {
-                    startVideoPlayback();
-                }
-            });
-
             float percentage = progress / 100f;
             int position = Math.round(percentage * mVideoView.getDuration());
             videoSeekTo(position);
@@ -332,14 +407,23 @@
 
     @Override
     public void onStartTrackingTouch(SeekBar seekBar) {
-        cancelFadeAwayAnimation();
+        showAndMaybeHideVideoControls(/* animateIn= */ false, FadeOut.NO_FADE_OUT);
+        if (mVideoView.isPlaying()) {
+            stopVideoPlayback();
+            mSeekDuringPlayback = true;
+        }
         mFastForwardMessage.setVisibility(View.VISIBLE);
         mLargePlayButton.setVisibility(View.GONE);
     }
 
     @Override
     public void onStopTrackingTouch(SeekBar seekBar) {
-        fadeAwayVideoControls();
+        fadeAwayVideoControls(
+                mSeekDuringPlayback ? FadeOut.FADE_OUT_PLAY_QUICKLY : FadeOut.FADE_OUT_ALL_SLOWLY);
+        if (mSeekDuringPlayback) {
+            startVideoPlayback();
+            mSeekDuringPlayback = false;
+        }
         mFastForwardMessage.setVisibility(View.GONE);
         mLargePlayButton.setVisibility(View.VISIBLE);
     }
@@ -353,48 +437,178 @@
         }
     }
 
-    private void showOverlayControls(boolean animateAway) {
-        cancelFadeAwayAnimation();
-
-        if (animateAway && mVideoView.isPlaying()) {
-            fadeAwayVideoControls();
-            startPlaybackMonitor();
-        }
+    private int scaledTiming(int timespan) {
+        return sShortAnimationTimesForTesting ? timespan / 10 : timespan;
     }
 
-    private void fadeAwayVideoControls() {
-        mVideoOverlayContainer.animate()
+    private void fadeAwayVideoControls(@FadeOut int fadeOutType) {
+        if (fadeOutType == FadeOut.NO_FADE_OUT) {
+            return;
+        }
+
+        mVideoControls.animate().cancel();
+        mVideoControlsGradient.animate().cancel();
+        mLargePlayButton.animate().cancel();
+
+        int delay = fadeOutType != FadeOut.FADE_OUT_ALL_QUICKLY ? OVERLAY_FADE_OUT_DELAY_MS : 0;
+        mVideoControlsGradient.animate()
                 .alpha(0.0f)
-                .setStartDelay(3000)
-                .setDuration(1000)
+                .setStartDelay(scaledTiming(delay))
+                .setDuration(scaledTiming(OVERLAY_SCRIM_FADE_OUT_DURATION_MS));
+
+        mVideoControls.animate()
+                .alpha(0.0f)
+                .setStartDelay(scaledTiming(delay))
+                .setDuration(scaledTiming(OVERLAY_CONTROLS_FADE_OUT_DURATION_MS))
                 .setListener(new Animator.AnimatorListener() {
                     @Override
-                    public void onAnimationStart(Animator animation) {}
+                    public void onAnimationStart(Animator animation) {
+                        notifyTestOfAnimationStart(mVideoControls);
+                    }
 
                     @Override
                     public void onAnimationEnd(Animator animation) {
                         enableClickableButtons(false);
                         stopPlaybackMonitor();
+
+                        notifyTestOfAnimationEnd(mVideoControls);
                     }
 
                     @Override
-                    public void onAnimationCancel(Animator animation) {}
+                    public void onAnimationCancel(Animator animation) {
+                        notifyTestOfAnimationCancel(mVideoControls);
+                    }
+
+                    @Override
+                    public void onAnimationRepeat(Animator animation) {}
+                });
+
+        int animationDelay = 0;
+        if (fadeOutType != FadeOut.FADE_OUT_ALL_QUICKLY) {
+            animationDelay = fadeOutType == FadeOut.FADE_OUT_PLAY_QUICKLY
+                    ? PLAY_BUTTON_FADE_OUT_DELAY_MS
+                    : OVERLAY_FADE_OUT_DELAY_MS;
+        }
+
+        mLargePlayButton.animate()
+                .alpha(0.0f)
+                .setStartDelay(scaledTiming(animationDelay))
+                .setDuration(scaledTiming(PLAY_BUTTON_FADE_OUT_DURATION_MS))
+                .setListener(new Animator.AnimatorListener() {
+                    @Override
+                    public void onAnimationStart(Animator animation) {
+                        // The Play button is always the first control to fade away, and any click
+                        // after that point should be considered a request to cancel fading away.
+                        // Therefore this is a good time to flip this to false.
+                        mOverlayControlsShowing = false;
+
+                        notifyTestOfAnimationStart(mLargePlayButton);
+                    }
+
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        mLargePlayButton.setClickable(false);
+
+                        notifyTestOfAnimationEnd(mLargePlayButton);
+                    }
+
+                    @Override
+                    public void onAnimationCancel(Animator animation) {
+                        notifyTestOfAnimationCancel(mLargePlayButton);
+                    }
 
                     @Override
                     public void onAnimationRepeat(Animator animation) {}
                 });
     }
 
-    private void cancelFadeAwayAnimation() {
-        // Canceling the animation will leave the alpha in the state it had reached while animating,
-        // so we need to explicitly set the alpha to 1.0 to reset it.
-        mVideoOverlayContainer.animate().cancel();
-        mVideoOverlayContainer.setAlpha(1.0f);
-        enableClickableButtons(true);
+    /**
+     * Shows video controls overlaid on top of the video. The controls can optionally be faded in
+     * and out of view.
+     * @param animateIn True if the overlay controls should animate into view.
+     * @param fadeOutType Whether and how to animate the controls out of view. If fadeOutType is
+              NO_FADE_OUT the controls will remain on screen once the function is done.
+     */
+    private void showAndMaybeHideVideoControls(boolean animateIn, @FadeOut int fadeOutType) {
+        mVideoControls.animate().cancel();
+        mVideoControlsGradient.animate().cancel();
+        mLargePlayButton.animate().cancel();
+
+        if (mVideoView.isPlaying()) {
+            startPlaybackMonitor();
+        }
+
+        mOverlayControlsShowing = true;
+        if (!animateIn) {
+            mVideoControls.setAlpha(1.0f);
+            mVideoControlsGradient.setAlpha(1.0f);
+            mLargePlayButton.setAlpha(1.0f);
+
+            enableClickableButtons(true);
+            mLargePlayButton.setClickable(true);
+            fadeAwayVideoControls(fadeOutType);
+        } else {
+            mVideoControlsGradient.animate().alpha(1.0f).setStartDelay(0).setDuration(
+                    scaledTiming(OVERLAY_SCRIM_FADE_IN_DURATION_MS));
+
+            mVideoControls.animate()
+                    .alpha(1.0f)
+                    .setStartDelay(0)
+                    .setDuration(scaledTiming(OVERLAY_CONTROLS_FADE_IN_DURATION_MS))
+                    .setListener(new Animator.AnimatorListener() {
+                        @Override
+                        public void onAnimationStart(Animator animation) {
+                            notifyTestOfAnimationStart(mVideoControls);
+                        }
+
+                        @Override
+                        public void onAnimationEnd(Animator animation) {
+                            enableClickableButtons(true);
+                            // After animating the controls into view, start a timer for fading them
+                            // out again, if needed.
+                            fadeAwayVideoControls(fadeOutType);
+
+                            notifyTestOfAnimationEnd(mVideoControls);
+                        }
+
+                        @Override
+                        public void onAnimationCancel(Animator animation) {
+                            notifyTestOfAnimationCancel(mVideoControls);
+                        }
+
+                        @Override
+                        public void onAnimationRepeat(Animator animation) {}
+                    });
+
+            mLargePlayButton.animate()
+                    .alpha(1.0f)
+                    .setStartDelay(0)
+                    .setDuration(scaledTiming(PLAY_BUTTON_FADE_IN_DURATION_MS))
+                    .setListener(new Animator.AnimatorListener() {
+                        @Override
+                        public void onAnimationStart(Animator animation) {
+                            notifyTestOfAnimationStart(mLargePlayButton);
+                        }
+
+                        @Override
+                        public void onAnimationEnd(Animator animation) {
+                            mLargePlayButton.setClickable(true);
+
+                            notifyTestOfAnimationEnd(mLargePlayButton);
+                        }
+
+                        @Override
+                        public void onAnimationCancel(Animator animation) {
+                            notifyTestOfAnimationCancel(mLargePlayButton);
+                        }
+
+                        @Override
+                        public void onAnimationRepeat(Animator animation) {}
+                    });
+        }
     }
 
     private void enableClickableButtons(boolean enable) {
-        mLargePlayButton.setClickable(enable);
         mMuteButton.setClickable(enable);
         mFullscreenButton.setClickable(enable);
     }
@@ -429,7 +643,7 @@
     private void startVideoPlayback() {
         mMediaPlayer.start();
         switchToPauseButton();
-        showOverlayControls(/*animateAway=*/true);
+        showAndMaybeHideVideoControls(/* animateIn= */ false, FadeOut.FADE_OUT_PLAY_QUICKLY);
     }
 
     private void stopVideoPlayback() {
@@ -437,7 +651,7 @@
 
         mMediaPlayer.pause();
         switchToPlayButton();
-        showOverlayControls(/*animateAway=*/false);
+        showAndMaybeHideVideoControls(/* animateIn= */ false, FadeOut.NO_FADE_OUT);
     }
 
     private void toggleVideoPlayback() {
@@ -534,4 +748,38 @@
     public static void setProgressCallback(VideoPlaybackStatusCallback callback) {
         sProgressCallback = callback;
     }
+
+    /** Sets whether to use shorter timeouts and durations. For testing use only. */
+    @VisibleForTesting
+    public static void setShortAnimationTimesForTesting(boolean value) {
+        sShortAnimationTimesForTesting = value;
+    }
+
+    @VisibleForTesting
+    public void singleTapForTesting() {
+        onSingleTapVideo();
+    }
+
+    @VisibleForTesting
+    public void doubleTapForTesting(float x) {
+        onDoubleTapVideo(x);
+    }
+
+    public void notifyTestOfAnimationStart(View view) {
+        if (sProgressCallback != null) {
+            sProgressCallback.onAnimationStart(view.getId(), view.getAlpha());
+        }
+    }
+
+    public void notifyTestOfAnimationEnd(View view) {
+        if (sProgressCallback != null) {
+            sProgressCallback.onAnimationEnd(view.getId(), view.getAlpha());
+        }
+    }
+
+    public void notifyTestOfAnimationCancel(View view) {
+        if (sProgressCallback != null) {
+            sProgressCallback.onAnimationCancel(view.getId(), view.getAlpha());
+        }
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java
index da252b5..a314b0f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java
@@ -14,6 +14,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.core.app.ActivityOptionsCompat;
 
@@ -102,6 +103,8 @@
 
     /** Input submitted before before the native library was loaded. */
     private String mQueuedUrl;
+    private String mQueuedPostDataType;
+    private byte[] mQueuedPostData;
 
     /** The View that represents the search box. */
     private SearchActivityLocationBarLayout mSearchBox;
@@ -273,7 +276,7 @@
         assert !mIsActivityUsable
                 : "finishDeferredInitialization() incorrectly called multiple times";
         mIsActivityUsable = true;
-        if (mQueuedUrl != null) loadUrl(mQueuedUrl);
+        if (mQueuedUrl != null) loadUrl(mQueuedUrl, mQueuedPostDataType, mQueuedPostData);
 
         // TODO(tedchoc): Warmup triggers the CustomTab layout to be inflated, but this widget
         //                will navigate to Tabbed mode.  Investigate whether this can inflate
@@ -327,23 +330,18 @@
     }
 
     @Override
-    public void loadUrl(String url) {
+    public void loadUrl(String url, @Nullable String postDataType, @Nullable byte[] postData) {
         // Wait until native has loaded.
         if (!mIsActivityUsable) {
             mQueuedUrl = url;
+            mQueuedPostDataType = postDataType;
+            mQueuedPostData = postData;
             return;
         }
 
-        // Don't do anything if the input was empty. This is done after the native check to prevent
-        // resending a queued query after the user deleted it.
-        if (TextUtils.isEmpty(url)) return;
+        Intent intent = createIntentForStartActivity(url, postDataType, postData);
+        if (intent == null) return;
 
-        // Fix up the URL and send it to the full browser.
-        GURL fixedUrl = UrlFormatter.fixupUrl(url);
-        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(fixedUrl.getValidSpecOrEmpty()));
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
-        intent.setClass(this, ChromeLauncherActivity.class);
-        IntentHandler.addTrustedIntentExtras(intent);
         IntentUtils.safeStartActivity(this, intent,
                 ActivityOptionsCompat
                         .makeCustomAnimation(this, android.R.anim.fade_in, android.R.anim.fade_out)
@@ -352,6 +350,35 @@
         finish();
     }
 
+    /**
+     * Creates an intent that will be used to launch Chrome.
+     *
+     * @param url The URL to be loaded.
+     * @param postDataType   postData type.
+     * @param postData       Post-data to include in the tab URL's request body, ex. bitmap when
+     *         image search.
+     * @return the intent will be passed to ChromeLauncherActivity, null if input was emprty.
+     */
+    private Intent createIntentForStartActivity(
+            String url, @Nullable String postDataType, @Nullable byte[] postData) {
+        // Don't do anything if the input was empty. This is done after the native check to prevent
+        // resending a queued query after the user deleted it.
+        if (TextUtils.isEmpty(url)) return null;
+
+        // Fix up the URL and send it to the full browser.
+        GURL fixedUrl = UrlFormatter.fixupUrl(url);
+        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(fixedUrl.getValidSpecOrEmpty()));
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+        intent.setClass(this, ChromeLauncherActivity.class);
+        if (!TextUtils.isEmpty(postDataType) && postData != null && postData.length != 0) {
+            intent.putExtra(IntentHandler.EXTRA_POST_DATA_TYPE, postDataType);
+            intent.putExtra(IntentHandler.EXTRA_POST_DATA, postData);
+        }
+        IntentHandler.addTrustedIntentExtras(intent);
+
+        return intent;
+    }
+
     private ViewGroup createContentView() {
         assert mContentView == null;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java
index 91d90677..076bbeb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java
@@ -28,7 +28,7 @@
     /** Delegates calls out to the containing Activity. */
     public static interface Delegate {
         /** Load a URL in the associated tab. */
-        void loadUrl(String url);
+        void loadUrl(String url, @Nullable String postDataType, @Nullable byte[] postData);
 
         /** The user hit the back button. */
         void backKeyPressed();
@@ -56,8 +56,9 @@
     }
 
     @Override
-    public void loadUrl(String url, int transition, long inputStart) {
-        mDelegate.loadUrl(url);
+    public void loadUrlWithPostData(String url, int transition, long inputStart,
+            @Nullable String postDataType, @Nullable byte[] postData) {
+        mDelegate.loadUrl(url, postDataType, postData);
         LocaleManager.getInstance().recordLocaleBasedSearchMetrics(true, url, transition);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProvider.java
index ec9c22ef..42074ce 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProvider.java
@@ -21,7 +21,7 @@
 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
 import org.chromium.chrome.browser.printing.TabPrinter;
 import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity;
-import org.chromium.chrome.browser.share.ShareSheetCoordinator.ContentType;
+import org.chromium.chrome.browser.share.ShareSheetPropertyModelBuilder.ContentType;
 import org.chromium.chrome.browser.share.qrcode.QrCodeCoordinator;
 import org.chromium.chrome.browser.share.screenshot.ScreenshotCoordinator;
 import org.chromium.chrome.browser.tab.Tab;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeShareExtras.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeShareExtras.java
index f3495c793..27b8d1c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeShareExtras.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ChromeShareExtras.java
@@ -26,9 +26,16 @@
      */
     private final boolean mShareDirectly;
 
-    public ChromeShareExtras(boolean saveLastUsed, boolean shareDirectly) {
+    /**
+     * Whether the URL is of the current visible page.
+     */
+    private final boolean mIsUrlOfVisiblePage;
+
+    private ChromeShareExtras(
+            boolean saveLastUsed, boolean shareDirectly, boolean isUrlOfVisiblePage) {
         mSaveLastUsed = saveLastUsed;
         mShareDirectly = shareDirectly;
+        mIsUrlOfVisiblePage = isUrlOfVisiblePage;
     }
 
     /**
@@ -45,4 +52,49 @@
     public boolean shareDirectly() {
         return mShareDirectly;
     }
+
+    /**
+     * @return Whether the URL is of the current visible page.
+     */
+    public boolean isUrlOfVisiblePage() {
+        return mIsUrlOfVisiblePage;
+    }
+
+    /**
+     * The builder for {@link ChromeShareExtras} objects.
+     */
+    public static class Builder {
+        private boolean mSaveLastUsed;
+        private boolean mShareDirectly;
+        private boolean mIsUrlOfVisiblePage;
+
+        /**
+         * Sets whether to save the chosen activity for future direct sharing.
+         */
+        public Builder setSaveLastUsed(boolean saveLastUsed) {
+            mSaveLastUsed = saveLastUsed;
+            return this;
+        }
+
+        /**
+         * Sets whether it should share directly with the activity that was most recently used to
+         * share.
+         */
+        public Builder setShareDirectly(boolean shareDirectly) {
+            mShareDirectly = shareDirectly;
+            return this;
+        }
+
+        /**
+         * Sets whether the URL is of the current visible page.
+         */
+        public Builder setIsUrlOfVisiblePage(boolean isUrlOfVisiblePage) {
+            mIsUrlOfVisiblePage = isUrlOfVisiblePage;
+            return this;
+        }
+
+        public ChromeShareExtras build() {
+            return new ChromeShareExtras(mSaveLastUsed, mShareDirectly, mIsUrlOfVisiblePage);
+        }
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java
index 1fc4d7cd..4c4fab38 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java
@@ -53,9 +53,9 @@
     /**
      * Constructs a new {@link ShareDelegateImpl}.
      *
-     * @param controller  The BottomSheetController for the current activity.
+     * @param controller The BottomSheetController for the current activity.
      * @param tabProvider Supplier for the current activity tab.
-     * @param delegate    The ShareSheetDelegate for the current activity.
+     * @param delegate The ShareSheetDelegate for the current activity.
      */
     public ShareDelegateImpl(BottomSheetController controller, Supplier<Tab> tabProvider,
             ShareSheetDelegate delegate) {
@@ -88,8 +88,8 @@
      * This creates and shows a share intent picker dialog or starts a share intent directly.
      *
      * @param shareDirectly Whether it should share directly with the activity that was most
-     *                      recently used to share.
-     * @param isIncognito   Whether currentTab is incognito.
+     * recently used to share.
+     * @param isIncognito Whether currentTab is incognito.
      */
     private void onShareSelected(
             Activity activity, Tab currentTab, boolean shareDirectly, boolean isIncognito) {
@@ -118,7 +118,7 @@
         triggerShare(currentTab, shareDirectly, isIncognito);
     }
 
-    protected void triggerShare(
+    private void triggerShare(
             final Tab currentTab, final boolean shareDirectly, boolean isIncognito) {
         ScreenshotTabObserver tabObserver = ScreenshotTabObserver.from(currentTab);
         if (tabObserver != null) {
@@ -128,7 +128,7 @@
 
         OfflinePageUtils.maybeShareOfflinePage(currentTab, (ShareParams p) -> {
             if (p != null) {
-                share(p, new ChromeShareExtras(/*saveLastUsed=*/false, /*shareDirectly=*/false));
+                share(p, new ChromeShareExtras.Builder().setIsUrlOfVisiblePage(true).build());
             } else {
                 WindowAndroid window = currentTab.getWindowAndroid();
                 // Could not share as an offline page.
@@ -165,7 +165,12 @@
         ShareParams.Builder builder =
                 new ShareParams.Builder(window, title, getUrlToShare(visibleUrl, canonicalUrl))
                         .setScreenshotUri(blockingUri);
-        share(builder.build(), new ChromeShareExtras(!shareDirectly, shareDirectly));
+        share(builder.build(),
+                new ChromeShareExtras.Builder()
+                        .setSaveLastUsed(!shareDirectly)
+                        .setShareDirectly(shareDirectly)
+                        .setIsUrlOfVisiblePage(true)
+                        .build());
         if (shareDirectly) {
             RecordUserAction.record("MobileMenuDirectShare");
         } else {
@@ -268,8 +273,7 @@
                                         ContextUtils.getApplicationContext().getPackageManager()),
                                 PrefServiceBridge.getInstance());
                 // TODO(crbug/1009124): open custom share sheet.
-                coordinator.showShareSheet(
-                        params, chromeShareExtras.saveLastUsed(), shareStartTime);
+                coordinator.showShareSheet(params, chromeShareExtras, shareStartTime);
             } else {
                 ShareHelper.showDefaultShareUi(params, chromeShareExtras.saveLastUsed());
             }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java
index 9a58aa7..66546ba 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java
@@ -6,7 +6,6 @@
 
 import android.app.Activity;
 
-import androidx.annotation.IntDef;
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.content.res.AppCompatResources;
 
@@ -20,12 +19,9 @@
 import org.chromium.components.browser_ui.share.ShareParams;
 import org.chromium.ui.modelutil.PropertyModel;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Coordinator for displaying the share sheet.
@@ -41,11 +37,11 @@
     /**
      * Constructs a new ShareSheetCoordinator.
      *
-     * @param controller        The {@link BottomSheetController} for the current activity.
-     * @param tabProvider       Supplier for the current activity tab.
-     * @param modelBuilder      The {@link ShareSheetPropertyModelBuilder} for the share sheet.
+     * @param controller The {@link BottomSheetController} for the current activity.
+     * @param tabProvider Supplier for the current activity tab.
+     * @param modelBuilder The {@link ShareSheetPropertyModelBuilder} for the share sheet.
      * @param prefServiceBridge The {@link PrefServiceBridge} singleton. This provides preferences
-     *                          for the Chrome-provided property models.
+     * for the Chrome-provided property models.
      */
     ShareSheetCoordinator(BottomSheetController controller, Supplier<Tab> tabProvider,
             ShareSheetPropertyModelBuilder modelBuilder, PrefServiceBridge prefServiceBridge) {
@@ -56,7 +52,8 @@
         mPrefServiceBridge = prefServiceBridge;
     }
 
-    void showShareSheet(ShareParams params, boolean saveLastUsed, long shareStartTime) {
+    void showShareSheet(
+            ShareParams params, ChromeShareExtras chromeShareExtras, long shareStartTime) {
         Activity activity = params.getWindow().getActivity().get();
         if (activity == null) {
             return;
@@ -66,9 +63,11 @@
 
         mShareStartTime = shareStartTime;
         List<PropertyModel> chromeFeatures =
-                createTopRowPropertyModels(bottomSheet, activity, params);
-        List<PropertyModel> thirdPartyApps =
-                createBottomRowPropertyModels(bottomSheet, activity, params, saveLastUsed);
+                createTopRowPropertyModels(bottomSheet, activity, params,
+                        ShareSheetPropertyModelBuilder.getContentTypes(
+                                params, chromeShareExtras.isUrlOfVisiblePage()));
+        List<PropertyModel> thirdPartyApps = createBottomRowPropertyModels(
+                bottomSheet, activity, params, chromeShareExtras.saveLastUsed());
 
         bottomSheet.createRecyclerViews(chromeFeatures, thirdPartyApps);
 
@@ -82,13 +81,13 @@
 
     // Used by first party features to share with only non-chrome apps.
     protected void showThirdPartyShareSheet(
-            ShareParams params, boolean saveLastUsed, long shareStartTime) {
+            ShareParams params, ChromeShareExtras chromeShareExtras, long shareStartTime) {
         mExcludeFirstParty = true;
-        showShareSheet(params, saveLastUsed, shareStartTime);
+        showShareSheet(params, chromeShareExtras, shareStartTime);
     }
 
-    List<PropertyModel> createTopRowPropertyModels(
-            ShareSheetBottomSheetContent bottomSheet, Activity activity, ShareParams shareParams) {
+    List<PropertyModel> createTopRowPropertyModels(ShareSheetBottomSheetContent bottomSheet,
+            Activity activity, ShareParams shareParams, Set<Integer> contentTypes) {
         if (mExcludeFirstParty) {
             return new ArrayList<>();
         }
@@ -96,9 +95,8 @@
                 new ChromeProvidedSharingOptionsProvider(activity, mTabProvider,
                         mBottomSheetController, bottomSheet, mPrefServiceBridge, shareParams,
                         mShareStartTime);
-        return chromeProvidedSharingOptionsProvider.createPropertyModels(new HashSet<>(
-                Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE,
-                        ContentType.TEXT, ContentType.IMAGE, ContentType.OTHER_FILE_TYPE)));
+
+        return chromeProvidedSharingOptionsProvider.createPropertyModels(contentTypes);
     }
 
     @VisibleForTesting
@@ -126,15 +124,4 @@
     protected void disableFirstPartyFeaturesForTesting() {
         mExcludeFirstParty = true;
     }
-
-    @IntDef({ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.TEXT,
-            ContentType.IMAGE, ContentType.OTHER_FILE_TYPE})
-    @Retention(RetentionPolicy.SOURCE)
-    @interface ContentType {
-        int LINK_PAGE_VISIBLE = 0;
-        int LINK_PAGE_NOT_VISIBLE = 1;
-        int TEXT = 2;
-        int IMAGE = 3;
-        int OTHER_FILE_TYPE = 4;
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java
index de4ebcc2..269ef4a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java
@@ -10,8 +10,11 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
 import android.view.View.OnClickListener;
 
+import androidx.annotation.IntDef;
+
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -19,9 +22,13 @@
 import org.chromium.components.browser_ui.share.ShareParams;
 import org.chromium.ui.modelutil.PropertyModel;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Handles displaying the share sheet. The version used depends on several
@@ -31,10 +38,25 @@
  * #chrome-sharing-hub enabled: custom share sheet
  */
 class ShareSheetPropertyModelBuilder {
-    private final BottomSheetController mBottomSheetController;
-    private final PackageManager mPackageManager;
-    private static final int MAX_NUM_APPS = 7;
+    @IntDef({ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.TEXT,
+            ContentType.IMAGE, ContentType.OTHER_FILE_TYPE})
+    @Retention(RetentionPolicy.SOURCE)
+    @interface ContentType {
+        int LINK_PAGE_VISIBLE = 0;
+        int LINK_PAGE_NOT_VISIBLE = 1;
+        int TEXT = 2;
+        int IMAGE = 3;
+        int OTHER_FILE_TYPE = 4;
+    }
 
+    private static final int MAX_NUM_APPS = 7;
+    private static final String IMAGE_TYPE = "image/";
+    // Variations parameter name for the comma-separated list of third-party activity names.
+    private static final String PARAM_SHARING_HUB_THIRD_PARTY_APPS = "sharing-hub-third-party-apps";
+
+    static final HashSet<Integer> ALL_CONTENT_TYPES = new HashSet<>(
+            Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE,
+                    ContentType.TEXT, ContentType.IMAGE, ContentType.OTHER_FILE_TYPE));
     private static final ArrayList<String> FALLBACK_ACTIVITIES =
             new ArrayList(Arrays.asList("com.whatsapp.ContactPicker",
                     "com.facebook.composer.shareintent.ImplicitShareIntentHandlerDefaultAlias",
@@ -52,8 +74,8 @@
                     "com.yahoo.mail.ui.activities.ComposeActivity",
                     "org.telegram.ui.LaunchActivity", "com.tencent.mm.ui.tools.ShareImgUI"));
 
-    /** Variations parameter name for the comma-separated list of third-party activity names. */
-    private static final String PARAM_SHARING_HUB_THIRD_PARTY_APPS = "sharing-hub-third-party-apps";
+    private final BottomSheetController mBottomSheetController;
+    private final PackageManager mPackageManager;
 
     ShareSheetPropertyModelBuilder(
             BottomSheetController bottomSheetController, PackageManager packageManager) {
@@ -61,6 +83,48 @@
         mPackageManager = packageManager;
     }
 
+    /**
+     * Returns a set of {@link ShareSheetCoordinator.ContentType}s for the current share.
+     *
+     * <p>If {@link ChromeFeatureList.CHROME_SHARING_HUB_V15} is not enabled, this returns a set of
+     * all of the {@link ContentType}s. Otherwise, it adds {@link ContentType}s according to the
+     * following logic:
+     *
+     * <ul>
+     *     <li>If a URL is present, {@code isUrlOfVisiblePage} determines whether to add
+     *     {@link ContentType.LINK_PAGE_VISIBLE} or {@link ContentType.LINK_PAGE_NOT_VISIBLE}.
+     *     <li>If the text being shared is not the same as the URL, add {@link ContentType.TEXT}
+     *     <li>If the share contains files and the {@code fileContentType} is an image, add
+     *     {@link ContentType.IMAGE}. Otherwise, add {@link ContentType.OTHER_FILE_TYPE}.
+     * </ul>
+     */
+    static Set<Integer> getContentTypes(ShareParams params, boolean isUrlOfVisiblePage) {
+        if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)) {
+            return ALL_CONTENT_TYPES;
+        }
+        Set<Integer> contentTypes = new HashSet<>();
+        if (!TextUtils.isEmpty(params.getUrl())) {
+            if (isUrlOfVisiblePage) {
+                contentTypes.add(ContentType.LINK_PAGE_VISIBLE);
+            } else {
+                contentTypes.add(ContentType.LINK_PAGE_NOT_VISIBLE);
+            }
+        }
+        if (!TextUtils.isEmpty(params.getText())
+                && !TextUtils.equals(params.getUrl(), params.getText())) {
+            contentTypes.add(ContentType.TEXT);
+        }
+        if (params.getFileUris() != null) {
+            if (!TextUtils.isEmpty(params.getFileContentType())
+                    && params.getFileContentType().startsWith(IMAGE_TYPE)) {
+                contentTypes.add(ContentType.IMAGE);
+            } else {
+                contentTypes.add(ContentType.OTHER_FILE_TYPE);
+            }
+        }
+        return contentTypes;
+    }
+
     ArrayList<PropertyModel> selectThirdPartyApps(ShareSheetBottomSheetContent bottomSheet,
             ShareParams params, boolean saveLastUsed, long shareStartTime) {
         List<String> thirdPartyActivityNames = getThirdPartyActivityNames();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java
index b8af3d4..dc3fdca 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java
@@ -428,7 +428,7 @@
     private void runStateMachineAndSignin(boolean settingsClicked) {
         mConfirmSyncDataStateMachine = new ConfirmSyncDataStateMachine(
                 new ConfirmSyncDataStateMachineDelegate(getChildFragmentManager()),
-                PrefServiceBridge.getInstance().getString(Pref.SYNC_LAST_ACCOUNT_NAME),
+                PrefServiceBridge.getInstance().getString(Pref.GOOGLE_SERVICES_LAST_USERNAME),
                 mSelectedAccountName, new ConfirmSyncDataStateMachine.Listener() {
                     @Override
                     public void onConfirm(boolean wipeData) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoUtil.java
index 901e7f3d..bf2a598 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoUtil.java
@@ -40,7 +40,7 @@
         SigninPreferencesManager preferencesManager = SigninPreferencesManager.getInstance();
         int currentMajorVersion = ChromeVersionInfo.getProductMajorVersion();
         boolean wasSignedIn = TextUtils.isEmpty(
-                PrefServiceBridge.getInstance().getString(Pref.SYNC_LAST_ACCOUNT_NAME));
+                PrefServiceBridge.getInstance().getString(Pref.GOOGLE_SERVICES_LAST_USERNAME));
         List<String> accountNames = AccountUtils.toAccountNames(
                 AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts());
         Supplier<Set<String>> accountNamesSupplier = () -> new ArraySet<>(accountNames);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsMetrics.java
index 53b2d74..102041b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsMetrics.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsMetrics.java
@@ -54,7 +54,7 @@
      */
     public static void recordArticlesListVisible() {
         RecordHistogram.recordBooleanHistogram("NewTabPage.ContentSuggestions.ArticlesListVisible",
-                PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE));
+                PrefServiceBridge.getInstance().getBoolean(Pref.ARTICLES_LIST_VISIBLE));
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java
index 8d2759b1d..3b92d719 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java
@@ -165,8 +165,7 @@
             PostTask.postTask(UiThreadTaskTraits.DEFAULT,
                     this::updateLeakDetectionAndSafeBrowsingReportingPreferences);
         } else if (PREF_PASSWORD_LEAK_DETECTION.equals(key)) {
-            mPrefServiceBridge.setBoolean(
-                    Pref.PASSWORD_MANAGER_LEAK_DETECTION_ENABLED, (boolean) newValue);
+            mPrefServiceBridge.setBoolean(Pref.PASSWORD_LEAK_DETECTION_ENABLED, (boolean) newValue);
         } else if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
             SafeBrowsingBridge.setSafeBrowsingExtendedReportingEnabled((boolean) newValue);
         } else if (PREF_NAVIGATION_ERROR.equals(key)) {
@@ -224,7 +223,7 @@
 
         boolean has_token_for_leak_check = PasswordUIView.hasAccountForLeakCheckRequest();
         boolean leak_detection_enabled =
-                mPrefServiceBridge.getBoolean(Pref.PASSWORD_MANAGER_LEAK_DETECTION_ENABLED);
+                mPrefServiceBridge.getBoolean(Pref.PASSWORD_LEAK_DETECTION_ENABLED);
         boolean toggle_enabled = safe_browsing_enabled && has_token_for_leak_check;
 
         mPasswordLeakDetection.setEnabled(toggle_enabled);
@@ -254,8 +253,7 @@
                 return mPrefServiceBridge.isManagedPreference(Pref.SAFE_BROWSING_ENABLED);
             }
             if (PREF_PASSWORD_LEAK_DETECTION.equals(key)) {
-                return mPrefServiceBridge.isManagedPreference(
-                        Pref.PASSWORD_MANAGER_LEAK_DETECTION_ENABLED);
+                return mPrefServiceBridge.isManagedPreference(Pref.PASSWORD_LEAK_DETECTION_ENABLED);
             }
             if (PREF_USAGE_AND_CRASH_REPORTING.equals(key)) {
                 return PrivacyPreferencesManager.getInstance().isMetricsReportingManaged();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java
index 389cf6c..1539ea7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java
@@ -365,8 +365,7 @@
             PostTask.postTask(UiThreadTaskTraits.DEFAULT,
                     this::updateLeakDetectionAndSafeBrowsingReportingPreferences);
         } else if (PREF_PASSWORD_LEAK_DETECTION.equals(key)) {
-            mPrefServiceBridge.setBoolean(
-                    Pref.PASSWORD_MANAGER_LEAK_DETECTION_ENABLED, (boolean) newValue);
+            mPrefServiceBridge.setBoolean(Pref.PASSWORD_LEAK_DETECTION_ENABLED, (boolean) newValue);
         } else if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
             SafeBrowsingBridge.setSafeBrowsingExtendedReportingEnabled((boolean) newValue);
         } else if (PREF_NAVIGATION_ERROR.equals(key)) {
@@ -621,7 +620,7 @@
 
         boolean has_token_for_leak_check = PasswordUIView.hasAccountForLeakCheckRequest();
         boolean leak_detection_enabled =
-                mPrefServiceBridge.getBoolean(Pref.PASSWORD_MANAGER_LEAK_DETECTION_ENABLED);
+                mPrefServiceBridge.getBoolean(Pref.PASSWORD_LEAK_DETECTION_ENABLED);
         boolean toggle_enabled = safe_browsing_enabled && has_token_for_leak_check;
 
         mPasswordLeakDetection.setEnabled(toggle_enabled);
@@ -651,8 +650,7 @@
                 return mPrefServiceBridge.isManagedPreference(Pref.SAFE_BROWSING_ENABLED);
             }
             if (PREF_PASSWORD_LEAK_DETECTION.equals(key)) {
-                return mPrefServiceBridge.isManagedPreference(
-                        Pref.PASSWORD_MANAGER_LEAK_DETECTION_ENABLED);
+                return mPrefServiceBridge.isManagedPreference(Pref.PASSWORD_LEAK_DETECTION_ENABLED);
             }
             if (PREF_USAGE_AND_CRASH_REPORTING.equals(key)) {
                 return PrivacyPreferencesManager.getInstance().isMetricsReportingManaged();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
index 6df0102..df3928d6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -33,6 +33,7 @@
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.common.Referrer;
+import org.chromium.content_public.common.ResourceRequestBody;
 import org.chromium.ui.base.PageTransition;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.url.GURL;
@@ -298,8 +299,9 @@
      * @param intentTimestamp the time the intent was received.
      * @return the tab the URL was opened in, could be a new tab or a reused one.
      */
-    public Tab launchUrlFromExternalApp(String url, String referer, String headers,
-            String appId, boolean forceNewTab, Intent intent, long intentTimestamp) {
+    // TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome.
+    public Tab launchUrlFromExternalApp(String url, String referer, String headers, String appId,
+            boolean forceNewTab, Intent intent, long intentTimestamp) {
         assert !mIncognito;
         boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
 
@@ -309,11 +311,30 @@
             // reused either.
             LoadUrlParams loadUrlParams = new LoadUrlParams(url);
             loadUrlParams.setIntentReceivedTimestamp(intentTimestamp);
-            loadUrlParams.setVerbatimHeaders(headers);
             if (referer != null) {
                 loadUrlParams.setReferrer(
                         new Referrer(referer, IntentHandler.getReferrerPolicyFromIntent(intent)));
             }
+            // Handle post data case.
+            if (IntentHandler.wasIntentSenderChrome(intent)) {
+                String postDataType =
+                        IntentUtils.safeGetStringExtra(intent, IntentHandler.EXTRA_POST_DATA_TYPE);
+                byte[] postData =
+                        IntentUtils.safeGetByteArrayExtra(intent, IntentHandler.EXTRA_POST_DATA);
+                if (!TextUtils.isEmpty(postDataType) && postData != null && postData.length != 0) {
+                    StringBuilder appendToHeader = new StringBuilder();
+                    appendToHeader.append("Content-Type: ");
+                    appendToHeader.append(postDataType);
+                    if (TextUtils.isEmpty(headers)) {
+                        headers = appendToHeader.toString();
+                    } else {
+                        headers = headers + "\r\n" + appendToHeader.toString();
+                    }
+
+                    loadUrlParams.setPostData(ResourceRequestBody.createFromBytes(postData));
+                }
+            }
+            loadUrlParams.setVerbatimHeaders(headers);
             return createNewTab(loadUrlParams, TabLaunchType.FROM_EXTERNAL_APP, null, intent);
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java b/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java
index 2d9a9eaa..c77f1ac 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java
@@ -8,11 +8,14 @@
 
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tabmodel.TabModelObserver;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.tasks.ConditionalTabStripUtils;
+import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
 import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
 import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
@@ -53,15 +56,26 @@
      * @param context The {@link Context} in which snackbar is shown.
      * @param selector The {@link TabModelSelector} that will be used to commit and undo tab
      *                 closures.
-     * @param snackbarManagable The holder class to get the manager that helps to show up snackbar.
+     * @param snackbarManageable The holder class to get the manager that helps to show up snackbar.
+     * @param overviewModeBehavior The {@link OverviewModeBehavior} to help check whether the
+     *         overview is showing or not.
      */
     public UndoBarController(Context context, TabModelSelector selector,
-            SnackbarManager.SnackbarManageable snackbarManagable) {
-        mSnackbarManagable = snackbarManagable;
+            SnackbarManager.SnackbarManageable snackbarManageable,
+            OverviewModeBehavior overviewModeBehavior) {
+        mSnackbarManagable = snackbarManageable;
         mTabModelSelector = selector;
         mContext = context;
         mTabModelObserver = new TabModelObserver() {
             private boolean disableUndo() {
+                // If the closure happens through conditional tab strip, show the undo snack bar
+                // regardless of whether accessibility mode is enabled.
+                if (TabUiFeatureUtilities.isConditionalTabStripEnabled()
+                        && ConditionalTabStripUtils.getFeatureStatus()
+                                == ConditionalTabStripUtils.FeatureStatus.ACTIVATED
+                        && !overviewModeBehavior.overviewVisible()) {
+                    return false;
+                }
                 return ChromeAccessibilityUtil.get().isAccessibilityEnabled()
                         || DeviceClassManager.enableAccessibilityLayout();
             }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImplementationFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImplementationFactory.java
index 23ce762..38e3f92 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImplementationFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImplementationFactory.java
@@ -34,8 +34,8 @@
             public void share(ShareParams params) {
                 ChromeActivity<?> activity =
                         (ChromeActivity<?>) params.getWindow().getActivity().get();
-                activity.getShareDelegateSupplier().get().share(params,
-                        new ChromeShareExtras(/*saveLastUsed=*/false, /*shareDirectly=*/false));
+                activity.getShareDelegateSupplier().get().share(
+                        params, new ChromeShareExtras.Builder().build());
             }
         };
 
diff --git a/chrome/android/javatests/DEPS b/chrome/android/javatests/DEPS
index 2a27204..430b355 100644
--- a/chrome/android/javatests/DEPS
+++ b/chrome/android/javatests/DEPS
@@ -2,6 +2,7 @@
   "+chrome/app",
   "+chrome/browser/android/lifecycle",
   "+chrome/browser/profiles/android/java",
+  "+chrome/browser/share/android/java",
   "+chrome/browser/tab/java",
   "+chrome/browser/thumbnail/generator/android/java",
   "+chrome/browser/ui/android/appmenu",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/AutoDownloadsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/AutoDownloadsTest.java
new file mode 100644
index 0000000..008d8322
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/AutoDownloadsTest.java
@@ -0,0 +1,94 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.download;
+
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.PathUtils;
+import org.chromium.base.test.util.CloseableOnMainThread;
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.download.DownloadTestRule.CustomMainActivityStart;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.permissions.PermissionTestRule;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.content_public.browser.test.util.Criteria;
+import org.chromium.content_public.browser.test.util.CriteriaHelper;
+import org.chromium.net.test.EmbeddedTestServer;
+import org.chromium.ui.modaldialog.ModalDialogManager;
+import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType;
+
+import java.util.ArrayList;
+
+/**
+ * Test suite for multiple downloads permissions requests.
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+public class AutoDownloadsTest implements CustomMainActivityStart {
+    @Rule
+    public DownloadTestRule mDownloadTestRule = new DownloadTestRule(this);
+
+    private static final String TEST_FILE =
+            "/content/test/data/android/auto_downloads_permissions.html";
+    private EmbeddedTestServer mTestServer;
+
+    @Override
+    public void customMainActivityStart() throws InterruptedException {
+        mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
+
+        mDownloadTestRule.startMainActivityOnBlankPage();
+    }
+
+    @After
+    public void tearDown() {
+        mDownloadTestRule.deleteFilesInDownloadDirectory(
+                new String[] {"test-image0.png", "test-image1.png"});
+    }
+
+    private void waitForDownloadDialog(ModalDialogManager manager) {
+        CriteriaHelper.pollUiThread(new Criteria("Dialog not displayed.") {
+            @Override
+            public boolean isSatisfied() {
+                return manager.isShowing()
+                        && manager.getPresenterForTest(ModalDialogType.APP)
+                        == manager.getCurrentPresenterForTest();
+            }
+        });
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"AutoDownloads"})
+    public void testAutoDownloadsDialog() throws Exception {
+        try (CloseableOnMainThread ignored = CloseableOnMainThread.StrictMode.allowDiskWrites()) {
+            ArrayList<DirectoryOption> dirOptions = new ArrayList<>();
+            dirOptions.add(new DirectoryOption("Download", PathUtils.getExternalStorageDirectory(),
+                    1024000, 1024000, DirectoryOption.DownloadLocationDirectoryType.DEFAULT));
+            DownloadDirectoryProvider.getInstance().setDirectoryProviderForTesting(
+                    new TestDownloadDirectoryProvider(dirOptions));
+        }
+
+        mDownloadTestRule.loadUrl(mTestServer.getURL(TEST_FILE));
+        ChromeActivity activity = mDownloadTestRule.getActivity();
+
+        // Wait for "multiple downloads" permission dialog and allow.
+        PermissionTestRule.waitForDialog(activity);
+        PermissionTestRule.replyToDialog(true, activity);
+
+        int currentCallCount = mDownloadTestRule.getChromeDownloadCallCount();
+        Assert.assertTrue(mDownloadTestRule.waitForChromeDownloadToFinish(currentCallCount));
+        Assert.assertTrue(mDownloadTestRule.hasDownload("test-image0.png", null));
+        Assert.assertTrue(mDownloadTestRule.hasDownload("test-image1.png", null));
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java
index b05538f..4ba3dd4 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java
@@ -561,7 +561,7 @@
     @Feature({"Preferences"})
     public void testSavePasswordsSwitch() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            PrefServiceBridge.getInstance().setBoolean(Pref.REMEMBER_PASSWORDS_ENABLED, true);
+            PrefServiceBridge.getInstance().setBoolean(Pref.CREDENTIALS_ENABLE_SERVICE, true);
         });
 
         final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity();
@@ -575,14 +575,14 @@
 
             onOffSwitch.performClick();
             Assert.assertFalse(
-                    PrefServiceBridge.getInstance().getBoolean(Pref.REMEMBER_PASSWORDS_ENABLED));
+                    PrefServiceBridge.getInstance().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE));
             onOffSwitch.performClick();
             Assert.assertTrue(
-                    PrefServiceBridge.getInstance().getBoolean(Pref.REMEMBER_PASSWORDS_ENABLED));
+                    PrefServiceBridge.getInstance().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE));
 
             settingsActivity.finish();
 
-            PrefServiceBridge.getInstance().setBoolean(Pref.REMEMBER_PASSWORDS_ENABLED, false);
+            PrefServiceBridge.getInstance().setBoolean(Pref.CREDENTIALS_ENABLE_SERVICE, false);
         });
 
         mSettingsActivityTestRule.startSettingsActivity();
@@ -684,8 +684,7 @@
     @Feature({"Preferences"})
     public void testAutoSignInCheckbox() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            PrefServiceBridge.getInstance().setBoolean(
-                    Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED, true);
+            PrefServiceBridge.getInstance().setBoolean(Pref.CREDENTIALS_ENABLE_AUTOSIGNIN, true);
         });
 
         final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity();
@@ -698,16 +697,15 @@
             Assert.assertTrue(onOffSwitch.isChecked());
 
             onOffSwitch.performClick();
-            Assert.assertFalse(PrefServiceBridge.getInstance().getBoolean(
-                    Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED));
+            Assert.assertFalse(
+                    PrefServiceBridge.getInstance().getBoolean(Pref.CREDENTIALS_ENABLE_AUTOSIGNIN));
             onOffSwitch.performClick();
-            Assert.assertTrue(PrefServiceBridge.getInstance().getBoolean(
-                    Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED));
+            Assert.assertTrue(
+                    PrefServiceBridge.getInstance().getBoolean(Pref.CREDENTIALS_ENABLE_AUTOSIGNIN));
 
             settingsActivity.finish();
 
-            PrefServiceBridge.getInstance().setBoolean(
-                    Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED, false);
+            PrefServiceBridge.getInstance().setBoolean(Pref.CREDENTIALS_ENABLE_AUTOSIGNIN, false);
         });
 
         mSettingsActivityTestRule.startSettingsActivity();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java
index b213658..19946d72 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java
@@ -71,7 +71,7 @@
         extras.putString(WebPaymentIntentHelper.EXTRA_RESPONSE_PAYER_NAME, "John Smith");
         extras.putString(WebPaymentIntentHelper.EXTRA_RESPONSE_PAYER_PHONE, "4169158200");
         extras.putString(WebPaymentIntentHelper.EXTRA_RESPONSE_PAYER_EMAIL, "JohnSmith@google.com");
-        extras.putString(WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_ID, "shippingId");
+        extras.putString(PaymentShippingOption.EXTRA_SHIPPING_OPTION_ID, "shippingId");
 
         // Redact the entry with missingField key.
         extras.remove(missingField);
@@ -177,17 +177,16 @@
         Assert.assertEquals(1, expectedShippingOptions.length);
         Bundle shippingOption = (Bundle) expectedShippingOptions[0];
         Assert.assertEquals("shippingId",
-                shippingOption.getString(WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_ID));
+                shippingOption.getString(PaymentShippingOption.EXTRA_SHIPPING_OPTION_ID));
         Assert.assertEquals("Free shipping",
-                shippingOption.getString(WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_LABEL));
+                shippingOption.getString(PaymentShippingOption.EXTRA_SHIPPING_OPTION_LABEL));
         Assert.assertEquals("USD",
                 shippingOption.getString(
-                        WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_AMOUNT_CURRENCY));
+                        PaymentShippingOption.EXTRA_SHIPPING_OPTION_AMOUNT_CURRENCY));
         Assert.assertEquals("0",
-                shippingOption.getString(
-                        WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_AMOUNT_VALUE));
+                shippingOption.getString(PaymentShippingOption.EXTRA_SHIPPING_OPTION_AMOUNT_VALUE));
         Assert.assertTrue(
-                shippingOption.getBoolean(WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_SELECTED));
+                shippingOption.getBoolean(PaymentShippingOption.EXTRA_SHIPPING_OPTION_SELECTED));
     }
 
     // Test the happy path of createPayIntent and verify the deprecated extras.
@@ -682,7 +681,7 @@
     @Feature({"Payments"})
     public void parsePaymentResponseMissingShippingOptionTest() throws Throwable {
         Intent intent = createPaymentResponseWithMissingField(
-                WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_ID);
+                PaymentShippingOption.EXTRA_SHIPPING_OPTION_ID);
         mErrorString = null;
         WebPaymentIntentHelper.parsePaymentResponse(Activity.RESULT_OK, intent,
                 new PaymentOptions(/*requestPayerName=*/false, /*requestPayerEmail=*/false,
@@ -766,7 +765,7 @@
         extras.putString(WebPaymentIntentHelper.EXTRA_RESPONSE_PAYER_NAME, "John Smith");
         extras.putString(WebPaymentIntentHelper.EXTRA_RESPONSE_PAYER_PHONE, "4169158200");
         extras.putString(WebPaymentIntentHelper.EXTRA_RESPONSE_PAYER_EMAIL, "JohnSmith@google.com");
-        extras.putString(WebPaymentIntentHelper.EXTRA_SHIPPING_OPTION_ID, "shippingId");
+        extras.putString(PaymentShippingOption.EXTRA_SHIPPING_OPTION_ID, "shippingId");
         intent.putExtras(extras);
         mErrorString = null;
         WebPaymentIntentHelper.parsePaymentResponse(Activity.RESULT_OK, intent,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MIDITest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MIDITest.java
new file mode 100644
index 0000000..8f30c16
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MIDITest.java
@@ -0,0 +1,48 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.permissions;
+
+import android.support.test.filters.MediumTest;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+
+/**
+ * Test suite for MIDI permissions requests.
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+public class MIDITest {
+    @Rule
+    public PermissionTestRule mPermissionRule = new PermissionTestRule(true /* useHttpsServer */);
+
+    private static final String TEST_FILE = "/content/test/data/android/midi_permissions.html";
+
+    @Before
+    public void setUp() throws Exception {
+        mPermissionRule.setUpActivity();
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"MIDI"})
+    public void testMIDIDialog() throws Exception {
+        Tab tab = mPermissionRule.getActivity().getActivityTab();
+        PermissionUpdateWaiter updateWaiter =
+                new PermissionUpdateWaiter("pass", mPermissionRule.getActivity());
+        tab.addObserver(updateWaiter);
+        mPermissionRule.runAllowTest(updateWaiter, TEST_FILE, "", 0, false, true);
+        tab.removeObserver(updateWaiter);
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/NotificationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/NotificationTest.java
new file mode 100644
index 0000000..eff5014
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/NotificationTest.java
@@ -0,0 +1,50 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.permissions;
+
+import android.support.test.filters.MediumTest;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+
+/**
+ * Test suite for notifications permissions requests.
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+public class NotificationTest {
+    @Rule
+    public PermissionTestRule mPermissionRule = new PermissionTestRule(true /* useHttpsServer */);
+
+    private static final String TEST_FILE =
+            "/chrome/test/data/notifications/notification_tester.html";
+
+    @Before
+    public void setUp() throws Exception {
+        mPermissionRule.setUpActivity();
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"Notifications"})
+    public void testNotificationDialog() throws Exception {
+        Tab tab = mPermissionRule.getActivity().getActivityTab();
+        PermissionUpdateWaiter updateWaiter = new PermissionUpdateWaiter(
+                "request-callback-granted", mPermissionRule.getActivity());
+        tab.addObserver(updateWaiter);
+        mPermissionRule.runAllowTest(
+                updateWaiter, TEST_FILE, "requestPermission()", 0, false, true);
+        tab.removeObserver(updateWaiter);
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java
index 3979014..e3046a2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java
@@ -63,7 +63,7 @@
     public static class PermissionUpdateWaiter extends EmptyTabObserver {
         private CallbackHelper mCallbackHelper;
         private String mPrefix;
-        private int mExpectedCount;
+        private String mExpectedTitle;
         private final ChromeActivity mActivity;
 
         public PermissionUpdateWaiter(String prefix, ChromeActivity activity) {
@@ -74,18 +74,24 @@
 
         @Override
         public void onTitleUpdated(Tab tab) {
-            String expectedTitle = mPrefix + mExpectedCount;
-            if (mActivity.getActivityTab().getTitle().equals(expectedTitle)) {
+            if (mActivity.getActivityTab().getTitle().equals(mExpectedTitle)) {
                 mCallbackHelper.notifyCalled();
             }
         }
 
+        /**
+         * Wait for the page title to reach the expected number of updates. The page is expected to
+         * update the title like so: `prefix` + numUpdates. In essence this waits for the page to
+         * update the title to match, and does not actually count page title updates.
+         * @param numUpdates The number that should be after the prefix for the wait to be over. `0`
+         *         to only wait for the prefix.
+         * @throws Exception
+         */
         public void waitForNumUpdates(int numUpdates) throws Exception {
-            mExpectedCount = numUpdates;
-
             // Update might have already happened, check before waiting for title udpdates.
-            String expectedTitle = mPrefix + mExpectedCount;
-            if (mActivity.getActivityTab().getTitle().equals(expectedTitle)) return;
+            mExpectedTitle = mPrefix;
+            if (numUpdates != 0) mExpectedTitle += numUpdates;
+            if (mActivity.getActivityTab().getTitle().equals(mExpectedTitle)) return;
 
             mCallbackHelper.waitForCallback(0);
         }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java
new file mode 100644
index 0000000..1e1facc
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java
@@ -0,0 +1,452 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.permissions;
+
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.os.Handler;
+import android.support.test.filters.MediumTest;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.StringRes;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.download.DownloadItem;
+import org.chromium.chrome.browser.download.DownloadManagerService;
+import org.chromium.chrome.browser.download.DownloadManagerService.DownloadObserver;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.components.offline_items_collection.ContentId;
+import org.chromium.components.permissions.R;
+import org.chromium.content_public.browser.test.util.Criteria;
+import org.chromium.content_public.browser.test.util.CriteriaHelper;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.content_public.common.ContentSwitches;
+import org.chromium.device.geolocation.LocationProviderOverrider;
+import org.chromium.device.geolocation.MockLocationProvider;
+import org.chromium.ui.base.AndroidPermissionDelegate;
+import org.chromium.ui.base.PermissionCallback;
+import org.chromium.ui.modaldialog.DialogDismissalCause;
+import org.chromium.ui.modaldialog.ModalDialogManager;
+import org.chromium.ui.modaldialog.ModalDialogProperties;
+import org.chromium.ui.modelutil.PropertyModel;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Testing the interaction with the runtime permission prompt (Android level prompt).
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+public class RuntimePermissionTest {
+    enum RuntimePromptResponse {
+        GRANT,
+        DENY,
+        NEVER_ASK_AGAIN,
+        ASSERT_NEVER_ASKED,
+        ALREADY_GRANTED, // Also implies "ASSERT_NEVER_ASKED"
+    }
+
+    private static class TestAndroidPermissionDelegate implements AndroidPermissionDelegate {
+        private RuntimePromptResponse mResponse;
+        private final Set<String> mRequestablePermissions;
+        private final Set<String> mGrantedPermissions;
+
+        public TestAndroidPermissionDelegate(
+                final String[] requestablePermissions, final RuntimePromptResponse response) {
+            mRequestablePermissions = new TreeSet(Arrays.asList(requestablePermissions));
+            mGrantedPermissions = new TreeSet();
+            mResponse = response;
+            if (mResponse == RuntimePromptResponse.ALREADY_GRANTED) {
+                mGrantedPermissions.addAll(mRequestablePermissions);
+                mResponse = RuntimePromptResponse.ASSERT_NEVER_ASKED;
+            }
+        }
+
+        @Override
+        public boolean hasPermission(final String permission) {
+            return mGrantedPermissions.contains(permission);
+        }
+
+        @Override
+        public boolean canRequestPermission(final String permission) {
+            return mRequestablePermissions.contains(permission);
+        }
+
+        @Override
+        public boolean isPermissionRevokedByPolicy(final String permission) {
+            return false;
+        }
+
+        @Override
+        public void requestPermissions(
+                final String[] permissions, final PermissionCallback callback) {
+            Assert.assertNotSame("Runtime permission requested.", mResponse,
+                    RuntimePromptResponse.ASSERT_NEVER_ASKED);
+            // Call back needs to be made async.
+            new Handler().post(() -> {
+                int[] grantResults = new int[permissions.length];
+                for (int i = 0; i < permissions.length; ++i) {
+                    if (mRequestablePermissions.contains(permissions[i])
+                            && mResponse == RuntimePromptResponse.GRANT) {
+                        mGrantedPermissions.add(permissions[i]);
+                        grantResults[i] = PackageManager.PERMISSION_GRANTED;
+                    } else {
+                        grantResults[i] = PackageManager.PERMISSION_DENIED;
+                        if (mResponse == RuntimePromptResponse.NEVER_ASK_AGAIN) {
+                            mRequestablePermissions.remove(permissions[i]);
+                        }
+                    }
+                }
+                callback.onRequestPermissionsResult(permissions, grantResults);
+            });
+        }
+
+        @Override
+        public boolean handlePermissionResult(
+                final int requestCode, final String[] permissions, final int[] grantResults) {
+            return false;
+        }
+
+        public void setResponse(RuntimePromptResponse response) {
+            mResponse = response;
+        }
+    }
+
+    @Rule
+    public PermissionTestRule mPermissionTestRule = new PermissionTestRule();
+
+    private static final String GEOLOCATION_TEST =
+            "/chrome/test/data/geolocation/geolocation_on_load.html";
+    private static final String MEDIA_TEST = "/content/test/data/media/getusermedia.html";
+    private static final String DOWNLOAD_TEST = "/chrome/test/data/android/download/get.html";
+
+    private TestAndroidPermissionDelegate mTestAndroidPermissionDelegate = null;
+
+    @Before
+    public void setUp() throws Exception {
+        mPermissionTestRule.setUpActivity();
+    }
+
+    private void waitUntilDifferentDialogIsShowing(final PropertyModel currentDialog) {
+        CriteriaHelper.pollUiThread(new Criteria("Dialog not displayed.") {
+            @Override
+            public boolean isSatisfied() {
+                final ModalDialogManager manager =
+                        mPermissionTestRule.getActivity().getModalDialogManager();
+                return manager.isShowing() && currentDialog != manager.getCurrentDialogForTest();
+            }
+        });
+    }
+
+    /**
+     * Run a test related to the runtime permission prompt, based on the specified parameters.
+     * @param testUrl The URL of the test page to load in order to run the text.
+     * @param expectPermissionAllowed Whether to expect that the permissions is granted by the end
+     *         of the test.
+     * @param permissionPromptAllow Whether to respond with "allow" on the Chrome permission prompt
+     *         (`null` means skip waiting for a permission prompt at all).
+     * @param runtimePromptResponse How to respond to the runtime prompt.
+     * @param waitForMissingPermissionPrompt Whether to wait for a Chrome dialog informing the user
+     *         that the Android permission is missing.
+     * @param waitForUpdater Whether to wait for the test page to update the window title to confirm
+     *         the test's success.
+     * @param javascriptToExecute Some javascript to execute after the page loads (empty or null to
+     *         skip).
+     * @param missingPermissionPromptTextId The resource string id that matches the text of the
+     *         missing permission prompt dialog (0 if not applicable).
+     * @param requestablePermission The Android permission(s) that will be requested by this test.
+     * @throws Exception
+     */
+    private void runTest(final String testUrl, final boolean expectPermissionAllowed,
+            final Boolean permissionPromptAllow, final RuntimePromptResponse runtimePromptResponse,
+            final boolean waitForMissingPermissionPrompt, final boolean waitForUpdater,
+            final String javascriptToExecute, final @StringRes int missingPermissionPromptTextId,
+            final String[] requestablePermission) throws Exception {
+        final ChromeActivity activity = mPermissionTestRule.getActivity();
+
+        if (mTestAndroidPermissionDelegate == null) {
+            mTestAndroidPermissionDelegate =
+                    new TestAndroidPermissionDelegate(requestablePermission, runtimePromptResponse);
+            activity.getWindowAndroid().setAndroidPermissionDelegate(
+                    mTestAndroidPermissionDelegate);
+        }
+
+        final Tab tab = activity.getActivityTab();
+        final PermissionUpdateWaiter permissionUpdateWaiter = new PermissionUpdateWaiter(
+                expectPermissionAllowed ? "Granted" : "Denied", activity);
+        tab.addObserver(permissionUpdateWaiter);
+
+        mPermissionTestRule.setUpUrl(testUrl);
+
+        if (javascriptToExecute != null && !javascriptToExecute.isEmpty()) {
+            mPermissionTestRule.runJavaScriptCodeInCurrentTab(javascriptToExecute);
+        }
+
+        if (permissionPromptAllow != null) {
+            // Wait for chrome permission dialog and accept it.
+            PermissionTestRule.waitForDialog(activity);
+            PermissionTestRule.replyToDialog(permissionPromptAllow, activity);
+        }
+
+        if (waitForMissingPermissionPrompt) {
+            // Wait for missing permission dialog and dismiss it.
+            final ModalDialogManager manager = TestThreadUtils.runOnUiThreadBlockingNoException(
+                    activity::getModalDialogManager);
+            waitUntilDifferentDialogIsShowing(manager.getCurrentDialogForTest());
+
+            final View dialogText = manager.getCurrentDialogForTest()
+                                            .get(ModalDialogProperties.CUSTOM_VIEW)
+                                            .findViewById(R.id.text);
+            Assert.assertEquals(((TextView) dialogText).getText(),
+                    activity.getResources().getString(missingPermissionPromptTextId));
+
+            TestThreadUtils.runOnUiThreadBlocking(() -> {
+                manager.getCurrentPresenterForTest().dismissCurrentDialog(
+                        DialogDismissalCause.NAVIGATE_BACK_OR_TOUCH_OUTSIDE);
+            });
+        }
+
+        if (waitForUpdater) {
+            // PermissionUpdateWaiter should register a response.
+            permissionUpdateWaiter.waitForNumUpdates(0);
+        }
+
+        tab.removeObserver(permissionUpdateWaiter);
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "Location"})
+    public void testAllowRuntimeLocation() throws Exception {
+        LocationProviderOverrider.setLocationProviderImpl(new MockLocationProvider());
+
+        runTest(GEOLOCATION_TEST, true /* expectPermissionAllowed */,
+                true /* permissionPromptAllow */, RuntimePromptResponse.GRANT,
+                false /* waitForMissingPermissionPrompt */, true /* waitForUpdater */,
+                null /* javascriptToExecute */, 0 /* missingPermissionPromptTextId */,
+                new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
+                        Manifest.permission.ACCESS_FINE_LOCATION});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testAllowRuntimeCamera() throws Exception {
+        runTest(MEDIA_TEST, true /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.GRANT, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: true, audio: false});",
+                0 /* missingPermissionPromptTextId */, new String[] {Manifest.permission.CAMERA});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testAllowRuntimeMicrophone() throws Exception {
+        runTest(MEDIA_TEST, true /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.GRANT, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: false, audio: true});",
+                0 /* missingPermissionPromptTextId */,
+                new String[] {Manifest.permission.RECORD_AUDIO});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "Location"})
+    public void testDenyRuntimeLocation() throws Exception {
+        LocationProviderOverrider.setLocationProviderImpl(new MockLocationProvider());
+
+        runTest(GEOLOCATION_TEST, false /* expectPermissionAllowed */,
+                true /* permissionPromptAllow */, RuntimePromptResponse.DENY,
+                true /* waitForMissingPermissionPrompt */, true /* waitForUpdater */,
+                null /* javascriptToExecute */, R.string.infobar_missing_location_permission_text,
+                new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
+                        Manifest.permission.ACCESS_FINE_LOCATION});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testDenyRuntimeCamera() throws Exception {
+        runTest(MEDIA_TEST, false /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.DENY, true /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: true, audio: false});",
+                R.string.infobar_missing_camera_permission_text,
+                new String[] {Manifest.permission.CAMERA});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testDenyRuntimeMicrophone() throws Exception {
+        runTest(MEDIA_TEST, false /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.DENY, true /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: false, audio: true});",
+                R.string.infobar_missing_microphone_permission_text,
+                new String[] {Manifest.permission.RECORD_AUDIO});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "Downloads"})
+    public void testDenyRuntimeDownload() throws Exception {
+        DownloadObserver observer = new DownloadObserver() {
+            @Override
+            public void onAllDownloadsRetrieved(
+                    final List<DownloadItem> list, boolean isOffTheRecord) {}
+            @Override
+            public void onDownloadItemUpdated(DownloadItem item) {}
+            @Override
+            public void onDownloadItemRemoved(String guid, boolean isOffTheRecord) {}
+            @Override
+            public void onAddOrReplaceDownloadSharedPreferenceEntry(ContentId id) {}
+
+            @Override
+            public void onDownloadItemCreated(DownloadItem item) {
+                Assert.assertFalse("Should not have started a download item", true);
+            }
+        };
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            DownloadManagerService.getDownloadManagerService().addDownloadObserver(observer);
+        });
+
+        runTest(DOWNLOAD_TEST, false /* expectPermissionAllowed */,
+                null /* permissionPromptAllow */, RuntimePromptResponse.DENY,
+                true /* waitForMissingPermissionPrompt */, false /* waitForUpdater */,
+                "document.getElementsByTagName('a')[0].click();",
+                org.chromium.chrome.R.string.missing_storage_permission_download_education_text,
+                new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "Location"})
+    public void testDenyTriggersNoRuntime() throws Exception {
+        LocationProviderOverrider.setLocationProviderImpl(new MockLocationProvider());
+
+        runTest(GEOLOCATION_TEST, false /* expectPermissionAllowed */,
+                false /* permissionPromptAllow */, RuntimePromptResponse.ASSERT_NEVER_ASKED,
+                false /* waitForMissingPermissionPrompt */, true /* waitForUpdater */,
+                null /* javascriptToExecute */, R.string.infobar_missing_location_permission_text,
+                new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
+                        Manifest.permission.ACCESS_FINE_LOCATION});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testDenyAndNeverAskMicrophone() throws Exception {
+        // First ask for mic and reply with "deny and never ask again";
+        runTest(MEDIA_TEST, false /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.NEVER_ASK_AGAIN, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: false, audio: true});",
+                0 /* missingPermissionPromptTextId */,
+                new String[] {Manifest.permission.RECORD_AUDIO});
+
+        // Now set the expectation that the runtime prompt is not shown again.
+        mTestAndroidPermissionDelegate.setResponse(RuntimePromptResponse.ASSERT_NEVER_ASKED);
+
+        // Reload the page and ask again, this time no prompt at all should be shown.
+        runTest(MEDIA_TEST, false /* expectPermissionAllowed */, null /* permissionPromptAllow */,
+                null /* runtimePromptResponse */, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: false, audio: true});",
+                0 /* missingPermissionPromptTextId */, null /* requestablePermission */);
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testDenyAndNeverAskCamera() throws Exception {
+        // First ask for camera and reply with "deny and never ask again";
+        runTest(MEDIA_TEST, false /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.NEVER_ASK_AGAIN, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: true, audio: false});",
+                0 /* missingPermissionPromptTextId */, new String[] {Manifest.permission.CAMERA});
+
+        // Now set the expectation that the runtime prompt is not shown again.
+        mTestAndroidPermissionDelegate.setResponse(RuntimePromptResponse.ASSERT_NEVER_ASKED);
+
+        // Reload the page and ask again, this time no prompt at all should be shown.
+        runTest(MEDIA_TEST, false /* expectPermissionAllowed */, null /* permissionPromptAllow */,
+                null /* runtimePromptResponse */, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: true, audio: false});",
+                0 /* missingPermissionPromptTextId */, null /* requestablePermission */);
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "Location"})
+    public void testAlreadyGrantedRuntimeLocation() throws Exception {
+        LocationProviderOverrider.setLocationProviderImpl(new MockLocationProvider());
+
+        runTest(GEOLOCATION_TEST, true /* expectPermissionAllowed */,
+                true /* permissionPromptAllow */, RuntimePromptResponse.ALREADY_GRANTED,
+                false /* waitForMissingPermissionPrompt */, true /* waitForUpdater */,
+                null /* javascriptToExecute */, 0 /* missingPermissionPromptTextId */,
+                new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
+                        Manifest.permission.ACCESS_FINE_LOCATION});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "Location"})
+    public void testAllowRuntimeLocationIncognito() throws Exception {
+        LocationProviderOverrider.setLocationProviderImpl(new MockLocationProvider());
+        mPermissionTestRule.newIncognitoTabFromMenu();
+
+        runTest(GEOLOCATION_TEST, true /* expectPermissionAllowed */,
+                true /* permissionPromptAllow */, RuntimePromptResponse.GRANT,
+                false /* waitForMissingPermissionPrompt */, true /* waitForUpdater */,
+                null /* javascriptToExecute */, 0 /* missingPermissionPromptTextId */,
+                new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
+                        Manifest.permission.ACCESS_FINE_LOCATION});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testAllowRuntimeCameraIncognito() throws Exception {
+        mPermissionTestRule.newIncognitoTabFromMenu();
+        runTest(MEDIA_TEST, true /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.GRANT, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: true, audio: false});",
+                0 /* missingPermissionPromptTextId */, new String[] {Manifest.permission.CAMERA});
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RuntimePermissions", "MediaPermissions"})
+    @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
+    public void testAllowRuntimeMicrophoneIncognito() throws Exception {
+        mPermissionTestRule.newIncognitoTabFromMenu();
+        runTest(MEDIA_TEST, true /* expectPermissionAllowed */, true /* permissionPromptAllow */,
+                RuntimePromptResponse.GRANT, false /* waitForMissingPermissionPrompt */,
+                true /* waitForUpdater */, "getUserMediaAndStop({video: false, audio: true});",
+                0 /* missingPermissionPromptTextId */,
+                new String[] {Manifest.permission.RECORD_AUDIO});
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java
index c00b34e..d513b24 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java
@@ -19,12 +19,12 @@
 
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 
+import org.chromium.base.MathUtils;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.DisableIf;
@@ -62,9 +62,8 @@
                                               DecoderServiceHost.DecoderStatusCallback,
                                               PickerVideoPlayer.VideoPlaybackStatusCallback,
                                               AnimationListener {
-    @ClassRule
-    public static DisableAnimationsTestRule mDisableAnimationsTestRule =
-            new DisableAnimationsTestRule();
+    @Rule
+    public DisableAnimationsTestRule mDisableAnimationsTestRule = new DisableAnimationsTestRule();
 
     // The timeout (in seconds) to wait for the decoder service to be ready.
     private static final long WAIT_TIMEOUT_SECONDS = 30L;
@@ -93,6 +92,13 @@
     // nothing was selected.
     private Uri[] mLastSelectedPhotos;
 
+    // A list of view IDs we receive from an animating event in the order the events occurred.
+    private List<Long> mLastViewAnimatingIds = new ArrayList();
+
+    // A list of view alpha values we receive from an animating event in the order the events
+    // occurred.
+    private List<Float> mLastViewAnimatingAlphas = new ArrayList();
+
     // The list of currently selected photos (built piecemeal).
     private List<PickerBitmap> mCurrentPhotoSelection;
 
@@ -117,6 +123,9 @@
     // A callback that fires when playback ends for a video.
     public final CallbackHelper mOnVideoEndedCallback = new CallbackHelper();
 
+    // A callback that fires when overlay controls finish animating.
+    public final CallbackHelper mOnVideoAnimationEndCallback = new CallbackHelper();
+
     @Before
     public void setUp() throws Exception {
         mActivityTestRule.startMainActivityOnBlankPage();
@@ -197,6 +206,26 @@
         mOnVideoEndedCallback.notifyCalled();
     }
 
+    @Override
+    public void onAnimationStart(long viewId, float currentAlpha) {
+        mLastViewAnimatingIds.add(viewId);
+        mLastViewAnimatingAlphas.add(currentAlpha);
+    }
+
+    @Override
+    public void onAnimationCancel(long viewId, float currentAlpha) {
+        mLastViewAnimatingIds.add(viewId);
+        mLastViewAnimatingAlphas.add(currentAlpha);
+    }
+
+    @Override
+    public void onAnimationEnd(long viewId, float currentAlpha) {
+        mLastViewAnimatingIds.add(viewId);
+        mLastViewAnimatingAlphas.add(currentAlpha);
+
+        mOnVideoAnimationEndCallback.notifyCalled();
+    }
+
     // SelectionObserver:
 
     @Override
@@ -469,6 +498,109 @@
         }
     }
 
+    private void verifyVisible(int viewId, int eventId) {
+        Assert.assertEquals("Unexpected view ID for event " + eventId, viewId,
+                (long) mLastViewAnimatingIds.get(eventId));
+        Assert.assertEquals("Unexpected alpha value for event " + eventId, 1.0f,
+                (double) mLastViewAnimatingAlphas.get(eventId), MathUtils.EPSILON);
+    }
+
+    private void verifyHidden(int viewId, int eventId) {
+        Assert.assertEquals("Unexpected view ID for event " + eventId, viewId,
+                (long) mLastViewAnimatingIds.get(eventId));
+        Assert.assertEquals("Unexpected alpha value for event " + eventId, 0.0f,
+                (double) mLastViewAnimatingAlphas.get(eventId), MathUtils.EPSILON);
+    }
+
+    @Test
+    @LargeTest
+    @DisableAnimationsTestRule.EnsureAnimationsOn
+    @DisableIf.Build(sdk_is_less_than = Build.VERSION_CODES.N) // Video is only supported on N+.
+    public void testVideoPlayerAnimations() throws Throwable {
+        PickerVideoPlayer.setShortAnimationTimesForTesting(true);
+
+        // Requesting to play a video is not a case of an accidental disk read on the UI thread.
+        StrictMode.ThreadPolicy oldPolicy = TestThreadUtils.runOnUiThreadBlocking(
+                () -> { return StrictMode.allowThreadDiskReads(); });
+
+        try {
+            setupTestFiles();
+            createDialog(true, Arrays.asList("image/*")); // Multi-select = true.
+            Assert.assertTrue(mDialog.isShowing());
+            waitForDecoder();
+
+            PickerCategoryView categoryView = mDialog.getCategoryViewForTesting();
+
+            View container = categoryView.findViewById(R.id.playback_container);
+            Assert.assertTrue(container.getVisibility() == View.GONE);
+
+            String fileName = "chrome/test/data/android/photo_picker/noogler_1sec.mp4";
+            File file = new File(UrlUtils.getIsolatedTestFilePath(fileName));
+
+            int callCount = mOnVideoAnimationEndCallback.getCallCount();
+
+            playVideo(Uri.fromFile(file));
+            Assert.assertTrue(container.getVisibility() == View.VISIBLE);
+
+            // This keeps track of event ordering.
+            int i = 0;
+
+            // Wait for two animation sets (until the controls and play button have animated away).
+            mOnVideoAnimationEndCallback.waitForCallback(callCount, 2);
+
+            // All controls start off showing when the video starts playing, and animations will
+            // start to fade them away: one animation for the video controls and a separate one for
+            // the Play/Pause button. Play button is the first button to disappear (shortest start
+            // time and duration) and shortly thereafter the video controls start disappearing.
+            verifyVisible(R.id.video_player_play_button, i++);
+            verifyHidden(R.id.video_player_play_button, i++);
+            verifyVisible(R.id.video_controls, i++);
+            verifyHidden(R.id.video_controls, i++);
+
+            TestThreadUtils.runOnUiThreadBlocking(() -> {
+                // Single-tapping should make the controls visible again and then fade away.
+                categoryView.getVideoPlayerForTesting().singleTapForTesting();
+            });
+
+            // Animation-end has been called twice now, expect four more calls after single-tapping
+            // because controls fade in and then fade out again.
+            callCount += 2;
+            mOnVideoAnimationEndCallback.waitForCallback(callCount, 4);
+
+            // The controls and the Play button start animating into view at the same time but the
+            // Play button is quicker to appear.
+            verifyHidden(R.id.video_controls, i++);
+            verifyHidden(R.id.video_player_play_button, i++);
+            verifyVisible(R.id.video_player_play_button, i++);
+            verifyVisible(R.id.video_controls, i++);
+
+            // After a short while, the controls disappear again (with same delay and duration).
+            verifyVisible(R.id.video_controls, i++);
+            verifyVisible(R.id.video_player_play_button, i++);
+            verifyHidden(R.id.video_controls, i++);
+            verifyHidden(R.id.video_player_play_button, i++);
+
+            TestThreadUtils.runOnUiThreadBlocking(() -> {
+                // Double-tapping left of screen will cause the video to roll back to the beginning
+                // and controls to be shown immediately (no fade-in) and then gradually fade out.
+                categoryView.getVideoPlayerForTesting().doubleTapForTesting(/*x=*/0f);
+            });
+
+            callCount += 4;
+            mOnVideoAnimationEndCallback.waitForCallback(callCount, 2);
+
+            // Controls will show without animation, but should fade away (play fades out first).
+            verifyVisible(R.id.video_player_play_button, i++);
+            verifyHidden(R.id.video_player_play_button, i++);
+            verifyVisible(R.id.video_controls, i++);
+            verifyHidden(R.id.video_controls, i++);
+
+            dismissDialog();
+        } finally {
+            TestThreadUtils.runOnUiThreadBlocking(() -> { StrictMode.setThreadPolicy(oldPolicy); });
+        }
+    }
+
     @Test
     @LargeTest
     @Feature("RenderTest")
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/portals/PortalsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/portals/PortalsTest.java
index 82b9d25..0b37f06 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/portals/PortalsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/portals/PortalsTest.java
@@ -33,6 +33,7 @@
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
+import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.banners.AppBannerManager;
 import org.chromium.chrome.browser.engagement.SiteEngagementService;
@@ -52,6 +53,7 @@
 import org.chromium.content_public.browser.test.util.Coordinates;
 import org.chromium.content_public.browser.test.util.Criteria;
 import org.chromium.content_public.browser.test.util.CriteriaHelper;
+import org.chromium.content_public.browser.test.util.DOMUtils;
 import org.chromium.content_public.browser.test.util.JavaScriptUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.content_public.browser.test.util.TouchCommon;
@@ -487,16 +489,24 @@
         Assert.assertEquals(mainTitle, history.get(1).getTitle());
     }
 
+    interface NotificationPredicate {
+        boolean test(StatusBarNotification notification);
+    }
+
+    private NotificationPredicate mMediaCaptureNotificationPred = notification
+            -> TextUtils.equals(notification.getTag(), "MediaCaptureNotificationService");
+    private NotificationPredicate mMediaPlaybackNotificationPred =
+            notification -> notification.getId() == R.id.media_playback_notification;
+
     @TargetApi(Build.VERSION_CODES.M)
-    private void waitForMediaCaptureNotification() {
+    private void waitForNotification(NotificationPredicate pred) {
         CriteriaHelper.pollInstrumentationThread(() -> {
             StatusBarNotification notifications[] =
                     ((NotificationManager) ContextUtils.getApplicationContext().getSystemService(
                              Context.NOTIFICATION_SERVICE))
                             .getActiveNotifications();
             for (StatusBarNotification statusBarNotification : notifications) {
-                if (TextUtils.equals(
-                            statusBarNotification.getTag(), "MediaCaptureNotificationService")) {
+                if (pred.test(statusBarNotification)) {
                     return true;
                 }
             }
@@ -504,6 +514,22 @@
         });
     }
 
+    @TargetApi(Build.VERSION_CODES.M)
+    private void waitForNoNotifications(NotificationPredicate pred) {
+        CriteriaHelper.pollInstrumentationThread(() -> {
+            StatusBarNotification notifications[] =
+                    ((NotificationManager) ContextUtils.getApplicationContext().getSystemService(
+                             Context.NOTIFICATION_SERVICE))
+                            .getActiveNotifications();
+            for (StatusBarNotification statusBarNotification : notifications) {
+                if (pred.test(statusBarNotification)) {
+                    return false;
+                }
+            }
+            return true;
+        });
+    }
+
     @Test
     @LargeTest
     @Feature({"Portals"})
@@ -529,13 +555,39 @@
                     ModalDialogProperties.ButtonType.POSITIVE);
         });
         // Wait for video capture notification.
-        waitForMediaCaptureNotification();
+        waitForNotification(mMediaCaptureNotificationPred);
         // Activate portal.
         executeScriptAndAwaitSwap(tab, "activate()");
         // Wait for adoption to complete.
         JavaScriptUtils.runJavascriptWithAsyncResult(tab.getWebContents(), "waitForAdoption()");
         // Check if notification is still shown.
-        waitForMediaCaptureNotification();
+        waitForNotification(mMediaCaptureNotificationPred);
+    }
+
+    @Test
+    @LargeTest
+    @Feature({"Portals"})
+    @MinAndroidSdkLevel(Build.VERSION_CODES.M)
+    public void testMediaNotificationDisappearsAfterActivation() throws Exception {
+        String mainUrl =
+                mTestServer.getURL("/chrome/test/data/android/portals/media-notification.html");
+        mActivityTestRule.startMainActivityWithURL(mainUrl);
+        Tab tab = mActivityTestRule.getActivity().getActivityTab();
+
+        // Start video playback.
+        DOMUtils.clickNode(tab.getWebContents(), "video");
+        // Wait for media notification.
+        waitForNotification(mMediaPlaybackNotificationPred);
+        // Activate portal.
+        executeScriptAndAwaitSwap(tab, "activate()");
+        // Wait for adoption to complete.
+        JavaScriptUtils.runJavascriptWithAsyncResult(tab.getWebContents(), "waitForAdoption()");
+        // Notification should disappear.
+        waitForNoNotifications(mMediaPlaybackNotificationPred);
+        // Activate predecessor.
+        executeScriptAndAwaitSwap(tab, "activate()");
+        // Media notification should show again.
+        waitForNotification(mMediaPlaybackNotificationPred);
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchActivityTest.java
index 265407b2..ade5871073 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/searchwidget/SearchActivityTest.java
@@ -12,11 +12,17 @@
 import android.app.Activity;
 import android.app.Instrumentation;
 import android.app.Instrumentation.ActivityMonitor;
+import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.text.TextUtils;
 import android.view.KeyEvent;
+import android.view.ViewGroup;
+
+import androidx.core.content.FileProvider;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -29,6 +35,9 @@
 
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.Callback;
+import org.chromium.base.ContentUriUtils;
+import org.chromium.base.ContextUtils;
+import org.chromium.base.IntentUtils;
 import org.chromium.base.test.params.ParameterAnnotations;
 import org.chromium.base.test.params.ParameterSet;
 import org.chromium.base.test.params.ParameterizedRunner;
@@ -37,6 +46,8 @@
 import org.chromium.base.test.util.FlakyTest;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
+import org.chromium.chrome.browser.IntentHandler;
+import org.chromium.chrome.browser.document.ChromeLauncherActivity;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.locale.DefaultSearchEngineDialogHelperUtils;
@@ -45,14 +56,20 @@
 import org.chromium.chrome.browser.locale.LocaleManager;
 import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
 import org.chromium.chrome.browser.omnibox.UrlBar;
+import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinatorTestUtils;
 import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteResult;
 import org.chromium.chrome.browser.omnibox.suggestions.CachedZeroSuggestionsManager;
 import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
 import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionBuilderForTest;
+import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionUiType;
+import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdown;
+import org.chromium.chrome.browser.omnibox.suggestions.base.BaseSuggestionView;
 import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
 import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
 import org.chromium.chrome.browser.searchwidget.SearchActivity.SearchActivityDelegate;
+import org.chromium.chrome.browser.share.clipboard.ClipboardImageFileProvider;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
 import org.chromium.chrome.test.MultiActivityTestRule;
 import org.chromium.chrome.test.util.ActivityUtils;
@@ -63,9 +80,13 @@
 import org.chromium.content_public.browser.test.util.CriteriaHelper;
 import org.chromium.content_public.browser.test.util.KeyUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.content_public.browser.test.util.TestTouchUtils;
 import org.chromium.content_public.common.ContentUrlConstants;
+import org.chromium.ui.base.Clipboard;
 import org.chromium.url.GURL;
 
+import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -88,6 +109,7 @@
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
 public class SearchActivityTest {
     private static final long OMNIBOX_SHOW_TIMEOUT_MS = 5000L;
+    private static final String TEST_PNG_IMAGE_FILE_EXTENSION = ".png";
 
     @ParameterAnnotations.ClassParameter
     private static List<ParameterSet> sClassParams =
@@ -156,9 +178,25 @@
         }
     }
 
+    // Helper class for clipboard Omnibox test.
+    private class FileProviderHelper implements ContentUriUtils.FileProviderUtil {
+        private static final String API_AUTHORITY_SUFFIX = ".FileProvider";
+
+        @Override
+        public Uri getContentUriFromFile(File file) {
+            Context appContext = ContextUtils.getApplicationContext();
+            return FileProvider.getUriForFile(
+                    appContext, appContext.getPackageName() + API_AUTHORITY_SUFFIX, file);
+        }
+    }
+
     @Rule
     public MultiActivityTestRule mTestRule = new MultiActivityTestRule();
 
+    @Rule
+    public ChromeActivityTestRule<ChromeTabbedActivity> mActivityTestRule =
+            new ChromeActivityTestRule<>(ChromeTabbedActivity.class);
+
     @Mock
     VoiceRecognitionHandler mHandler;
 
@@ -538,6 +576,183 @@
         });
     }
 
+    @Test
+    @SmallTest
+    @Features.
+    EnableFeatures({ChromeFeatureList.OMNIBOX_ENABLE_CLIPBOARD_PROVIDER_IMAGE_SUGGESTIONS})
+    public void testImageSearch() throws InterruptedException, Exception {
+        // Put an image into system clipboard.
+        putAnImageIntoClipboard();
+
+        // Start the Activity.
+        final SearchActivity searchActivity = startSearchActivity();
+
+        // Omnibox suggestions should appear now.
+        final SearchActivityLocationBarLayout locationBar =
+                (SearchActivityLocationBarLayout) searchActivity.findViewById(
+                        R.id.search_location_bar);
+        OmniboxTestUtils.waitForOmniboxSuggestions(locationBar, OMNIBOX_SHOW_TIMEOUT_MS);
+        waitForSuggestionType(locationBar, OmniboxSuggestionType.CLIPBOARD_IMAGE);
+        OmniboxSuggestionsDropdown suggestionsDropdown =
+                AutocompleteCoordinatorTestUtils.getSuggestionsDropdown(
+                        locationBar.getAutocompleteCoordinator());
+
+        int imageSuggestionIndex = -1;
+        // Find the index of the image clipboard suggestion.
+        for (int i = 0; i < suggestionsDropdown.getItemCount(); ++i) {
+            OmniboxSuggestion suggestion = AutocompleteCoordinatorTestUtils.getOmniboxSuggestionAt(
+                    locationBar.getAutocompleteCoordinator(), i);
+            if (suggestion != null
+                    && suggestion.getType() == OmniboxSuggestionType.CLIPBOARD_IMAGE) {
+                imageSuggestionIndex = i;
+                break;
+            }
+        }
+        Assert.assertNotEquals(
+                "Cannot find the image clipboard Omnibox suggestion", -1, imageSuggestionIndex);
+
+        OmniboxSuggestion imageSuggestion = AutocompleteCoordinatorTestUtils.getOmniboxSuggestionAt(
+                locationBar.getAutocompleteCoordinator(), imageSuggestionIndex);
+        Assert.assertNotNull("The image clipboard suggestion should contains post content type.",
+                imageSuggestion.getPostContentType());
+        Assert.assertNotEquals(
+                "The image clipboard suggestion should not contains am empty post content type.", 0,
+                imageSuggestion.getPostContentType().length());
+        Assert.assertNotNull("The image clipboard suggestion should contains post data.",
+                imageSuggestion.getPostData());
+        Assert.assertNotEquals(
+                "The image clipboard suggestion should not contains am empty post data.", 0,
+                imageSuggestion.getPostData().length);
+
+        // Find the index of clipboard suggestion in the dropdown list.
+        final int clipboardSuggestionIndexInDropdown =
+                AutocompleteCoordinatorTestUtils.getIndexForFirstSuggestionOfType(
+                        locationBar.getAutocompleteCoordinator(),
+                        OmniboxSuggestionUiType.CLIPBOARD_SUGGESTION);
+        Assert.assertNotEquals("Cannot find the image clipboard Omnibox suggestion in UI.", -1,
+                clipboardSuggestionIndexInDropdown);
+
+        // Make sure the new tab is launched.
+        final ChromeTabbedActivity cta = ActivityUtils.waitForActivity(
+                InstrumentationRegistry.getInstrumentation(), ChromeTabbedActivity.class,
+                new Callable<Void>() {
+                    @Override
+                    public Void call() throws InterruptedException {
+                        clickSuggestionAt(suggestionsDropdown, clipboardSuggestionIndexInDropdown);
+                        return null;
+                    }
+                });
+
+        CriteriaHelper.pollUiThread(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                Tab tab = cta.getActivityTab();
+                if (tab == null) return false;
+                // Make sure tab is in either upload page or result page. cannot only verify one of
+                // them since on fast device tab jump to result page really quick but on slow device
+                // may stay on upload page for a really long time.
+                return tab.getUrlString().equals(imageSuggestion.getUrl().getSpec())
+                        || TemplateUrlServiceFactory.get()
+                                   .isSearchResultsPageFromDefaultSearchProvider(
+                                           tab.getUrlString());
+            }
+        });
+    }
+
+    @Test
+    @SmallTest
+    @Features.
+    EnableFeatures({ChromeFeatureList.OMNIBOX_ENABLE_CLIPBOARD_PROVIDER_IMAGE_SUGGESTIONS})
+    public void testImageSearch_OnlyTrustedIntentCanPost() throws InterruptedException, Exception {
+        // Put an image into system clipboard.
+        putAnImageIntoClipboard();
+
+        // Start the Activity.
+        final SearchActivity searchActivity = startSearchActivity();
+
+        // Omnibox suggestions should appear now.
+        final SearchActivityLocationBarLayout locationBar =
+                (SearchActivityLocationBarLayout) searchActivity.findViewById(
+                        R.id.search_location_bar);
+        OmniboxTestUtils.waitForOmniboxSuggestions(locationBar, OMNIBOX_SHOW_TIMEOUT_MS);
+        waitForSuggestionType(locationBar, OmniboxSuggestionType.CLIPBOARD_IMAGE);
+        OmniboxSuggestionsDropdown suggestionsDropdown =
+                AutocompleteCoordinatorTestUtils.getSuggestionsDropdown(
+                        locationBar.getAutocompleteCoordinator());
+
+        int imageSuggestionIndex = -1;
+        // Find the index of the image clipboard suggestion.
+        for (int i = 0; i < suggestionsDropdown.getItemCount(); ++i) {
+            OmniboxSuggestion suggestion = AutocompleteCoordinatorTestUtils.getOmniboxSuggestionAt(
+                    locationBar.getAutocompleteCoordinator(), i);
+            if (suggestion != null
+                    && suggestion.getType() == OmniboxSuggestionType.CLIPBOARD_IMAGE) {
+                imageSuggestionIndex = i;
+                break;
+            }
+        }
+        Assert.assertNotEquals(
+                "Cannot find the image clipboard Omnibox suggestion", -1, imageSuggestionIndex);
+
+        OmniboxSuggestion imageSuggestion = AutocompleteCoordinatorTestUtils.getOmniboxSuggestionAt(
+                locationBar.getAutocompleteCoordinator(), imageSuggestionIndex);
+
+        Intent intent =
+                new Intent(Intent.ACTION_VIEW, Uri.parse(imageSuggestion.getUrl().getSpec()));
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+        intent.setClass(searchActivity, ChromeLauncherActivity.class);
+        intent.putExtra(IntentHandler.EXTRA_POST_DATA_TYPE, imageSuggestion.getPostContentType());
+        intent.putExtra(IntentHandler.EXTRA_POST_DATA, imageSuggestion.getPostData());
+
+        final ChromeTabbedActivity cta =
+                ActivityUtils.waitForActivity(InstrumentationRegistry.getInstrumentation(),
+                        ChromeTabbedActivity.class, new Callable<Void>() {
+                            @Override
+                            public Void call() {
+                                IntentUtils.safeStartActivity(searchActivity, intent);
+                                return null;
+                            }
+                        });
+
+        // Because no POST data, Google wont go to the result page.
+        CriteriaHelper.pollUiThread(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                Tab tab = cta.getActivityTab();
+                return !TemplateUrlServiceFactory.get()
+                                .isSearchResultsPageFromDefaultSearchProvider(tab.getUrlString());
+            }
+        });
+    }
+
+    private void putAnImageIntoClipboard() {
+        mActivityTestRule.startMainActivityFromLauncher();
+        ContentUriUtils.setFileProviderUtil(new FileProviderHelper());
+        Bitmap bitmap =
+                Bitmap.createBitmap(/* width = */ 10, /* height = */ 10, Bitmap.Config.ARGB_8888);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        bitmap.compress(Bitmap.CompressFormat.PNG, /*quality = (0-100) */ 100, baos);
+        byte[] mTestImageData = baos.toByteArray();
+        Clipboard.getInstance().setImageFileProvider(new ClipboardImageFileProvider());
+        Clipboard.getInstance().setImage(mTestImageData, TEST_PNG_IMAGE_FILE_EXTENSION);
+
+        CriteriaHelper.pollInstrumentationThread(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                return Clipboard.getInstance().getImage() != null;
+            }
+        });
+    }
+
+    private void clickSuggestionAt(OmniboxSuggestionsDropdown suggestionsDropdown, int index)
+            throws InterruptedException {
+        // Wait a bit since the button may not able to click.
+        ViewGroup viewGroup = suggestionsDropdown.getViewGroup();
+        BaseSuggestionView baseSuggestionView = (BaseSuggestionView) viewGroup.getChildAt(index);
+        TestTouchUtils.performClickOnMainSync(InstrumentationRegistry.getInstrumentation(),
+                baseSuggestionView.getDecoratedSuggestionView());
+    }
+
     private SearchActivity startSearchActivity() {
         return startSearchActivity(0, /*isVoiceSearch=*/false);
     }
@@ -583,6 +798,29 @@
         }));
     }
 
+    private void waitForSuggestionType(final SearchActivityLocationBarLayout locationBar,
+            final @OmniboxSuggestionType int type) {
+        CriteriaHelper.pollUiThread(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                OmniboxSuggestionsDropdown suggestionsDropdown =
+                        AutocompleteCoordinatorTestUtils.getSuggestionsDropdown(
+                                locationBar.getAutocompleteCoordinator());
+                if (suggestionsDropdown == null) return false;
+
+                for (int i = 0; i < suggestionsDropdown.getItemCount(); i++) {
+                    OmniboxSuggestion suggestion =
+                            AutocompleteCoordinatorTestUtils.getOmniboxSuggestionAt(
+                                    locationBar.getAutocompleteCoordinator(), i);
+                    if (suggestion != null && suggestion.getType() == type) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        });
+    }
+
     @SuppressLint("SetTextI18n")
     private void setUrlBarText(final Activity activity, final String url) {
         CriteriaHelper.pollUiThread(new Criteria() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java
index 1fdc64d..58fcd7e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java
@@ -46,7 +46,7 @@
             @Override
             public boolean isSatisfied() {
                 return PrefServiceBridge.getInstance().isManagedPreference(
-                        Pref.REMEMBER_PASSWORDS_ENABLED);
+                        Pref.CREDENTIALS_ENABLE_SERVICE);
             }
         });
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderTest.java
index 56c6adf..d0f6ab7 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderTest.java
@@ -5,7 +5,7 @@
 package org.chromium.chrome.browser.share;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 
 import android.app.Activity;
 import android.support.test.filters.MediumTest;
@@ -27,7 +27,7 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
-import org.chromium.chrome.browser.share.ShareSheetCoordinator.ContentType;
+import org.chromium.chrome.browser.share.ShareSheetPropertyModelBuilder.ContentType;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.ui.modelutil.PropertyModel;
@@ -68,7 +68,7 @@
                 /*shareParams=*/null, /*shareStartTime=*/0);
 
         // Return false to indicate printing is disabled.
-        Mockito.when(mPrefServiceBridge.getBoolean(anyInt())).thenReturn(false);
+        Mockito.when(mPrefServiceBridge.getBoolean(anyString())).thenReturn(false);
     }
 
     @Test
@@ -113,7 +113,7 @@
             {ChromeFeatureList.CHROME_SHARE_SCREENSHOT, ChromeFeatureList.CHROME_SHARE_QRCODE})
     public void
     createPropertyModels_printingEnabled_includesPrinting() {
-        Mockito.when(mPrefServiceBridge.getBoolean(anyInt())).thenReturn(true);
+        Mockito.when(mPrefServiceBridge.getBoolean(anyString())).thenReturn(true);
 
         List<PropertyModel> propertyModels =
                 mChromeProvidedSharingOptionsProvider.createPropertyModels(sAllContentTypes);
@@ -133,7 +133,7 @@
             {ChromeFeatureList.CHROME_SHARE_SCREENSHOT, ChromeFeatureList.CHROME_SHARE_QRCODE})
     public void
     createPropertyModels_filtersByContentType() {
-        Mockito.when(mPrefServiceBridge.getBoolean(anyInt())).thenReturn(true);
+        Mockito.when(mPrefServiceBridge.getBoolean(anyString())).thenReturn(true);
 
         List<PropertyModel> propertyModels =
                 mChromeProvidedSharingOptionsProvider.createPropertyModels(
@@ -154,7 +154,7 @@
             {ChromeFeatureList.CHROME_SHARE_SCREENSHOT, ChromeFeatureList.CHROME_SHARE_QRCODE})
     public void
     createPropertyModels_multipleTypes_filtersByContentType() {
-        Mockito.when(mPrefServiceBridge.getBoolean(anyInt())).thenReturn(true);
+        Mockito.when(mPrefServiceBridge.getBoolean(anyString())).thenReturn(true);
 
         List<PropertyModel> propertyModels =
                 mChromeProvidedSharingOptionsProvider.createPropertyModels(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java
index 868d14c..4c8e960 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.share;
 
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Matchers.any;
@@ -12,7 +13,6 @@
 import android.support.test.filters.MediumTest;
 import android.support.test.rule.ActivityTestRule;
 
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -50,6 +50,8 @@
     @Mock
     private ShareSheetPropertyModelBuilder mPropertyModelBuilder;
 
+    private ShareSheetCoordinator mShareSheetCoordinator;
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
@@ -71,46 +73,45 @@
         Mockito.when(mPropertyModelBuilder.selectThirdPartyApps(
                              any(), any(), anyBoolean(), anyLong()))
                 .thenReturn(thirdPartyPropertyModels);
+
+        mShareSheetCoordinator = new ShareSheetCoordinator(null, null, mPropertyModelBuilder, null);
     }
 
     @Test
     @MediumTest
     public void disableFirstPartyFeatures() {
-        ShareSheetCoordinator coordinator =
-                new ShareSheetCoordinator(null, null, mPropertyModelBuilder, null);
-        coordinator.disableFirstPartyFeaturesForTesting();
+        mShareSheetCoordinator.disableFirstPartyFeaturesForTesting();
         Activity activity = mActivityTestRule.getActivity();
 
         ShareSheetBottomSheetContent bottomSheet = new ShareSheetBottomSheetContent(activity);
 
         List<PropertyModel> propertyModels =
-                coordinator.createTopRowPropertyModels(bottomSheet, activity, /*shareParams=*/null);
-        Assert.assertEquals("Property model list should be empty.", 0, propertyModels.size());
+                mShareSheetCoordinator.createTopRowPropertyModels(bottomSheet, activity,
+                        /*shareParams=*/null, ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES);
+        assertEquals("Property model list should be empty.", 0, propertyModels.size());
     }
 
     @Test
     @MediumTest
     public void testCreateBottomRowPropertyModels() {
-        ShareSheetCoordinator coordinator =
-                new ShareSheetCoordinator(null, null, mPropertyModelBuilder, null);
         Activity activity = mActivityTestRule.getActivity();
         ShareSheetBottomSheetContent bottomSheet = new ShareSheetBottomSheetContent(activity);
 
-        List<PropertyModel> propertyModels = coordinator.createBottomRowPropertyModels(
+        List<PropertyModel> propertyModels = mShareSheetCoordinator.createBottomRowPropertyModels(
                 bottomSheet, activity, /*shareParams=*/null, /*saveLastUsed=*/false);
-        Assert.assertEquals("Incorrect number of property models.", 3, propertyModels.size());
-        Assert.assertEquals("First property model isn't testModel1.", "testModel1",
+        assertEquals("Incorrect number of property models.", 3, propertyModels.size());
+        assertEquals("First property model isn't testModel1.", "testModel1",
                 propertyModels.get(0).get(ShareSheetItemViewProperties.LABEL));
-        Assert.assertEquals("First property model is marked as first party.", false,
+        assertEquals("First property model is marked as first party.", false,
                 propertyModels.get(0).get(ShareSheetItemViewProperties.IS_FIRST_PARTY));
-        Assert.assertEquals("Second property model isn't testModel2.", "testModel2",
+        assertEquals("Second property model isn't testModel2.", "testModel2",
                 propertyModels.get(1).get(ShareSheetItemViewProperties.LABEL));
-        Assert.assertEquals("Second property model is marked as first party.", false,
+        assertEquals("Second property model is marked as first party.", false,
                 propertyModels.get(1).get(ShareSheetItemViewProperties.IS_FIRST_PARTY));
-        Assert.assertEquals("Third property model isn't More.",
+        assertEquals("Third property model isn't More.",
                 activity.getResources().getString(R.string.sharing_more_icon_label),
                 propertyModels.get(2).get(ShareSheetItemViewProperties.LABEL));
-        Assert.assertEquals("Thired property model isn't marked as first party.", true,
+        assertEquals("Third property model isn't marked as first party.", true,
                 propertyModels.get(2).get(ShareSheetItemViewProperties.IS_FIRST_PARTY));
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilderTest.java
index db9c68ccd..e2199bd8 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilderTest.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.share;
 
+import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
@@ -12,13 +13,18 @@
 import android.app.Activity;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.net.Uri;
 import android.support.test.filters.MediumTest;
 import android.support.test.rule.ActivityTestRule;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
@@ -26,40 +32,48 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.share.ShareSheetPropertyModelBuilder.ContentType;
+import org.chromium.chrome.test.ChromeBrowserTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.components.browser_ui.share.ShareParams;
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.test.util.DummyUiActivity;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 
 /**
  * Tests {@link ShareSheetPropertyModelBuilder}.
  */
 @RunWith(ChromeJUnit4ClassRunner.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+@Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB})
 public final class ShareSheetPropertyModelBuilderTest {
     @Rule
+    public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule();
+
+    @Rule
     public ActivityTestRule<DummyUiActivity> mActivityTestRule =
             new ActivityTestRule<>(DummyUiActivity.class);
 
+    @Rule
+    public TestRule mFeatureProcessor = new Features.JUnitProcessor();
+
     @Mock
     private PackageManager mPackageManager;
-
     @Mock
     private ShareParams mParams;
-
     @Mock
     private ResolveInfo mResolveInfo1;
-
     @Mock
     private ResolveInfo mResolveInfo2;
-
     @Mock
     private ResolveInfo mResolveInfo3;
 
+    private static final String IMAGE_TYPE = "image/jpeg";
+    private static final String URL = "http://www.google.com/";
+
     private ArrayList<ResolveInfo> mResolveInfoList;
     private Activity mActivity;
 
@@ -95,11 +109,139 @@
         when(mPackageManager.queryIntentActivities(any(), anyInt())).thenReturn(mResolveInfoList);
         when(mPackageManager.getResourcesForApplication(anyString()))
                 .thenReturn(mActivity.getResources());
+    }
 
-        // Explicitly add the test feature so the call to getFieldTrialParamByFeature returns an
-        // empty string.
-        ChromeFeatureList.setTestFeatures(
-                Collections.singletonMap(ChromeFeatureList.CHROME_SHARING_HUB, true));
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15Enabled_hasCorrectLinkContentType() {
+        ShareParams shareParams = new ShareParams.Builder(null, "", URL).build();
+
+        assertEquals("Should contain LINK_PAGE_NOT_VISIBLE.",
+                ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+        assertEquals("Should contain LINK_PAGE_VISIBLE.",
+                ImmutableSet.of(ContentType.LINK_PAGE_VISIBLE),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        true));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15EnabledAndNoUrl_hasNoLinkContentType() {
+        ShareParams shareParams = new ShareParams.Builder(null, "", "").build();
+
+        assertEquals("Should not contain LINK_PAGE_NOT_VISIBLE", ImmutableSet.of(),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+        assertEquals("Should not contain LINK_PAGE_VISIBLE.", ImmutableSet.of(),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        true));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15EnabledAndUrlDifferentFromText_hasTextContentType() {
+        ShareParams shareParams = new ShareParams.Builder(null, "", "").setText("testText").build();
+
+        assertEquals("Should contain TEXT.", ImmutableSet.of(ContentType.TEXT),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15EnabledAndTextIsNull_hasNoTextContentType() {
+        ShareParams shareParams = new ShareParams.Builder(null, "", "").build();
+
+        assertEquals("Should not contain TEXT.", ImmutableSet.of(),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15Enabled_hasImageContentType() {
+        ShareParams shareParams = new ShareParams.Builder(null, "", "")
+                                          .setFileUris(new ArrayList<>(ImmutableSet.of(Uri.EMPTY)))
+                                          .setFileContentType(IMAGE_TYPE)
+                                          .build();
+
+        assertEquals("Should contain IMAGE.", ImmutableSet.of(ContentType.IMAGE),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15EnabledAndNoFiles_hasNoImageContentType() {
+        ShareParams shareParams =
+                new ShareParams.Builder(null, "", "").setFileContentType(IMAGE_TYPE).build();
+
+        assertEquals("Should not contain IMAGE.", ImmutableSet.of(),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15Enabled_hasOtherFileContentType() {
+        ShareParams shareParams =
+                new ShareParams.Builder(null, "", "")
+                        .setFileUris(new ArrayList<>(ImmutableList.of(Uri.EMPTY, Uri.EMPTY)))
+                        .setFileContentType("*/*")
+                        .build();
+
+        assertEquals("Should contain OTHER_FILE_TYPE.",
+                ImmutableSet.of(ContentType.OTHER_FILE_TYPE),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15EnabledAndNoFiles_hasNoFileContentType() {
+        ShareParams shareParams =
+                new ShareParams.Builder(null, "", "").setFileContentType("*/*").build();
+
+        assertEquals("Should not contain OTHER_FILE_TYPE.", ImmutableSet.of(),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+    }
+
+    @Test
+    @MediumTest
+    @Features.EnableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15Enabled_hasMultipleContentTypes() {
+        ShareParams shareParams =
+                new ShareParams.Builder(null, "", URL)
+                        .setText("testText")
+                        .setFileUris(new ArrayList<>(ImmutableList.of(Uri.EMPTY, Uri.EMPTY)))
+                        .setFileContentType("*/*")
+                        .build();
+
+        assertEquals("Should contain correct content types.",
+                ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.OTHER_FILE_TYPE,
+                        ContentType.TEXT),
+                ShareSheetPropertyModelBuilder.getContentTypes(shareParams, /*isUrlOfPageVisible=*/
+                        false));
+    }
+
+    @Test
+    @MediumTest
+    @Features.DisableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
+    public void getContentTypes_sharingHub15Disabled_returnsAllContentTypes() {
+        assertEquals("Should contain all content types.",
+                ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES,
+                ShareSheetPropertyModelBuilder.getContentTypes(null, false));
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java
index a32cf28..e08bafd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java
@@ -100,7 +100,7 @@
         Tab tab = mPermissionRule.getActivity().getActivityTab();
 
         mPermissionUpdateWaiter = new PermissionUpdateWaiter(
-                expectGranted ? "Granted:" : "Denied:", mPermissionRule.getActivity());
+                expectGranted ? "Granted" : "Denied", mPermissionRule.getActivity());
         tab.addObserver(mPermissionUpdateWaiter);
     }
 
@@ -142,7 +142,7 @@
 
         // Launch a page that uses geolocation and make sure a permission prompt shows up.
         mPermissionRule.runAllowTest(mPermissionUpdateWaiter,
-                "/chrome/test/data/geolocation/geolocation_on_load.html", "", 1, false, true);
+                "/chrome/test/data/geolocation/geolocation_on_load.html", "", 0, false, true);
     }
 
     /**
@@ -157,7 +157,7 @@
         // Launch a page that uses geolocation. No permission prompt is expected.
         initializeUpdateWaiter(false /* expectGranted */);
         mPermissionRule.runNoPromptTest(mPermissionUpdateWaiter,
-                "/chrome/test/data/geolocation/geolocation_on_load.html", "", 1, false, true);
+                "/chrome/test/data/geolocation/geolocation_on_load.html", "", 0, false, true);
     }
 
     private void setCookiesEnabled(final SettingsActivity settingsActivity, final boolean enabled) {
@@ -927,7 +927,7 @@
         initializeUpdateWaiter(false /* expectGranted */);
         mPermissionRule.runNoPromptTest(mPermissionUpdateWaiter,
                 "/content/test/data/media/getusermedia.html",
-                "getUserMediaAndStop({video: true, audio: false});", 1, false, true);
+                "getUserMediaAndStop({video: true, audio: false});", 0, false, true);
     }
 
     /**
@@ -952,7 +952,7 @@
         initializeUpdateWaiter(false /* expectGranted */);
         mPermissionRule.runNoPromptTest(mPermissionUpdateWaiter,
                 "/content/test/data/media/getusermedia.html",
-                "getUserMediaAndStop({video: false, audio: true});", 1, true, true);
+                "getUserMediaAndStop({video: false, audio: true});", 0, true, true);
     }
 
     /**
@@ -970,7 +970,7 @@
         initializeUpdateWaiter(true /* expectGranted */);
         mPermissionRule.runAllowTest(mPermissionUpdateWaiter,
                 "/content/test/data/media/getusermedia.html",
-                "getUserMediaAndStop({video: true, audio: false});", 1, false, true);
+                "getUserMediaAndStop({video: true, audio: false});", 0, false, true);
     }
 
     /**
@@ -989,7 +989,7 @@
         initializeUpdateWaiter(true /* expectGranted */);
         mPermissionRule.runAllowTest(mPermissionUpdateWaiter,
                 "/content/test/data/media/getusermedia.html",
-                "getUserMediaAndStop({video: false, audio: true});", 1, true, true);
+                "getUserMediaAndStop({video: false, audio: true});", 0, true, true);
     }
 
     /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarControllerTest.java
index f248de8..08e277d4b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarControllerTest.java
@@ -20,6 +20,7 @@
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
 import org.chromium.chrome.test.util.ChromeTabUtils;
@@ -133,6 +134,24 @@
         Assert.assertEquals(0, mTabModel.getCount());
     }
 
+    @Test
+    @SmallTest
+    public void testUndoSnackbarDisabled_AccessibilityEnabled() throws Exception {
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> ChromeAccessibilityUtil.get().setAccessibilityEnabledForTesting(true));
+        ChromeTabUtils.newTabFromMenu(
+                InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity());
+
+        Assert.assertNull("Snack bar should be null initially", getCurrentSnackbar());
+        Assert.assertEquals(2, mTabModel.getCount());
+
+        ChromeTabUtils.closeCurrentTab(
+                InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity());
+
+        Assert.assertNull(
+                "Undo snack bar should not be showing in accessibility mode", getCurrentSnackbar());
+    }
+
     private void clickSnackbar() {
         TestThreadUtils.runOnUiThreadBlocking(
                 ()
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrPermissionTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrPermissionTest.java
index 4b0728d..573b91f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrPermissionTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrPermissionTest.java
@@ -22,7 +22,7 @@
 import org.chromium.base.test.params.ParameterSet;
 import org.chromium.base.test.params.ParameterizedRunner;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.DisabledTest;
+import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.vr.rules.XrActivityRestriction;
@@ -90,11 +90,9 @@
     @Test
     @MediumTest
     @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
-    @DisabledTest(
-            message =
-                    "https://crbug.com/1091482, https://crbug.com/1091465, https://crbug.com/1091433")
-    public void
-    testVrPermissionPersistance() {
+    @DisableIf.
+    Build(message = "https://crbug.com/1091800", sdk_is_less_than = Build.VERSION_CODES.M)
+    public void testVrPermissionPersistance() {
         mWebXrVrPermissionTestFramework.loadFileAndAwaitInitialization(
                 "generic_webxr_page", PAGE_LOAD_TIMEOUT_S);
         mWebXrVrPermissionTestFramework.enterSessionWithUserGestureOrFail();
@@ -131,11 +129,9 @@
     @Test
     @MediumTest
     @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
-    @DisabledTest(
-            message =
-                    "https://crbug.com/1091483, https://crbug.com/1091476, https://crbug.com/1091463")
-    public void
-    testPermissionPersistsAfterReload() {
+    @DisableIf.
+    Build(message = "https://crbug.com/1091800", sdk_is_less_than = Build.VERSION_CODES.M)
+    public void testPermissionPersistsAfterReload() {
         mWebXrVrPermissionTestFramework.loadFileAndAwaitInitialization(
                 "generic_webxr_page", PAGE_LOAD_TIMEOUT_S);
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManagerTest.java
index a5b81ee0..1186983 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/NtpStreamLifecycleManagerTest.java
@@ -7,7 +7,7 @@
 import static org.mockito.AdditionalMatchers.or;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.times;
@@ -62,8 +62,8 @@
         MockitoAnnotations.initMocks(this);
 
         // Initialize a test instance for PrefServiceBridge.
-        when(mPrefServiceBridge.getBoolean(anyInt())).thenReturn(true);
-        doNothing().when(mPrefServiceBridge).setBoolean(anyInt(), anyBoolean());
+        when(mPrefServiceBridge.getBoolean(anyString())).thenReturn(true);
+        doNothing().when(mPrefServiceBridge).setBoolean(anyString(), anyBoolean());
         PrefServiceBridge.setInstanceForTesting(mPrefServiceBridge);
 
         ApplicationStatus.onStateChangeForTesting(mActivity, ActivityState.CREATED);
@@ -104,7 +104,7 @@
     @SmallTest
     public void testShow_ArticlesNotVisible() {
         // Verify that onShow is not called when articles are set hidden by the user.
-        when(mPrefServiceBridge.getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE)).thenReturn(false);
+        when(mPrefServiceBridge.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(false);
         ApplicationStatus.onStateChangeForTesting(mActivity, ActivityState.STARTED);
         when((mTab).isHidden()).thenReturn(false);
         when(mTab.isUserInteractable()).thenReturn(true);
@@ -112,7 +112,7 @@
         verify(mStream, times(0)).onShow();
 
         // Verify that onShow is called when articles are set shown by the user.
-        when(mPrefServiceBridge.getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE)).thenReturn(true);
+        when(mPrefServiceBridge.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(true);
         mNtpStreamLifecycleManager.getTabObserverForTesting().onShown(mTab, FROM_NEW);
         verify(mStream, times(1)).onShow();
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurfaceTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurfaceTest.java
index 8db92a1..d60b8f8a 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurfaceTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurfaceTest.java
@@ -9,7 +9,6 @@
 import static org.mockito.Mockito.verify;
 
 import android.app.Activity;
-import android.content.Context;
 import android.support.test.filters.SmallTest;
 import android.view.View;
 
@@ -41,7 +40,7 @@
 public class FeedStreamSurfaceTest {
     private static final String TEST_DATA = "test";
     private FeedStreamSurface mFeedStreamSurface;
-    private Context mContext;
+    private Activity mActivity;
 
     @Mock
     private SnackbarManager mSnackbarManager;
@@ -57,9 +56,9 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mContext = Robolectric.buildActivity(Activity.class).get();
+        mActivity = Robolectric.buildActivity(Activity.class).get();
         mocker.mock(FeedStreamSurfaceJni.TEST_HOOKS, mFeedStreamSurfaceJniMock);
-        mFeedStreamSurface = new FeedStreamSurface(null, () -> null, mContext, mSnackbarManager);
+        mFeedStreamSurface = new FeedStreamSurface(null, () -> null, mActivity, mSnackbarManager);
     }
 
     @Test
@@ -250,9 +249,9 @@
         FeedListContentManager contentManager =
                 mFeedStreamSurface.getFeedListContentManagerForTesting();
 
-        View v0 = new View(mContext);
-        View v1 = new View(mContext);
-        View v2 = new View(mContext);
+        View v0 = new View(mActivity);
+        View v1 = new View(mActivity);
+        View v2 = new View(mActivity);
 
         mFeedStreamSurface.setHeaderViews(Arrays.asList(v0, v1));
         assertEquals(2, contentManager.getItemCount());
@@ -280,8 +279,8 @@
                 mFeedStreamSurface.getFeedListContentManagerForTesting();
 
         // Set 2 header views first. These should always be there throughout stream update.
-        View v0 = new View(mContext);
-        View v1 = new View(mContext);
+        View v0 = new View(mActivity);
+        View v1 = new View(mActivity);
         mFeedStreamSurface.setHeaderViews(Arrays.asList(v0, v1));
         assertEquals(2, contentManager.getItemCount());
         assertEquals(v0,
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java
index c5c1104..c1678e3 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java
@@ -266,7 +266,7 @@
         // 1. Test initialization early finishing
         setupNewHomepagePolicyManagerForTests(true, TEST_URL, null);
         Mockito.verify(mMockRegistrar, Mockito.never())
-                .addObserver(Mockito.anyInt(), Mockito.any());
+                .addObserver(Mockito.anyString(), Mockito.any());
 
         // 2. Test getters
         Assert.assertFalse("Policy should be disabled when feature flag disabled",
@@ -291,4 +291,4 @@
         TestThreadUtils.runOnUiThreadBlocking(
                 () -> { mHomepagePolicyManager.onPreferenceChange(); });
     }
-}
\ No newline at end of file
+}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/preferences/PrefServiceBridgeTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/preferences/PrefServiceBridgeTest.java
index 9413128..706b1cb 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/preferences/PrefServiceBridgeTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/preferences/PrefServiceBridgeTest.java
@@ -26,7 +26,7 @@
 @RunWith(BaseRobolectricTestRunner.class)
 @Config(manifest = Config.NONE)
 public class PrefServiceBridgeTest {
-    private static final int PREF = 42;
+    private static final String PREF = "42";
 
     @Rule
     public JniMocker mocker = new JniMocker();
diff --git a/chrome/app/chrome_main.cc b/chrome/app/chrome_main.cc
index e4799b9..8e41e2f 100644
--- a/chrome/app/chrome_main.cc
+++ b/chrome/app/chrome_main.cc
@@ -18,6 +18,10 @@
 #include "headless/public/headless_shell.h"
 #include "ui/gfx/switches.h"
 
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/tracing_allocation_failure_tracker.h"
+#endif
+
 #if defined(OS_MACOSX)
 #include "chrome/app/chrome_main_mac.h"
 #endif
@@ -94,6 +98,10 @@
   SetUpBundleOverrides();
 #endif
 
+#if defined(OS_CHROMEOS)
+  chromeos::SetUpTracingAllocatorFailureTracker();
+#endif
+
   // Start the sampling profiler as early as possible - namely, once the command
   // line data is available. Allocated as an object on the stack to ensure that
   // the destructor runs on shutdown, which is important to avoid the profiler
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index 2cfc198..70af3b5 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -891,7 +891,7 @@
     All set!
   </message>
   <message name="IDS_LOGIN_MARKETING_OPT_IN_SCREEN_SUBTITLE" desc="The sub-title of the dialog that allows user to opt-in into several Google marketing options.">
-    Get <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> tips, offers, and updates, and share feedback
+    Get <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> tips, offers, and updates, and share feedback. Unsubscribe anytime.
   </message>
   <message name="IDS_LOGIN_MARKETING_OPT_IN_SCREEN_SUBTITLE_WITH_DEVICE_NAME" desc="The sub-title of the marketing opt in screen which will also include the name of the user's device.">
     You are ready to start using your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>.
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index eb3fbc5..09aa76be 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -373,6 +373,9 @@
       <message name="IDS_PERMISSIONS_BUBBLE_PROMPT_ACCESSIBLE_TITLE_TWO_PERMS_MORE" desc="The label that is read by a screen reader to describe the permissions prompt bubble. This will be followed by the short names of two permissions, then an &quot;and more&quot; descriptive text indicating that the dialog's body contains the entire list of requested permissions.">
         <ph name="SITE_NAME">$1<ex>google.com</ex></ph> wants to: <ph name="FIRST_PERMISSION">$2<ex>use your microphone</ex></ph>, <ph name="SECOND_PERMISSION">$3<ex>use your location</ex></ph>, and more
       </message>
+      <message name="IDS_PERMISSIONS_BUBBLE_PROMPT_THIS_FILE" desc="The text to be displayed instead of the origin when a local file requests permissions. This string will be inserted into Message ID 2121121439878997796, the full sentence will read: [This file] wants to request a permission.">
+        This file
+      </message>
       <message name="IDS_PERMISSION_CUSTOMIZE" desc="Label on text button to allow the user to customize a permissions request.">
         Customize
       </message>
diff --git a/chrome/app/resources/chromium_strings_mk.xtb b/chrome/app/resources/chromium_strings_mk.xtb
index 685ae7e..f4bbf1c9 100644
--- a/chrome/app/resources/chromium_strings_mk.xtb
+++ b/chrome/app/resources/chromium_strings_mk.xtb
@@ -52,7 +52,7 @@
 <translation id="3130323860337406239">Chromium го користи микрофонот.</translation>
 <translation id="3155163173539279776">Рестартирајте го Chromium</translation>
 <translation id="3179665906251668410">Отвори го линкот во инко&amp;гнито прозорец на Chromium</translation>
-<translation id="3190315855212034486">Леле! Chromium падна. Да се стартува повторно веднаш?</translation>
+<translation id="3190315855212034486">Уф! Chromium падна. Да се стартува повторно веднаш?</translation>
 <translation id="3229526316128325841">Chromium сака да ги извезе вашите лозинки.</translation>
 <translation id="3258596308407688501">Chromium не може да чита и да пишува во директориумот за податоци:
 
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index b0c39466..da2b25eb 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Sertifikaatondertekenaar</translation>
 <translation id="1145292499998999162">Inprop geblokkeer</translation>
 <translation id="1145593918056169051">Drukker het gestop</translation>
-<translation id="1146678959555564648">Gaan na VR</translation>
 <translation id="114721135501989771">Kry Google-slimhede in Chrome</translation>
 <translation id="1147991416141538220">Kontak die administrateur van hierdie toestel om vir toegang te vra.</translation>
 <translation id="1149401351239820326">Vervalmaand</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Vee derdeparty-webkoekies uit</translation>
 <translation id="2097372108957554726">Jy moet by Chrome aanmeld om nuwe toestelle te registreer.</translation>
 <translation id="2099172618127234427">Jy aktiveer tans Chrome-bedryfstelselontfoutingkenmerke wat sshd daemon sal opstel en selflaai van USB-datastokkies af moontlik sal maak.</translation>
-<translation id="2099625543891475722">jou fisieke kenmerke, soos lengte</translation>
 <translation id="2099686503067610784">Vee bedienersertifikaat "<ph name="CERTIFICATE_NAME" />" uit?</translation>
 <translation id="2100273922101894616">Outomatiese aanmelding</translation>
 <translation id="2101225219012730419">Weergawe:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Verwante inligting in Google Assistent</translation>
 <translation id="3733127536501031542">SSL-bediener met opstap</translation>
 <translation id="3735740477244556633">Rangskik volgens</translation>
+<translation id="3738213647660363521">Gepasmaakte skermpyltjiekleur</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Maak <ph name="APPLICATION" /> oop?</translation>
 <translation id="3742055079367172538">Skermkiekie geneem</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Hierdie toestel kan nie by die domein waaraan jou rekening behoort, ingeskryf word nie, want die toestel is gemerk vir bestuur deur 'n ander domein.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> wil vir Bluetooth-toestelle in die omtrek soek. Die volgende toestelle is gekry:</translation>
-<translation id="4353114845960720315">Terwyl jy in VR is, sal hierdie werf dalk meer te wete kom oor:</translation>
 <translation id="4354073718307267720">Vra wanneer 'n werf 'n 3D-kaart van jou omgewing wil skep of kameraposisie wil naspoor</translation>
 <translation id="4354344420232759511">Werwe wat jy besoek, sal hier verskyn</translation>
 <translation id="435527878592612277">Kies jou foto</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Primêre rekening</translation>
 <translation id="4660476621274971848">Het weergawe "<ph name="EXPECTED_VERSION" />" verwag, maar weergawe was "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Verander tans grootte</translation>
-<translation id="4660838440047236328">die uitleg van jou vertrek</translation>
 <translation id="4661407454952063730">Programdata kan enige data wees wat 'n program gestoor het (gegrond op ontwikkelaarinstellings), insluitend data soos kontakte, boodskappe en foto's.</translation>
 <translation id="4662373422909645029">Laat syfers uit bynaam</translation>
 <translation id="4662788913887017617">Deel hierdie boekmerk met jou iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Laat mobiele dataswerwing toe</translation>
 <translation id="4804818685124855865">Ontkoppel</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Ons beveel aan dat jy jou huidige Linux-houer rugsteun voordat jy opgradeer.</translation>
 <translation id="4807098396393229769">Naam op kaart</translation>
-<translation id="4808319664292298116">Gaan by VR in vanaf <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Opspringers geblokkeer:</translation>
 <translation id="480990236307250886">Maak die tuisblad oop</translation>
 <translation id="4811212958317149293">Skakelaartoegangsleutelbord se outomatiese skandering</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Kon nie pak nie.</translation>
 <translation id="5225324770654022472">Wys programkortpad</translation>
 <translation id="5227679487546032910">Verstek- groenblou avatar</translation>
+<translation id="5228088094491423618">Intydse Onderskrifte</translation>
 <translation id="5228579091201413441">Aktiveer sinkronisering</translation>
 <translation id="5229189185761556138">Bestuur invoermetodes</translation>
 <translation id="5230516054153933099">Venster</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">Wag tans vir verifikasie. <ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Baie groot</translation>
 <translation id="574209121243317957">Toonhoogte</translation>
-<translation id="5745136023067925867">Kry <ph name="DEVICE_TYPE" />-wenke, -aanbiedings en -opdaterings, en deel terugvoer</translation>
 <translation id="5746169159649715125">Stoor as PDF</translation>
 <translation id="5747552184818312860">Verval</translation>
 <translation id="5747785204778348146">Ontwikkelaar – onstabiel</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Verlaat bladsy}other{Verlaat bladsye}}</translation>
 <translation id="7207457272187520234">Stuur gebruik- en diagnostiese data. Hierdie toestel stuur tans diagnostiese, toestel- en programgebruikdata outomaties na Google toe. Dit sal met stelsel- en programstabiliteit en ander verbeteringe help. Sekere saamgestelde data sal ook Google-programme en -vennote, soos Android-ontwikkelaars, help. Hierdie instelling word deur die eienaar toegepas. As jou bykomende Web- en Programaktiwiteit-instelling aangeskakel is, kan hierdie data in jou Google-rekening gestoor word.</translation>
 <translation id="7207631048330366454">Deursoek programme</translation>
-<translation id="7210171324714276060">Die <ph name="EXTENSION_NAME" />-uitbreiding het soektog verander om<ph name="SEARCH_PROVIDER_DOMAIN" /> te gebruik</translation>
 <translation id="7210499381659830293">Uitbreidingdrukkers</translation>
 <translation id="7212097698621322584">Voer jou huidige PIN in om dit te verander. As jy nie jou PIN ken nie, moet jy die sekuriteitsleutel terugstel en dan 'n nuwe PIN skep.</translation>
 <translation id="7216409898977639127">Sellulêre diensverskaffer</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">Bind tans saam met "<ph name="DEVICE_NAME" />" …</translation>
 <translation id="7737238973539693982">Vee Linux (Beta) uit</translation>
 <translation id="7740996059027112821">Standaard</translation>
-<translation id="7743128043742060936">Hierdie bladsy is deur die <ph name="EXTENSION_NAME" />-uitbreiding verander</translation>
 <translation id="7744047395460924128">Sien jou drukgeskiedenis</translation>
 <translation id="7744192722284567281">Bevind dat dit data skend</translation>
 <translation id="7750228210027921155">Prent-in-prent</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Maak as 'n vasgespelde oortjie oop</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> is onderbreek</translation>
 <translation id="9124003689441359348">Gestoorde wagwoorde sal hier verskyn</translation>
+<translation id="9126149354162942022">Skermpyltjie se kleur</translation>
 <translation id="9128317794749765148">Kon nie opstelling voltooi nie</translation>
 <translation id="9128870381267983090">Koppel aan netwerk</translation>
 <translation id="9130015405878219958">Ongeldige modus ingevoer.</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index fd12b91e9..966ddc3 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">ሰርቲፊኬት ፈራሚ</translation>
 <translation id="1145292499998999162">ተሰኪ ታግዷል</translation>
 <translation id="1145593918056169051">አታሚ ቆሟል</translation>
-<translation id="1146678959555564648">ምናባዊ ዕውነታ አስገባ</translation>
 <translation id="114721135501989771">Google ዘመናዊ ነገሮችን በChrome ላይ ያግኙ</translation>
 <translation id="1147991416141538220">መዳረሻን ለመጠየቅ የዚህ መሣሪያ አስተዳዳሪውን ያነጋግሩ።</translation>
 <translation id="1149401351239820326">ጊዜው የሚያልፍበት ወር</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">የሦስተኛ ወገን ኩኪዎችን አጽዳ</translation>
 <translation id="2097372108957554726">አዲስ መሣሪያዎችን ለማስመዝገብ በመለያ ወደ Chrome መግባት አለብዎት</translation>
 <translation id="2099172618127234427">የsshd ስውር አገልጋይን የሚያዋቅሩ እና ከዩኤስቢ አንጻፊዎች ማስነሳትን የሚያነቁ የChrome OS ማረሚያ ባህሪያትን እያነቁ ነው።</translation>
-<translation id="2099625543891475722">እንደ ቁመት ያሉ የእርስዎ አካላዊ ባህሪያት</translation>
 <translation id="2099686503067610784">«<ph name="CERTIFICATE_NAME" />» የአገልጋይ እውቅና ማረጋገጫ ይሰረዝ?</translation>
 <translation id="2100273922101894616">በራስ-ግባ</translation>
 <translation id="2101225219012730419">ስሪት፦</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">ከGoogle ረዳት ጋር የተገናኘ መረጃ</translation>
 <translation id="3733127536501031542">SSL አገልጋይ ከነ ማሳደጊያው</translation>
 <translation id="3735740477244556633">ደርድር በ</translation>
+<translation id="3738213647660363521">ብጁ የጠቋሚ ቀለም</translation>
 <translation id="3738924763801731196"><ph name="OID" />፦</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ይከፈት?</translation>
 <translation id="3742055079367172538">ቅጽበታዊ ገጽ እይታ ተነስቷል</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">ይህ መሣሪያ በተለየ ጎራ የሚተዳደር መሆኑ ምልክት ስለተደረገበት የእርስዎ መለያ ባለበት ጎራ መመዝገብ አይችልም።</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> በአቅራቢያ የብሉቱዝ መሣሪያዎች ካሉ መቃኘት ይፈልጋል። የሚከተሉት መሣሪያዎች ተገኝተዋል፦</translation>
-<translation id="4353114845960720315">እርስዎ በቪአር ውስጥ ሳሉ ይህ ጣቢያ ስለእነዚህ ሊያውቅ ይችላል፦</translation>
 <translation id="4354073718307267720">አንድ ጣቢያ የዙሪያዎ የ3ል ካርታ መፍጠር ወይም የካሜራ ቦታ መከታተል ሲፈልግ ጠይቅ</translation>
 <translation id="4354344420232759511">እርስዎ የጎበኙዋቸው ጣቢያዎች እዚህ ላይ ብቅ ይላሉ</translation>
 <translation id="435527878592612277">የእርስዎን ፎቶ ይምረጡ</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">ዋና መለያ</translation>
 <translation id="4660476621274971848">የተጠበቀው ስሪት «<ph name="EXPECTED_VERSION" />» ነበር፣ ግን ስሪቱ «<ph name="NEW_ID" />» ነበር</translation>
 <translation id="4660540330091848931">መጠንን በመቀየር ላይ</translation>
-<translation id="4660838440047236328">የክፍልዎ አቀማመጥ</translation>
 <translation id="4661407454952063730">የመተግበሪያ ውሂብ እንደ እውቂያዎች፣ መልዕክቶች እና ፎቶዎች ያለ ውሂብ ጨምሮ አንድ መተግበሪያ ያስቀመጠው ማንኛውም ውሂብ (በገንቢ ቅንብሮች የሚወሰን) ሊሆን ይችላል።</translation>
 <translation id="4662373422909645029">ቅጥያ ስም ቁጥሮችን ማካተት አይችልም</translation>
 <translation id="4662788913887017617">ይህን ዕልባት ለእርስዎ iPhone ያጋሩት</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">የተንቀሳቃሽ ስልክ ውሂብ ዝውውር ይፍቀዱ</translation>
 <translation id="4804818685124855865">ግንኙነት አቋርጥ</translation>
 <translation id="4804827417948292437">አቮካዶ</translation>
-<translation id="4805077164141082536">አሁን ያለውን የእርስዎን Linux መያዣ ደረጃ ከማሻሻልዎ በፊት በምትኬ እንዲያስቀምጡ እንመክርዎታለን።</translation>
 <translation id="4807098396393229769">በካርድ ላይ ያለ ስም</translation>
-<translation id="4808319664292298116">ከ<ph name="DOMAIN" /> ሆነው ወደ ቪአር ይግቡ?</translation>
 <translation id="4808667324955055115">ብቅ-ባዮች ታግደዋል፦</translation>
 <translation id="480990236307250886">መነሻ ገጹን ክፈት</translation>
 <translation id="4811212958317149293">የመዳረሻ መቀየሪያ ቁልፍ ሰሌዳ ራስ-ሰር ቅኝት</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">መጠቅለል አልተሳካም።</translation>
 <translation id="5225324770654022472">የመተግበሪያዎች አቋራጮችን አሳይ</translation>
 <translation id="5227679487546032910">ነባሪ ደማቅ አረንጓዴ አምሳያ</translation>
+<translation id="5228088094491423618">የቀጥታ መግለጫ ጽሑፎች</translation>
 <translation id="5228579091201413441">ማመሳሰልን አንቃ</translation>
 <translation id="5229189185761556138">የግቤት ስልቶችን ያቀናብሩ</translation>
 <translation id="5230516054153933099">መስኮት</translation>
@@ -3707,7 +3703,6 @@
 <translation id="5739235828260127894">ማረጋገጫን በመጠበቅ ላይ። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">በጣም ትልቅ</translation>
 <translation id="574209121243317957">ቅላፄ</translation>
-<translation id="5745136023067925867">የ<ph name="DEVICE_TYPE" /> ጠቃሚ ምክሮችን፣ ቅናሾችን እና ዝማኔዎችን ያግኙ፣ እና ግብረመልስ ያጋሩ።</translation>
 <translation id="5746169159649715125">እንደ PDF አስቀምጥ</translation>
 <translation id="5747552184818312860">ጊዜው አልፎበታል</translation>
 <translation id="5747785204778348146">ገንቢ - ያልተረጋጋ</translation>
@@ -4830,7 +4825,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ከገጽ ውጣ}one{ከገጾች ውጣ}other{ከገጾች ውጣ}}</translation>
 <translation id="7207457272187520234">የአጠቃቀም እና የምርመራ ውሂብ ይላኩ። ይህ መሣሪያ በአሁኑ ጊዜ በራስ-ሰር የምርመራ፣ የመሣሪያ እና የመተግበሪያ አጠቃቀም ውሂብ ወደ Google እየላከ ነው። ይህ የሥርዓት እና የመተግበሪያ እርጋታን እና ሌሎች ማሻሻያዎችን ያግዛል። አንዳንድ ውሑድ ውሂብ እንዲሁም የGoogle መተግበሪያዎችን እና እንደ የAndroid ገንቢዎች ያሉ አጋሮችን ያግዛሉ። ይህ ቅንብር በባለቤቱ ተፈጻሚ ይደረጋል። የእርስዎ የተጨማሪ ድር እና መተግበሪያ እንቅስቃሴ ቅንብር በርቶ ከሆነ ይህ ውሂብ በGoogle መለያዎ ላይ ሊቀመጥ ይችላል።</translation>
 <translation id="7207631048330366454">መተግበሪያዎችን ይፈልጉ</translation>
-<translation id="7210171324714276060">የ<ph name="EXTENSION_NAME" /> ቅጥያ ፍለጋ <ph name="SEARCH_PROVIDER_DOMAIN" />ን እንዲጠቀም ቀይሮታል</translation>
 <translation id="7210499381659830293">የቅጥያ አታሚዎች</translation>
 <translation id="7212097698621322584">ለመለወጥ የእርስዎን አሁን ያለውን ፒን ያስገቡ። የእርስዎን ፒን የማያውቁት ከሆነ፣ የእርስዎን የደህንነት ቁልፍ ዳግም ማቀናበር እና በመቀጠል አዲስ ፒን መፍጠር ይኖርብዎታል።</translation>
 <translation id="7216409898977639127">የተንቀሳቃሽ ስልክ አገልግሎት አቅራቢ</translation>
@@ -5230,7 +5224,6 @@
 <translation id="7737115349420013392">ከ«<ph name="DEVICE_NAME" />» ጋር በማጣመር ላይ ...</translation>
 <translation id="7737238973539693982">Linux (ቅድመ-ይሁንታ)ን ሰርዝ</translation>
 <translation id="7740996059027112821">መደበኛ</translation>
-<translation id="7743128043742060936">ይህ ገጽ በ<ph name="EXTENSION_NAME" /> ቅጥያ ተለውጧል</translation>
 <translation id="7744047395460924128">የህትመት ታሪክዎን ይመልከቱ</translation>
 <translation id="7744192722284567281">በውሂብ ጥሰት ላይ ተገኝቷል</translation>
 <translation id="7750228210027921155">በሥዕል ውስጥ ሥዕል</translation>
@@ -6352,6 +6345,7 @@
 <translation id="9121814364785106365">እንደተሰካ ትር ክፈት</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> ባለበት ቆሟል</translation>
 <translation id="9124003689441359348">የተቀመጡ የይለፍ ቃላትዎ እዚህ ይታያሉ</translation>
+<translation id="9126149354162942022">የጠቋሚ ቀለም</translation>
 <translation id="9128317794749765148">ቅንብርን ማጠናቀቅ አልተቻለም</translation>
 <translation id="9128870381267983090">ከአውታረ መረብ ጋር ይገናኙ</translation>
 <translation id="9130015405878219958">ልክ ያልሆነ ሁነታ ገብቷል።</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 9ef0c41..faf6f85 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">الموقّع على الشهادات</translation>
 <translation id="1145292499998999162">تم حظر المكوّن الإضافي</translation>
 <translation id="1145593918056169051">توقفت الطابعة</translation>
-<translation id="1146678959555564648">‏إدخال VR</translation>
 <translation id="114721135501989771">‏الحصول على ميزات Google الذكية في Chrome</translation>
 <translation id="1147991416141538220">لطلب إذن الوصول إلى التطبيق، يُرجى التواصل مع مشرف هذا الجهاز.</translation>
 <translation id="1149401351239820326">شهر انتهاء الصلاحية</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">حذف ملفات تعريف الارتباط التابعة لجهات خارجية</translation>
 <translation id="2097372108957554726">‏يلزمك تسجيل الدخول إلى Chrome لتسجيل الأجهزة الجديدة</translation>
 <translation id="2099172618127234427">‏أنت تمكن ميزات تصحيح الأخطاء لنظام التشغيل Chrome التي ستثبّت البرنامج الخفي لـ sshd وتمكن التشغيل من محركات الأقراص USB.</translation>
-<translation id="2099625543891475722">سماتك البدنية، مثل الطول</translation>
 <translation id="2099686503067610784">هل تريد حذف شهادة الخادم "<ph name="CERTIFICATE_NAME" />"؟</translation>
 <translation id="2100273922101894616">تسجيل الدخول تلقائيًا</translation>
 <translation id="2101225219012730419">الإصدار:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">‏معلومات ذات صلة بخدمة "مساعد Google"</translation>
 <translation id="3733127536501031542">‏خادم بروتوكول SSL (طبقة المقابس الآمنة) مع الترقية</translation>
 <translation id="3735740477244556633">ترتيب بحسب</translation>
+<translation id="3738213647660363521">لون مُخصَّص للمؤشر</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">هل ترغب في فتح <ph name="APPLICATION" />؟</translation>
 <translation id="3742055079367172538">تم التقاط لقطة الشاشة</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">لا يمكن تسجيل هذا الجهاز في النطاق الذي ينتمي له حسابك نظرًا لأنه تم تصنيف الجهاز للعمل تحت إدارة نطاق آخر.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152">يريد <ph name="ORIGIN" /> البحث عن أجهزة البلوتوث المجاورة. وتم العثور على الأجهزة التالية:</translation>
-<translation id="4353114845960720315">أثناء استخدامك وضع "الواقع الافتراضي"، يمكن لهذا الموقع الإلكتروني التعرُّف على ما يلي:</translation>
 <translation id="4354073718307267720">طلب الإذن عند محاولة موقع إلكتروني إنشاء خريطة ثلاثية الأبعاد للبيئة المحيطة بك أو تتبُّع موضع الكاميرا</translation>
 <translation id="4354344420232759511">ستظهر المواقع التي تزورها هنا.</translation>
 <translation id="435527878592612277">اختيار صورتك</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">الحساب الأساسي</translation>
 <translation id="4660476621274971848">الإصدار المتوقع "<ph name="EXPECTED_VERSION" />"، ولكن الإصدار كان "<ph name="NEW_ID" />".</translation>
 <translation id="4660540330091848931">جارٍ تغيير الحجم</translation>
-<translation id="4660838440047236328">شكل غرفتك</translation>
 <translation id="4661407454952063730">تشمل بيانات التطبيق أيّ بيانات حفظها هذا التطبيق (بناءً على إعدادات مطوّر البرامج)، بما في ذلك بيانات مثل جهات الاتصال والرسائل والصور.</translation>
 <translation id="4662373422909645029">يجب ألا يضم اللقب أرقامًا</translation>
 <translation id="4662788913887017617">‏مشاركة هذه الإشارة المرجعة مع جهاز iPhone</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">السماح بتجوال بيانات الجوال</translation>
 <translation id="4804818685124855865">قطع الاتصال</translation>
 <translation id="4804827417948292437">أفوكادو</translation>
-<translation id="4805077164141082536">‏نقترح عليك الاحتفاظ بنسخة احتياطية من حاوية نظام التشغيل Linux الحالية قبل الترقية.</translation>
 <translation id="4807098396393229769">الاسم كما على البطاقة</translation>
-<translation id="4808319664292298116">هل تريد الدخول إلى وضع "الواقع الافتراضي" من <ph name="DOMAIN" />؟</translation>
 <translation id="4808667324955055115">تمّ حظر النوافذ المنبثقة:</translation>
 <translation id="480990236307250886">فتح الصفحة الرئيسية</translation>
 <translation id="4811212958317149293">المسح التلقائي في لوحة المفاتيح ضمن ميزة "الوصول عبر مفتاح التحويل"</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">تعذرت التعبئة.</translation>
 <translation id="5225324770654022472">إظهار اختصار التطبيقات</translation>
 <translation id="5227679487546032910">الصورة الرمزية التلقائية الزرقاء المخضرة</translation>
+<translation id="5228088094491423618">النُسخ النصية التلقائية</translation>
 <translation id="5228579091201413441">تفعيل المزامنة</translation>
 <translation id="5229189185761556138">إدارة طرق الإدخال</translation>
 <translation id="5230516054153933099">نافذة</translation>
@@ -3708,7 +3704,6 @@
 <translation id="5739235828260127894">في انتظار التحقُّق من صحة الاتصال. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">كبير جدًا</translation>
 <translation id="574209121243317957">درجة الصوت</translation>
-<translation id="5745136023067925867">يمكنك الحصول على آخر التحديثات والنصائح والعروض لجهاز <ph name="DEVICE_TYPE" /> ومشاركة التعليقات.</translation>
 <translation id="5746169159649715125">‏حفظ بتنسيق ملف PDF</translation>
 <translation id="5747552184818312860">تاريخ انتهاء الصلاحية</translation>
 <translation id="5747785204778348146">المطوّر - غير ثابت</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{الخروج من الصفجة}zero{الخروج من صفحة}two{الخروج من الصفحتين}few{الخروج من صفحات}many{الخروج من صفحة}other{الخروج من صفحة}}</translation>
 <translation id="7207457272187520234">‏يمكنك إرسال بيانات الاستخدام والتشخيص. ويُرسل هذا الجهاز حاليًا بيانات استخدام التطبيق وبيانات التشخيص وبيانات الجهاز تلقائيًا إلى Google. وسيساعد ذلك في تعزيز استقرار النظام والتطبيقات وإجراء المزيد من التحسينات. وسيستفيد أيضًا مطوّرو التطبيقات والشركاء في Google، مثل مطوّري البرامج المتوافقة مع Android، من بعض البيانات المجمّعة. ويفرض المالك هذا الإعداد. في حال تفعيل إعداد "النشاط الإضافي على الويب وفي التطبيقات"، قد يتم حفظ هذه البيانات في حسابك على Google.</translation>
 <translation id="7207631048330366454">البحث في التطبيقات</translation>
-<translation id="7210171324714276060">غيّرَت الإضافة <ph name="EXTENSION_NAME" /> صفحة البحث لتصبح<ph name="SEARCH_PROVIDER_DOMAIN" />.</translation>
 <translation id="7210499381659830293">طابعات مُوصّلة</translation>
 <translation id="7212097698621322584">يُرجى إدخال رقم التعريف الشخصي الحالي لتغييره. في حال كنت لا تعرف رقم التعريف الشخصي، عليك إعادة ضبط مفتاح الأمان، ثم إنشاء رقم تعريف شخصي جديد.</translation>
 <translation id="7216409898977639127">موفر شبكة الجوّال</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">جارٍ الإقران مع "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">‏حذف Linux (إصدار تجريبي)</translation>
 <translation id="7740996059027112821">عادي</translation>
-<translation id="7743128043742060936">تم تغيير هذه الصفحة بواسطة إضافة <ph name="EXTENSION_NAME" />.</translation>
 <translation id="7744047395460924128">الاطّلاع على سجلّ الطباعة</translation>
 <translation id="7744192722284567281">تم العثور عليها في عملية اختراق البيانات.</translation>
 <translation id="7750228210027921155">نافذة ضمن النافذة</translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">فتح كعلامة تبويب مثبتة</translation>
 <translation id="9122176249172999202">تم إيقاف <ph name="IDS_SHORT_PRODUCT_NAME" /> مؤقتًا</translation>
 <translation id="9124003689441359348">ستظهر هنا كلمات المرور المحفوظة</translation>
+<translation id="9126149354162942022">لون المؤشر</translation>
 <translation id="9128317794749765148">تعذّر إكمال الإعداد</translation>
 <translation id="9128870381267983090">الاتصال بالشبكة</translation>
 <translation id="9130015405878219958">تم إدخال وضع غير صحيح.</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index b468a657..1f37930c 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">প্ৰমাণপত্ৰ স্বাক্ষৰ কৰোঁতা</translation>
 <translation id="1145292499998999162">প্লাগইন অৱৰোধ কৰা হ'ল</translation>
 <translation id="1145593918056169051">প্ৰিণ্টাৰটো বন্ধ হৈছে</translation>
-<translation id="1146678959555564648">VR দিয়ক</translation>
 <translation id="114721135501989771">Chromeত Googleৰ সেৱা পাওক</translation>
 <translation id="1147991416141538220">এক্সেছ বিচাৰিবলৈ এই ডিভাইচটোৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="1149401351239820326">ম্যাদ উকলা মাহ</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">তৃতীয় পক্ষৰ কুকিসমূহ মচক</translation>
 <translation id="2097372108957554726">আপুনি নতুন ডিভাইচসমূহ পঞ্জীকৰণ কৰিবলৈ Chromeলৈ ছাইন ইন কৰিব লাগিব।</translation>
 <translation id="2099172618127234427">আপুনি Chrome OS ডিবাগ কৰা সুবিধাসমূহ সক্ষম কৰিছে যিবোৰে sshd daemon ছেট আপ কৰিব আৰু USB ড্ৰাইভসমূহৰ পৰা বুটিং সক্ষম কৰিব।</translation>
-<translation id="2099625543891475722">আপোনাৰ শাৰীৰিক বৈশিষ্ট্যসমূহ, যেনে উচ্চতা</translation>
 <translation id="2099686503067610784">ছার্ভাৰৰ প্ৰমাণপত্ৰ "<ph name="CERTIFICATE_NAME" />" মচিবনে?</translation>
 <translation id="2100273922101894616">স্বয়ংক্ৰিয়ভাৱে ছাইন ইন কৰক</translation>
 <translation id="2101225219012730419">সংস্কৰণ:</translation>
@@ -2122,7 +2120,7 @@
 <translation id="3677106374019847299">কাষ্টম প্ৰদানকাৰীৰ নাম দিয়ক</translation>
 <translation id="3677657024345889897">সকলোতকৈ বেছি শান্ত</translation>
 <translation id="3677911431265050325">ম’বাইল ছাইটৰ বাবে অনুৰোধ কৰক</translation>
-<translation id="3677959414150797585">এপ্‌সমূহ, ৱেবছাইটসমূহ আৰু বহুতো অন্তর্ভুক্ত হয়। যদি আপুনি ব্যৱহাৰৰ ডেটা শ্বেয়াৰ কৰিবলৈ বাছনি কৰিছে তেন্তে পৰামর্শসমূহ উন্নত কৰিবলৈ পৰিসংখ্যা পঠিয়ায়।</translation>
+<translation id="3677959414150797585">এপ্‌সমূহ, ৱেবছাইটসমূহ আৰু বহুতো অন্তর্ভুক্ত হয়। যদি আপুনি ব্যৱহাৰৰ ডেটা শ্বেয়াৰ কৰিবলৈ বাছনি কৰে কেৱল তেতিয়াহে পৰামর্শসমূহ উন্নত কৰিবলৈ পৰিসংখ্যা পঠিয়ায়।</translation>
 <translation id="3678156199662914018">এক্সটেনশ্বন: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3680683624079082902">পাঠৰ পৰা কথনৰ কণ্ঠধ্বনি</translation>
 <translation id="3681311097828166361">আপোনাৰ মতামতৰ বাবে ধন্যবাদ। আপুনি এতিয়া অফলাইন আছে, আপোনাৰ ৰিপ’ৰ্টৰ পাছত পঠিওৱা হ’ব।</translation>
@@ -2651,7 +2649,6 @@
 <translation id="4350019051035968019">এই ডিভাইচটো আপোনাৰ একাউণ্টটো থকা ড’মেইনত পঞ্জীয়ন কৰিব নোৱাৰি কাৰণ অন্য এটা ড’মেইনে ডিভাইচটো পৰিচালনাৰ বাবে ব্যৱহৃত বুলি চিহ্নিত কৰিছে।</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" />এ নিকটৱৰ্তী ব্লুটুথ ডিভাইচবোৰ বিচাৰি স্কেন কৰিব বিচাৰে। এই ডিভাইচকেইটা বিচাৰি পোৱা গৈছে:</translation>
-<translation id="4353114845960720315">আপুনি VRত থাকোঁতে এই ছাইটটোৱে এইবোৰৰ বিষয়ে জানিবলৈ সক্ষম হ'ব পাৰে:</translation>
 <translation id="4354073718307267720">কোনো ছাইটে আপোনাৰ চৌপাশৰ এখন 3D মেপ সৃষ্টি কৰিবলৈ অথবা কেমেৰাৰ স্থান ট্ৰেক কৰিবলৈ বিচাৰিলে সোধক</translation>
 <translation id="4354344420232759511">আপুনি চোৱা ছাইটসমূহ ইয়াত দেখা যাব</translation>
 <translation id="435527878592612277">আপোনাৰ ফট’ বাছনি কৰক</translation>
@@ -2885,7 +2882,6 @@
 <translation id="4659077111144409915">প্ৰাথমিক একাউণ্ট</translation>
 <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" সংস্কৰণৰ অনুমান কৰা হৈছিল কিন্তু সংস্কৰণটো "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">আকাৰ সলনি কৰি থকা হৈছে</translation>
-<translation id="4660838440047236328">আপোনাৰ কোঠাটোৰ লে’আউট</translation>
 <translation id="4661407454952063730">এপ্ ডেটা সর্ম্পকসূচী, বার্তাসমূহ আৰু ফট’সমূহ আদিকে ধৰি এপ্ এটাই ছেভ কৰা যিকোনো ডেটা (বিকাশকৰ্তা ছেটিংসমূহৰ ওপৰত নির্ভৰ কৰি) হ’ব পাৰে।</translation>
 <translation id="4662373422909645029">উপনামত সংখ্যা থাকিব নোৱাৰে</translation>
 <translation id="4662788913887017617">এই বুকমাৰ্কটো আপোনাৰ iPhoneৰ সৈতে শ্বেয়াৰ কৰক</translation>
@@ -2974,9 +2970,7 @@
 <translation id="4801512016965057443">ম'বাইল ডেটা ৰ'মিঙৰ অনুমতি দিয়ক</translation>
 <translation id="4804818685124855865">সংযোগ বিচ্ছিন্ন কৰক</translation>
 <translation id="4804827417948292437">এভ‘কাড‘</translation>
-<translation id="4805077164141082536">আপগ্ৰে’ড কৰাৰ আগতে আমি আপোনাক নিজৰ বৰ্তমানৰ Linux কণ্টেইনাৰটো বেক আপ কৰিবলৈ চুপাৰিছ কৰোঁ।</translation>
 <translation id="4807098396393229769">কার্ডত থকা নাম</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />ৰ পৰা VR আৰম্ভ কৰিবনে?</translation>
 <translation id="4808667324955055115">পপ-আপ অৱৰোধ কৰা হৈছে:</translation>
 <translation id="480990236307250886">গৃহ পৃষ্ঠাটো খোলক</translation>
 <translation id="4811212958317149293">ছুইচৰ দ্বাৰা এক্সেছ কৰিব পৰা কীব’ৰ্ডৰ স্বয়ংক্ৰিয় স্কেন</translation>
@@ -3702,7 +3696,6 @@
 <translation id="5739235828260127894">সত্যাপনৰ বাবে অপেক্ষা কৰি আছে। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">যথেষ্ট ডাঙৰ</translation>
 <translation id="574209121243317957">পিচ্চ</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" />ৰ বিষয়ে উপদেশ, অফাৰ আৰু আপডে’টসমূহ পাওক আৰু মতামত শ্বেয়াৰ কৰক</translation>
 <translation id="5746169159649715125">PDF হিচাপে ছেভ কৰক</translation>
 <translation id="5747552184818312860">এই সময়ত ম্যাদ উকলিব</translation>
 <translation id="5747785204778348146">বিকাশকৰ্তা - বিকাশ সম্পূৰ্ণ হোৱা নাই</translation>
@@ -4820,7 +4813,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{পৃষ্ঠাৰ বাহিৰ হওক}one{পৃষ্ঠাসমূহৰ বাহিৰ হওক}other{পৃষ্ঠাসমূহৰ বাহিৰ হওক}}</translation>
 <translation id="7207457272187520234">ব্যৱহাৰ আৰু ডায়গনষ্টিক ডেটা পঠিয়াওক। এই ডিভাইচটোৱে বর্তমান স্বয়ংক্ৰিয়ভাৱে Googleলৈ ডায়গন’ষ্টিক, ডিভাইচ আৰু এপ্ ব্যৱহাৰৰ ডেটা পঠিয়াই আছে। এই কার্যটোৱে ছিষ্টেম আৰু এপৰ স্থিৰতা আৰু অন্য উন্নয়নত সহায় কৰিব। কিছুমান একত্ৰিত ডেটাই Google এপ্‌ আৰু Android বিকাশকৰ্তাৰ দৰে অংশীদাৰকো সহায় কৰিব। এই ছেটিংটো গৰাকীয়ে বলৱৎ কৰিছে। যদি আপোনাৰ অতিৰিক্ত ৱেব আৰু এপৰ কার্যকলাপৰ ছেটিংটো অন কৰা হয় তেন্তে এই ডেটাখিনি আপোনাৰ Google একাউণ্টত ছেভ কৰা হ’ব পাৰে।</translation>
 <translation id="7207631048330366454">এপসমূহ সন্ধান কৰক</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> এক্সটেনশ্বনটোৱে <ph name="SEARCH_PROVIDER_DOMAIN" /> ব্যৱহাৰ কৰিবলৈ সন্ধানৰ সুবিধাটো সলনি কৰিছে</translation>
 <translation id="7210499381659830293">এক্সটেনশ্বন প্ৰিণ্টাৰ</translation>
 <translation id="7212097698621322584">আপোনাৰ বৰ্তমানৰ পিনটো সলনি কৰিবলৈ সেইটো দিয়ক। আপুনি যদি নিজৰ পিনটো নাজানে, আপুনি সুৰক্ষা চাবিটো ৰিছেট কৰি এটা নতুন পিন সৃষ্টি কৰিব লাগিব।</translation>
 <translation id="7216409898977639127">চেলুলাৰ প্ৰদানকাৰী</translation>
@@ -5218,7 +5210,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"ৰ সৈতে পেয়াৰ কৰি থকা হৈছে …</translation>
 <translation id="7737238973539693982">Linux (বিটা) মচক</translation>
 <translation id="7740996059027112821">মান্য</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> এক্সটেনশ্বনটোৱে এই পৃষ্ঠাখন সলনি কৰিছে</translation>
 <translation id="7744047395460924128">আপুনি কৰা প্ৰিণ্টৰ ইতিহাস চাওক</translation>
 <translation id="7744192722284567281">ডাটা উলংঘন হোৱা দেখা গৈছিল</translation>
 <translation id="7750228210027921155">চিত্ৰৰ ভিতৰত চিত্ৰ</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 7fb1f91..4a15e36 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -112,7 +112,6 @@
 <translation id="1143142264369994168">Sertifikat İmzaçısı</translation>
 <translation id="1145292499998999162">Plaqin bloklandı</translation>
 <translation id="1145593918056169051">Printer dayanıb</translation>
-<translation id="1146678959555564648">VR daxil edin</translation>
 <translation id="114721135501989771">Chrome'da Google yenilikləri əldə edin</translation>
 <translation id="1147991416141538220">Giriş tələb etmək üçün bu cihazın administratoru ilə əlaqə saxlayın.</translation>
 <translation id="1149401351239820326">Bitmə ayı</translation>
@@ -862,7 +861,6 @@
 <translation id="2096715839409389970">Üçüncü tərəf kukilərini təmizləyin</translation>
 <translation id="2097372108957554726">Yeni cihazları qeydiyyat etmək üçün Chrome'a daxil olmalısınız</translation>
 <translation id="2099172618127234427">Chrome OS baq ləğvini aktivləşdirirsiniz ki, sshd daemon quraşdırır və USB cihazlarından yüklənməyə imkan verir.</translation>
-<translation id="2099625543891475722">boy kimi fiziki göstəriciləriniz</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" server sertifikatı silinsin?</translation>
 <translation id="2100273922101894616">Hesaba avtomatik giriş</translation>
 <translation id="2101225219012730419">Versiya:</translation>
@@ -2180,6 +2178,7 @@
 <translation id="3732857534841813090">Google Assistent ilə əlaqəli məlumat</translation>
 <translation id="3733127536501031542">Quraşdırmalı SSL Server</translation>
 <translation id="3735740477244556633">Çeşidləyin</translation>
+<translation id="3738213647660363521">Fərdi kursor rəngi</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> tətbiqi açılsın?</translation>
 <translation id="3742055079367172538">Skrinşot çəkildi</translation>
@@ -2650,7 +2649,6 @@
 <translation id="4350019051035968019">Bu cihaz hesabın aid olduğu domen siyahısına alına bilməz, çünki cihaz başqa domen tərəfindən idarəetmə üçün qeyd olunub.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> yaxınlıqdakı Bluetooth cihazlarını axtarmaq istəyir. Aşağıdakı cihazlar tapıldı:</translation>
-<translation id="4353114845960720315">VR-da olarkən bu sayt aşağıdakı məlumatları əldə edə bilər:</translation>
 <translation id="4354073718307267720">Sayt ətrafınızdakı sahələrin 3D xəritəsini yaratmaq və ya kamera mövqeyini izləmək istədikdə icazə tələb edin</translation>
 <translation id="4354344420232759511">Daxil olduğunuz saytlar burda görünəcək</translation>
 <translation id="435527878592612277">Foto seçin</translation>
@@ -2885,7 +2883,6 @@
 <translation id="4659077111144409915">Əsas hesab</translation>
 <translation id="4660476621274971848">Gözlənilən versiya "<ph name="EXPECTED_VERSION" />" olsa da, versiya "<ph name="NEW_ID" />" idi.</translation>
 <translation id="4660540330091848931">Ölçüsü dəyişilir</translation>
-<translation id="4660838440047236328">otağınızın tərtibatı</translation>
 <translation id="4661407454952063730">Tətbiq datası kontaktlar, mesajlar və fotolar daxil olmaqla, tətbiq tərəfindən yadda saxlanılan (developer ayarlarından asılı olaraq) istənilən data ola bilər.</translation>
 <translation id="4662373422909645029">Ləqəbdə rəqəm olmamalıdır</translation>
 <translation id="4662788913887017617">Bu əlfəcini iPhone ilə paylaşın</translation>
@@ -2974,9 +2971,7 @@
 <translation id="4801512016965057443">Mobil data rominqə icazə verin</translation>
 <translation id="4804818685124855865">Ayırın</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Güncəlləmədən öncə cari Linux konteynerinizi yedəkləməyinizi tövsiyə edirik.</translation>
 <translation id="4807098396393229769">Kart Adı</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> domenindən VR daxil edilsin?</translation>
 <translation id="4808667324955055115">Popaplar blok edildi:</translation>
 <translation id="480990236307250886">Əsas səhifəni açın</translation>
 <translation id="4811212958317149293">Düymə ilə giriş klaviaturasında avtomatik skanlama</translation>
@@ -3290,6 +3285,7 @@
 <translation id="52232769093306234">Qablaşdırma alınmadı.</translation>
 <translation id="5225324770654022472">Tətbiqlərin qısayolunu göstərin</translation>
 <translation id="5227679487546032910">Defolt firuzəyi avatar</translation>
+<translation id="5228088094491423618">Canlı Altyazı</translation>
 <translation id="5228579091201413441">Sinxronizasiyanı aktiv edin</translation>
 <translation id="5229189185761556138">Daxiletmə üsullarını idarə edin</translation>
 <translation id="5230516054153933099">Pəncərə</translation>
@@ -3703,7 +3699,6 @@
 <translation id="5739235828260127894">Doğrulama gözlənilir. <ph name="LINK_BEGIN" />Ətraflı məlumat.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Çox böyük</translation>
 <translation id="574209121243317957">Pitç</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> məsləhətləri, təklifləri və güncəlləmələrini əldə edin və rəy paylaşın</translation>
 <translation id="5746169159649715125">PDF olaraq saxlayın</translation>
 <translation id="5747552184818312860">Vaxtı bitir</translation>
 <translation id="5747785204778348146">Developer - qeyri-stabil</translation>
@@ -4824,7 +4819,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Səhifədən Çıxın}other{Səhifələrdən Çıxın}}</translation>
 <translation id="7207457272187520234">İstifadə və diaqnostika datasını göndərin. Bu cihaz hazırda diaqnostika, cihaz və tətbiqdən istifadə datasını avtomatik Google'a göndərir. Bu, sistem və tətbiq sabitliyi və digər təkmilləşdirmələrə kömək edəcək. Bəzi ümumiləşdirilmiş məlumatlar Google tətbiqlərinə və Android tərtibatçıları kimi partnyorlara da kömək edəcək. Bu ayar sahibi tərəfindən tətbiq edilir. Əlavə Veb və Tətbiq Fəaliyyəti ayarı aktiv edilərsə, bu data Google Hesabınızda yadda saxlanıla bilər.</translation>
 <translation id="7207631048330366454">Tətbiqlərdə axtarın</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> artırması <ph name="SEARCH_PROVIDER_DOMAIN" /> istifadə etmək üçün axtarışı dəyişib</translation>
 <translation id="7210499381659830293">Artırma printerləri</translation>
 <translation id="7212097698621322584">Dəyişmək üçün cari PIN-i daxil edin. PIN-i bilmirsinizsə, güvənlik açarını sıfırlamalı, sonra isə yeni PIN yaratmalısınız.</translation>
 <translation id="7216409898977639127">Mobil provayder</translation>
@@ -5224,7 +5218,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" ilə birləşdirilir ...</translation>
 <translation id="7737238973539693982">Linux'u (Beta) silin</translation>
 <translation id="7740996059027112821">Standart</translation>
-<translation id="7743128043742060936">Bu səhifə <ph name="EXTENSION_NAME" /> artırması tərəfindən dəyişdirilib</translation>
 <translation id="7744047395460924128">Çap tarixçənizi görün</translation>
 <translation id="7744192722284567281">Verilənlərin təhlükəsizliyinin pozulması halı aşkarlanıb</translation>
 <translation id="7750228210027921155">Şəkil içində şəkil</translation>
@@ -6338,6 +6331,7 @@
 <translation id="9121814364785106365">Sancılmış tab olaraq açın</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> fasilədədir</translation>
 <translation id="9124003689441359348">Yadda saxlanmış parollar burada görünəcək</translation>
+<translation id="9126149354162942022">Kursor rəngi</translation>
 <translation id="9128317794749765148">Quraşdırma tamamlanmadı</translation>
 <translation id="9128870381267983090">Şəbəkəyə qoşulun</translation>
 <translation id="9130015405878219958">Yanlış rejimə daxil olmusunuz.</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index e075518a..d11539ce 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Сродак подпісу сертыфікатаў</translation>
 <translation id="1145292499998999162">Убудова заблакіравана</translation>
 <translation id="1145593918056169051">Прынтар спыніў работу</translation>
-<translation id="1146678959555564648">Увайсці ў VR</translation>
 <translation id="114721135501989771">Разумныя функцыі ў Chrome</translation>
 <translation id="1147991416141538220">Каб запытаць доступ, звярніцеся да адміністратара гэтай прылады.</translation>
 <translation id="1149401351239820326">Месяц заканчэння тэрміну дзеяння</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Выдаліць староннія файлы cookie</translation>
 <translation id="2097372108957554726">Каб рэгістраваць новыя прылады, трэба ўвайсці ў Chrome</translation>
 <translation id="2099172618127234427">Вы ўключаеце функцыі адладкі Chrome OS. Будзе наладжаны дэман SSHD і дазволена загрузка з USB-дыскаў.</translation>
-<translation id="2099625543891475722">вашы фізічныя характарыстыкі, такія як рост</translation>
 <translation id="2099686503067610784">Выдаліць сертыфікат сервера "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Аўтаматычны ўваход</translation>
 <translation id="2101225219012730419">Версія:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Інфармацыя, звязаная з Памочнікам Google</translation>
 <translation id="3733127536501031542">SSL-сервер з шыфраваннем Step-up</translation>
 <translation id="3735740477244556633">Парадак сартавання</translation>
+<translation id="3738213647660363521">Карыстальніцкі колер курсора</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Адкрыць праграму <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Здымак экрана зроблены</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Не ўдалося зарэгістраваць прыладу ў дамене, якому належыць ваш уліковы запіс: прылада пазначана для кіравання іншым даменам.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> запытвае пошук прылад Bluetooth паблізу. Знойдзены наступныя прылады:</translation>
-<translation id="4353114845960720315">Пакуль вы знаходзіцеся ў VR, гэты сайт можа атрымліваць звесткі пра:</translation>
 <translation id="4354073718307267720">Пытацца, калі сайт запытвае дазвол стварыць 3D-карту вашага асяроддзя і адсочваць становішча камеры</translation>
 <translation id="4354344420232759511">Тут будуць паказвацца наведаныя вамі сайты</translation>
 <translation id="435527878592612277">Выберыце сваё фота</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Асноўны ўліковы запіс</translation>
 <translation id="4660476621274971848">Чакалася версія "<ph name="EXPECTED_VERSION" />", фактычная версія – "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Змяненне памеру</translation>
-<translation id="4660838440047236328">планіроўку вашага пакоя</translation>
 <translation id="4661407454952063730">Даныя праграм – гэта любыя даныя, якія захоўваюцца праграмай (у залежнасці ад налад распрацоўшчыка), у тым ліку кантакты, паведамленні і фота.</translation>
 <translation id="4662373422909645029">Псеўданім не можа ўключаць лічбы</translation>
 <translation id="4662788913887017617">Абагульце гэту закладку з вашым iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Дазволіць мабільную перадачу даных у роўмінгу</translation>
 <translation id="4804818685124855865">Адключыцца</translation>
 <translation id="4804827417948292437">Авакада</translation>
-<translation id="4805077164141082536">Мы рэкамендуем зрабіць рэзервовую копію бягучага кантэйнера Linux перад абнаўленнем.</translation>
 <translation id="4807098396393229769">Імя на картцы</translation>
-<translation id="4808319664292298116">Увайсці ў VR з сайта <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Заблакіраваны выплыўныя вокны:</translation>
 <translation id="480990236307250886">Адкрыць галоўную старонку</translation>
 <translation id="4811212958317149293">Аўтаматычнае сканіраванне клавіятуры з дапамогай функцыі доступу праз пераключальнікі</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Памылка запакоўвання.</translation>
 <translation id="5225324770654022472">Паказваць ярлык праграм</translation>
 <translation id="5227679487546032910">Стандартны сіне-зялёны аватар</translation>
+<translation id="5228088094491423618">Імгненныя субцітры</translation>
 <translation id="5228579091201413441">Уключыць сінхранізацыю</translation>
 <translation id="5229189185761556138">Кіраваць метадамі ўводу</translation>
 <translation id="5230516054153933099">Акно</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Чаканне спраўджання. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Вельмі вялікі</translation>
 <translation id="574209121243317957">Вышыня голасу</translation>
-<translation id="5745136023067925867">Давайце водгукі, атрымлівайце прапановы, навіны і парады па прыладах <ph name="DEVICE_TYPE" /></translation>
 <translation id="5746169159649715125">Захаваць як PDF</translation>
 <translation id="5747552184818312860">Тэрмін дзеяння:</translation>
 <translation id="5747785204778348146">Распрацоўшчык – нестабільны параметр</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Выйсці са старонкі}one{Выйсці са старонак}few{Выйсці са старонак}many{Выйсці са старонак}other{Выйсці са старонак}}</translation>
 <translation id="7207457272187520234">Адпраўка даных пра выкарыстанне і дыягностыку. Зараз прылада аўтаматычна адпраўляе ў Google даныя дыягностыкі і даныя пра выкарыстанне прылады і праграм. Яны будуць карысныя для паляпшэння стабільнасці сістэмы і праграм і для іншых удасканаленняў. Некаторыя згрупаваныя даныя таксама будуць карысныя для праграм і партнёраў Google, напрыклад распрацоўшчыкаў Android. Гэта налада ўключана ўладальнікам. Калі налада "Дадатковыя дзеянні ў інтэрнэце і праграмах" уключана, адпаведныя даныя могуць захоўвацца ва Уліковым запісе Google.</translation>
 <translation id="7207631048330366454">Пошук праграм</translation>
-<translation id="7210171324714276060">Пашырэнне "<ph name="EXTENSION_NAME" />" змяніла пошукавую сістэму на наступную: <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Дабавачныя прынтары</translation>
 <translation id="7212097698621322584">Каб змяніць бягучы PIN-код, увядзіце яго. Калі вы не ведаеце PIN-код, вам трэба будзе скінуць ключ бяспекі, а затым стварыць новы PIN-код.</translation>
 <translation id="7216409898977639127">Сотавы аператар</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Ідзе спалучэнне з прыладай "<ph name="DEVICE_NAME" />"...</translation>
 <translation id="7737238973539693982">Выдаліць Linux (бэта-версія)</translation>
 <translation id="7740996059027112821">Стандартны</translation>
-<translation id="7743128043742060936">Гэта старонка была зменена пашырэннем "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="7744047395460924128">Праглядзець вашу гісторыю друку</translation>
 <translation id="7744192722284567281">Раскрыты пры ўцечцы даных</translation>
 <translation id="7750228210027921155">Відарыс у відарысе</translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">Адкрыць у замацаванай укладцы</translation>
 <translation id="9122176249172999202">Работа праграмы "<ph name="IDS_SHORT_PRODUCT_NAME" />" прыпынена</translation>
 <translation id="9124003689441359348">Захаваныя паролі з'явяцца тут</translation>
+<translation id="9126149354162942022">Колер курсора</translation>
 <translation id="9128317794749765148">Не ўдалося завяршыць наладку</translation>
 <translation id="9128870381267983090">Падключыцеся да сеткі</translation>
 <translation id="9130015405878219958">Уведзены няправільны рэжым.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index e0f6856..553b881 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Подписващ сертификата</translation>
 <translation id="1145292499998999162">Приставката е блокирана</translation>
 <translation id="1145593918056169051">Принтерът спря</translation>
-<translation id="1146678959555564648">Вход във VR</translation>
 <translation id="114721135501989771">Chrome с интелекта на Google</translation>
 <translation id="1147991416141538220">За да поискате достъп, обърнете се към администратора на това устройство.</translation>
 <translation id="1149401351239820326">Месец на валидност</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Изчистване на „бисквитките“ на трети страни</translation>
 <translation id="2097372108957554726">За да регистрирате нови устройства, трябва да влезете в Chrome</translation>
 <translation id="2099172618127234427">Активирате функциите за отстраняване на грешки в Chrome OS, които ще настроят демон sshd и ще позволят стартирането от USB дискове.</translation>
-<translation id="2099625543891475722">физическите ви черти, като ръст;</translation>
 <translation id="2099686503067610784">Да се изтрие ли сертификатът на сървър „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Автоматичен вход</translation>
 <translation id="2101225219012730419">Версия:</translation>
@@ -2183,6 +2181,7 @@
 <translation id="3732857534841813090">Информация, свързана с Google Асистент</translation>
 <translation id="3733127536501031542">SSL сървър с повишаване на сигурността</translation>
 <translation id="3735740477244556633">Сортиране по</translation>
+<translation id="3738213647660363521">Персонализиран цвят на курсора</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Да се отвори ли <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Направена бе екранна снимка</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">Това устройство не може да бъде регистрирано в домейна, към който принадлежи профилът ви, защото е означено за управление от друг домейн.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> иска да сканира за устройства с Bluetooth в близост. Намерени са следните:</translation>
-<translation id="4353114845960720315">Когато стартирате VR, този сайт може да научи за:</translation>
 <translation id="4354073718307267720">Извеждане на запитване, когато сайт иска да създаде триизмерна карта на заобикалящата ви среда или да следи позицията на камерата</translation>
 <translation id="4354344420232759511">Посетените от вас сайтове ще се показват тук</translation>
 <translation id="435527878592612277">Изберете своя снимка</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">Основен профил</translation>
 <translation id="4660476621274971848">Очакваната версия е <ph name="EXPECTED_VERSION" />, но тя бе <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">Преоразмерява се</translation>
-<translation id="4660838440047236328">плана на стаята ви.</translation>
 <translation id="4661407454952063730">Данните на приложенията могат да бъдат всяка запазена от тях информация (въз основа на настройките за програмисти), включително контакти, съобщения и снимки.</translation>
 <translation id="4662373422909645029">Не може да съдържа цифри</translation>
 <translation id="4662788913887017617">Споделете тази отметка със своя iPhone</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">Разрешаване на роуминг за данни</translation>
 <translation id="4804818685124855865">Изключване</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Препоръчваме да създадете резервно копие на текущия си контейнер с Linux, преди да надстроите.</translation>
 <translation id="4807098396393229769">Име върху картата</translation>
-<translation id="4808319664292298116">Да се стартира ли VR от <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Изскачащите прозорци са блокирани:</translation>
 <translation id="480990236307250886">Отваряне на началната страница</translation>
 <translation id="4811212958317149293">Автоматично сканиране на клавиатурата при достъп с превключване</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">Пакетирането не бе успешно.</translation>
 <translation id="5225324770654022472">Показване на прекия път към приложенията</translation>
 <translation id="5227679487546032910">Стандартен синьо-зелен аватар</translation>
+<translation id="5228088094491423618">Надписи на живо</translation>
 <translation id="5228579091201413441">Активиране на синхронизирането</translation>
 <translation id="5229189185761556138">Управление на методите на въвеждане</translation>
 <translation id="5230516054153933099">Window</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Чака се потвърждение. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Много голям</translation>
 <translation id="574209121243317957">Височина</translation>
-<translation id="5745136023067925867">Получавайте съвети, оферти и актуализации за <ph name="DEVICE_TYPE" /> и споделяйте отзиви</translation>
 <translation id="5746169159649715125">Запазване като PDF файл</translation>
 <translation id="5747552184818312860">Изтича на</translation>
 <translation id="5747785204778348146">За програмисти – нестабилен</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Изход от страницата}other{Изход от страниците}}</translation>
 <translation id="7207457272187520234">Изпращане на данни за употребата и диагностиката. Понастоящем това устройство автоматично изпраща до Google диагностична информация и данни за употребата на устройството и приложенията. Това ще послужи за подобряване на стабилността на системата и приложенията и др. Някои обобщени данни също така ще подпомогнат приложенията и партньорите на Google, напр. програмистите за Android. Тази настройка е наложена от собственика. Ако настройката „Допълнителна активност в мрежата и приложенията“ е включена за вас, тези данни може да се запазват в профила ви в Google.</translation>
 <translation id="7207631048330366454">Търсене в приложенията</translation>
-<translation id="7210171324714276060">Разширението <ph name="EXTENSION_NAME" /> промени търсещата машина на <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Принтери, свързани чрез разширение</translation>
 <translation id="7212097698621322584">Въведете текущия си ПИН код, за да го промените. Ако не го знаете, трябва да нулирате ключа за сигурност, след което да създадете нов ПИН код.</translation>
 <translation id="7216409898977639127">Мобилен оператор</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Сдвоява се с(ъс) „<ph name="DEVICE_NAME" />“...</translation>
 <translation id="7737238973539693982">Изтриване на Linux (бета)</translation>
 <translation id="7740996059027112821">Стандартна</translation>
-<translation id="7743128043742060936">Тази страница бе променена от разширението <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Преглеждане на историята ви на отпечатване</translation>
 <translation id="7744192722284567281">Разкрита при нарушение на сигурността на данните</translation>
 <translation id="7750228210027921155">Картина в картината</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Отваряне като фиксиран раздел</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> е на пауза</translation>
 <translation id="9124003689441359348">Тук ще се покажат запазените пароли</translation>
+<translation id="9126149354162942022">Цвят на курсора</translation>
 <translation id="9128317794749765148">Настройването не можа да бъде завършено</translation>
 <translation id="9128870381267983090">Свързване към мрежа</translation>
 <translation id="9130015405878219958">Въведен е невалиден режим.</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index e1ebb30..47ceebe8 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">সার্টিফিকেট স্বাক্ষরকারী</translation>
 <translation id="1145292499998999162">প্লাগ-ইন ব্লক করা আছে</translation>
 <translation id="1145593918056169051">প্রিন্টার বন্ধ হয়ে গেছে</translation>
-<translation id="1146678959555564648">(ভিআর)VR লিখুন</translation>
 <translation id="114721135501989771">Chrome-এ Google স্মার্ট পান</translation>
 <translation id="1147991416141538220">অ্যাক্সেস করার অনুমতি চাইতে এই ডিভাইস অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation>
 <translation id="1149401351239820326">মেয়াদ শেষের মাস</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">থার্ড-পার্টি কুকিজ মুছুন</translation>
 <translation id="2097372108957554726">নতুন ডিভাইস রেজিস্টার করতে আপনাকে Chrome-এ সাইন-ইন করতে হবে</translation>
 <translation id="2099172618127234427">আপনি Chrome OS ডিবাগিং বৈশিষ্ট্যগুলি চালু করছেন যা sshd daemon সেট-আপ করবে এবং USB ড্রাইভগুলি থেকে বুট করা চালু করবে৷</translation>
-<translation id="2099625543891475722">আপনার শারীরিক বৈশিষ্ট্য, যেমন উচ্চতা</translation>
 <translation id="2099686503067610784">সার্ভার সার্টিফিকেট "<ph name="CERTIFICATE_NAME" />" মুছবেন?</translation>
 <translation id="2100273922101894616">অটো সাইন-ইন</translation>
 <translation id="2101225219012730419">ভার্সন:</translation>
@@ -2655,7 +2653,6 @@
 <translation id="4350019051035968019">এই ডিভাইসটি একটি ভিন্ন ডোমেনের দ্বারা পরিচালনার জন্য চিহ্নিত হওয়ায় আপনার অ্যাকাউন্টটি যে ডোমেনের আওতায় রয়েছে তাতে নথিভুক্ত করা যাবে না৷</translation>
 <translation id="4350782034419308508">হ্যালো Google</translation>
 <translation id="4351060348582610152">কাছাকাছি থাকা ব্লুটুথ ডিভাইসগুলিকে <ph name="ORIGIN" /> স্ক্যান করতে চায়, এই ডিভাইসগুলি পাওয়া গেছে:</translation>
-<translation id="4353114845960720315">আপনি ভিআর (VR) মোডে থাকলে এই সাইট যে বিষয় সম্পর্কে জানতে পারে তা হল:</translation>
 <translation id="4354073718307267720">কোনও সাইট আপনার আশেপাশের এলাকার একটি 3D ম্যাপ তৈরি করতে বা ক্যামেরার অবস্থান ট্র্যাক করতে চাইলে, একবার জিজ্ঞাসা করে নিন</translation>
 <translation id="4354344420232759511">আপনার দেখা সাইটগুলি এখানে দেখানো হবে</translation>
 <translation id="435527878592612277">আপনার ফটো বেছে নিন</translation>
@@ -2890,7 +2887,6 @@
 <translation id="4659077111144409915">প্রাথমিক অ্যাকাউন্ট</translation>
 <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" ভার্সনটি হওয়া উচিত ছিল, কিন্তু ভার্সনটি হল "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">রিসাইজ করা হচ্ছে</translation>
-<translation id="4660838440047236328">আপনার রুমের লে-আউট</translation>
 <translation id="4661407454952063730">অ্যাপ ডেটা হল পরিচিতি, মেসেজ এবং ফটোর মতো যেকোনও ডেটা যা কোনও অ্যাপ (ডেভেলপার সেটিংসের উপরে ভিত্তি করে) সেভ করে রাখে।</translation>
 <translation id="4662373422909645029">ডাকনামে সংখ্যা থাকবে না</translation>
 <translation id="4662788913887017617">এই বুকমার্কটি আপনার iPhone এর সাথে শেয়ার করুন</translation>
@@ -2979,9 +2975,7 @@
 <translation id="4801512016965057443">মোবাইল ডেটা রোমিংয়ের অনুমতি দিন</translation>
 <translation id="4804818685124855865">সংযোগ বিচ্ছিন্ন</translation>
 <translation id="4804827417948292437">অ্যাভোকাডো</translation>
-<translation id="4805077164141082536">আপগ্রেড করার আগে আপনার বর্তমান Linux কন্টেনারের ব্যাক-আপ নেওয়ার জন্য সাজেস্ট করছি।</translation>
 <translation id="4807098396393229769">কার্ডে থাকা নাম</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> থেকে ভিআর (VR) প্রেজেন্টেশন চালু করতে চান?</translation>
 <translation id="4808667324955055115">পপ-আপগুলি ব্লক করা হয়েছে:</translation>
 <translation id="480990236307250886">হোম পৃষ্ঠাটি খুলুন</translation>
 <translation id="4811212958317149293">কীবোর্ড অটোমেটিক স্ক্যান করার অ্যাক্সেস পাল্টান</translation>
@@ -3709,7 +3703,6 @@
 <translation id="5739235828260127894">যাচাইকরণের জন্য অপেক্ষা করা হচ্ছে। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">খুব বড়</translation>
 <translation id="574209121243317957">পিচ</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> সংক্রান্ত পরামর্শ, অফার ও আপডেট পান এবং মতামত শেয়ার করুন</translation>
 <translation id="5746169159649715125">পিডিএফ হিসেবে সেভ করুন</translation>
 <translation id="5747552184818312860">মেয়াদ শেষ হবে</translation>
 <translation id="5747785204778348146">ডেভেলপার - অস্থায়ী</translation>
@@ -4833,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{পৃষ্ঠাটি ছেড়ে যান}one{পৃষ্ঠাগুলি ছেড়ে যান}other{পৃষ্ঠাগুলি ছেড়ে যান}}</translation>
 <translation id="7207457272187520234">ব্যবহার এবং ডায়াগনস্টিক বিষয়ক ডেটা পাঠান। বর্তমানে এই ডিভাইসটি অটোমেটিক Google-কে ডায়াগনস্টিক, ডিভাইস এবং অ্যাপ ব্যবহারের ডেটা পাঠাচ্ছে। এটি সিস্টেম ও অ্যাপের স্টেবিলিটি বাড়াতে এবং অন্যান্য উন্নতিতে সাহায্য করবে। কিছু একত্রিত করা ডেটা Android ডেভেলপারের মতো Google অ্যাপ এবং পার্টনারদেরও সাহায্য করবে। এই সেটিং মালিকের নিয়ন্ত্রণে রয়েছে। আপনার অতিরিক্ত 'ওয়েব ও অ্যাপ অ্যাক্টিভিটি' সেটিং চালু থাকলে, এই ডেটা আপনার Google অ্যাকাউন্টে সেভ করা হতে পারে।</translation>
 <translation id="7207631048330366454">অ্যাপ খুঁজুন</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> এক্সটেনশন <ph name="SEARCH_PROVIDER_DOMAIN" /> ব্যবহার করার জন্য সার্চ পরিবর্তন করেছে</translation>
 <translation id="7210499381659830293">এক্সটেনশন প্রিন্টার</translation>
 <translation id="7212097698621322584">পরিবর্তন করার জন্য আপনি পিন লিখুন। আপনি যদি পিন না জানেন তাহলে আপনাকে নিরাপত্তা কী রিসেট করতে হবে, তারপর নতুন পিন তৈরি করুন।</translation>
 <translation id="7216409898977639127">মোবাইল পরিষেবা প্রদানকারী</translation>
@@ -5233,7 +5225,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"-এর সাথে পেয়ার করা হয়েছে ...</translation>
 <translation id="7737238973539693982">Linux (বিটা) মুছে ফেলুন</translation>
 <translation id="7740996059027112821">মানক</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> এক্সটেনশনের মাধ্যমে এই পৃষ্ঠাটি পরিবর্তন করা হয়েছে</translation>
 <translation id="7744047395460924128">আপনার প্রিন্ট করার ইতিহাস দেখুন</translation>
 <translation id="7744192722284567281">ডেটার নিরাপত্তা লঙ্ঘন দেখা গেছে</translation>
 <translation id="7750228210027921155">ছবির-মধ্যে-ছবি</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 965536b..411fbaa7 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Potpisnik potvrde</translation>
 <translation id="1145292499998999162">Dodatak je blokiran</translation>
 <translation id="1145593918056169051">Štampač je prestao raditi</translation>
-<translation id="1146678959555564648">Uđi u VR</translation>
 <translation id="114721135501989771">Preuzmite pametne Google funkcije za Chrome</translation>
 <translation id="1147991416141538220">Da zatražite pristup, kontaktirajte administratora ovog uređaja.</translation>
 <translation id="1149401351239820326">Mjesec isteka</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Izbriši kolačiće trećih strana</translation>
 <translation id="2097372108957554726">Morate se prijaviti na Chrome da registrirate nove uređaje</translation>
 <translation id="2099172618127234427">Omogućujete funkcije za otklanjanje grešaka na Chrome OS-u kojim će se postaviti sshd daemon i omogućiti pokretanje sistema s USB uređaja.</translation>
-<translation id="2099625543891475722">vaše fizičke osobine, kao što je visina</translation>
 <translation id="2099686503067610784">Izbrisati potvrdu servera "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Automatsko prijavljivanje</translation>
 <translation id="2101225219012730419">Verzija:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Informacije povezane s Google Asistentom</translation>
 <translation id="3733127536501031542">SSL server s nadogradnjom</translation>
 <translation id="3735740477244556633">Poredaj po</translation>
+<translation id="3738213647660363521">Prilagođena boja kursora</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Otvoriti <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Snimak ekrana je napravljen</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Ovaj uređaj se ne može prijaviti na domenu vašeg računa jer je druga domena označila ovaj uređaj za upravljanje.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152">Web lokacija <ph name="ORIGIN" /> želi skenirati Bluetooth uređaje u blizini. Pronađeni su sljedeći uređaji:</translation>
-<translation id="4353114845960720315">Dok ste u VR-u, ova web lokacija može saznati sljedeće:</translation>
 <translation id="4354073718307267720">Traži odobrenje kada web lokacija želi kreirati 3D mapu okruženja i pratiti položaj kamere</translation>
 <translation id="4354344420232759511">Web lokacije koje posjećujete pojavit će se ovdje.</translation>
 <translation id="435527878592612277">Odaberite fotografiju</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Primarni račun</translation>
 <translation id="4660476621274971848">Očekivana je verzija "<ph name="EXPECTED_VERSION" />", ali je bila verzija "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Promjena veličine je u toku</translation>
-<translation id="4660838440047236328">raspored stvari u vašoj sobi</translation>
 <translation id="4661407454952063730">Podaci aplikacija mogu biti bilo koji podaci koje je aplikacija sačuvala (na osnovu postavki programera), uključujući podatke kao što su kontakti, poruke i fotografije.</translation>
 <translation id="4662373422909645029">Nadimak ne može imati brojeve</translation>
 <translation id="4662788913887017617">Dijelite ovu oznaku putem svog iPhone uređaja</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Omogući roming mobilnih podataka</translation>
 <translation id="4804818685124855865">Prekini vezu</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Preporučujemo da prije nadogradnje kreirate sigurnosnu kopiju Linux spremnika.</translation>
 <translation id="4807098396393229769">Ime i prezime na kartici</translation>
-<translation id="4808319664292298116">Pristupiti VR-u s domene <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Skočni prozori su blokirani:</translation>
 <translation id="480990236307250886">Otvorite početnu stranicu</translation>
 <translation id="4811212958317149293">Automatsko skeniranje prekidača za pristup na tastaturi</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Pakiranje nije uspjelo.</translation>
 <translation id="5225324770654022472">Prikaži prečicu do aplikacije</translation>
 <translation id="5227679487546032910">Zadani tirkizni avatar</translation>
+<translation id="5228088094491423618">Automatski titlovi</translation>
 <translation id="5228579091201413441">Omogući sinhronizaciju</translation>
 <translation id="5229189185761556138">Upravljaj načinima unosa</translation>
 <translation id="5230516054153933099">Prozor</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Čeka se potvrda. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Vrlo velik</translation>
 <translation id="574209121243317957">Visina</translation>
-<translation id="5745136023067925867">Primajte savjete, ponude i ažuriranja za uređaj <ph name="DEVICE_TYPE" /> i dijelite povratne informacije</translation>
 <translation id="5746169159649715125">Sačuvaj kao PDF</translation>
 <translation id="5747552184818312860">Ističe</translation>
 <translation id="5747785204778348146">Programer - nestabilno</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Napusti stranicu}one{Napusti stranice}few{Napusti stranice}other{Napusti stranice}}</translation>
 <translation id="7207457272187520234">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. Ovo će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ovu postavku je nametnuo vlasnik. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation>
 <translation id="7207631048330366454">Pretražite aplikacije</translation>
-<translation id="7210171324714276060">Ekstenzija <ph name="EXTENSION_NAME" /> je promijenila domenu pretraživanja na <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Štampači ekstenzija</translation>
 <translation id="7212097698621322584">Unesite sadašnji PIN da ga promijenite. Ako ne znate svoj PIN, moraćete poništiti sigurnosni ključ, a zatim kreirati novi PIN.</translation>
 <translation id="7216409898977639127">Mobilni operater</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Uparivanje s uređajem "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Izbrišite Linux (Beta)</translation>
 <translation id="7740996059027112821">Standardno</translation>
-<translation id="7743128043742060936">Ovu stranicu je promijenila ekstenzija <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Prikaz historije štampanja</translation>
 <translation id="7744192722284567281">Pronađeno u narušavanju podataka</translation>
 <translation id="7750228210027921155">Slika u slici</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Otvori kao zakačenu karticu</translation>
 <translation id="9122176249172999202">Aplikacija <ph name="IDS_SHORT_PRODUCT_NAME" /> je pauzirana</translation>
 <translation id="9124003689441359348">Sačuvane lozinke će se prikazati ovdje</translation>
+<translation id="9126149354162942022">Boja kursora</translation>
 <translation id="9128317794749765148">Postavljanje nije dovršeno</translation>
 <translation id="9128870381267983090">Spoji se na mrežu</translation>
 <translation id="9130015405878219958">Ušli ste u nevažeći način rada.</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index dfa68f5..a07458a 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Signant del certificat</translation>
 <translation id="1145292499998999162">Connector bloquejat</translation>
 <translation id="1145593918056169051">La impressora s'ha aturat</translation>
-<translation id="1146678959555564648">Activa el mode RV</translation>
 <translation id="114721135501989771">Eines intel·ligents a Chrome</translation>
 <translation id="1147991416141538220">Per demanar accés, contacta amb l'administrador d'aquest dispositiu.</translation>
 <translation id="1149401351239820326">Mes de caducitat</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Esborra les galetes de tercers</translation>
 <translation id="2097372108957554726">Inicieu la sessió a Chrome per registrar dispositius nous</translation>
 <translation id="2099172618127234427">Esteu activant les funcions de depuració de Chrome OS, de manera que es configurarà el dimoni sshd i es permetrà iniciar el sistema des d'unitats USB.</translation>
-<translation id="2099625543891475722">els teus trets físics, com ara l'alçada</translation>
 <translation id="2099686503067610784">Voleu suprimir el certificat de servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Inici de sessió automàtic</translation>
 <translation id="2101225219012730419">Versió:</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">Informació relacionada amb l'Assistent de Google</translation>
 <translation id="3733127536501031542">Servidor SSL amb entrada progressiva</translation>
 <translation id="3735740477244556633">Ordena per</translation>
+<translation id="3738213647660363521">Color personalitzat del cursor</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vols obrir <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Captura de pantalla feta</translation>
@@ -2655,7 +2654,6 @@
 <translation id="4350019051035968019">No es pot inscriure aquest dispositiu al domini del vostre compte perquè s'ha indicat que el dispositiu es gestiona en un altre domini.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> vol cercar dispositius Bluetooth propers. S'han trobat els dispositius següents:</translation>
-<translation id="4353114845960720315">Mentre estiguis en el mode RV, pot ser que aquest lloc web obtingui la informació següent:</translation>
 <translation id="4354073718307267720">Pregunta'm quan un lloc web vulgui crear un mapa en 3D del meu entorn o fer un seguiment de la posició de la càmera</translation>
 <translation id="4354344420232759511">Els llocs web que visitis es mostraran aquí</translation>
 <translation id="435527878592612277">Selecciona la teva foto</translation>
@@ -2890,7 +2888,6 @@
 <translation id="4659077111144409915">Compte principal</translation>
 <translation id="4660476621274971848">La versió esperada era <ph name="EXPECTED_VERSION" />, però la que hi havia era <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">S'està canviant la mida</translation>
-<translation id="4660838440047236328">la distribució de la teva habitació</translation>
 <translation id="4661407454952063730">Les dades de les aplicacions poden ser qualsevol mena de dada que hagi desat una aplicació (en funció de la configuració del desenvolupador), com ara els contactes, els missatges i les fotos.</translation>
 <translation id="4662373422909645029">L'àlies no pot incloure nombres</translation>
 <translation id="4662788913887017617">Comparteix aquesta adreça d'interès amb el teu iPhone</translation>
@@ -2979,9 +2976,7 @@
 <translation id="4801512016965057443">Permet la itinerància de dades mòbils</translation>
 <translation id="4804818685124855865">Desconnecta</translation>
 <translation id="4804827417948292437">Alvocat</translation>
-<translation id="4805077164141082536">Et recomanem que facis una còpia de seguretat del contenidor de Linux actual abans de dur a terme l'actualització.</translation>
 <translation id="4807098396393229769">Titular de la targeta</translation>
-<translation id="4808319664292298116">Vols entrar al mode RV des del domini <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">S'han bloquejat les finestres emergents:</translation>
 <translation id="480990236307250886">Obre la pàgina d'inici</translation>
 <translation id="4811212958317149293">Cerca automàtica del teclat d'accés amb interruptors</translation>
@@ -3296,6 +3291,7 @@
 <translation id="5225324770654022472">Mostra la drecera d'aplicacions 
 </translation>
 <translation id="5227679487546032910">Avatar turquesa predeterminat</translation>
+<translation id="5228088094491423618">Subtítols en directe</translation>
 <translation id="5228579091201413441">Activa la sincronització</translation>
 <translation id="5229189185761556138">Gestiona els mètodes d'introducció</translation>
 <translation id="5230516054153933099">Finestra</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">S'està esperant la verificació. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Molt gran</translation>
 <translation id="574209121243317957">To</translation>
-<translation id="5745136023067925867">Obtén consells, ofertes i informació sobre <ph name="DEVICE_TYPE" />, i comparteix suggeriments</translation>
 <translation id="5746169159649715125">Desa com a PDF</translation>
 <translation id="5747552184818312860">Caduca el dia</translation>
 <translation id="5747785204778348146">Desenvolupador: inestable</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Surt de la pàgina}other{Surt de les pàgines}}</translation>
 <translation id="7207457272187520234">Envia dades d'ús i de diagnòstic. En aquests moments aquest dispositiu envia automàticament a Google dades de diagnòstic, del dispositiu i d'ús d'aplicacions. Aquestes dades ajudaran a millorar l'estabilitat del sistema i de les aplicacions, entre altres característiques. Una part de les dades agregades també serà útil per a les aplicacions i per als partners de Google, com ara els desenvolupadors d'Android. El propietari ha aplicat aquesta opció de configuració. Si tens activada l'opció Activitat al web i en aplicacions addicional, és possible que aquestes dades es desin al teu Compte de Google.</translation>
 <translation id="7207631048330366454">Cerca aplicacions</translation>
-<translation id="7210171324714276060">L'extensió <ph name="EXTENSION_NAME" /> ha canviat el proveïdor de cerca i ara utilitza <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Impressores d'extensions</translation>
 <translation id="7212097698621322584">Introdueix el PIN actual per canviar-lo. Si no el saps, hauràs de restablir la clau de seguretat i, a continuació, crear un PIN nou.</translation>
 <translation id="7216409898977639127">Proveïdor de dades mòbils</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">S'està vinculant amb "<ph name="DEVICE_NAME" />"...</translation>
 <translation id="7737238973539693982">Suprimeix Linux (versió beta)</translation>
 <translation id="7740996059027112821">Estàndard</translation>
-<translation id="7743128043742060936">L'extensió <ph name="EXTENSION_NAME" /> ha canviat aquesta pàgina</translation>
 <translation id="7744047395460924128">Veure l'historial d'impressions</translation>
 <translation id="7744192722284567281">S'ha trobat en una violació de les dades</translation>
 <translation id="7750228210027921155">Pantalla en pantalla</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Obre-ho com a pestanya reduïda</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> està en pausa</translation>
 <translation id="9124003689441359348">Les contrasenyes desades es mostraran aquí</translation>
+<translation id="9126149354162942022">Color del cursor</translation>
 <translation id="9128317794749765148">No s'ha pogut completar la configuració</translation>
 <translation id="9128870381267983090">Connecta't a la xarxa</translation>
 <translation id="9130015405878219958">S'ha introduït un mode no vàlid.</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index e82626df..c4396255 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Autor podpisu certifikátu</translation>
 <translation id="1145292499998999162">Plugin zablokován</translation>
 <translation id="1145593918056169051">Tiskárna přestala fungovat</translation>
-<translation id="1146678959555564648">Zapnout VR</translation>
 <translation id="114721135501989771">Získejte do Chromu chytré funkce Google</translation>
 <translation id="1147991416141538220">Chcete-li požádat o přístup, kontaktujte administrátora tohoto zařízení.</translation>
 <translation id="1149401351239820326">Měsíc vypršení platnosti</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Vymazat soubory cookie třetích stran</translation>
 <translation id="2097372108957554726">Chcete-li zaregistrovat nová zařízení, musíte se přihlásit do Chromu.</translation>
 <translation id="2099172618127234427">Aktivujete funkce ladění systému Chrome OS, které nastaví démona sshd a umožní spouštění z jednotek USB.</translation>
-<translation id="2099625543891475722">vaše fyzické vlastnosti, například výšku,</translation>
 <translation id="2099686503067610784">Smazat certifikát serveru <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Přihlásit se automaticky</translation>
 <translation id="2101225219012730419">Verze:</translation>
@@ -2656,7 +2654,6 @@
 <translation id="4350019051035968019">Toto zařízení nelze zaregistrovat do domény, do které patří váš účet, protože je označeno pro správu jinou doménou.</translation>
 <translation id="4350782034419308508">Hej Google</translation>
 <translation id="4351060348582610152">Web <ph name="ORIGIN" /> chce vyhledat zařízení Bluetooth v okolí. Byla nalezena následující zařízení:</translation>
-<translation id="4353114845960720315">V režimu virtuální reality tento web může získat následující informace:</translation>
 <translation id="4354073718307267720">Zeptat se, když chce web vytvořit 3D mapu vašeho okolí nebo sledovat polohu kamery</translation>
 <translation id="4354344420232759511">Zde se zobrazí weby, které navštívíte</translation>
 <translation id="435527878592612277">Vyberte svou fotografii</translation>
@@ -2891,7 +2888,6 @@
 <translation id="4659077111144409915">Primární účet</translation>
 <translation id="4660476621274971848">Byla očekávána verze <ph name="EXPECTED_VERSION" />, ale použita byla verze <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">Probíhá změna velikosti</translation>
-<translation id="4660838440047236328">rozvržení vaší místnosti.</translation>
 <translation id="4661407454952063730">Data aplikací mohou zahrnovat jakákoliv data, která uložila aplikace (v závislosti na nastavení vývojáře), včetně dat, jako jsou kontakty, zprávy a fotky.</translation>
 <translation id="4662373422909645029">Přezdívka nesmí obsahovat čísla</translation>
 <translation id="4662788913887017617">Sdílejte tuto záložku se svým iPhonem</translation>
@@ -2980,9 +2976,7 @@
 <translation id="4801512016965057443">Povolit roaming pro mobilní data</translation>
 <translation id="4804818685124855865">Odpojit</translation>
 <translation id="4804827417948292437">Avokádo</translation>
-<translation id="4805077164141082536">Před upgradováním doporučujeme zálohovat aktuální kontejner systému Linux.</translation>
 <translation id="4807098396393229769">Jméno na kartě</translation>
-<translation id="4808319664292298116">Spustit virtuální realitu z webu <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Byla zablokována vyskakovací okna:</translation>
 <translation id="480990236307250886">Otevřít domovskou stránku</translation>
 <translation id="4811212958317149293">Automatické vyhledávání klávesnice pro přístup pomocí přepínačů</translation>
@@ -3710,7 +3704,6 @@
 <translation id="5739235828260127894">Čeká na ověření. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Velmi velké</translation>
 <translation id="574209121243317957">Výška</translation>
-<translation id="5745136023067925867">Nechte si zasílat tipy, nabídky a aktuality týkající se zařízení <ph name="DEVICE_TYPE" /> a poskytujte nám zpětnou vazbu</translation>
 <translation id="5746169159649715125">Uložit jako PDF</translation>
 <translation id="5747552184818312860">Konec platnosti</translation>
 <translation id="5747785204778348146">Pro vývojáře – nestabilní</translation>
@@ -4833,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Opustit stránku}few{Opustit stránky}many{Opustit stránky}other{Opustit stránky}}</translation>
 <translation id="7207457272187520234">Odesílat údaje o využití a diagnostice. Toto zařízení aktuálně automaticky odesílá do Googlu diagnostické údaje a údaje o zařízení a aplikacích a jejich využití. Tyto údaje nám pomohou se zvyšováním stability systému a aplikací a dalšími vylepšeními. Některá souhrnná data budou moci využít také naši partneři, např. vývojáři aplikací pro Android. Toto nastavení je vyžadováno vlastníkem. Pokud je zapnuto dodatečné nastavení Aktivita na webu a v aplikacích, mohou se tato data ukládat do vašeho účtu Google.</translation>
 <translation id="7207631048330366454">Hledat v aplikacích</translation>
-<translation id="7210171324714276060">Rozšíření <ph name="EXTENSION_NAME" /> změnilo poskytovatele vyhledávání na <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Rozšíření pro tiskárny</translation>
 <translation id="7212097698621322584">Chcete-li změnit PIN, zadejte aktuální PIN. Pokud svůj PIN neznáte, budete bezpečnostní klíč muset resetovat a poté vytvořit nový PIN.</translation>
 <translation id="7216409898977639127">Poskytovatel mobilních dat</translation>
@@ -5233,7 +5225,6 @@
 <translation id="7737115349420013392">Párování se zařízením <ph name="DEVICE_NAME" />…</translation>
 <translation id="7737238973539693982">Vymazat Linux (beta)</translation>
 <translation id="7740996059027112821">Standardně</translation>
-<translation id="7743128043742060936">Tato stránka byla změněna rozšířením <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Zobrazení historie tisku</translation>
 <translation id="7744192722284567281">Nalezeno v porušení zabezpečení údajů</translation>
 <translation id="7750228210027921155">Obraz v obraze</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 680be7c3..4239779 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Certifikatunderskriver</translation>
 <translation id="1145292499998999162">Pluginnet blev blokeret</translation>
 <translation id="1145593918056169051">Printeren er stoppet</translation>
-<translation id="1146678959555564648">Angiv VR</translation>
 <translation id="114721135501989771">Få Googles smarte funktioner i Chrome</translation>
 <translation id="1147991416141538220">Hvis du vil anmode om adgang, skal du kontakte administratoren af denne enhed.</translation>
 <translation id="1149401351239820326">Udløbsmåned</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Slet cookies fra tredjeparter</translation>
 <translation id="2097372108957554726">Du skal logge ind i Chrome for at registrere nye enheder</translation>
 <translation id="2099172618127234427">Du aktiverer Chrome OS-fejlretningsfunktioner, som konfigurerer sshd daemon og aktiverer systemgenstart via USB-drev.</translation>
-<translation id="2099625543891475722">Dine fysiske træk som f.eks. højde</translation>
 <translation id="2099686503067610784">Slet servercertifikatet "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Automatisk login</translation>
 <translation id="2101225219012730419">Version:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Oplysninger, der er relateret til Google Assistent</translation>
 <translation id="3733127536501031542">SSL-server med optrapning</translation>
 <translation id="3735740477244556633">Sortér efter</translation>
+<translation id="3738213647660363521">Tilpasset markørfarve</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vil du åbne <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Screenshottet blev gemt</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Denne enhed kan ikke tilmeldes det domæne, som din konto hører under, da enheden er markeret til administration på et andet domæne.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> vil gerne søge efter Bluetooth-enheder i nærheden. Følgende enheder blev fundet:</translation>
-<translation id="4353114845960720315">Mens du bruger VR-tilstand, kan dette website muligvis få oplysninger om:</translation>
 <translation id="4354073718307267720">Spørg, når et website gerne vil oprette et 3D-kort over dine omgivelser eller registrere kamerapositionen</translation>
 <translation id="4354344420232759511">Her vises de websites, du besøger</translation>
 <translation id="435527878592612277">Vælg dit billede</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Primær konto</translation>
 <translation id="4660476621274971848">Den forventede version var "<ph name="EXPECTED_VERSION" />", men versionen viste sig at være "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Justerer størrelsen</translation>
-<translation id="4660838440047236328">Layoutet af dit rum</translation>
 <translation id="4661407454952063730">Appdata kan være alle former for data, som en app har gemt (afhængigt af udviklerens indstillinger). Det kan f.eks. være data for kontakter, beskeder og billeder.</translation>
 <translation id="4662373422909645029">Kaldenavnet må ikke indeholde tal</translation>
 <translation id="4662788913887017617">Del dette bogmærke med din iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Tillad dataroaming for mobil</translation>
 <translation id="4804818685124855865">Afbryd</translation>
 <translation id="4804827417948292437">Avocado</translation>
-<translation id="4805077164141082536">Vi anbefaler, at du sikkerhedskopierer din aktuelle Linux-container, før du opgraderer.</translation>
 <translation id="4807098396393229769">Navn på kort</translation>
-<translation id="4808319664292298116">Vil du starte VR fra <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Pop op-vinduer er blokeret:</translation>
 <translation id="480990236307250886">Åbn startsiden</translation>
 <translation id="4811212958317149293">Automatisk scanning ved kontaktadgang på tastaturet</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Pakning mislykkedes.</translation>
 <translation id="5225324770654022472">Vis genvejen for apps</translation>
 <translation id="5227679487546032910">Grønblå standardavatar</translation>
+<translation id="5228088094491423618">Livetekstning</translation>
 <translation id="5228579091201413441">Aktivér synkronisering</translation>
 <translation id="5229189185761556138">Administrer indtastningsmetoder</translation>
 <translation id="5230516054153933099">Vindue</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Venter på bekræftelse. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Meget stor</translation>
 <translation id="574209121243317957">Toneleje</translation>
-<translation id="5745136023067925867">Få tips, tilbud og opdateringer i forbindelse med <ph name="DEVICE_TYPE" />, og del feedback</translation>
 <translation id="5746169159649715125">Gem som PDF</translation>
 <translation id="5747552184818312860">Udløber</translation>
 <translation id="5747785204778348146">Udvikler – ustabil</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Forlad side}one{Forlad side}other{Forlad sider}}</translation>
 <translation id="7207457272187520234">Send brugs- og diagnosticeringsdata. Denne enhed sender i øjeblikket automatisk diagnosticerings- og enhedsdata samt data om brug af apps til Google. Dataene bruges til forbedring af bl.a. systemets og appens stabilitet. Visse samlede data hjælper også Google-apps og -partnere, f.eks. Android-udviklere. Denne indstilling håndhæves af ejeren. Hvis indstillingen for yderligere web- og appaktivitet er aktiveret, gemmes disse data muligvis på din Google-konto.</translation>
 <translation id="7207631048330366454">Søg efter apps</translation>
-<translation id="7210171324714276060">Udvidelsen <ph name="EXTENSION_NAME" /> ændrede søgemaskinen til <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Udvidelsesprintere</translation>
 <translation id="7212097698621322584">Angiv din aktuelle pinkode for at ændre den. Hvis du ikke kender din pinkode, skal du nulstille sikkerhedsnøglen og derefter oprette en ny pinkode.</translation>
 <translation id="7216409898977639127">Mobilselskab</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">Parrer med "<ph name="DEVICE_NAME" />"...</translation>
 <translation id="7737238973539693982">Fjern Linux (beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Denne side blev ændret af udvidelsen <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Se din udskrivningshistorik</translation>
 <translation id="7744192722284567281">Blev fundet i et brud på datasikkerheden</translation>
 <translation id="7750228210027921155">Integreret billede</translation>
@@ -6352,6 +6345,7 @@
 <translation id="9121814364785106365">Åbn som fastgjort fane</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> er sat på pause</translation>
 <translation id="9124003689441359348">Dine gemte adgangskoder vises her</translation>
+<translation id="9126149354162942022">Markørfarve</translation>
 <translation id="9128317794749765148">Konfigurationen kunne ikke gennemføres</translation>
 <translation id="9128870381267983090">Opret forbindelse til netværk</translation>
 <translation id="9130015405878219958">Den angivne tilstand er ugyldig.</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 9946cca..e12a477 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Signaturgeber des Zertifikats</translation>
 <translation id="1145292499998999162">Plug-in blockiert</translation>
 <translation id="1145593918056169051">Drucker hat aufgehört</translation>
-<translation id="1146678959555564648">VR aktivieren</translation>
 <translation id="114721135501989771">Mit Google-Anmeldung Chrome besser nutzen</translation>
 <translation id="1147991416141538220">Wenn Sie Zugriff benötigen, wenden Sie sich an den Administrator dieses Geräts.</translation>
 <translation id="1149401351239820326">Ablaufmonat</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Cookies von Drittanbietern löschen</translation>
 <translation id="2097372108957554726">Melden Sie sich in Chrome an, um neue Geräte zu registrieren.</translation>
 <translation id="2099172618127234427">Sie aktivieren Debugging-Funktionen für Chrome OS. Dadurch wird der SSHD-Daemon eingerichtet und das Starten über USB aktiviert.</translation>
-<translation id="2099625543891475722">physische Merkmale wie Ihre Größe</translation>
 <translation id="2099686503067610784">Serverzertifikat "<ph name="CERTIFICATE_NAME" />" löschen?</translation>
 <translation id="2100273922101894616">Automatisch anmelden</translation>
 <translation id="2101225219012730419">Version:</translation>
@@ -2181,6 +2179,7 @@
 <translation id="3732857534841813090">Informationen zu Google Assistant</translation>
 <translation id="3733127536501031542">SSL-Server mit Step-up</translation>
 <translation id="3735740477244556633">Sortieren nach</translation>
+<translation id="3738213647660363521">Benutzerdefinierte Cursorfarbe</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> öffnen?</translation>
 <translation id="3742055079367172538">Screenshot erstellt</translation>
@@ -2653,7 +2652,6 @@
 <translation id="4350019051035968019">Dieses Gerät kann nicht in der Domain registriert werden, zu der Ihr Konto gehört, weil das Gerät für die Verwaltung in einer anderen Domain gekennzeichnet wurde.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> möchte nach Bluetooth-Geräten in der Nähe suchen. Die folgenden Geräte wurden gefunden:</translation>
-<translation id="4353114845960720315">Während Sie im VR-Modus sind, erhält die Website möglicherweise bestimmte Informationen über Sie. Dazu gehören:</translation>
 <translation id="4354073718307267720">Nachfragen, wenn eine Website eine 3D-Karte meiner Umgebung erstellen oder die Kameraposition verfolgen möchte</translation>
 <translation id="4354344420232759511">Hier finden Sie die von Ihnen besuchten Websites</translation>
 <translation id="435527878592612277">Foto auswählen</translation>
@@ -2888,7 +2886,6 @@
 <translation id="4659077111144409915">Primäres Konto</translation>
 <translation id="4660476621274971848">Erwartete Version: "<ph name="EXPECTED_VERSION" />", tatsächliche Version "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Größenanpassung läuft</translation>
-<translation id="4660838440047236328">der Grundriss Ihres Zimmers</translation>
 <translation id="4661407454952063730">App-Daten können alle Daten sein, die eine App aufgrund der Einstellungen des Entwicklers gespeichert hat, wie z. B. Kontakte, Nachrichten und Fotos.</translation>
 <translation id="4662373422909645029">Der Alias darf keine Zahlen enthalten</translation>
 <translation id="4662788913887017617">Dieses Lesezeichen für mein iPhone freigeben</translation>
@@ -2977,9 +2974,7 @@
 <translation id="4801512016965057443">Mobilfunk-Roaming zulassen</translation>
 <translation id="4804818685124855865">Verbindung trennen</translation>
 <translation id="4804827417948292437">Avocado</translation>
-<translation id="4805077164141082536">Wir empfehlen Ihnen, den aktuellen Linux-Container vor dem Upgrade zu sichern.</translation>
 <translation id="4807098396393229769">Name auf Karte</translation>
-<translation id="4808319664292298116">VR von <ph name="DOMAIN" /> aus aktivieren?</translation>
 <translation id="4808667324955055115">Pop-ups blockiert:</translation>
 <translation id="480990236307250886">Startseite öffnen</translation>
 <translation id="4811212958317149293">Automatischer Scan der Tastatur bei Schalterzugriff</translation>
@@ -3293,6 +3288,7 @@
 <translation id="52232769093306234">Fehler bei der Paketerstellung.</translation>
 <translation id="5225324770654022472">Verknüpfung "Apps" anzeigen</translation>
 <translation id="5227679487546032910">Blaugrüner Standardavatar</translation>
+<translation id="5228088094491423618">Automatische Untertitel</translation>
 <translation id="5228579091201413441">Synchronisierung aktivieren</translation>
 <translation id="5229189185761556138">Eingabemethoden verwalten</translation>
 <translation id="5230516054153933099">Fenster</translation>
@@ -3706,7 +3702,6 @@
 <translation id="5739235828260127894">Bestätigung steht aus. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Sehr groß</translation>
 <translation id="574209121243317957">Tonhöhe</translation>
-<translation id="5745136023067925867">Sie erhalten Tipps, Angebote und Neuigkeiten rund um <ph name="DEVICE_TYPE" /> und können Feedback geben</translation>
 <translation id="5746169159649715125">Als PDF speichern</translation>
 <translation id="5747552184818312860">Ablaufdatum</translation>
 <translation id="5747785204778348146">Entwickler – instabil</translation>
@@ -4829,7 +4824,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Seite verlassen}other{Seiten verlassen}}</translation>
 <translation id="7207457272187520234">Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn die Einstellung "Zusätzliche Web- &amp; App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert.</translation>
 <translation id="7207631048330366454">Apps finden</translation>
-<translation id="7210171324714276060">Die Erweiterung "<ph name="EXTENSION_NAME" />" hat <ph name="SEARCH_PROVIDER_DOMAIN" /> als neuen Suchanbieter festgelegt</translation>
 <translation id="7210499381659830293">Erweiterungsdrucker</translation>
 <translation id="7212097698621322584">Geben Sie Ihre aktuelle PIN ein, um sie zu ändern. Falls Sie Ihre PIN nicht kennen, müssen Sie den Sicherheitsschlüssel zurücksetzen und dann eine neue PIN erstellen.</translation>
 <translation id="7216409898977639127">Mobilfunkanbieter</translation>
@@ -5229,7 +5223,6 @@
 <translation id="7737115349420013392">Wird mit "<ph name="DEVICE_NAME" />" gekoppelt…</translation>
 <translation id="7737238973539693982">Linux (Beta) löschen</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Diese Seite wurde durch die Erweiterung <ph name="EXTENSION_NAME" /> geändert</translation>
 <translation id="7744047395460924128">Druckverlauf anzeigen</translation>
 <translation id="7744192722284567281">Bei Datenpanne entdeckt</translation>
 <translation id="7750228210027921155">Bild-in-Bild</translation>
@@ -6346,6 +6339,7 @@
 <translation id="9121814364785106365">In angepinntem Tab öffnen</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> pausiert</translation>
 <translation id="9124003689441359348">Hier werden gespeicherte Passwörter angezeigt</translation>
+<translation id="9126149354162942022">Cursorfarbe</translation>
 <translation id="9128317794749765148">Einrichtung nicht abgeschlossen</translation>
 <translation id="9128870381267983090">Mit Netzwerk verbinden</translation>
 <translation id="9130015405878219958">Eingegebener Modus ist ungültig.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index b92a134..2c0e163 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Υπηρεσία υπογραφής πιστοποιητικού</translation>
 <translation id="1145292499998999162">Η προσθήκη αποκλείστηκε</translation>
 <translation id="1145593918056169051">Ο εκτυπωτής σταμάτησε να λειτουργεί</translation>
-<translation id="1146678959555564648">Εισαγωγή VR</translation>
 <translation id="114721135501989771">Έξυπνες λειτουργίες Google στο Chrome</translation>
 <translation id="1147991416141538220">Για να ζητήσετε πρόσβαση, επικοινωνήστε με τον διαχειριστή αυτής της συσκευής.</translation>
 <translation id="1149401351239820326">Μήνας λήξης</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Διαγραφή cookie τρίτου μέρους</translation>
 <translation id="2097372108957554726">Για να καταχωρίσετε νέες συσκευές, θα πρέπει να συνδεθείτε στο Chrome</translation>
 <translation id="2099172618127234427">Ενεργοποιείτε τις λειτουργίες εντοπισμού σφαλμάτων του Chrome OS οι οποίες θα ρυθμίσουν το sshd daemon και θα επιτρέψουν την εκκίνηση από μονάδες USB.</translation>
-<translation id="2099625543891475722">τα φυσικά χαρακτηριστικά σας, όπως το ύψος σας</translation>
 <translation id="2099686503067610784">Να διαγραφεί το πιστοποιητικό διακομιστή "<ph name="CERTIFICATE_NAME" />";</translation>
 <translation id="2100273922101894616">Αυτόματη σύνδεση</translation>
 <translation id="2101225219012730419">Έκδοση:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Σχετικές πληροφορίες Βοηθού Google</translation>
 <translation id="3733127536501031542">Διακομιστής SSL με αναβάθμιση</translation>
 <translation id="3735740477244556633">Ταξινόμηση κατά</translation>
+<translation id="3738213647660363521">Προσαρμοσμένο χρώμα δείκτη</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Άνοιγμα <ph name="APPLICATION" />;</translation>
 <translation id="3742055079367172538">Το στιγμιότυπο οθόνης έχει ληφθεί</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Δεν είναι δυνατή η εγγραφή αυτής της συσκευής στον τομέα στον οποίο ανήκει ο λογαριασμός σας, επειδή η συσκευή έχει επισημανθεί για διαχείριση από κάποιον άλλο τομέα.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152">Το <ph name="ORIGIN" /> θέλει να κάνει σάρωση για κοντινές συσκευές Bluetooth. Βρέθηκαν οι παρακάτω συσκευές:</translation>
-<translation id="4353114845960720315">Ενώ βρίσκεστε σε λειτουργία VR, αυτός ο ιστότοπος ενδέχεται να είναι σε θέση να μάθει πληροφορίες σχετικά με:</translation>
 <translation id="4354073718307267720">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να δημιουργήσει έναν τρισδιάστατο χάρτη του περιβάλλοντα χώρου σας ή να παρακολουθεί τη θέση της κάμερας</translation>
 <translation id="4354344420232759511">Οι ιστότοποι που επισκέπτεστε θα εμφανίζονται εδώ</translation>
 <translation id="435527878592612277">Επιλέξτε τη φωτογραφία σας</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Κύριος λογαριασμός</translation>
 <translation id="4660476621274971848">Αναμενόταν η έκδοση "<ph name="EXPECTED_VERSION" />", ωστόσο η έκδοση ήταν η "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Αλλαγή μεγέθους</translation>
-<translation id="4660838440047236328">τη διάταξη του δωματίου σας</translation>
 <translation id="4661407454952063730">Τα δεδομένα εφαρμογής μπορεί να είναι οποιουδήποτε είδους δεδομένα που έχουν αποθηκευτεί από μια εφαρμογή (με βάση τις ρυθμίσεις προγραμματιστή), συμπεριλαμβανομένων δεδομένων, όπως είναι οι επαφές, τα μηνύματα και οι φωτογραφίες.</translation>
 <translation id="4662373422909645029">Το ψευδών. δεν μπορεί να έχει αριθμούς</translation>
 <translation id="4662788913887017617">Μοιραστείτε αυτόν τον σελιδοδείκτη με το iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Να επιτρέπεται η περιαγωγή δεδομένων κινητών συσκευών</translation>
 <translation id="4804818685124855865">Αποσύνδεση</translation>
 <translation id="4804827417948292437">Αβοκάντο</translation>
-<translation id="4805077164141082536">Σας συνιστούμε να δημιουργήσετε αντίγραφα ασφαλείας του τρέχοντος κοντέινερ Linux πριν από την αναβάθμιση.</translation>
 <translation id="4807098396393229769">Όνομα στην κάρτα</translation>
-<translation id="4808319664292298116">Ενεργοποίηση VR από <ph name="DOMAIN" />;</translation>
 <translation id="4808667324955055115">Αναδυόμενα παράθυρα που αποκλείστηκαν:</translation>
 <translation id="480990236307250886">Άνοιγμα της αρχικής σελίδας</translation>
 <translation id="4811212958317149293">Αυτόματη σάρωση πληκτρολογίου πρόσβασης με διακόπτη</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Η στοίβαξη απέτυχε.</translation>
 <translation id="5225324770654022472">Εμφάνιση συντόμευσης εφαρμογών</translation>
 <translation id="5227679487546032910">Προεπιλεγμένο γαλαζοπράσινο avatar</translation>
+<translation id="5228088094491423618">Ζωντανοί υπότιτλοι</translation>
 <translation id="5228579091201413441">Ενεργοποίηση συγχρονισμού</translation>
 <translation id="5229189185761556138">Διαχείριση μεθόδων εισαγωγής</translation>
 <translation id="5230516054153933099">Παράθυρο</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">Αναμονή για επαλήθευση. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Πολύ μεγάλο</translation>
 <translation id="574209121243317957">Τόνος</translation>
-<translation id="5745136023067925867">Λάβετε συμβουλές, προσφορές και ενημερώσεις και μοιραστείτε τα σχόλιά σας σχετικά με τη συσκευή <ph name="DEVICE_TYPE" />.</translation>
 <translation id="5746169159649715125">Αποθήκευση ως PDF</translation>
 <translation id="5747552184818312860">Λήγει</translation>
 <translation id="5747785204778348146">Προγραμματιστής - ασταθές</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Έξοδος από τη σελίδα}other{Έξοδος από τις σελίδες}}</translation>
 <translation id="7207457272187520234">Αποστολή δεδομένων χρήσης και διαγνωστικών. Επί του παρόντος, αυτή η συσκευή στέλνει αυτόματα διαγνωστικά δεδομένα, δεδομένα συσκευής και χρήσης εφαρμογών στην Google. Με αυτόν τον τρόπο βελτιώνεται η σταθερότητα του συστήματος και των εφαρμογών και παρέχονται επιπλέον βελτιώσεις. Επίσης, ορισμένα συγκεντρωτικά δεδομένα θα συμβάλλουν στη βελτίωση των εφαρμογών Google και θα χρησιμοποιηθούν από συνεργάτες της Google, όπως τους προγραμματιστές Android, προκειμένου να βελτιώσουν τις εφαρμογές και τα προϊόντα τους. Αυτή η ρύθμιση επιβάλλεται από τον κάτοχο. Εάν η ρύθμιση της πρόσθετης Δραστηριότητας ιστού και εφαρμογών είναι ενεργοποιημένη, αυτά τα δεδομένα μπορεί να αποθηκευτούν στον Λογαριασμό σας Google.</translation>
 <translation id="7207631048330366454">Αναζήτηση εφαρμογών</translation>
-<translation id="7210171324714276060">Η επέκταση <ph name="EXTENSION_NAME" /> άλλαξε την αναζήτηση ώστε να χρησιμοποιείται ο πάροχος αναζήτησης <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Εκτυπωτές επέκτασης</translation>
 <translation id="7212097698621322584">Εισαγάγετε το τρέχον PIN για να το αλλάξετε. Εάν δεν γνωρίζετε το PIN, θα χρειαστεί να επαναφέρετε το κλειδί ασφαλείας και, στη συνέχεια, να δημιουργήσετε ένα νέο PIN.</translation>
 <translation id="7216409898977639127">Πάροχος δικτύου κινητής τηλεφωνίας</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">Σύζευξη με "<ph name="DEVICE_NAME" />" …</translation>
 <translation id="7737238973539693982">Διαγραφή Linux (beta)</translation>
 <translation id="7740996059027112821">Τυπική</translation>
-<translation id="7743128043742060936">Αυτή η σελίδα άλλαξε από την επέκταση <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Δείτε το ιστορικό εκτυπώσεών σας</translation>
 <translation id="7744192722284567281">Βρέθηκε σε παραβίαση δεδομένων</translation>
 <translation id="7750228210027921155">Picture in picture</translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">Άνοιγμα ως καρφιτσωμένης καρτέλας</translation>
 <translation id="9122176249172999202">Η εφαρμογή <ph name="IDS_SHORT_PRODUCT_NAME" /> τέθηκε σε παύση</translation>
 <translation id="9124003689441359348">Οι αποθηκευμένοι κωδικοί πρόσβασής σας θα εμφανίζονται εδώ</translation>
+<translation id="9126149354162942022">Χρώμα δείκτη</translation>
 <translation id="9128317794749765148">Δεν ήταν δυνατή η ολοκλήρωση της ρύθμισης</translation>
 <translation id="9128870381267983090">Σύνδεση σε δίκτυο</translation>
 <translation id="9130015405878219958">Έγινε ενεργοποίηση μη έγκυρης λειτουργίας.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 03ea036..d3bf859d 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Certificate Signer</translation>
 <translation id="1145292499998999162">Plug-in blocked</translation>
 <translation id="1145593918056169051">Printer has stopped</translation>
-<translation id="1146678959555564648">Enter VR</translation>
 <translation id="114721135501989771">Get Google smarts in Chrome</translation>
 <translation id="1147991416141538220">To ask for access, contact the administrator of this device.</translation>
 <translation id="1149401351239820326">Expiry month</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Clear third-party cookies</translation>
 <translation id="2097372108957554726">You need to sign in to Chrome to register new devices</translation>
 <translation id="2099172618127234427">You are enabling Chrome OS debugging features which will set up sshd daemon and enable booting from USB drives.</translation>
-<translation id="2099625543891475722">your physical features, such as height</translation>
 <translation id="2099686503067610784">Delete server certificate "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Auto Sign-in</translation>
 <translation id="2101225219012730419">Version:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">This device cannot be enrolled to the domain that your account belongs to because the device is marked for management by a different domain.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> wants to scan for nearby Bluetooth devices. The following devices have been found:</translation>
-<translation id="4353114845960720315">While you're in VR, this site may be able to learn about:</translation>
 <translation id="4354073718307267720">Ask when a site wants to create a 3D map of your surroundings or track camera position</translation>
 <translation id="4354344420232759511">Sites that you visit will appear here</translation>
 <translation id="435527878592612277">Select your photo</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">Primary account</translation>
 <translation id="4660476621274971848">Expected version '<ph name="EXPECTED_VERSION" />', but version was '<ph name="NEW_ID" />'</translation>
 <translation id="4660540330091848931">Resizing</translation>
-<translation id="4660838440047236328">the layout of your room</translation>
 <translation id="4661407454952063730">App data can be any data that an app has saved (based on developer settings), including data such as contacts, messages and photos.</translation>
 <translation id="4662373422909645029">Nickname can’t include numbers</translation>
 <translation id="4662788913887017617">Share this bookmark with your iPhone</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">Allow mobile data roaming</translation>
 <translation id="4804818685124855865">Disconnect</translation>
 <translation id="4804827417948292437">Avocado</translation>
-<translation id="4805077164141082536">We recommend that you back up your current Linux container prior to upgrading.</translation>
 <translation id="4807098396393229769">Name on card</translation>
-<translation id="4808319664292298116">Enter VR from <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Pop-ups blocked:</translation>
 <translation id="480990236307250886">Open the homepage</translation>
 <translation id="4811212958317149293">Switch access keyboard auto-scan</translation>
@@ -3712,7 +3706,6 @@
 <translation id="5739235828260127894">Waiting for verification. <ph name="LINK_BEGIN" />Find out more<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Very large</translation>
 <translation id="574209121243317957">Pitch</translation>
-<translation id="5745136023067925867">Get <ph name="DEVICE_TYPE" /> tips, offers and updates, and share feedback</translation>
 <translation id="5746169159649715125">Save as PDF</translation>
 <translation id="5747552184818312860">Expires</translation>
 <translation id="5747785204778348146">Developer - unstable</translation>
@@ -4835,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Exit page}other{Exit pages}}</translation>
 <translation id="7207457272187520234">Send usage and diagnostic data. This device is currently automatically sending diagnostic, device and app usage data to Google. This will help system and app stability and other improvements. Some aggregate data will also help Google apps and partners, such as Android developers. This setting is enforced by the owner. If your additional Web &amp; App Activity setting is turned on, this data may be saved to your Google Account.</translation>
 <translation id="7207631048330366454">Search apps</translation>
-<translation id="7210171324714276060">The <ph name="EXTENSION_NAME" /> extension changed search to use <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Extension printers</translation>
 <translation id="7212097698621322584">Enter your current PIN to change it. If you don’t know your PIN, you’ll need to reset the security key, then create a new PIN.</translation>
 <translation id="7216409898977639127">Mobile provider</translation>
@@ -5235,7 +5227,6 @@
 <translation id="7737115349420013392">Pairing with "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Delete Linux (Beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">This page was changed by the <ph name="EXTENSION_NAME" /> extension</translation>
 <translation id="7744047395460924128">See your printing history</translation>
 <translation id="7744192722284567281">Found in data breach</translation>
 <translation id="7750228210027921155">Picture-in-picture</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 21e90bdb..24faac2d 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Firmante del certificado</translation>
 <translation id="1145292499998999162">Complemento bloqueado</translation>
 <translation id="1145593918056169051">Se detuvo la impresora</translation>
-<translation id="1146678959555564648">Entrar al modo RV</translation>
 <translation id="114721135501989771">Obtén las mejores funciones de Google en Chrome</translation>
 <translation id="1147991416141538220">Para solicitar el acceso, comunícate con el administrador de este dispositivo.</translation>
 <translation id="1149401351239820326">Mes de vencimiento</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Borrar cookies de terceros</translation>
 <translation id="2097372108957554726">Debes acceder a Chrome para registrar nuevos dispositivos.</translation>
 <translation id="2099172618127234427">Estás habilitando las funciones de depuración del Sistema operativo Chrome que configurarán el daemon sshd y habilitarán el inicio desde unidades USB.</translation>
-<translation id="2099625543891475722">tus rasgos físicos, como la estatura</translation>
 <translation id="2099686503067610784">¿Eliminar certificado "<ph name="CERTIFICATE_NAME" />" del servidor?</translation>
 <translation id="2100273922101894616">Acceso automático</translation>
 <translation id="2101225219012730419">Versión:</translation>
@@ -2182,6 +2180,7 @@
 <translation id="3732857534841813090">Información relacionada con el Asistente de Google</translation>
 <translation id="3733127536501031542">Servidor SLL con suplemento especial</translation>
 <translation id="3735740477244556633">Ordenar por</translation>
+<translation id="3738213647660363521">Color del cursor personalizado</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">¿Abrir <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Captura de pantalla tomada</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">Este dispositivo no se puede registrar en el dominio al que pertenece tu cuenta porque ya lo administra otro dominio.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> quiere detectar dispositivos Bluetooth cercanos. Se encontraron los siguientes dispositivos:</translation>
-<translation id="4353114845960720315">Mientras usas el modo RV, es posible que este sitio obtenga la siguiente información:</translation>
 <translation id="4354073718307267720">Preguntar cuando un sitio desee crear un mapa 3D de tu entorno o hacer un seguimiento de la posición de la cámara</translation>
 <translation id="4354344420232759511">Los sitios que visitas aparecerán aquí</translation>
 <translation id="435527878592612277">Seleccionar tu foto</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">Cuenta principal</translation>
 <translation id="4660476621274971848">Se esperaba la versión "<ph name="EXPECTED_VERSION" />", pero la versión fue "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Cambiando el tamaño</translation>
-<translation id="4660838440047236328">la disposición de tu habitación</translation>
 <translation id="4661407454952063730">Los datos de las apps abarcan cualquier información guardada por una app (según la configuración del desarrollador), incluidos contactos, mensajes y fotos.</translation>
 <translation id="4662373422909645029">El sobrenombre no admite números</translation>
 <translation id="4662788913887017617">Compartir este favorito con tu iPhone</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">Permitir itinerancia de datos móviles</translation>
 <translation id="4804818685124855865">Desconectar</translation>
 <translation id="4804827417948292437">Aguacate</translation>
-<translation id="4805077164141082536">Te recomendamos crear una copia de seguridad de tu contenedor actual de Linux antes de actualizarlo.</translation>
 <translation id="4807098396393229769">Nombre en la tarjeta</translation>
-<translation id="4808319664292298116">¿Quieres ingresar a RV desde <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Se bloquearon ventanas emergentes:</translation>
 <translation id="480990236307250886">Abrir la página principal</translation>
 <translation id="4811212958317149293">Interpretación automática del teclado en el modo de accesibilidad mejorada</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">No se pudo realizar el empaquetamiento.</translation>
 <translation id="5225324770654022472">Mostrar acceso directo a las aplicaciones</translation>
 <translation id="5227679487546032910">Avatar verde azulado predeterminado</translation>
+<translation id="5228088094491423618">Subtitulados instantáneos</translation>
 <translation id="5228579091201413441">Habilitar sincronización</translation>
 <translation id="5229189185761556138">Administrar métodos de entrada</translation>
 <translation id="5230516054153933099">Ventana</translation>
@@ -3707,7 +3703,6 @@
 <translation id="5739235828260127894">La verificación está pendiente. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Muy grande</translation>
 <translation id="574209121243317957">Tono</translation>
-<translation id="5745136023067925867">Obtén sugerencias, ofertas y actualizaciones de <ph name="DEVICE_TYPE" />, y comparte tus comentarios</translation>
 <translation id="5746169159649715125">Guardar como PDF</translation>
 <translation id="5747552184818312860">Caduca</translation>
 <translation id="5747785204778348146">Programador: versión inestable</translation>
@@ -3767,7 +3762,7 @@
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Impresión...</translation>
 <translation id="5830720307094128296">Guardar p&amp;ágina como...</translation>
-<translation id="5832805196449965646">Agregar un usuario</translation>
+<translation id="5832805196449965646">Agregar a una persona</translation>
 <translation id="583281660410589416">Desconocido</translation>
 <translation id="5833397272224757657">Usa el contenido de los sitios que visitas, tus interacciones y actividad de navegación para personalizar las opciones</translation>
 <translation id="5833726373896279253">Esta configuración sólo puede ser modificada por el propietario:</translation>
@@ -4830,7 +4825,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Salir de la página}other{Salir de las páginas}}</translation>
 <translation id="7207457272187520234">Envía datos de uso y diagnóstico. De forma automática, este dispositivo está enviando a Google datos de diagnóstico y sobre el uso del dispositivo y las apps. Esta información ayudará a lograr la estabilidad de las apps y el sistema, entre otras mejoras. Algunos datos agregados también ayudarán a las apps y los socios de Google, como los desarrolladores de Android. El propietario controla esta configuración. Si habilitaste la Actividad de web y de aplicaciones adicional, es posible que se almacenen estos datos en tu Cuenta de Google.</translation>
 <translation id="7207631048330366454">Buscar apps</translation>
-<translation id="7210171324714276060">La extensión <ph name="EXTENSION_NAME" /> seleccionó <ph name="SEARCH_PROVIDER_DOMAIN" /> para realizar búsquedas.</translation>
 <translation id="7210499381659830293">Impresoras de extensiones</translation>
 <translation id="7212097698621322584">Ingresa tu PIN actual para cambiarlo. Si no sabes cuál es, deberás restablecer la llave de seguridad y, luego, crear uno nuevo.</translation>
 <translation id="7216409898977639127">Proveedor de red celular</translation>
@@ -5230,7 +5224,6 @@
 <translation id="7737115349420013392">Vinculando con "<ph name="DEVICE_NAME" />"…</translation>
 <translation id="7737238973539693982">Borrar Linux (Beta)</translation>
 <translation id="7740996059027112821">Estándar</translation>
-<translation id="7743128043742060936">La extensión <ph name="EXTENSION_NAME" /> cambió esta página</translation>
 <translation id="7744047395460924128">Ver tu historial de impresión</translation>
 <translation id="7744192722284567281">Se encontró en una violación de la seguridad de los datos</translation>
 <translation id="7750228210027921155">Pantalla en pantalla</translation>
@@ -6348,6 +6341,7 @@
 <translation id="9121814364785106365">Abrir como pestaña anclada</translation>
 <translation id="9122176249172999202">Se pausó <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="9124003689441359348">Las contraseñas guardadas aparecerán aquí</translation>
+<translation id="9126149354162942022">Color del cursor</translation>
 <translation id="9128317794749765148">No se completó la configuración</translation>
 <translation id="9128870381267983090">Conectarse a una red</translation>
 <translation id="9130015405878219958">Se ingresó un modo no válido.</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index bf29130..740e8f0 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Titular del certificado</translation>
 <translation id="1145292499998999162">Complemento bloqueado</translation>
 <translation id="1145593918056169051">La impresora se ha detenido</translation>
-<translation id="1146678959555564648">Iniciar RV</translation>
 <translation id="114721135501989771">Obtén funciones inteligentes en Chrome</translation>
 <translation id="1147991416141538220">Para solicitar acceso, ponte en contacto con el administrador de este dispositivo.</translation>
 <translation id="1149401351239820326">Mes de caducidad</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Borrar cookies de terceros</translation>
 <translation id="2097372108957554726">Debes iniciar sesión en Chrome para registrar nuevos dispositivos</translation>
 <translation id="2099172618127234427">Vas a habilitar las funciones de depuración de Chrome OS, que configurarán el daemon sshd y habilitará el arranque desde unidades USB.</translation>
-<translation id="2099625543891475722">tus rasgos físicos, como tu altura</translation>
 <translation id="2099686503067610784">¿Quieres eliminar el certificado de servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Iniciar sesión automáticamente</translation>
 <translation id="2101225219012730419">Versión:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Información relacionada con el Asistente de Google</translation>
 <translation id="3733127536501031542">Servidor SSL con certificado Step-Up</translation>
 <translation id="3735740477244556633">Ordenar por</translation>
+<translation id="3738213647660363521">Color de cursor personalizado</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">¿Abrir <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Captura de pantalla hecha</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">Este dispositivo no se puede registrar en el dominio al que pertenece tu cuenta porque ya lo administra otro dominio.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> quiere buscar dispositivos Bluetooth cercanos. Se han encontrado los siguientes dispositivos:</translation>
-<translation id="4353114845960720315">Mientras estés en RV, este sitio web puede saber:</translation>
 <translation id="4354073718307267720">Preguntar cuando un sitio web quiera crear un mapa 3D de tu entorno o hacer un seguimiento de la posición de la cámara</translation>
 <translation id="4354344420232759511">Los sitios web que visites aparecerán aquí</translation>
 <translation id="435527878592612277">Selecciona una foto</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">Cuenta principal</translation>
 <translation id="4660476621274971848">Se esperaba la versión "<ph name="EXPECTED_VERSION" />", pero se ha detectado la versión "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Cambiando tamaño</translation>
-<translation id="4660838440047236328">la distribución de tu habitación</translation>
 <translation id="4661407454952063730">Los datos de aplicaciones abarcan cualquier tipo de información que guarden las aplicaciones (en función de la configuración de los desarrolladores), incluidos datos como contactos, mensajes y fotos.</translation>
 <translation id="4662373422909645029">El apodo no puede incluir números</translation>
 <translation id="4662788913887017617">Compartir este marcador con tu iPhone</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">Permitir itinerancia de datos móviles</translation>
 <translation id="4804818685124855865">Desconectar</translation>
 <translation id="4804827417948292437">Aguacate</translation>
-<translation id="4805077164141082536">Te recomendamos que hagas una copia de seguridad de tu contenedor de Linux antes de actualizar.</translation>
 <translation id="4807098396393229769">Titular de la tarjeta</translation>
-<translation id="4808319664292298116">¿Iniciar RV desde <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Pop-ups bloqueados</translation>
 <translation id="480990236307250886">Abrir página de inicio</translation>
 <translation id="4811212958317149293">Búsqueda automática de teclado de accesibilidad mediante interruptores</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">No se ha podido comprimir.</translation>
 <translation id="5225324770654022472">Mostrar acceso directo de aplicaciones</translation>
 <translation id="5227679487546032910">Avatar verde azulado predeterminado</translation>
+<translation id="5228088094491423618">Subtítulos instantáneos</translation>
 <translation id="5228579091201413441">Habilitar sincronización</translation>
 <translation id="5229189185761556138">Administrar métodos de introducción</translation>
 <translation id="5230516054153933099">Ventana</translation>
@@ -3709,7 +3705,6 @@
 <translation id="5739235828260127894">Esperando verificación. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" />.</translation>
 <translation id="5739458112391494395">Muy grande</translation>
 <translation id="574209121243317957">Tono</translation>
-<translation id="5745136023067925867">Recibe consejos, ofertas y novedades sobre <ph name="DEVICE_TYPE" />, y comparte tu opinión</translation>
 <translation id="5746169159649715125">Guardar como PDF</translation>
 <translation id="5747552184818312860">Caduca</translation>
 <translation id="5747785204778348146">Desarrollador: versión inestable</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Salir de la página}other{Salir de las páginas}}</translation>
 <translation id="7207457272187520234">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation>
 <translation id="7207631048330366454">Buscar aplicaciones</translation>
-<translation id="7210171324714276060">La extensión <ph name="EXTENSION_NAME" /> ha cambiado el proveedor de búsquedas a <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Impresoras de extensiones</translation>
 <translation id="7212097698621322584">Introduce tu PIN actual para cambiarlo. Si no sabes cuál es tu PIN, tendrás que restablecer la llave de seguridad y crear un nuevo PIN.</translation>
 <translation id="7216409898977639127">Proveedor de servicios móviles</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">Vinculando con "<ph name="DEVICE_NAME" />"…</translation>
 <translation id="7737238973539693982">Eliminar Linux (Beta)</translation>
 <translation id="7740996059027112821">Estándar</translation>
-<translation id="7743128043742060936">La extensión <ph name="EXTENSION_NAME" /> ha modificado esta página</translation>
 <translation id="7744047395460924128">Ver tu historial de impresiones</translation>
 <translation id="7744192722284567281">Encontrada en una quiebra de seguridad de datos</translation>
 <translation id="7750228210027921155">Imagen en imagen</translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">Abrir como pestaña fija</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> está en pausa</translation>
 <translation id="9124003689441359348">Las contraseñas guardadas aparecerán aquí</translation>
+<translation id="9126149354162942022">Color del cursor</translation>
 <translation id="9128317794749765148">No se ha podido completar la configuración</translation>
 <translation id="9128870381267983090">Conectarse a la red</translation>
 <translation id="9130015405878219958">Modo no válido introducido</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index d40ae84..c28aab8c2 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Sertifikaadi allkirjastaja</translation>
 <translation id="1145292499998999162">Pistikprogramm on blokeeritud</translation>
 <translation id="1145593918056169051">Printer on peatunud</translation>
-<translation id="1146678959555564648">Ava VR</translation>
 <translation id="114721135501989771">Google'i nutikus Chrome'is</translation>
 <translation id="1147991416141538220">Juurdepääsu palumiseks võtke ühendust selle seadme administraatoriga.</translation>
 <translation id="1149401351239820326">Aegumiskuu</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Kustuta kolmanda osapoole küpsisefailid</translation>
 <translation id="2097372108957554726">Uute seadmete registreerimiseks peate Chrome'i sisse logima</translation>
 <translation id="2099172618127234427">Soovite lubada Chrome OS-i silumisfunktsioonid, mis seadistavad üksuse sshd daemon ja lubavad käivitamise USB-kettalt.</translation>
-<translation id="2099625543891475722">teie füüsilised omadused, nt pikkus</translation>
 <translation id="2099686503067610784">Kustutada serveri sertifikaat „<ph name="CERTIFICATE_NAME" />”</translation>
 <translation id="2100273922101894616">Automaatne sisselogimine</translation>
 <translation id="2101225219012730419">Versioon:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google'i assistendiga seotud teave</translation>
 <translation id="3733127536501031542">SSL-server koos seadistamisega</translation>
 <translation id="3735740477244556633">Sortimisalus:</translation>
+<translation id="3738213647660363521">Kohandatud kursori värv</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Kas soovite avada rakenduse <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Ekraanipilt on tehtud</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Seda seadet ei saa registreerida domeenil, kuhu teie konto kuulub, sest seade on märgitud teisel domeenil haldamiseks.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> soovib otsida läheduses olevaid Bluetooth-seadmeid. Leiti järgmised seadmed:</translation>
-<translation id="4353114845960720315">Kui olete VR-režiimis, võib see sait hankida järgmist teavet:</translation>
 <translation id="4354073718307267720">Küsi, kui sait soovib luua mind ümbritsevast 3D-kaarti või jälgida kaamera asendit</translation>
 <translation id="4354344420232759511">Külastatud saidid kuvatakse siin</translation>
 <translation id="435527878592612277">Valige foto</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Peamine konto</translation>
 <translation id="4660476621274971848">Eeldatav versioon oli „<ph name="EXPECTED_VERSION" />”, kuid versioon oli „<ph name="NEW_ID" />”</translation>
 <translation id="4660540330091848931">Suuruse muutmine</translation>
-<translation id="4660838440047236328">teie ruumi paigutus</translation>
 <translation id="4661407454952063730">Rakenduse andmed võivad olla mis tahes andmed, mille rakendus on salvestanud (arendaja seadete põhjal), sh näiteks kontaktid, sõnumid ja fotod.</translation>
 <translation id="4662373422909645029">Hüüdnimes ei tohi olla numbreid</translation>
 <translation id="4662788913887017617">Jagage seda järjehoidjat oma iPhone'iga</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Luba mobiiliandmete rändlus</translation>
 <translation id="4804818685124855865">Katkesta ühendus</translation>
 <translation id="4804827417948292437">Avokaado</translation>
-<translation id="4805077164141082536">Soovitame teil praeguse Linuxi konteineri enne versiooni uuendamist varundada.</translation>
 <translation id="4807098396393229769">Kaardil olev nimi</translation>
-<translation id="4808319664292298116">Kas aktiveerida VR saidilt <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Hüpikaknad on blokeeritud</translation>
 <translation id="480990236307250886">Ava avaleht</translation>
 <translation id="4811212958317149293">Lülitiga juurdepääsu klaviatuuri automaatne skannimine</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Pakkimine ebaõnnestus.</translation>
 <translation id="5225324770654022472">Kuva rakenduste otsetee</translation>
 <translation id="5227679487546032910">Sinakasroheline vaikeavatar</translation>
+<translation id="5228088094491423618">Reaalajas subtiitrid</translation>
 <translation id="5228579091201413441">Sünkroonimise lubamine</translation>
 <translation id="5229189185761556138">Sisestusmeetodite haldamine</translation>
 <translation id="5230516054153933099">Aken</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Kinnitamise ootel. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Väga suur</translation>
 <translation id="574209121243317957">Helikõrgus</translation>
-<translation id="5745136023067925867">Hankige seadme <ph name="DEVICE_TYPE" /> nõuandeid, pakkumisi ja värskendusi ning jagage tagasisidet</translation>
 <translation id="5746169159649715125">Salvesta PDF-ina</translation>
 <translation id="5747552184818312860">Aegub</translation>
 <translation id="5747785204778348146">Arendaja – ebastabiilne</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Välju lehelt}other{Välju lehtedelt}}</translation>
 <translation id="7207457272187520234">Kasutus- ja diagnostikaandmete saatmine. See seade saadab Google'ile praegu automaatselt seadme teavet ning rakenduse kasutus- ja diagnostikaandmeid. See aitab parandada süsteemi ja rakenduse stabiilsust ning muud. Teatud koondandmed on abiks ka Google'i rakendustele ja partneritele, näiteks Androidi arendajatele. Selle seade on jõustanud omanik. Kui täiendavad veebi- ja rakendustegevused on sisse lülitatud, võidakse need andmed salvestada teie Google'i kontole.</translation>
 <translation id="7207631048330366454">Otsi rakendusi</translation>
-<translation id="7210171324714276060">Laiendus <ph name="EXTENSION_NAME" /> määras otsinguteenuse pakkujaks teenuse <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Laienduse printerid</translation>
 <translation id="7212097698621322584">PIN-koodi muutmiseks sisestage see. Kui te oma PIN-koodi ei tea, peate lähtestama turvavõtme ja looma siis uue PIN-koodi.</translation>
 <translation id="7216409898977639127">Mobiilsideteenuse pakkuja</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Sidumine seadmega „<ph name="DEVICE_NAME" />” …</translation>
 <translation id="7737238973539693982">Linuxi (beetaversioon) kustutamine</translation>
 <translation id="7740996059027112821">Tavapärane</translation>
-<translation id="7743128043742060936">Seda lehte muutis laiendus <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Vaadake oma printimisajalugu</translation>
 <translation id="7744192722284567281">Ilmnes andmetega seotud rikkumises</translation>
 <translation id="7750228210027921155">Pilt pildis</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Ava kinnitatud vahelehel</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> on peatatud</translation>
 <translation id="9124003689441359348">Salvestatud paroolid kuvatakse siin</translation>
+<translation id="9126149354162942022">Kursori värv</translation>
 <translation id="9128317794749765148">Seadistust ei õnnestunud lõpule viia</translation>
 <translation id="9128870381267983090">Ühendumine Internetiga</translation>
 <translation id="9130015405878219958">Sisestati vale režiim.</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index c43636a4b..d792b559 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Ziurtagiriaren sinatzailea</translation>
 <translation id="1145292499998999162">Plugina blokeatu da</translation>
 <translation id="1145593918056169051">Inprimagailua gelditu egin da</translation>
-<translation id="1146678959555564648">Sartu EB moduan</translation>
 <translation id="114721135501989771">Lortu Google eginbide aurreratuak Chrome-n</translation>
 <translation id="1147991416141538220">Atzitzeko baimena eskatzeko, jarri gailuaren administratzailearekin harremanetan.</translation>
 <translation id="1149401351239820326">Iraungitze-hilabetea</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Garbitu hirugarrenen cookieak</translation>
 <translation id="2097372108957554726">Gailu gehiago erregistratzeko, saioa hasi behar duzu Chrome-n</translation>
 <translation id="2099172618127234427">Chrome OS sistemarekin arazte-eginbideak gaitzen ari zara. Eginbide horiek sshd daemon konfiguratuko dute, eta USB memorietatik abiaraztea gaitu.</translation>
-<translation id="2099625543891475722">zure ezaugarri fisikoak (esaterako, altuera)</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" zerbitzari-ziurtagiria ezabatu nahi duzu?</translation>
 <translation id="2100273922101894616">Saio-hasiera automatikoa</translation>
 <translation id="2101225219012730419">Bertsioa:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google-ren Laguntzailea eginbidearekin erlazionatutako informazioa</translation>
 <translation id="3733127536501031542">SSL zerbitzaria Step-up ziurtagiriarekin</translation>
 <translation id="3735740477244556633">Ordenatzeko irizpidea</translation>
+<translation id="3738213647660363521">Kurtsorearen kolore pertsonalizatua</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ireki nahi duzu?</translation>
 <translation id="3742055079367172538">Pantaila-argazkia hartu da</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Ezin da gailua erregistratu zure kontuaren domeinuan, gailua beste domeinu batek kudeatzeko markatuta dagoelako.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> webguneak inguruko Bluetooth bidezko gailuak bilatu nahi ditu. Gailu hauek aurkitu dira:</translation>
-<translation id="4353114845960720315">Errealitate birtualean zauden bitartean, baliteke webgune honek hauei buruzko informazioa lortzea:</translation>
 <translation id="4354073718307267720">Eskatu zure baimena webguneren batek inguruaren 3D-ko mapa bat sortu edo kameraren posizioaren jarraipena egin nahi duenean</translation>
 <translation id="4354344420232759511">Hemen agertuko dira bisitatzen dituzun webguneak</translation>
 <translation id="435527878592612277">Hautatu argazkia</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Kontu nagusia</translation>
 <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" bertsioa espero zen, baina "<ph name="NEW_ID" />" da bertsioa</translation>
 <translation id="4660540330091848931">Tamaina aldatzen</translation>
-<translation id="4660838440047236328">gelaren diseinua</translation>
 <translation id="4661407454952063730">Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzaileen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.</translation>
 <translation id="4662373422909645029">Goitizenak ezin du eduki zenbakirik</translation>
 <translation id="4662788913887017617">Partekatu laster-marka iPhone-arekin</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Baimendu mugikorreko ibiltaritzako datuak</translation>
 <translation id="4804818685124855865">Deskonektatu</translation>
 <translation id="4804827417948292437">Ahuakatea</translation>
-<translation id="4805077164141082536">Bertsio-berritu aurretik, Linux-en uneko edukiontziaren babeskopia bat egitea gomendatzen dizugu.</translation>
 <translation id="4807098396393229769">Txartelean ageri den izena</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> domeinutik atzitu nahi duzu errealitate areagotuko aurkezpena?</translation>
 <translation id="4808667324955055115">Leiho gainerakorrak blokeatuta daude:</translation>
 <translation id="480990236307250886">Ireki orri nagusia</translation>
 <translation id="4811212958317149293">Erabilerraztasun-osagarriaren teklatu bidezko bilaketa automatikoa</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Ezin izan da paketatu.</translation>
 <translation id="5225324770654022472">Erakutsi aplikazioen lasterbidea</translation>
 <translation id="5227679487546032910">Abatar anil lehenetsia</translation>
+<translation id="5228088094491423618">Istanteko azpitituluak</translation>
 <translation id="5228579091201413441">Gaitu sinkronizazioa</translation>
 <translation id="5229189185761556138">Kudeatu idazketa-metodoak</translation>
 <translation id="5230516054153933099">Leihoa</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Egiaztapenaren zain. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Oso handia</translation>
 <translation id="574209121243317957">Tonua</translation>
-<translation id="5745136023067925867">Lortu <ph name="DEVICE_TYPE" /> gailuari buruzko aholkuak eta eskaintzak, eta partekatu zure iritzia</translation>
 <translation id="5746169159649715125">Gorde PDF gisa</translation>
 <translation id="5747552184818312860">Iraungitze-data</translation>
 <translation id="5747785204778348146">Garatzailea; egoera ezegonkorra</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Irten orritik}other{Irten orrietatik}}</translation>
 <translation id="7207457272187520234">Bidali erabilera- eta diagnostiko-datuak. Gailu honek automatikoki bidaltzen dizkio Google-ri diagnostikoak eta gailu zein aplikazioen erabilera-datuak. Horri esker, sistemaren eta aplikazioen egonkortasuna hobetuko da, besteak beste. Gainera, multzokatutako datu batzuk oso baliagarriak izango dira Google-ren aplikazioak hobetzeko eta bazkideei laguntzeko (adibidez, Android-en garatzaileei). Jabeak konfiguratu du ezarpen hori. Sareko eta aplikazioetako jarduera gehigarriak ezarpena aktibatuta badago, baliteke datu horiek Google-ko kontuan gordetzea.</translation>
 <translation id="7207631048330366454">Bilatu aplikazioak</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> luzapenak bilaketa-hornitzailea aldatu du, eta <ph name="SEARCH_PROVIDER_DOMAIN" /> erabiliko da hemendik aurrera</translation>
 <translation id="7210499381659830293">Luzapen bidezko inprimagailuak</translation>
 <translation id="7212097698621322584">PIN kodea aldatzeko, idatzi unekoa lehendabizi. Ez badakizu PIN kodea zein den, segurtasun-giltza berrezarri beharko duzu, eta beste PIN kode bat sortu.</translation>
 <translation id="7216409898977639127">Zerbitzu mugikorraren hornitzailea</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" gailuarekin parekatzen…</translation>
 <translation id="7737238973539693982">Ezabatu Linux (Beta)</translation>
 <translation id="7740996059027112821">Estandarra</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> luzapenak aldaketak egin ditu orrian</translation>
 <translation id="7744047395460924128">Ikusi inprimatze-historia</translation>
 <translation id="7744192722284567281">Datuen isilpekotasuna urratu den batean aurkitu da</translation>
 <translation id="7750228210027921155">Pantaila txikia</translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">Ireki fitxa ainguratu gisa</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> pausatuta dago</translation>
 <translation id="9124003689441359348">Hemen agertuko dira gordetako pasahitzak</translation>
+<translation id="9126149354162942022">Kurtsore-kolorea</translation>
 <translation id="9128317794749765148">Ezin izan da osatu konfigurazioa</translation>
 <translation id="9128870381267983090">Konektatu sarera</translation>
 <translation id="9130015405878219958">Sartutako moduak ez du balio.</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 49b4133b..d103e93 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">امضا کننده گواهی</translation>
 <translation id="1145292499998999162">افزایه مسدود شد</translation>
 <translation id="1145593918056169051">چاپگر متوقف شده است</translation>
-<translation id="1146678959555564648">‏VR را وارد کنید</translation>
 <translation id="114721135501989771">‏هوشمندی‌های Google را در Chrome دریافت کنید</translation>
 <translation id="1147991416141538220">برای درخواست دسترسی، با سرپرست این دستگاه تماس بگیرید.</translation>
 <translation id="1149401351239820326">ماه انقضا</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">پاک کردن کوکی‌های شخص ثالث</translation>
 <translation id="2097372108957554726">‏برای ثبت دستگاه‌های جدید باید به سیستم Chrome وارد شوید</translation>
 <translation id="2099172618127234427">‏ویژگی‌های رفع اشکال سیستم عامل Chrome را فعال می‌کنید که sshd daemon را تنظیم خواهد کرد و راه‌اندازی از درایوهای USB را فعال می‌کند.</translation>
-<translation id="2099625543891475722">ویژگی‌های ظاهری شما، مانند قد</translation>
 <translation id="2099686503067610784">مجوز سرور "<ph name="CERTIFICATE_NAME" />" حذف شود؟</translation>
 <translation id="2100273922101894616">ورود به سیستم خودکار</translation>
 <translation id="2101225219012730419">نسخه:</translation>
@@ -2182,6 +2180,7 @@
 <translation id="3732857534841813090">‏اطلاعات مربوط به «دستیار Google»</translation>
 <translation id="3733127536501031542">‏سرور SSL با ارتقا</translation>
 <translation id="3735740477244556633">مرتب کردن براساس</translation>
+<translation id="3738213647660363521">رنگ نشانگر سفارشی</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> باز شود؟</translation>
 <translation id="3742055079367172538">نماگرفت گرفته شد</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">این دستگاه نمی‌تواند در دامنه‌ای که حسابتان متعلق به آن است، ثبت‌نام کند زیرا دستگاه برای مدیریت توسط دامنه دیگری علامت‌گذاری شده است.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> می‌خواهد دستگاه‌های «بلوتوث» اطراف را جستجو کند. دستگاه‌های زیر پیدا شدند:</translation>
-<translation id="4353114845960720315">‏وقتی در حالت VR هستید، این سایت می‌تواند به این موارد پی ببرد:</translation>
 <translation id="4354073718307267720">وقتی سایتی می‌خواهد نقشه سه‌بعدی از محیط ایجاد کند یا موقعیت دوربین را ردیابی کند سؤال شود</translation>
 <translation id="4354344420232759511">سایت‌هایی که بازدید می‌کنید اینجا نشان داده می‌شود</translation>
 <translation id="435527878592612277">انتخاب عکس</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">حساب اصلی</translation>
 <translation id="4660476621274971848">نسخه موردانتظار «<ph name="EXPECTED_VERSION" />» است، اما نسخه «<ph name="NEW_ID" />» بود</translation>
 <translation id="4660540330091848931">درحال تغییر اندازه</translation>
-<translation id="4660838440047236328">چیدمان اتاق شما</translation>
 <translation id="4661407454952063730">داده‌های برنامه می‌توانند هر داده‌ای باشند که برنامه (براساس تنظیمات برنامه‌نویس) ذخیره کرده است، ازجمله داده‌هایی مانند مخاطبین، پیام‌ها، و عکس‌ها.</translation>
 <translation id="4662373422909645029">نام مستعار نباید حاوی عدد باشد</translation>
 <translation id="4662788913887017617">‏این نشانک را با iPhone خود به اشتراک بگذارید</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">اجازه دادن فراگردی داده تلفن همراه</translation>
 <translation id="4804818685124855865">قطع اتصال</translation>
 <translation id="4804827417948292437">آووکادو</translation>
-<translation id="4805077164141082536">‏توصیه می‌کنیم قبل از ارتقا دادن، از محتوی کنونی Linux خود پشتیبان‌گیری کنید.</translation>
 <translation id="4807098396393229769">نام روی کارت</translation>
-<translation id="4808319664292298116">‏VR از <ph name="DOMAIN" /> وارد شود؟</translation>
 <translation id="4808667324955055115">پنجره‌های بازشو مسدود هستند:</translation>
 <translation id="480990236307250886">باز کردن صفحه اصلی</translation>
 <translation id="4811212958317149293">اسکن خودکار صفحه‌کلید دسترسی کلیدی</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">بسته‌بندی نشد.</translation>
 <translation id="5225324770654022472">نمایش میان‌بر برنامه‌ها</translation>
 <translation id="5227679487546032910">چهره‌نمای پیش‌فرض آبی سیر</translation>
+<translation id="5228088094491423618">زیرنویس ناشنوایان زنده</translation>
 <translation id="5228579091201413441">فعال کردن همگام‌سازی</translation>
 <translation id="5229189185761556138">مدیریت روش‌های ورودی</translation>
 <translation id="5230516054153933099">پنجره</translation>
@@ -3707,7 +3703,6 @@
 <translation id="5739235828260127894">در انتظار تأیید. <ph name="LINK_BEGIN" />بیشتر بدانید.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">خیلی بزرگ</translation>
 <translation id="574209121243317957">زیروبمی صدا</translation>
-<translation id="5745136023067925867">نکته‌ها، پیشنهادها، و به‌روزرسانی‌های مربوط به <ph name="DEVICE_TYPE" /> را دریافت کنید و بازخورد ارائه دهید</translation>
 <translation id="5746169159649715125">‏ذخیره به‌عنوان PDF</translation>
 <translation id="5747552184818312860">تاریخ انقضا</translation>
 <translation id="5747785204778348146">برنامه‌نویس - ناپایدار</translation>
@@ -4830,7 +4825,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{خروج از صفحه}one{خروج از صفحه‌ها}other{خروج از صفحه‌ها}}</translation>
 <translation id="7207457272187520234">‏داده‌های استفاده و عیب‌یابی را ارسال کنید. این دستگاه درحال‌حاضر به‌صورت‌ خودکار داده‌های عیب‌یابی و داده‌های استفاده از دستگاه و برنامه را برای Google ارسال می‌کند. این داده‌ها به بهبود پایداری سیستم و برنامه و موارد دیگر کمک خواهد کرد. بعضی داده‌های انبوهشی نیز به برنامه‌ها و شرکای Google (مانند «برنامه‌نویس‌های Android») کمک می‌کند. این تنظیم را مالک اعمال می‌کند. اگر تنظیم «فعالیت وب و برنامه» تکمیلی روشن باشد، ممکن است این داده‌ها در «حساب Google» شما ذخیره شود.</translation>
 <translation id="7207631048330366454">جستجوی برنامه‌ها</translation>
-<translation id="7210171324714276060">افزونه <ph name="EXTENSION_NAME" /> دامنه ارائه‌دهنده جستجو را به <ph name="SEARCH_PROVIDER_DOMAIN" /> تغییر داده است.</translation>
 <translation id="7210499381659830293">چاپگرهای افزونه</translation>
 <translation id="7212097698621322584">پین کنونی‌تان را برای تغییر پین وارد کنید. اگر پین‌ خود را نمی‌دانید، باید کلید امنیتی را بازنشانی کنید و سپس پین جدیدی ایجاد کنید.</translation>
 <translation id="7216409898977639127">ارائه‌دهنده شبکه تلفن همراه</translation>
@@ -5230,7 +5224,6 @@
 <translation id="7737115349420013392">درحال مرتبط‌سازی با «<ph name="DEVICE_NAME" />» …</translation>
 <translation id="7737238973539693982">‏حذف Linux (بتا)</translation>
 <translation id="7740996059027112821">استاندارد</translation>
-<translation id="7743128043742060936">افزونه <ph name="EXTENSION_NAME" /> این صفحه را تغییر داده است</translation>
 <translation id="7744047395460924128">مشاهده سابقه چاپ کردن</translation>
 <translation id="7744192722284567281">در نقض داده پیدا شد</translation>
 <translation id="7750228210027921155">تصویردرتصویر</translation>
@@ -6348,6 +6341,7 @@
 <translation id="9121814364785106365">باز کردن به‌عنوان برگه الصاق شده</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> متوقف شده است</translation>
 <translation id="9124003689441359348">گذرواژه‌های ذخیره‌شده در اینجا ظاهر خواهند شد</translation>
+<translation id="9126149354162942022">رنگ نشانگر</translation>
 <translation id="9128317794749765148">راه‌اندازی تکمیل نشد</translation>
 <translation id="9128870381267983090">اتصال به شبکه</translation>
 <translation id="9130015405878219958">حالت نامعتبر وارد شده است.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 6fb12eb..0e97f7a1 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Varmenteen allekirjoittaja</translation>
 <translation id="1145292499998999162">Laajennus estettiin</translation>
 <translation id="1145593918056169051">Tulostin on pysähtynyt</translation>
-<translation id="1146678959555564648">Siirry VR-tilaan</translation>
 <translation id="114721135501989771">Googlen älykkäitä ratkaisuja Chromeen</translation>
 <translation id="1147991416141538220">Jos haluat pyytää käyttöoikeutta, ota yhteyttä laitteen järjestelmänvalvojaan.</translation>
 <translation id="1149401351239820326">Viimeinen voimassaolokuukausi</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Poista kolmannen osapuolen evästeet</translation>
 <translation id="2097372108957554726">Sinun on kirjauduttava sisään Chromeen, jos haluat rekisteröidä uusia laitteita</translation>
 <translation id="2099172618127234427">Olet ottamassa käyttöön Chrome-käyttöjärjestelmän viankorjausominaisuudet, jotka määrittävät sshd daemon -toiminnon ja ottavat käyttöön USB-muistitikulta käynnistyksen.</translation>
-<translation id="2099625543891475722">fyysiset piirteesi, kuten pituutesi</translation>
 <translation id="2099686503067610784">Poistetaanko palvelimen varmenne <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Automaattinen kirjautuminen</translation>
 <translation id="2101225219012730419">Versio:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google Assistantiin liittyvät tiedot</translation>
 <translation id="3733127536501031542">SSL-palvelin ja Step-up</translation>
 <translation id="3735740477244556633">Lajitteluperuste</translation>
+<translation id="3738213647660363521">Muokattu kohdistimen väri</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Avataanko <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Kuvakaappaus otettu</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">Tätä laitetta ei voi rekisteröidä verkkotunnukselle, johon tilisi kuuluu, koska laite on merkitty eri verkkotunnuksen hallinnoitavaksi.</translation>
 <translation id="4350782034419308508">Hei Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> haluaa etsiä lähellä olevia Bluetooth-laitteita. Seuraavat laitteet löydettiin:</translation>
-<translation id="4353114845960720315">Kun olet VR-tilassa, sivusto voi saada tietää</translation>
 <translation id="4354073718307267720">Kysy aina, kun sivusto pyytää lupaa luoda 3D-kartan ympäristöstäsi tai seurata kameran asentoa</translation>
 <translation id="4354344420232759511">Käyttämäsi sivustot tulevat näkyviin tähän</translation>
 <translation id="435527878592612277">Valitse valokuva</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">Ensisijainen tili</translation>
 <translation id="4660476621274971848">Versiota <ph name="EXPECTED_VERSION" /> odotettiin, mutta versio oli <ph name="NEW_ID" />.</translation>
 <translation id="4660540330091848931">Muutetaan kokoa</translation>
-<translation id="4660838440047236328">huoneesi asettelun</translation>
 <translation id="4661407454952063730">Sovellusdata voi olla mitä tahansa dataa, jota sovellus on tallentanut (kehittäjän asetusten perusteella), mukaan lukien yhteystietoja, viestejä ja valokuvia.</translation>
 <translation id="4662373422909645029">Ei saa sisältää numeroita</translation>
 <translation id="4662788913887017617">Jaa tämä kirjanmerkki iPhonellesi</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">Salli mobiilitiedonsiirto roaming-tilassa</translation>
 <translation id="4804818685124855865">Katkaise yhteys</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Suosittelemme, että varmuuskopioit nykyisen Linux-säilösi ennen päivitystä.</translation>
 <translation id="4807098396393229769">Kortissa oleva nimi</translation>
-<translation id="4808319664292298116">Siirrytäänkö VR-tilaan (<ph name="DOMAIN" />)?</translation>
 <translation id="4808667324955055115">Ponnahdusikkunat estetty:</translation>
 <translation id="480990236307250886">Avaa oma etusivu</translation>
 <translation id="4811212958317149293">Kytkimen käyttö: näppäimistön automaattinen skannaus</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">Pakkaus epäonnistui.</translation>
 <translation id="5225324770654022472">Näytä sovellusten oikopolku</translation>
 <translation id="5227679487546032910">Sinivihreä oletusavatar</translation>
+<translation id="5228088094491423618">Livetekstitys</translation>
 <translation id="5228579091201413441">Ota synkronointi käyttöön</translation>
 <translation id="5229189185761556138">Hallitse syöttötapoja</translation>
 <translation id="5230516054153933099">Ikkuna</translation>
@@ -3707,7 +3703,6 @@
 <translation id="5739235828260127894">Odotetaan vahvistusta. <ph name="LINK_BEGIN" />Lisätietoja<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Hyvin suuri</translation>
 <translation id="574209121243317957">Äänenkorkeus</translation>
-<translation id="5745136023067925867">Tilaa vinkkejä, tarjouksia ja päivityksiä (<ph name="DEVICE_TYPE" />) ja anna palautetta</translation>
 <translation id="5746169159649715125">Tallenna PDF-muodossa</translation>
 <translation id="5747552184818312860">Vanhenee</translation>
 <translation id="5747785204778348146">Kehittäjä – epävakaa</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sulje sivu}other{Sulje sivut}}</translation>
 <translation id="7207457272187520234">Lähetä käyttö- ja diagnostiikkadataa. Laite lähettää tällä hetkellä diagnostiikkadataa sekä laitteen ja sovellusten käyttödataa automaattisesti Googlelle. Datan avulla parannetaan esimerkiksi järjestelmän ja sovellusten vakautta. Kootusta datasta on hyötyä myös Googlen sovelluksille ja kumppaneille, kuten Android-kehittäjille. Omistaja on ottanut tämän asetuksen käyttöön. Jos olet laittanut päälle muun verkko- ja sovellustoiminnan asetuksen, tätä dataa voidaan tallentaa Google-tilillesi.</translation>
 <translation id="7207631048330366454">Hae sovelluksia</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> muutti hakupalvelua, se on nyt <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Laajennustulostimet</translation>
 <translation id="7212097698621322584">Lisää nykyinen PIN-koodisi muuttaaksesi sen. Jos et tiedä PIN-koodiasi, sinun on nollattava suojausavaimesi ja luotava uusi PIN-koodi.</translation>
 <translation id="7216409898977639127">Mobiilioperaattori</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392"><ph name="DEVICE_NAME" /> lisätään laitepariksi…</translation>
 <translation id="7737238973539693982">Poista Linux (beta)</translation>
 <translation id="7740996059027112821">Vakio</translation>
-<translation id="7743128043742060936">Laajennus <ph name="EXTENSION_NAME" /> muutti tätä sivua</translation>
 <translation id="7744047395460924128">Näytä tulostushistoria</translation>
 <translation id="7744192722284567281">Kuului tietosuojaloukkaukseen</translation>
 <translation id="7750228210027921155">Kuva kuvassa</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">Avaa kiinnitetyllä välilehdellä</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> on keskeytetty</translation>
 <translation id="9124003689441359348">Tässä näytetään tallennetut salasanasi.</translation>
+<translation id="9126149354162942022">Kohdistimen väri</translation>
 <translation id="9128317794749765148">Määritystä ei voitu suorittaa loppuun</translation>
 <translation id="9128870381267983090">Yhdistä verkkoon</translation>
 <translation id="9130015405878219958">Annoit virheellisen tilan.</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index f7f012e0..f3667974 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Tagapaglagda ng Certificate</translation>
 <translation id="1145292499998999162">Na-block ang plugin</translation>
 <translation id="1145593918056169051">Huminto ang printer</translation>
-<translation id="1146678959555564648">Pumasok sa VR</translation>
 <translation id="114721135501989771">Magkaroon ng mga smart na feature ng Google sa Chrome</translation>
 <translation id="1147991416141538220">Para humiling ng access, makipag-ugnayan sa administrator ng device na ito.</translation>
 <translation id="1149401351239820326">Buwan ng pag-expire</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">I-clear ang cookies ng third party</translation>
 <translation id="2097372108957554726">Kailangan mong mag-sign in sa Chrome upang makapagrehistro ng mga bagong device</translation>
 <translation id="2099172618127234427">Ie-enable mo ang mga feature para sa pagde-debug ng Chrome OS na magse-set up ng sshd daemon at mag-e-enable ng pagbu-boot mula sa mga USB drive.</translation>
-<translation id="2099625543891475722">iyong mga pisikal na katangian, tulad ng tangkad</translation>
 <translation id="2099686503067610784">Tanggalin ang certificate ng server na "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Awtomatikong Mag-sign in</translation>
 <translation id="2101225219012730419">Bersyon:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">Hindi maaaring i-enroll ang device na ito sa domain kung saan nabibilang ang iyong account dahil minarkahan ang iyong device para mapamahalaan ng ibang domain.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152">Gustong mag-scan ng <ph name="ORIGIN" /> para sa mga Bluetooth device na nasa malapit. Nahanap ang mga sumusunod na device:</translation>
-<translation id="4353114845960720315">Habang nasa VR ka, posibleng malaman ng site na ito ang tungkol sa:</translation>
 <translation id="4354073718307267720">Magtanong kapag gusto ng isang site na gumawa ng 3D na mapa ng iyong kapaligiran o subaybayan ang posisyon ng camera</translation>
 <translation id="4354344420232759511">Lalabas dito ang mga site na binibisita mo</translation>
 <translation id="435527878592612277">Piliin ang iyong larawan</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">Pangunahing account</translation>
 <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" ang inaasahang bersyon, ngunit "<ph name="NEW_ID" />" ang bersyon</translation>
 <translation id="4660540330091848931">Nire-resize</translation>
-<translation id="4660838440047236328">ang layout ng iyong kwarto</translation>
 <translation id="4661407454952063730">Ang data ng app ay puwedeng anumang data na na-save ng isang app (batay sa mga setting ng developer), kabilang ang data tulad ng mga contact, mensahe, at larawan.</translation>
 <translation id="4662373422909645029">Bawal numero sa nickname</translation>
 <translation id="4662788913887017617">Ibahagi ang bookmark na ito sa iyong iPhone</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">Payagan ang pag-roam ng mobile data</translation>
 <translation id="4804818685124855865">I-disconnect</translation>
 <translation id="4804827417948292437">Abukado</translation>
-<translation id="4805077164141082536">Inirerekomenda namin sa iyo na i-back up ang kasalukuyan mong Linux container bago mag-upgrade.</translation>
 <translation id="4807098396393229769">Pangalang makikita sa card</translation>
-<translation id="4808319664292298116">Ilagay ang VR mula sa <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Naka-block ang mga pop-up</translation>
 <translation id="480990236307250886">Buksan ang home page</translation>
 <translation id="4811212958317149293">Awtomatikong pag-scan ng keyboard sa pamamagitan ng switch access</translation>
@@ -3712,7 +3706,6 @@
 <translation id="5739235828260127894">Naghihintay ng pag-verify. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Napakalaki</translation>
 <translation id="574209121243317957">Pitch</translation>
-<translation id="5745136023067925867">Makatanggap ng mga tip, alok, at update sa <ph name="DEVICE_TYPE" />, at magbahagi ng feedback</translation>
 <translation id="5746169159649715125">I-save bilang PDF</translation>
 <translation id="5747552184818312860">Mag-e-expire sa</translation>
 <translation id="5747785204778348146">Developer - hindi matatag</translation>
@@ -4835,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Umalis sa Page}one{Umalis sa Mga Page}other{Umalis sa Mga Page}}</translation>
 <translation id="7207457272187520234">Magpadala ng data ng paggamit at diagnostic. Sa kasalukuyan, ang device na ito ay awtomatikong nagpapadala ng diagnostic na data, data ng device, at data ng paggamit sa app sa Google. Makakatulong ito sa stability ng system at ng app, at sa iba pang pagpapahusay. Makakatulong din ang ilang pinagsama-samang data sa mga app at partner ng Google, gaya ng mga developer ng Android. Ipinapatupad ng may-ari ang setting na ito. Kung naka-on ang iyong karagdagang setting ng Aktibidad sa Web at App, posibleng ma-save ang data na ito sa Google Account mo.</translation>
 <translation id="7207631048330366454">Maghanap ng mga app</translation>
-<translation id="7210171324714276060">Pinalitan ng extension na <ph name="EXTENSION_NAME" /> ang paghahanap para magamit ang <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Mga extension na printer</translation>
 <translation id="7212097698621322584">Ilagay ang kasalukuyan mong PIN para palitan ito. Kung hindi mo alam ang iyong PIN, kakailanganin mong i-reset ang security key, pagkatapos ay gumawa ng bagong PIN.</translation>
 <translation id="7216409898977639127">Cellular provider</translation>
@@ -5235,7 +5227,6 @@
 <translation id="7737115349420013392">Ipinapares sa "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">I-delete ang Linux (Beta)</translation>
 <translation id="7740996059027112821">Karaniwan</translation>
-<translation id="7743128043742060936">Binago ng extension na <ph name="EXTENSION_NAME" /> ang page na ito</translation>
 <translation id="7744047395460924128">Tingnan ang iyong history ng pag-print</translation>
 <translation id="7744192722284567281">Nakita sa paglabag sa data</translation>
 <translation id="7750228210027921155">Picture in picture</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 992aa118..e3f41e4 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Signataire du certificat</translation>
 <translation id="1145292499998999162">Plugiciel bloqué</translation>
 <translation id="1145593918056169051">L'imprimante s'est arrêtée</translation>
-<translation id="1146678959555564648">Activer la réalité virtuelle</translation>
 <translation id="114721135501989771">Fonctionnalités intelligentes Google dans Chrome</translation>
 <translation id="1147991416141538220">Pour demander l'accès, communiquez avec l'administrateur de cet appareil.</translation>
 <translation id="1149401351239820326">Mois d'expiration</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Effacer les témoins tiers</translation>
 <translation id="2097372108957554726">Vous devez vous connecter à Chrome pour enregistrer de nouveaux appareils.</translation>
 <translation id="2099172618127234427">Vous activez les fonctions de débogage de Chrome OS qui vont installer le démon sshd et activer le démarrage depuis les appareils USB.</translation>
-<translation id="2099625543891475722">vos caractéristiques physiques, comme votre taille;</translation>
 <translation id="2099686503067610784">Supprimer le certificat de serveur « <ph name="CERTIFICATE_NAME" /> »?</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
 <translation id="2101225219012730419">Version :</translation>
@@ -2659,7 +2657,6 @@
 <translation id="4350019051035968019">Impossible d'enregistrer cet appareil dans le domaine auquel appartient votre compte, car il est marqué pour être géré par un autre domaine.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> veut rechercher des appareils Bluetooth à proximité. Les appareils suivants ont été détectés :</translation>
-<translation id="4353114845960720315">Lorsque vous êtes en mode RV, ce site pourrait en apprendre davantage sur :</translation>
 <translation id="4354073718307267720">Demander une autorisation lorsqu'un site veut créer une carte 3D de votre environnement ou faire le suivi de la position de l'appareil photo</translation>
 <translation id="4354344420232759511">Les sites que vous visiterez apparaîtront ici</translation>
 <translation id="435527878592612277">Sélectionner votre photo</translation>
@@ -2894,7 +2891,6 @@
 <translation id="4659077111144409915">Compte principal</translation>
 <translation id="4660476621274971848">Version « <ph name="NEW_ID" /> » reçue au lieu de la version « <ph name="EXPECTED_VERSION" /> » attendue</translation>
 <translation id="4660540330091848931">Redimensionnement en cours…</translation>
-<translation id="4660838440047236328">la disposition de votre pièce.</translation>
 <translation id="4661407454952063730">Les données d'application correspondent à toutes les données enregistrées par une application (en fonction des paramètres définis par le concepteur), y compris les données comme les contacts, les messages et les photos.</translation>
 <translation id="4662373422909645029">Aucun chiffre dans le pseudo</translation>
 <translation id="4662788913887017617">Partagez ce favori avec votre iPhone</translation>
@@ -2983,9 +2979,7 @@
 <translation id="4801512016965057443">Autoriser l'itinérance des données mobiles</translation>
 <translation id="4804818685124855865">Déconnecter</translation>
 <translation id="4804827417948292437">Avocat</translation>
-<translation id="4805077164141082536">Nous vous recommandons de sauvegarder votre conteneur Linux actuel avant d'effectuer la mise à niveau.</translation>
 <translation id="4807098396393229769">Nom du titulaire de la carte</translation>
-<translation id="4808319664292298116">Démarrer la RV à partir de <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Fenêtres contextuelles bloquées :</translation>
 <translation id="480990236307250886">Ouvrir la page d'accueil</translation>
 <translation id="4811212958317149293">Analyse automatique du clavier de Switch Access</translation>
@@ -3713,7 +3707,6 @@
 <translation id="5739235828260127894">En attente de vérification. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Très grand</translation>
 <translation id="574209121243317957">Timbre de la voix</translation>
-<translation id="5745136023067925867">Obtenez des conseils sur votre <ph name="DEVICE_TYPE" />, des offres et des mises à jour, et transmettez vos commentaires</translation>
 <translation id="5746169159649715125">Enregistrer au format PDF</translation>
 <translation id="5747552184818312860">Date d'expiration</translation>
 <translation id="5747785204778348146">Développeur (instable)</translation>
@@ -4836,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Quitter la page}one{Quitter la page}other{Quitter les pages}}</translation>
 <translation id="7207457272187520234">Envoyer les données d'utilisation et de diagnostic. Actuellement, cet appareil envoie automatiquement à Google des données de diagnostic, de l'appareil et d'utilisation des applications. Cela nous permettra d'assurer la stabilité du système et des applications, et d'apporter d'autres améliorations. Certaines données collectées contribueront également à améliorer les applications Google et aideront nos partenaires, comme les concepteurs Android. Ce paramètre est appliqué par le propriétaire du compte. Si le paramètre relatif aux autres activités sur le Web et dans les applications est activé, ces données peuvent être enregistrées dans votre compte Google.</translation>
 <translation id="7207631048330366454">Rechercher dans les applications</translation>
-<translation id="7210171324714276060">L'extension <ph name="EXTENSION_NAME" /> a activé un moteur de recherche différent : <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Imprimantes d'extension</translation>
 <translation id="7212097698621322584">Entrez votre NIP actuel pour le modifier. Si vous ne connaissez pas votre NIP, vous devrez réinitialiser la clé de sécurité, puis créer un nouveau NIP.</translation>
 <translation id="7216409898977639127">Fournisseur cellulaire</translation>
@@ -5236,7 +5228,6 @@
 <translation id="7737115349420013392">Association avec « <ph name="DEVICE_NAME" /> » en cours…</translation>
 <translation id="7737238973539693982">Supprimer Linux (bêta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Cette page a été modifiée par l'extension <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Afficher votre historique d'impression</translation>
 <translation id="7744192722284567281">Trouvé dans une violation de données</translation>
 <translation id="7750228210027921155">Incrustation d'image</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index b64e6574..4c241eb 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Signataire du certificat </translation>
 <translation id="1145292499998999162">Plug-in bloqué</translation>
 <translation id="1145593918056169051">L'imprimante s'est arrêtée</translation>
-<translation id="1146678959555564648">Activer la réalité virtuelle</translation>
 <translation id="114721135501989771">Profitez des fonctionnalités intelligentes de Google dans Chrome</translation>
 <translation id="1147991416141538220">Pour demander l'accès, contactez l'administrateur de cet appareil.</translation>
 <translation id="1149401351239820326">Mois d'expiration</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Effacer les cookies tiers</translation>
 <translation id="2097372108957554726">Vous devez vous connecter à Chrome pour enregistrer de nouveaux périphériques.</translation>
 <translation id="2099172618127234427">Les fonctionnalités de débogage de Chrome OS que vous activez configurent le démon sshd et autorisent le démarrage à partir de clés USB.</translation>
-<translation id="2099625543891475722">vos caractéristiques physiques, telles que votre taille ;</translation>
 <translation id="2099686503067610784">Supprimer le certificat de serveur "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
 <translation id="2101225219012730419">Version :</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Informations sur l'Assistant Google</translation>
 <translation id="3733127536501031542">Serveur SSL avec fonction d'optimisation</translation>
 <translation id="3735740477244556633">Trier par</translation>
+<translation id="3738213647660363521">Couleur personnalisée du curseur</translation>
 <translation id="3738924763801731196"><ph name="OID" /> :</translation>
 <translation id="3739254215541673094">Ouvrir <ph name="APPLICATION" /> ?</translation>
 <translation id="3742055079367172538">Capture d'écran réalisée</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Impossible d'enregistrer cet appareil dans le domaine auquel appartient votre compte, car il est marqué pour être géré par un autre domaine.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152">Le site <ph name="ORIGIN" /> souhaite rechercher les appareils Bluetooth à proximité. Les appareils suivants ont été détectés :</translation>
-<translation id="4353114845960720315">En mode RV, le site pourrait accéder aux informations suivantes :</translation>
 <translation id="4354073718307267720">Vous demander votre avis lorsqu'un site souhaite créer un plan 3D de votre environnement ou suivre la position de la caméra</translation>
 <translation id="4354344420232759511">Les sites que vous consultez s'affichent ici</translation>
 <translation id="435527878592612277">Sélectionner votre photo</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Compte principal</translation>
 <translation id="4660476621274971848">Version <ph name="NEW_ID" /> reçue au lieu de la version <ph name="EXPECTED_VERSION" /> attendue</translation>
 <translation id="4660540330091848931">Redimensionnement…</translation>
-<translation id="4660838440047236328">la disposition de la pièce.</translation>
 <translation id="4661407454952063730">Les données de l'application peuvent désigner toutes les données enregistrées par une application (en fonction des paramètres définis par le développeur), y compris celles comme les contacts, les messages et les photos.</translation>
 <translation id="4662373422909645029">Le pseudo ne doit pas contenir de chiffres</translation>
 <translation id="4662788913887017617">Partager ce favori avec votre iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Autoriser l'itinérance des données mobiles</translation>
 <translation id="4804818685124855865">Se déconnecter</translation>
 <translation id="4804827417948292437">Avocat</translation>
-<translation id="4805077164141082536">Nous vous recommandons de sauvegarder votre conteneur Linux actuel avant d'effectuer la mise à niveau.</translation>
 <translation id="4807098396393229769">Titulaire de la carte</translation>
-<translation id="4808319664292298116">Activer la RV à partir du site <ph name="DOMAIN" /> ?</translation>
 <translation id="4808667324955055115">Pop-up bloqués :</translation>
 <translation id="480990236307250886">Ouvrir la page d'accueil</translation>
 <translation id="4811212958317149293">Recherche automatique du clavier Switch Access</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Échec de la compression.</translation>
 <translation id="5225324770654022472">Afficher le raccourci des applications</translation>
 <translation id="5227679487546032910">Avatar turquoise par défaut</translation>
+<translation id="5228088094491423618">Sous-titres instantanés</translation>
 <translation id="5228579091201413441">Activer la synchronisation</translation>
 <translation id="5229189185761556138">Gérer les modes de saisie</translation>
 <translation id="5230516054153933099">Fenêtre</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">En attente de validation. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Très grande</translation>
 <translation id="574209121243317957">Ton</translation>
-<translation id="5745136023067925867">Recevez des conseils, des offres et des informations sur <ph name="DEVICE_TYPE" />, et partagez vos commentaires</translation>
 <translation id="5746169159649715125">Enregistrer au format PDF</translation>
 <translation id="5747552184818312860">Date d'expiration</translation>
 <translation id="5747785204778348146">Développeur (instable)</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Quitter la page}one{Quitter la page}other{Quitter les pages}}</translation>
 <translation id="7207457272187520234">Envoyer des données d'utilisation et de diagnostic. À l'heure actuelle, cet appareil envoie automatiquement à Google des données liées à son utilisation et à celle des applications, ainsi que des données de diagnostic. Ces informations nous aideront à améliorer, entre autres, la stabilité du système et des applications. Certaines données globales seront également utiles aux développeurs des applications Google et à nos partenaires tels que les développeurs Android. Ce paramètre est appliqué par le propriétaire. Si vous avez activé le paramètre "Activité supplémentaire sur le Web et les applications", ces données peuvent être enregistrées dans votre compte Google.</translation>
 <translation id="7207631048330366454">Rechercher dans les applications</translation>
-<translation id="7210171324714276060">L'extension <ph name="EXTENSION_NAME" /> a remplacé le moteur de recherche par <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Imprimantes d'extension</translation>
 <translation id="7212097698621322584">Saisissez votre code actuel pour pouvoir le modifier. Si vous ne vous en souvenez plus, vous devez réinitialiser la clé de sécurité, puis créer un autre code.</translation>
 <translation id="7216409898977639127">Opérateur de téléphonie mobile</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">Association avec "<ph name="DEVICE_NAME" />" en cours…</translation>
 <translation id="7737238973539693982">Effacer Linux (Bêta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Cette page a été modifiée par l'extension <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Afficher l'historique d'impression</translation>
 <translation id="7744192722284567281">Détecté lors d'une violation des données</translation>
 <translation id="7750228210027921155">Mode PIP (Picture-in-Picture)</translation>
@@ -6352,6 +6345,7 @@
 <translation id="9121814364785106365">Ouvrir dans un onglet épinglé</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> mis en pause</translation>
 <translation id="9124003689441359348">Les mots de passe enregistrés s'afficheront ici</translation>
+<translation id="9126149354162942022">Couleur du curseur</translation>
 <translation id="9128317794749765148">Impossible de terminer la configuration</translation>
 <translation id="9128870381267983090">Se connecter au réseau</translation>
 <translation id="9130015405878219958">Le mode indiqué est incorrect.</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index fe2c6291..220b19e 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Titular do certificado</translation>
 <translation id="1145292499998999162">Bloqueouse o plugin</translation>
 <translation id="1145593918056169051">A impresora deixou de funcionar</translation>
-<translation id="1146678959555564648">Entrar en RV</translation>
 <translation id="114721135501989771">Obter tecnoloxía de Google en Chrome</translation>
 <translation id="1147991416141538220">Para solicitar acceso, ponte en contacto co administrador deste dispositivo.</translation>
 <translation id="1149401351239820326">Mes de caducidade</translation>
@@ -865,7 +864,6 @@
 <translation id="2096715839409389970">Borrar cookies de terceiros</translation>
 <translation id="2097372108957554726">Tes que iniciar sesión en Chrome para rexistrar novos dispositivos</translation>
 <translation id="2099172618127234427">Vas activar as funcións de depuración de Chrome OS que configurarán o daemon sshd e activarán o arranque desde unidades USB.</translation>
-<translation id="2099625543891475722">as túas características físicas, como a altura</translation>
 <translation id="2099686503067610784">Queres eliminar o certificado do servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Inicio de sesión automático</translation>
 <translation id="2101225219012730419">Versión:</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">Información relacionada co Asistente de Google</translation>
 <translation id="3733127536501031542">Servidor SSL con certificado Step-Up</translation>
 <translation id="3735740477244556633">Ordenar por</translation>
+<translation id="3738213647660363521">Cor do cursor personalizada</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Queres abrir <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Captura de pantalla feita</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">Este dispositivo non se pode inscribir no dominio ao que pertence a túa conta porque un dominio diferente marcou o dispositivo para xestionalo.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> quere buscar dispositivos Bluetooth cerca. Atopáronse os seguintes dispositivos:</translation>
-<translation id="4353114845960720315">Mentres esteas utilizando o modo de RV, este sitio pode obter a seguinte información:</translation>
 <translation id="4354073718307267720">Preguntar cando un sitio queira crear un mapa 3D do que te rodea e facer un seguimento da posición da cámara</translation>
 <translation id="4354344420232759511">Os sitios que visitas aparecerán aquí</translation>
 <translation id="435527878592612277">Seleccionar a túa foto</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">Conta principal</translation>
 <translation id="4660476621274971848">A versión esperada era "<ph name="EXPECTED_VERSION" />", pero a obtida foi "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Cambiando tamaño</translation>
-<translation id="4660838440047236328">a distribución do teu cuarto</translation>
 <translation id="4661407454952063730">Os datos das aplicacións poden incluír calquera tipo de información que gardase unha aplicación (baseándose na configuración do programador), incluídos os contactos, as mensaxes e as fotos.</translation>
 <translation id="4662373422909645029">O alcume non pode ter números</translation>
 <translation id="4662788913887017617">Comparte este marcador co iPhone</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">Permitir a itinerancia de datos móbiles</translation>
 <translation id="4804818685124855865">Desconectar</translation>
 <translation id="4804827417948292437">Aguacate</translation>
-<translation id="4805077164141082536">Recomendamos facer unha copia de seguranza do contedor Linux actual antes de realizar a actualización.</translation>
 <translation id="4807098396393229769">Nome que aparece na tarxeta</translation>
-<translation id="4808319664292298116">Queres iniciar o modo de RV en <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Ventás emerxentes bloqueadas:</translation>
 <translation id="480990236307250886">Abre a páxina de inicio</translation>
 <translation id="4811212958317149293">Exploración automática de teclados de acceso con interruptores</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">Produciuse un erro na compresión.</translation>
 <translation id="5225324770654022472">Mostrar o atallo das aplicacións</translation>
 <translation id="5227679487546032910">Avatar azul verdoso predeterminado</translation>
+<translation id="5228088094491423618">Subtítulos instantáneos</translation>
 <translation id="5228579091201413441">Activar sincronización</translation>
 <translation id="5229189185761556138">Xestionar métodos de entrada</translation>
 <translation id="5230516054153933099">Ventá</translation>
@@ -3709,7 +3705,6 @@
 <translation id="5739235828260127894">Esperando pola verificación. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Moi grande</translation>
 <translation id="574209121243317957">Ton</translation>
-<translation id="5745136023067925867">Recibe consellos sobre <ph name="DEVICE_TYPE" />, mantente ao tanto das novidades e das ofertas, e envíanos os teus comentarios</translation>
 <translation id="5746169159649715125">Gardar como PDF</translation>
 <translation id="5747552184818312860">Data de caducidade</translation>
 <translation id="5747785204778348146">Programador: inestable</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Páxina de saída}other{Páxinas de saída}}</translation>
 <translation id="7207457272187520234">Enviar datos de uso e diagnóstico. Este dispositivo envía automaticamente datos de diagnóstico e de uso do dispositivo e das aplicacións a Google. Esta información permitirá aumentar a estabilidade do sistema e das aplicacións, e realizar outras melloras. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android. Esta opción de configuración contrólaa o propietario. Se está activada a opción Actividade web e das aplicacións adicional, estes datos pódense gardar na túa Conta de Google.</translation>
 <translation id="7207631048330366454">Buscar aplicacións</translation>
-<translation id="7210171324714276060">A extensión <ph name="EXTENSION_NAME" /> cambiou o provedor de busca para que se utilice <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Impresoras da extensión</translation>
 <translation id="7212097698621322584">Introduce o teu PIN actual para cambialo. Se non sabes cal é, deberás restablecer a chave de seguranza e, despois, crear un novo.</translation>
 <translation id="7216409898977639127">Provedor móbil</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">Vinculando co dispositivo (<ph name="DEVICE_NAME" />)...</translation>
 <translation id="7737238973539693982">Eliminar Linux (beta)</translation>
 <translation id="7740996059027112821">Estándar</translation>
-<translation id="7743128043742060936">A extensión <ph name="EXTENSION_NAME" /> cambiou esta páxina</translation>
 <translation id="7744047395460924128">Ver o teu historial de impresión</translation>
 <translation id="7744192722284567281">O contrasinal viuse implicado nunha violación da seguranza dos datos</translation>
 <translation id="7750228210027921155">Pantalla superposta</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">Abrir como pestana fixada</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> púxose en pausa</translation>
 <translation id="9124003689441359348">Os contrasinais gardados aparecerán aquí</translation>
+<translation id="9126149354162942022">Cor do cursor</translation>
 <translation id="9128317794749765148">Non se puido completar a configuración</translation>
 <translation id="9128870381267983090">Conectarse á rede</translation>
 <translation id="9130015405878219958">Modo non válido introducido.</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index e22be6a..db92f9d 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">પ્રમાણપત્ર હસ્તાક્ષરકર્તા</translation>
 <translation id="1145292499998999162">પ્લગિન અવરોધિત</translation>
 <translation id="1145593918056169051">પ્રિન્ટર બંધ થઈ ગયું છે</translation>
-<translation id="1146678959555564648">VR માં દાખલ થાઓ</translation>
 <translation id="114721135501989771">Chromeમાં Google સ્માર્ટ મેળવો</translation>
 <translation id="1147991416141538220">ઍક્સેસ વિશે પૂછવા માટે આ ડિવાઇસના વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
 <translation id="1149401351239820326">સમય સમાપ્તિ મહિનો</translation>
@@ -862,7 +861,6 @@
 <translation id="2096715839409389970">ત્રીજા પક્ષની કુકીને સાફ કરો</translation>
 <translation id="2097372108957554726">નવા ડિવાઇસને નોંધવા માટે તમારે Chromeમાં સાઇન ઇન કરવાની જરૂર છે</translation>
 <translation id="2099172618127234427">તમે Chrome OS ડિબગીંગ સુવિધાઓને ચાલુ કરી રહ્યાં છો જે sshd daemon સેટ કરશે અને USB ડ્રાઇવથી બૂટ કરવું ચાલુ કરશે.</translation>
-<translation id="2099625543891475722">તમારા શારીરિક લક્ષણો, જેમ કે ઊંચાઈ</translation>
 <translation id="2099686503067610784">સર્વર પ્રમાણપત્ર "<ph name="CERTIFICATE_NAME" />"ને ડિલીટ કરી દઈએ?</translation>
 <translation id="2100273922101894616">સ્વતઃ સાઇન-ઇન</translation>
 <translation id="2101225219012730419">વર્ઝન:</translation>
@@ -2181,6 +2179,7 @@
 <translation id="3732857534841813090">Google Assistant સંબંધિત માહિતી</translation>
 <translation id="3733127536501031542">સ્ટેપ-અપ સાથે SSL સર્વર </translation>
 <translation id="3735740477244556633">આ પ્રમાણે સૉર્ટ કરો</translation>
+<translation id="3738213647660363521">કસ્ટમ કર્સરનો રંગ</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ખોલીએ?</translation>
 <translation id="3742055079367172538">સ્ક્રીનશૉટ લેવાયો</translation>
@@ -2653,7 +2652,6 @@
 <translation id="4350019051035968019">તમારું એકાઉન્ટ જે ડોમેનથી સંબંધિત છે, તેમાં આ ડિવાઇસની નોંધણી કરી શકાતી નથી, કારણ કે ડિવાઇસને મેનેજ કરવા માટે કોઈ અલગ ડોમેન દ્વારા ચિહ્નિત કરેલું છે.</translation>
 <translation id="4350782034419308508">ઓકે Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> નજીકના બ્લૂટૂથ ડિવાઇસ માટે સ્કૅન કરવા માગે છે. નીચે મુજબના ડિવાઇસ મળ્યા છે:</translation>
-<translation id="4353114845960720315">જ્યારે તમે VRમાં હો, ત્યારે આ સાઇટ આના વિશે જાણી શકે છે:</translation>
 <translation id="4354073718307267720">જ્યારે કોઈ સાઇટ તમારી આજુબાજુનો 3D નકશો બનાવવા અથવા કૅમેરાની સ્થિતિને ટ્રૅક કરવા ઇચ્છતી હોય, ત્યારે પૂછો</translation>
 <translation id="4354344420232759511">તમે મુલાકાત લીધેલી સાઇટ અહીં દેખાશે</translation>
 <translation id="435527878592612277">તમારો ફોટો પસંદ કરો</translation>
@@ -2800,7 +2798,7 @@
 <translation id="4545759655004063573">અપૂરતી પરવાનગીઓને કારણે સાચવી શકાતું નથી. કૃપા કરીને બીજી જગ્યાએ સાચવો.</translation>
 <translation id="4546308221697447294">Google Chrome વડે ઝડપથી બ્રાઉઝ કરો</translation>
 <translation id="4546692474302123343">Google Assistant વૉઇસ ઇનપુટ</translation>
-<translation id="4547659257713117923">અન્ય ઉપકરણોમાંથી કોઈ ટેબ્સ નથી</translation>
+<translation id="4547659257713117923">અન્ય ડિવાઇસમાંથી કોઈ ટેબ નથી</translation>
 <translation id="4547672827276975204">આપમેળે સેટ કરો</translation>
 <translation id="4549791035683739768">તમારી સિક્યુરિટી કીમાં કોઈ ફિંગરપ્રિન્ટ સંગ્રહિત નથી</translation>
 <translation id="4551763574344810652">છેલ્લો ફેરફાર રદ કરવા માટે <ph name="MODIFIER_KEY_DESCRIPTION" /> દબાવો</translation>
@@ -2888,7 +2886,6 @@
 <translation id="4659077111144409915">પ્રાથમિક એકાઉન્ટ</translation>
 <translation id="4660476621274971848">અપેક્ષિત વર્ઝન "<ph name="EXPECTED_VERSION" />" છે, પરંતુ વર્ઝન "<ph name="NEW_ID" />" હતું.</translation>
 <translation id="4660540330091848931">કદ બદલી રહ્યાં છીએ</translation>
-<translation id="4660838440047236328">તમારા રૂમનો લેઆઉટ</translation>
 <translation id="4661407454952063730">ઍપનો ડેટા એ (ડેવલપર સેટિંગના આધારે) ઍપમાં સાચવેલો કોઈપણ ડેટા હોઈ શકે છે, જેમાં સંપર્કો, સંદેશા અને ફોટા જેવો સંભવિત રૂપે સંવેદનશીલ ડેટાનો સમાવેશ થાય છે.</translation>
 <translation id="4662373422909645029">ઉપનામમાં સંખ્યા ન હોઈ શકે</translation>
 <translation id="4662788913887017617">તમારા iPhone સાથે આ બુકમાર્ક શેર કરો</translation>
@@ -2977,9 +2974,7 @@
 <translation id="4801512016965057443">મોબાઇલ ડેટા રોમિંગને મંજૂરી આપો</translation>
 <translation id="4804818685124855865">ડિસ્કનેક્ટ કરો</translation>
 <translation id="4804827417948292437">એવોકેડો</translation>
-<translation id="4805077164141082536">અપગ્રેડ કરતા પહેલાં અમે તમને તમારા વર્તમાન Linux કન્ટેનરનું બૅકઅપ લેવાનો સુઝાવ આપીએ છીએ.</translation>
 <translation id="4807098396393229769">કાર્ડ પરનું નામ</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />માંથી VRમાં દાખલ થવું છે?</translation>
 <translation id="4808667324955055115">પૉપ-અપ બ્લૉક કરેલ છે:</translation>
 <translation id="480990236307250886">હોમ પેજ ખોલો</translation>
 <translation id="4811212958317149293">સ્વિચ ઍક્સેસ કીબોર્ડનું ઑટોમૅટિક રીતે સ્કૅન કરવાનાં સેટિંગ</translation>
@@ -3293,6 +3288,7 @@
 <translation id="52232769093306234">પૅકિંગ નિષ્ફળ થયું.</translation>
 <translation id="5225324770654022472">ઍપ્લિકેશનો શોર્ટકટ બતાવો</translation>
 <translation id="5227679487546032910">ડિફોલ્ટ મોરપીચ્છ અવતાર</translation>
+<translation id="5228088094491423618">લાઇવ કૅપ્શન</translation>
 <translation id="5228579091201413441">સિંક ચાલુ કરો</translation>
 <translation id="5229189185761556138">ઇનપુટ પદ્ધતિઓને સંચાલિત કરો</translation>
 <translation id="5230516054153933099">વિંડો</translation>
@@ -3707,7 +3703,6 @@
 <translation id="5739235828260127894">ચકાસણીની રાહ જોઈ રહ્યાં છીએ. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">બહુ મોટું</translation>
 <translation id="574209121243317957">પિચ</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> માટે ટિપ, ઑફરો અને અપડેટ મેળવો તથા પ્રતિસાદ શેર કરો</translation>
 <translation id="5746169159649715125">PDF તરીકે સાચવો</translation>
 <translation id="5747552184818312860">સમાપ્ત થાય છે</translation>
 <translation id="5747785204778348146">વિકાસકર્તા - અસ્થાયી</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{પેજમાંથી બહાર નીકળો}one{પેજમાંથી બહાર નીકળો}other{પેજમાંથી બહાર નીકળો}}</translation>
 <translation id="7207457272187520234">વપરાશ અને નિદાનનો ડેટા મોકલો. આ ડિવાઇસ હાલમાં Googleને નિદાન, ડિવાઇસ અને ઍપ વપરાશનો ડેટા ઑટોમૅટિક રીતે મોકલી રહ્યું છે. આ સિસ્ટમ અને ઍપની સ્થિરતા અને અન્ય સુધારણાઓમાં સહાય કરશે. એકત્ર કરેલો કેટલોક ડેટા Google ઍપ અને ભાગીદારો, જેમ કે Android ડેવલપરને પણ સહાય કરશે. આ સેટિંગ માલિક દ્વારા લાગુ કરવામાં આવ્યું છે. જો તમારી વધારાની વેબ અને ઍપ પ્રવૃત્તિનું સેટિંગ ચાલુ હોય, તો આ ડેટા તમારા Google એકાઉન્ટમાં સાચવવામાં આવી શકે છે.</translation>
 <translation id="7207631048330366454">ઍપ શોધો</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> એક્સ્ટેન્શન દ્વારા શોધને <ph name="SEARCH_PROVIDER_DOMAIN" />નો ઉપયોગ કરવા પર બદલવામાં આવ્યું</translation>
 <translation id="7210499381659830293">એક્સ્ટેંશન પ્રિન્ટર</translation>
 <translation id="7212097698621322584">પિન બદલવા માટે તમારો વર્તમાન પિન દાખલ કરો. જો તમને તમારો પિન યાદ ન હોય, તો તમારે સુરક્ષા કોડ રીસેટ કરવો પડશે, અને પછી નવો પિન બનાવવો પડશે.</translation>
 <translation id="7216409898977639127">સેલ્યુલર પ્રદાતા</translation>
@@ -5121,7 +5115,7 @@
 <translation id="7599527631045201165">ઉપકરણનું નામ ખૂબ લાબું છે. ફરી પ્રયત્ન કરવા માટે થોડું ટૂંકું નામ લખો.</translation>
 <translation id="7600965453749440009"><ph name="LANGUAGE" /> નું ક્યારેય અનુવાદ કરશો નહીં</translation>
 <translation id="760197030861754408">કનેક્ટ કરવા માટે <ph name="LANDING_PAGE" /> પર જાઓ.</translation>
-<translation id="7602079150116086782">અન્ય ઉપકરણોમાંથી કોઈ ટેબ્સ નથી</translation>
+<translation id="7602079150116086782">અન્ય ડિવાઇસમાંથી કોઈ ટેબ નથી</translation>
 <translation id="7602173054665172958">પ્રિન્ટ મેનેજમેન્ટ</translation>
 <translation id="7604942372593434070">તમારી બ્રાઉઝિંગ પ્રવૃત્તિને ઍક્સેસ કરો</translation>
 <translation id="7605594153474022051">સમન્વયન કામ કરતું નથી</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"ની સાથે જોડી બનાવો…</translation>
 <translation id="7737238973539693982">Linux (બીટા) ડિલીટ કરો</translation>
 <translation id="7740996059027112821">માનક</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> એક્સ્ટેન્શન દ્વારા આ પેજ બદલવામાં આવ્યું હતું</translation>
 <translation id="7744047395460924128">તમારો પ્રિન્ટીંગનો ઇતિહાસ જુઓ</translation>
 <translation id="7744192722284567281">ડેટા ઉલ્લંઘનમાં મળ્યો</translation>
 <translation id="7750228210027921155">ચિત્રમાં ચિત્ર</translation>
@@ -6343,6 +6336,7 @@
 <translation id="9121814364785106365">પિન કરેલા ટૅબ તરીકે ખોલો</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> થોભાવ્યું છે</translation>
 <translation id="9124003689441359348">સાચવેલા પાસવર્ડ અહીં દેખાશે</translation>
+<translation id="9126149354162942022">કર્સરનો રંગ</translation>
 <translation id="9128317794749765148">સેટઅપ પૂર્ણ ન થઈ શક્યું</translation>
 <translation id="9128870381267983090">નેટવર્કથી કનેક્ટ કરો</translation>
 <translation id="9130015405878219958">અમાન્ય મોડ દાખલ થયો.</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index da5664f..4b12ca3f 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">प्रमाणपत्र हस्ताक्षरकर्ता</translation>
 <translation id="1145292499998999162">प्लग इन अवरोधित</translation>
 <translation id="1145593918056169051">प्रिंटर बंद हो गया है</translation>
-<translation id="1146678959555564648">VR डालें</translation>
 <translation id="114721135501989771">Chrome में Google स्मार्ट पाएं</translation>
 <translation id="1147991416141538220">ऐक्सेस मांगने के लिए, इस डिवाइस के एडमिन से संपर्क करें.</translation>
 <translation id="1149401351239820326">समाप्ति माह</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">तीसरे पक्ष की कुकी मिटाएं</translation>
 <translation id="2097372108957554726">नए डिवाइस रजिस्टर करने के लिए आपको Chrome में साइन इन करना होगा.</translation>
 <translation id="2099172618127234427">आप Chrome OS की डीबग करने वाली सुविधाएं चालू कर रहे हैं जिससे sshd daemon सेट हो जाएगा और यूएसबी डिवाइस से बूट करना चालू हो जाएगा.</translation>
-<translation id="2099625543891475722">आपकी शारीरिक विशेषता, जैसे कि लंबाई</translation>
 <translation id="2099686503067610784">सर्वर प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" मिटाएं?</translation>
 <translation id="2100273922101894616">अपने आप साइन इन करने की सुविधा</translation>
 <translation id="2101225219012730419">वर्शन:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google Assistant से जुड़ी जानकारी</translation>
 <translation id="3733127536501031542">स्टेप-अप वाला SSL सर्वर</translation>
 <translation id="3735740477244556633">इसके अनुसार क्रम से लगाएं</translation>
+<translation id="3738213647660363521">मनमुताबिक कर्सर का रंग</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> खोलना चाहते हैं?</translation>
 <translation id="3742055079367172538">स्क्रीनशॉट लिया गया</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">इस डिवाइस को उस डोमेन पर नामांकित नहीं किया जा सकता जिससे आपका खाता संबंधित है क्योंकि डिवाइस को भिन्न डोमेन द्वारा प्रबंधित करने के लिए चिह्नित किया गया है.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> आस-पास मौजूद ब्लूटूथ वाले डिवाइस स्कैन करना चाहती है. ये डिवाइस मिले हैं:</translation>
-<translation id="4353114845960720315">जब आप वीआर इस्तेमाल करते हैं, तो साइट ये बातें जान सकती है:</translation>
 <translation id="4354073718307267720">जब कोई साइट आपके आस-पास की जगह का 3D मैप बनाना या कैमरे की स्थिति ट्रैक करना चाहे, तो इसके लिए पूछें</translation>
 <translation id="4354344420232759511">आपकी देखी गई साइटें यहां दिखाई देंगी</translation>
 <translation id="435527878592612277">अपनी फ़ोटो चुनें</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">प्राथमिक खाता</translation>
 <translation id="4660476621274971848">अपेक्षित वर्शन "<ph name="EXPECTED_VERSION" />" है, लेकिन वर्शन "<ph name="NEW_ID" />" था</translation>
 <translation id="4660540330091848931">साइज़ बदला जा रहा है</translation>
-<translation id="4660838440047236328">आपके कमरे का लेआउट</translation>
 <translation id="4661407454952063730">ऐप्लिकेशन से जुड़े डेटा में ऐसा कोई भी डेटा शामिल हो सकता है जिसे किसी ऐप्लिकेशन ने (डेवलपर सेटिंग के आधार पर) सेव किया है. इसमें संपर्क, मैसेज (एसएमएस) और फ़ोटो जैसा डेटा भी शामिल है.</translation>
 <translation id="4662373422909645029">प्रचलित नाम में अंक शामिल नहीं कर सकते</translation>
 <translation id="4662788913887017617">इस बुकमार्क को अपने iPhone से शेयर करें</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">मोबाइल डेटा रोमिंग की अनुमति दें</translation>
 <translation id="4804818685124855865">डिसकनेक्ट करें</translation>
 <translation id="4804827417948292437">एवोकैडो</translation>
-<translation id="4805077164141082536">हमारा सुझाव है कि आप बेहतर बनाने से पहले, अपने मौजूदा Linux कंटेनर का बैक अप लेकर रखें.</translation>
 <translation id="4807098396393229769">कार्ड पर नाम</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> से वीआर डालें?</translation>
 <translation id="4808667324955055115">पॉप-अप ब्लॉक किए गए हैं:</translation>
 <translation id="480990236307250886">होम पेज खोलें</translation>
 <translation id="4811212958317149293">कीबोर्ड में अपने-आप स्कैन करने की सुविधा को ऐक्सेस करने का तरीका बदलें</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">पैक नहीं किया जा सका.</translation>
 <translation id="5225324770654022472">ऐप्स  शॉर्टकट दिखाएं</translation>
 <translation id="5227679487546032910">डिफ़ॉल्ट नीला-हरा अवतार</translation>
+<translation id="5228088094491423618">लाइव कैप्शन</translation>
 <translation id="5228579091201413441">सिंक चालू करें</translation>
 <translation id="5229189185761556138">इनपुट विधियां प्रबंधित करें</translation>
 <translation id="5230516054153933099">विंडो</translation>
@@ -3709,7 +3705,6 @@
 <translation id="5739235828260127894">पुष्टि होने का इंतज़ार किया जा रहा है. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">बहुत बड़ा</translation>
 <translation id="574209121243317957">पिच</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> के इस्तेमाल से जुड़ी सलाह, ऑफ़र, और अपडेट पाएं. साथ ही, सुझाव/शिकायत/राय शेयर करें</translation>
 <translation id="5746169159649715125">PDF के रूप में सेव करें</translation>
 <translation id="5747552184818312860">समय सीमा समाप्ति तारीख</translation>
 <translation id="5747785204778348146">डेवलपर - अस्थिर</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{पेज से बाहर निकलें}one{पेज से बाहर निकलें}other{पेज से बाहर निकलें}}</translation>
 <translation id="7207457272187520234">इस्तेमाल और गड़बड़ी की जानकारी से जुड़ा डेटा भेजें. यह डिवाइस फ़िलहाल Google को गड़बड़ी की जानकारी, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने-आप भेज रहा है. यह सिस्टम और ऐप्लिकेशन की स्थिरता बढ़ाने और दूसरे सुधार करने में मदद करेगा. इकट्ठा किया गया कुछ डेटा, Google ऐप्लिकेशन और पार्टनर की भी मदद करेगा. जैसे, Android डेवलपर. यह सेटिंग, डिवाइस के मालिक ने लागू की है. अगर आपकी दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा आपके Google खाते में सेव किया जा सकता है.</translation>
 <translation id="7207631048330366454">ऐप्लिकेशन खोजें</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> एक्सटेंशन ने <ph name="SEARCH_PROVIDER_DOMAIN" /> का इस्तेमाल करने के लिए खोज में बदलाव किया है</translation>
 <translation id="7210499381659830293">एक्सटेंशन प्रिंटर</translation>
 <translation id="7212097698621322584">अपना मौजूदा पिन डालकर उसे बदलें. अगर आप पिन नहीं जानते हैं, तो आपको सुरक्षा कुंजी रीसेट करनी होगी, फिर एक नया पिन बनाना होगा.</translation>
 <translation id="7216409898977639127">सेल्युलर सेवा देने वाली कंपनी</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" से जोड़ा जा रहा है ...</translation>
 <translation id="7737238973539693982">Linux (बीटा) मिटाएं</translation>
 <translation id="7740996059027112821">मानक</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> एक्सटेंशन ने इस पेज में बदलाव किए हैं</translation>
 <translation id="7744047395460924128">अपना प्रिंटिंग इतिहास देखें</translation>
 <translation id="7744192722284567281">यह पासवर्ड आपके हैक हो चुके डेटा में शामिल है</translation>
 <translation id="7750228210027921155">पिक्चर में पिक्चर</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">छोटे टैब के रूप में खोलें</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> को रोका गया</translation>
 <translation id="9124003689441359348">सहेजे गए पासवर्ड यहां दिखाई देंगे</translation>
+<translation id="9126149354162942022">कर्सर का रंग</translation>
 <translation id="9128317794749765148">सेटअप पूरा नहीं हो सका</translation>
 <translation id="9128870381267983090">नेटवर्क से कनेक्ट करें</translation>
 <translation id="9130015405878219958">गलत मोड डाला गया.</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 8685057..ed22daaa 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Potpisnik certifikata</translation>
 <translation id="1145292499998999162">Dodatak je blokiran</translation>
 <translation id="1145593918056169051">Pisač je zaustavljen</translation>
-<translation id="1146678959555564648">Pokreni VR</translation>
 <translation id="114721135501989771">Googleove značajke za Chrome</translation>
 <translation id="1147991416141538220">Da biste zatražili pristup, obratite se administratoru ovog uređaja.</translation>
 <translation id="1149401351239820326">Mjesec isteka</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Izbrišite kolačiće treće strane</translation>
 <translation id="2097372108957554726">Morate se prijaviti na Chrome da biste registrirali nove uređaje</translation>
 <translation id="2099172618127234427">Omogućujete značajke za otklanjanje pogrešaka OS-a Chrome koje će postaviti sshd daemon i omogućiti pokretanje s USB pogona.</translation>
-<translation id="2099625543891475722">vaše fizičke značajke, primjerice visinu</translation>
 <translation id="2099686503067610784">Izbrisati certifikat poslužitelja "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Automatska prijava</translation>
 <translation id="2101225219012730419">Verzija:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Informacije povezane s Google asistentom</translation>
 <translation id="3733127536501031542">SSL poslužitelj s iskorakom</translation>
 <translation id="3735740477244556633">Poredaj po</translation>
+<translation id="3738213647660363521">Prilagođena boja pokazivača</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Želite li otvoriti aplikaciju <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Izrađena je snimka zaslona</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Uređaj se ne može prijaviti na domenu kojoj pripada vaš račun jer je postavljen za upravljanje na nekoj drugoj domeni.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> želi potražiti Bluetooth uređaje u blizini. Pronađeni su sljedeći uređaji:</translation>
-<translation id="4353114845960720315">Ova web-lokacija možda može saznati nešto o vama dok ste u VR-u, na primjer:</translation>
 <translation id="4354073718307267720">Prikaži upit kada web-lokacija želi izraditi 3D kartu vašeg okruženja ili pratiti položaj kamere</translation>
 <translation id="4354344420232759511">Web-lokacije koje posjetite pojavit će se ovdje</translation>
 <translation id="435527878592612277">Odaberite fotografiju</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Primarni račun</translation>
 <translation id="4660476621274971848">Očekivana je verzija "<ph name="EXPECTED_VERSION" />", no verzija je bila "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Promjena veličine</translation>
-<translation id="4660838440047236328">izgled vaše sobe</translation>
 <translation id="4661407454952063730">Podaci aplikacije mogu biti bilo koji podaci koje je aplikacija spremila (na temelju postavki razvojnog programera), uključujući podatke kao što su kontakti, poruke i fotografije.</translation>
 <translation id="4662373422909645029">Nadimak ne smije sadržavati brojeve</translation>
 <translation id="4662788913887017617">Dijelite ovu oznaku sa svojim iPhoneom</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Omogući roaming mobilnih podataka</translation>
 <translation id="4804818685124855865">Prekini vezu</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Preporučujemo da prije nadogradnje izradite sigurnosnu kopiju trenutačnog Linux spremnika.</translation>
 <translation id="4807098396393229769">Ime na kartici</translation>
-<translation id="4808319664292298116">Želite li pokrenuti VR s web-lokacije <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Skočni su prozori blokirani:</translation>
 <translation id="480990236307250886">Otvori početnu stranicu</translation>
 <translation id="4811212958317149293">Automatsko traženje tipkovnice za prekidač za pristup</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Pakiranje nije uspjelo.</translation>
 <translation id="5225324770654022472">Prikaži prečac za aplikacije</translation>
 <translation id="5227679487546032910">Zadani tirkiznoplavi avatar</translation>
+<translation id="5228088094491423618">Titlovi uživo</translation>
 <translation id="5228579091201413441">Omogući sinkronizaciju</translation>
 <translation id="5229189185761556138">Upravljaj načinima unosa</translation>
 <translation id="5230516054153933099">Prozor</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Čeka se potvrda. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Vrlo velik</translation>
 <translation id="574209121243317957">Visina glasa</translation>
-<translation id="5745136023067925867">Pronađite savjete, ponude i novosti za <ph name="DEVICE_TYPE" /> te nam recite što mislite</translation>
 <translation id="5746169159649715125">Spremi kao PDF</translation>
 <translation id="5747552184818312860">Istječe</translation>
 <translation id="5747785204778348146">Razvojni programer – nestabilno</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Zatvori stranicu}one{Zatvori stranicu}few{Zatvori stranice}other{Zatvori stranica}}</translation>
 <translation id="7207457272187520234">Slanje podataka o upotrebi i dijagnostici. Ovaj uređaj trenutačno Googleu automatski šalje dijagnostičke podatke te podatke o upotrebi uređaja i aplikacija. Ti podaci pomoći će poboljšati stabilnost sustava, aplikacija i drugo. Neki skupni podaci pomoći će i Googleovim aplikacijama i partnerima, na primjer razvojnim programerima za Android. Tu postavku zadao je vlasnik. Ako je uključena dodatna aktivnost na webu i u aplikacijama, ti se podaci mogu spremati na vaš Google račun.</translation>
 <translation id="7207631048330366454">Pretraži aplikacije</translation>
-<translation id="7210171324714276060">Proširenje <ph name="EXTENSION_NAME" /> prebacilo je pretraživanje na domenu <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Pisači povezani putem proširenja</translation>
 <translation id="7212097698621322584">Unesite svoj trenutačni PIN da biste ga promijenili. Ako ne znate PIN, vratite sigurnosni ključ na zadano, a zatim izradite novi PIN.</translation>
 <translation id="7216409898977639127">Davatelj mobilnih usluga</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Uparivanje s uređajem "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Brisanje Linuxa (Beta)</translation>
 <translation id="7740996059027112821">Standardno</translation>
-<translation id="7743128043742060936">Ovu stranicu promijenilo je proširenje <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Prikaz povijesti ispisa</translation>
 <translation id="7744192722284567281">Pronađeno u povredi podataka</translation>
 <translation id="7750228210027921155">Slika u slici</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Otvori kao pričvršćenu karticu</translation>
 <translation id="9122176249172999202">Preglednik <ph name="IDS_SHORT_PRODUCT_NAME" /> je pauziran</translation>
 <translation id="9124003689441359348">Ovdje će se pojaviti spremljene zaporke</translation>
+<translation id="9126149354162942022">Boja pokazivača</translation>
 <translation id="9128317794749765148">Postavljanje nije dovršeno</translation>
 <translation id="9128870381267983090">Povezivanje s mrežom</translation>
 <translation id="9130015405878219958">Unesen je nevažeći način.</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 013ed333..4a9548e 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Tanúsítvány aláírója</translation>
 <translation id="1145292499998999162">Letiltott beépülő modul</translation>
 <translation id="1145593918056169051">A nyomtató leállt</translation>
-<translation id="1146678959555564648">Virtuális valóság – belépés</translation>
 <translation id="114721135501989771">Google-funkciók a Chrome-ban</translation>
 <translation id="1147991416141538220">Hozzáférés kéréséhez forduljon az eszköz adminisztrátorához.</translation>
 <translation id="1149401351239820326">Lejárat hónapja</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Harmadik féltől származó cookie-k törlése</translation>
 <translation id="2097372108957554726">Új eszközök regisztrálásához be kell jelentkeznie a Chrome-ba</translation>
 <translation id="2099172618127234427">Ön engedélyezi a Chrome OS hibakeresési funkcióit, melyek be fogják állítani az sshd daemon szolgáltatást, és engedélyezni fogják az USB-meghajtókról való indítást.</translation>
-<translation id="2099625543891475722">az Ön fizikai jellemzőiről, például a magasságáról;</translation>
 <translation id="2099686503067610784">Törli a(z) "<ph name="CERTIFICATE_NAME" />" szervertanúsítványt?</translation>
 <translation id="2100273922101894616">Automatikus bejelentkezés</translation>
 <translation id="2101225219012730419">Verzió:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">A Google Segéddel kapcsolatos információk</translation>
 <translation id="3733127536501031542">SSL-szerver Step-up használatával</translation>
 <translation id="3735740477244556633">Rendezés</translation>
+<translation id="3738213647660363521">Kurzor egyéni színe</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Megnyitja: <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Képernyőkép elkészítve</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">Ez az eszköz nem regisztrálható annál a domainnél, amelyhez fiókja tartozik, mert az eszköz felügyeletére egy másik domain van kijelölve.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152">A(z) <ph name="ORIGIN" /> szeretné megkeresni a közeli Bluetooth-eszközöket. A következő eszközöket találta:</translation>
-<translation id="4353114845960720315">Amíg VR-módban van, a webhely információkhoz juthat bizonyos dolgokról:</translation>
 <translation id="4354073718307267720">Kérdezzen rá, ha valamelyik webhely 3D-s térképet szeretne létrehozni az Ön környezetéről, valamint ha követni szeretné a kamera pozícióját</translation>
 <translation id="4354344420232759511">Az Ön által felkeresett webhelyek itt jelennek meg</translation>
 <translation id="435527878592612277">Válassza ki a fotóját</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">Elsődleges fiók</translation>
 <translation id="4660476621274971848">A várt verzió „<ph name="EXPECTED_VERSION" />”, de a kapott verzió „<ph name="NEW_ID" />”</translation>
 <translation id="4660540330091848931">Átméretezés</translation>
-<translation id="4660838440047236328">a szoba elrendezéséről.</translation>
 <translation id="4661407454952063730">Alkalmazásadat lehet az alkalmazás által mentett bármilyen adat (a fejlesztő által megadott beállításoktól függően) – például névjegy, üzenet vagy fotó is.</translation>
 <translation id="4662373422909645029">A névben nem lehet szám</translation>
 <translation id="4662788913887017617">Ossza meg ezt a könyvjelzőt iPhone eszközével</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">Mobil adatbarangolás engedélyezése</translation>
 <translation id="4804818685124855865">Kapcsolat bontása</translation>
 <translation id="4804827417948292437">Avokádó</translation>
-<translation id="4805077164141082536">Javasoljuk, hogy a frissítés előtt készítsen biztonsági másolatot az aktuális Linux-tárolóról.</translation>
 <translation id="4807098396393229769">A kártyán feltüntetett név</translation>
-<translation id="4808319664292298116">Belép a(z) <ph name="DOMAIN" /> által biztosított virtuális valóságba?</translation>
 <translation id="4808667324955055115">Előugró ablakok letiltva:</translation>
 <translation id="480990236307250886">A kezdőoldal megnyitása</translation>
 <translation id="4811212958317149293">Kapcsolóalapú hozzáféréshez használt billentyűzet automatikus keresése</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">Sikertelen csomagolás.</translation>
 <translation id="5225324770654022472">Alkalmazások parancsikon megjelenítése</translation>
 <translation id="5227679487546032910">Alapértelmezett kékeszöld avatar</translation>
+<translation id="5228088094491423618">Élő feliratozás</translation>
 <translation id="5228579091201413441">Szinkronizálás bekapcsolása</translation>
 <translation id="5229189185761556138">Beviteli lehetőségek kezelése</translation>
 <translation id="5230516054153933099">Ablak</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">Várakozás az ellenőrzésre. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation>
 <translation id="5739458112391494395">Nagyon nagy</translation>
 <translation id="574209121243317957">Hangmagasság</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" />-tippeket és -ajánlatokat, valamint friss híreket kaphat, ezenkívül visszajelzést is küldhet.</translation>
 <translation id="5746169159649715125">Mentés PDF-ként</translation>
 <translation id="5747552184818312860">Lejár</translation>
 <translation id="5747785204778348146">Fejlesztői – nem stabil</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Oldal elhagyása}other{Oldalak elhagyása}}</translation>
 <translation id="7207457272187520234">Használati és diagnosztikai adatok küldése. Ez az eszköz jelenleg automatikusan küld diagnosztikai, eszköz- és alkalmazáshasználati adatokat a Google-nak. Az adatok a rendszer- és alkalmazásstabilitás javításában, valamint más fejlesztésekben segítenek. Bizonyos összesített adatok a Google-alkalmazásoknak és -partnereknek, például az Android-fejlesztőknek is segítenek. Ezt a beállítást kötelezővé tette az eszköz tulajdonosa. Ha az Internetes és alkalmazástevékenységek beállítás is be van kapcsolva, akkor a rendszer ezeket az adatokat az Ön Google-fiókjába is mentheti.</translation>
 <translation id="7207631048330366454">Alkalmazások keresése</translation>
-<translation id="7210171324714276060">A(z) <ph name="EXTENSION_NAME" /> bővítmény a következőre változtatta meg a keresési szolgáltatót: <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Bővítményalapú nyomtatók</translation>
 <translation id="7212097698621322584">A módosításhoz adja meg jelenlegi PIN-kódját. Ha nem tudja a PIN-kódot, vissza kell állítania a biztonsági hardverkulcsot, majd új PIN-kódot kell létrehoznia.</translation>
 <translation id="7216409898977639127">Mobilszolgáltató</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">Párosítás a következővel: <ph name="DEVICE_NAME" />…</translation>
 <translation id="7737238973539693982">A Linux (béta) eltávolítása</translation>
 <translation id="7740996059027112821">Szokásos</translation>
-<translation id="7743128043742060936">Ezt az oldalt módosítja a(z) „<ph name="EXTENSION_NAME" />” bővítmény</translation>
 <translation id="7744047395460924128">Nyomtatási előzmények megtekintése</translation>
 <translation id="7744192722284567281">Megtalálható adatvédelmi incidensben</translation>
 <translation id="7750228210027921155">Kép a képben</translation>
@@ -6352,6 +6345,7 @@
 <translation id="9121814364785106365">Megnyitás rögzített lapként</translation>
 <translation id="9122176249172999202">A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> szünetel</translation>
 <translation id="9124003689441359348">A mentett jelszavak itt jelennek meg</translation>
+<translation id="9126149354162942022">Kurzor színe</translation>
 <translation id="9128317794749765148">Nem sikerült a beállítás befejezése</translation>
 <translation id="9128870381267983090">Csatlakozás hálózathoz</translation>
 <translation id="9130015405878219958">Érvénytelen módot adott meg.</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 6e494228..25805f00 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Վկայագրի ստորագրող</translation>
 <translation id="1145292499998999162">Փլագինն արգելափակված է</translation>
 <translation id="1145593918056169051">Տպիչի աշխատանքն ընդհատվեց</translation>
-<translation id="1146678959555564648">Մուտքագրել VR-ը</translation>
 <translation id="114721135501989771">Google-ի տեխնոլոգիաներ Chrome-ում</translation>
 <translation id="1147991416141538220">Օգտագործելու թույլտվություն խնդրելու համար կապվեք այս սարքի ադմինիստրատորի հետ:</translation>
 <translation id="1149401351239820326">Ժամկետի սպառման ամիսը</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Արգելափակել երրորդ կողմի քուքիները</translation>
 <translation id="2097372108957554726">Նոր սարքեր գրանցելու համար դուք պետք է մուտք գործեք Chrome</translation>
 <translation id="2099172618127234427">Դուք միացնում եք Chrome-ի օպերացիոն համակարգի վրիպազերծման գործառույթները, որոնք կկարգավորեն sshd daemon-ը և թույլ կտան սկզբնաբեռնել USB հիշասարքերից:</translation>
-<translation id="2099625543891475722">ձեր ֆիզիկական բնութագրերը, օրինակ՝ հասակը</translation>
 <translation id="2099686503067610784">Ջնջե՞լ սերվերի «<ph name="CERTIFICATE_NAME" />» վկայագիրը:</translation>
 <translation id="2100273922101894616">Ավտոմատ մուտք</translation>
 <translation id="2101225219012730419">Տարբերակ՝</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google Օգնականին առնչվող տեղեկություններ</translation>
 <translation id="3733127536501031542">SSL սերվեր՝ նոր տարբերակին անցնելու հնարավորությամբ</translation>
 <translation id="3735740477244556633">Տեսակավորել ըստ</translation>
+<translation id="3738213647660363521">Նշորդի հատուկ գույն</translation>
 <translation id="3738924763801731196"><ph name="OID" />՝</translation>
 <translation id="3739254215541673094">Բացե՞լ <ph name="APPLICATION" /> հավելվածը</translation>
 <translation id="3742055079367172538">Սքրինշոթը ստեղծված է</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Այս սարքը չի կարող գրանցվել ձեր հաշվի տիրույթում, քանի որ նշված է որպես սարք, որը կառավարվում է այլ տիրույթի կողմից:</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152">Թույլ տվեք <ph name="ORIGIN" /> կայքին որոնել մոտակա Bluetooth սարքեր: Գտնվել են հետևյալ սարքերը՝</translation>
-<translation id="4353114845960720315">VR ռեժիմում կայքին կարող են հասանելի լինել՝</translation>
 <translation id="4354073718307267720">Հարցնել, երբ որևէ կայք ուզում է ստեղծել շրջակայքի եռաչափ քարտեզը և հետագծել տեսախցիկի դիրքը</translation>
 <translation id="4354344420232759511">Ձեր այցելած կայքերը կցուցադրվեն այստեղ</translation>
 <translation id="435527878592612277">Ընտրեք լուսանկար</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Հիմնական հաշիվ</translation>
 <translation id="4660476621274971848">Սպասված տարբերակը՝ «<ph name="EXPECTED_VERSION" />», ստացված տարբերակը՝ «<ph name="NEW_ID" />»</translation>
 <translation id="4660540330091848931">Չափի փոխում</translation>
-<translation id="4660838440047236328">ձեր սենյակի դասավորությունը</translation>
 <translation id="4661407454952063730">Հավելվածների տվյալները բոլոր այն տվյալներն են, որոնք հավելվածը պահել է ծրագրավորողի կարգավորումների հիման վրա։ Դրանց թվում կարող են լինել կոնտակտները, հաղորդագրությունները և լուսանկարները։</translation>
 <translation id="4662373422909645029">Չի կարող թվեր պարունակել</translation>
 <translation id="4662788913887017617">Օգտագործեք այս էջանիշը ձեր iPhone-ում</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Թույլ տալ բջջային տվյալների ռոումինգը</translation>
 <translation id="4804818685124855865">Անջատել</translation>
 <translation id="4804827417948292437">Ավոկադո</translation>
-<translation id="4805077164141082536">Նախքան նոր տարբերակին անցնելը պահուստավորեք Լինուքսի ձեր ընթացիկ տարբերակի զետեղարանի պարունակությունը։</translation>
 <translation id="4807098396393229769">Քարտապանի անունը</translation>
-<translation id="4808319664292298116">Մտնե՞լ VR <ph name="DOMAIN" /> կայքից</translation>
 <translation id="4808667324955055115">Ելնող պատուհաններն արգելափակված են՝</translation>
 <translation id="480990236307250886">Բացել գլխավոր էջը</translation>
 <translation id="4811212958317149293">Ստեղնաշարի ավտոմատ սկանավորում Switch Access-ի միջոցով</translation>
@@ -3298,6 +3293,7 @@
 <translation id="52232769093306234">Չհաջողվեց սեղմել։</translation>
 <translation id="5225324770654022472">Ցուցադրել հավելվածների դյուրանցումը</translation>
 <translation id="5227679487546032910">Կանխադրված կապտականաչ ավատար</translation>
+<translation id="5228088094491423618">Կենդանի ենթագրեր</translation>
 <translation id="5228579091201413441">Միացնել համաժամացումը</translation>
 <translation id="5229189185761556138">Կառավարել ներածման եղանակները</translation>
 <translation id="5230516054153933099">Պատուհան</translation>
@@ -3713,7 +3709,6 @@
 <translation id="5739235828260127894">Պահանջվում է հաստատում: <ph name="LINK_BEGIN" />Մանրամասն<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Շատ մեծ</translation>
 <translation id="574209121243317957">Ձայնի մակարդակը</translation>
-<translation id="5745136023067925867">Ստացեք <ph name="DEVICE_TYPE" />-ի հետ կապված խորհուրդներ, առաջարկներ և նորություններ, ինչպես նաև կիսվեք ձեր դիտողություններով։</translation>
 <translation id="5746169159649715125">Պահել որպես PDF</translation>
 <translation id="5747552184818312860">Սպառվում է</translation>
 <translation id="5747785204778348146">Մշակողների վարկած - անկայուն</translation>
@@ -4836,7 +4831,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Փակել էջը}one{Փակել էջը}other{Փակել էջը}}</translation>
 <translation id="7207457272187520234">Օգտագործման և ախտորոշման տվյալների ուղարկում։ Այս սարքը Google-ին ավտոմատ ուղարկում է ախտորոշման, ինչպես նաև սարքի և հավելվածի օգտագործման մասին տվյալներ։ Դա կօգնի բարելավել համակարգի ու հավելվածների աշխատանքի կայունությունը։ Հավաքված տեղեկությունների մի մասը օգտակար կլինի մեր գործընկերների, օրինակ, Android ծրագրավորողների համար։ Այս կարգավորումը պարտադրված է սեփականատիրոջ կողմից։ Եթե միացնեք Վեբ որոնման և հավելվածների լրացուցիչ պատմությունը, այս տվյալները կպահվեն ձեր Google հաշվում։</translation>
 <translation id="7207631048330366454">Որոնել հավելվածներ</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> ընդլայնումը փոխել է որոնողական համակարգը <ph name="SEARCH_PROVIDER_DOMAIN" />-ի</translation>
 <translation id="7210499381659830293">Ընդլայնում-տպիչներ</translation>
 <translation id="7212097698621322584">Մուտքագրեք ձեր ընթացիկ PIN կոդը՝ այն փոխելու համար: Եթե չգիտեք ձեր PIN կոդը, զրոյացրեք անվտանգության բանալու կարգավորումները և նշեք նոր PIN կոդ։</translation>
 <translation id="7216409898977639127">Բջջային օպերատոր</translation>
@@ -5236,7 +5230,6 @@
 <translation id="7737115349420013392">Զուգակցում «<ph name="DEVICE_NAME" />» սարքի հետ...</translation>
 <translation id="7737238973539693982">Լինուքսի (բետա) ջնջում</translation>
 <translation id="7740996059027112821">Ստանդարտ</translation>
-<translation id="7743128043742060936">Այս էջը փոփոխվել է «<ph name="EXTENSION_NAME" />» ընդլայնման կողմից</translation>
 <translation id="7744047395460924128">Տեսնել ձեր տպումների պատմությունը</translation>
 <translation id="7744192722284567281">Հայտնաբերվել է տվյալների արտահոսքում</translation>
 <translation id="7750228210027921155">Նկար նկարի մեջ</translation>
@@ -6352,6 +6345,7 @@
 <translation id="9121814364785106365">Բացել որպես ամրացված ներդիր</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> հավելվածի աշխատանքը դադարեցված է</translation>
 <translation id="9124003689441359348">Պահված գաղտնաբառերը կցուցադրվեն այստեղ</translation>
+<translation id="9126149354162942022">Նշորդի գույնը</translation>
 <translation id="9128317794749765148">Կարգավորումը չհաջողվեց ավարտել</translation>
 <translation id="9128870381267983090">Կապակցեք ցանցին</translation>
 <translation id="9130015405878219958">Սխալ ռեժիմ է նշված:</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 69231fa..8e88788 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Penandatangan Sertifikat</translation>
 <translation id="1145292499998999162">Plugin diblokir</translation>
 <translation id="1145593918056169051">Printer telah berhenti</translation>
-<translation id="1146678959555564648">Masuki VR</translation>
 <translation id="114721135501989771">Dapatkan kecanggihan Google di Chrome</translation>
 <translation id="1147991416141538220">Untuk meminta akses, hubungi administrator perangkat ini.</translation>
 <translation id="1149401351239820326">Bulan akhir masa berlaku</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Hapus cookie pihak ketiga</translation>
 <translation id="2097372108957554726">Anda perlu masuk ke Chrome untuk mendaftarkan perangkat baru</translation>
 <translation id="2099172618127234427">Anda mengaktifkan fitur debug Chrome OS yang akan menyiapkan daemon sshd dan memungkinkan booting dari perangkat USB.</translation>
-<translation id="2099625543891475722">ciri fisik Anda, seperti tinggi badan</translation>
 <translation id="2099686503067610784">Hapus sertifikat server "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Login Otomatis</translation>
 <translation id="2101225219012730419">Versi:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Informasi terkait Asisten Google</translation>
 <translation id="3733127536501031542">Server SSL dengan Step-up</translation>
 <translation id="3735740477244556633">Urutkan menurut</translation>
+<translation id="3738213647660363521">Warna kursor kustom</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Buka <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Screenshot telah diambil</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Perangkat ini tidak dapat didaftarkan ke domain tempat akun Anda berada karena perangkat ditandai untuk dikelola oleh domain lain.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ingin memindai perangkat Bluetooth di sekitar. Perangkat berikut telah ditemukan:</translation>
-<translation id="4353114845960720315">Ketika Anda berada dalam VR, situs ini mungkin dapat mempelajari:</translation>
 <translation id="4354073718307267720">Tanyakan saat situs ingin membuat peta 3D untuk area di sekeliling Anda atau melacak posisi kamera</translation>
 <translation id="4354344420232759511">Situs yang Anda kunjungi akan ditampilkan di sini</translation>
 <translation id="435527878592612277">Pilih foto Anda</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Akun utama</translation>
 <translation id="4660476621274971848">Versi yang diharapkan "<ph name="EXPECTED_VERSION" />", namun versinya adalah "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Mengubah ukuran</translation>
-<translation id="4660838440047236328">tata letak ruangan Anda</translation>
 <translation id="4661407454952063730">Data aplikasi dapat berupa data yang telah disimpan oleh aplikasi (berdasarkan setelan developer), termasuk data seperti kontak, pesan, dan foto.</translation>
 <translation id="4662373422909645029">Nama panggilan tidak boleh berisi angka</translation>
 <translation id="4662788913887017617">Bagikan bookmark ini dengan iPhone Anda</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Izinkan roaming data seluler</translation>
 <translation id="4804818685124855865">Putuskan</translation>
 <translation id="4804827417948292437">Avokad</translation>
-<translation id="4805077164141082536">Sebaiknya Anda mencadangkan container Linux yang ada sebelum melakukan upgrade.</translation>
 <translation id="4807098396393229769">Nama di kartu</translation>
-<translation id="4808319664292298116">Masukkan VR dari <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Pop-up diblokir:</translation>
 <translation id="480990236307250886">Buka beranda</translation>
 <translation id="4811212958317149293">Pemindaian otomatis keyboard tombol akses</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Pengemasan gagal.</translation>
 <translation id="5225324770654022472">Tampilkan pintasan aplikasi</translation>
 <translation id="5227679487546032910">Avatar biru kehijauan default</translation>
+<translation id="5228088094491423618">Teks Otomatis</translation>
 <translation id="5228579091201413441">Aktifkan sinkronisasi</translation>
 <translation id="5229189185761556138">Kelola metode masukan</translation>
 <translation id="5230516054153933099">Jendela</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Menunggu verifikasi. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Sangat besar</translation>
 <translation id="574209121243317957">Tinggi nada</translation>
-<translation id="5745136023067925867">Dapatkan tips, penawaran, dan update <ph name="DEVICE_TYPE" />, serta berikan masukan</translation>
 <translation id="5746169159649715125">Simpan sebagai PDF</translation>
 <translation id="5747552184818312860">Kedaluwarsa</translation>
 <translation id="5747785204778348146">Pengembang - tidak stabil</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Keluar dari halaman}other{Keluar dari halaman}}</translation>
 <translation id="7207457272187520234">Kirimkan data penggunaan dan diagnostik. Perangkat ini saat ini otomatis mengirimkan data diagnostik, perangkat, dan penggunaan aplikasi ke Google. Data ini akan membantu sistem dan stabilitas aplikasi serta penyempurnaan lainnya. Beberapa data gabungan juga akan membantu aplikasi dan partner Google, seperti developer Android. Setelan ini diterapkan oleh pemilik. Jika setelan Aktivitas Web &amp; Aplikasi tambahan Anda diaktifkan, data ini mungkin akan disimpan ke Akun Google Anda.</translation>
 <translation id="7207631048330366454">Telusuri aplikasi</translation>
-<translation id="7210171324714276060">Ekstensi <ph name="EXTENSION_NAME" /> mengubah penyedia penelusuran menjadi <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Printer ekstensi</translation>
 <translation id="7212097698621322584">Masukkan PIN saat ini untuk mengubahnya. Jika tidak mengetahui PIN Anda, setel ulang kunci keamanan, lalu buat PIN baru.</translation>
 <translation id="7216409898977639127">Operator seluler</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Menyambungkan dengan "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Hapus Linux (Beta)</translation>
 <translation id="7740996059027112821">Standar</translation>
-<translation id="7743128043742060936">Halaman ini diubah oleh ekstensi <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Lihat histori pencetakan Anda</translation>
 <translation id="7744192722284567281">Ditemukan di pelanggaran data</translation>
 <translation id="7750228210027921155">Picture-in-picture</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Buka sebagai tab terpasang</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> dijeda</translation>
 <translation id="9124003689441359348">Sandi yang disimpan akan muncul di sini</translation>
+<translation id="9126149354162942022">Warna kursor</translation>
 <translation id="9128317794749765148">Tidak dapat menyelesaikan penyiapan</translation>
 <translation id="9128870381267983090">Sambungkan ke jaringan</translation>
 <translation id="9130015405878219958">Mode yang dimasukkan tidak valid.</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index a910d4ba..b720c59 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Vottorðsundirritari</translation>
 <translation id="1145292499998999162">Viðbót útilokuð</translation>
 <translation id="1145593918056169051">Prentun stöðvaðist</translation>
-<translation id="1146678959555564648">Hefja sýndarveruleika</translation>
 <translation id="114721135501989771">Fá Google snjalltæki í Chrome</translation>
 <translation id="1147991416141538220">Hafðu samband við stjórnanda þessa tækis til að óska eftir aðgangi.</translation>
 <translation id="1149401351239820326">Fyrningarmánuður</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Hreinsa fótspor þriðju aðila</translation>
 <translation id="2097372108957554726">Þú þarft að skrá þig inn í Chrome til að skrá ný tæki.</translation>
 <translation id="2099172618127234427">Þú ert að gera villuleitareiginleika Chrome OS virka en við það verður sett upp sshd-bakgrunnsforrit og ræsing af USB-drifum gerð virk.</translation>
-<translation id="2099625543891475722">líkamleg einkenni þín, eins og hæð</translation>
 <translation id="2099686503067610784">Eyða þjónsvottorðinu „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Sjálfvirk innskráning</translation>
 <translation id="2101225219012730419">Útgáfa:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Upplýsingar sem tengjast Google hjálpara</translation>
 <translation id="3733127536501031542">SSL-þjónn með uppreiknun</translation>
 <translation id="3735740477244556633">Raða eftir</translation>
+<translation id="3738213647660363521">Sérsniðinn litur bendils</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Viltu opna <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Skjámynd tekin</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Þetta tæki er ekki hægt að skrá á lénið sem reikningurinn þinn tilheyrir því að tækið lýtur stjórn á öðru léni.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> vill leita að nálægum Bluetooth-tækjum. Eftirfarandi tæki hafa fundist:</translation>
-<translation id="4353114845960720315">Þegar þú ert í sýndarveruleika kann þetta vefsvæði að fá upplýsingar um:</translation>
 <translation id="4354073718307267720">Spyrja þegar vefsvæði vill búa til þrívíddarkort af umhverfinu eða rekja staðsetningu myndavélarinnar</translation>
 <translation id="4354344420232759511">Vefsvæði sem þú skoðar birtast hér</translation>
 <translation id="435527878592612277">Veldu myndina þína</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Aðalreikningur</translation>
 <translation id="4660476621274971848">Búist var við útgáfunni „<ph name="EXPECTED_VERSION" />“ en útgáfan er „<ph name="NEW_ID" />“</translation>
 <translation id="4660540330091848931">Breytir stærð</translation>
-<translation id="4660838440047236328">útlit herbergisins sem þú ert í</translation>
 <translation id="4661407454952063730">Forritsgögn eru hvers kyns gögn sem forrit hefur vistað (eftir stillingum þróunaraðila), þar á meðal gögn á borð við tengiliði, skilaboð og myndir.</translation>
 <translation id="4662373422909645029">Gælunöfn mega ekki hafa númer</translation>
 <translation id="4662788913887017617">Deila þessu bókamerki með iPhone-símanum þínum</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Leyfa reiki farsímagagna</translation>
 <translation id="4804818685124855865">Aftengja</translation>
 <translation id="4804827417948292437">Avókadó</translation>
-<translation id="4805077164141082536">Við mælum með að þú takir afrit af núverandi Linux-ramma áður en þú uppfærir.</translation>
 <translation id="4807098396393229769">Nafn á korti</translation>
-<translation id="4808319664292298116">Viltu fara í sýndarveruleika af <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Lokað á sprettiglugga:</translation>
 <translation id="480990236307250886">Opna heimasíðuna</translation>
 <translation id="4811212958317149293">Sjálfvirk skönnun lyklaborðs rofaaðgangs</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Ekki tókst að pakka.</translation>
 <translation id="5225324770654022472">Sýna forritaflýtileið</translation>
 <translation id="5227679487546032910">Sjálfgefin grænblá notandamynd</translation>
+<translation id="5228088094491423618">Skjátextar í rauntíma</translation>
 <translation id="5228579091201413441">Kveikja á samstillingu</translation>
 <translation id="5229189185761556138">Stjórna innsláttaraðferðum</translation>
 <translation id="5230516054153933099">Gluggi</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Bíður eftir staðfestingu. <ph name="LINK_BEGIN" />Frekari upplýsingar<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Mjög stórt</translation>
 <translation id="574209121243317957">Tónhæð</translation>
-<translation id="5745136023067925867">Fáðu ábendingar, tilboð og uppfærslur fyrir <ph name="DEVICE_TYPE" /> og komdu ábendingum á framfæri</translation>
 <translation id="5746169159649715125">Vista sem PDF</translation>
 <translation id="5747552184818312860">Rennur út</translation>
 <translation id="5747785204778348146">Forritari – óstöðugt</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Loka síðu}one{Loka síðum}other{Loka síðum}}</translation>
 <translation id="7207457272187520234">Senda notkunar- og greiningargögn. Þetta tæki sendir núna sjálfkrafa greiningargögn, tækisgögn og upplýsingar um forritanotkun til Google. Þetta mun stuðla að stöðugleika kerfa og forrita og öðrum endurbótum. Sum uppsöfnuð gögn munu einnig gagnast forritum og samstarfsaðilum Google, til dæmis þróunaraðilum Android. Eigandi valdi þessa stillingu. Ef kveikt er á ítarlegri vef- og forritavirkni geta þessi gögn verið vistuð á Google reikningnum þínum.</translation>
 <translation id="7207631048330366454">Leita í forritum</translation>
-<translation id="7210171324714276060">Viðbótin <ph name="EXTENSION_NAME" /> breytti leitarþjónustu og notar núna <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Prentaraviðbætur</translation>
 <translation id="7212097698621322584">Sláðu inn núverandi PIN-númer til að breyta því. Ef þú veist ekki PIN-númerið þitt þarftu að endurstilla öryggislykilinn og búa svo til nýtt PIN-númer.</translation>
 <translation id="7216409898977639127">Farsímafyrirtæki</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Parar við „<ph name="DEVICE_NAME" />“...</translation>
 <translation id="7737238973539693982">Eyða Linux (tilraunaútgáfa)</translation>
 <translation id="7740996059027112821">Venjulegt</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> viðbótin breytti þessari síðu</translation>
 <translation id="7744047395460924128">Sjá prentferilinn þinn</translation>
 <translation id="7744192722284567281">Fannst í öryggisbroti</translation>
 <translation id="7750228210027921155">Mynd í mynd</translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">Opna sem fastan flipa</translation>
 <translation id="9122176249172999202">Hlé hefur verið gert á <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="9124003689441359348">Vistuð aðgangsorð birtast hér</translation>
+<translation id="9126149354162942022">Litur bendils</translation>
 <translation id="9128317794749765148">Ekki tókst að ljúka við uppsetningu</translation>
 <translation id="9128870381267983090">Tengjast neti</translation>
 <translation id="9130015405878219958">Ógild stilling slegin inn.</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index fe02d15..964ff5e 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Firmatario del certificato</translation>
 <translation id="1145292499998999162">Plug-in bloccato</translation>
 <translation id="1145593918056169051">La stampante si è interrotta</translation>
-<translation id="1146678959555564648">Entra nella VR</translation>
 <translation id="114721135501989771">Tutta l'intelligenza Google in Chrome</translation>
 <translation id="1147991416141538220">Per richiedere l'accesso, contatta l'amministratore del dispositivo.</translation>
 <translation id="1149401351239820326">Mese di scadenza</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Cancella cookie di terze parti</translation>
 <translation id="2097372108957554726">Devi accedere a Chrome per registrare nuovi dispositivi</translation>
 <translation id="2099172618127234427">Stai attivando le funzioni di debug di Chrome OS, che a loro volta impostano il daemon sshd e abilitano l'avvio da unità USB.</translation>
-<translation id="2099625543891475722">Dati sulle tue caratteristiche fisiche, come l'altezza</translation>
 <translation id="2099686503067610784">Eliminare il certificato del server "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Accesso automatico</translation>
 <translation id="2101225219012730419">Versione:</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">Informazioni correlate dell'Assistente Google</translation>
 <translation id="3733127536501031542">Server SSL con step-up</translation>
 <translation id="3735740477244556633">Ordina per</translation>
+<translation id="3738213647660363521">Colore puntatore personalizzato</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Aprire <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Screenshot acquisito</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">Questo dispositivo non può essere registrato sul dominio a cui appartiene il tuo account perché è contrassegnato per essere gestito da un altro dominio.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> richiede di eseguire la scansione per rilevare dispositivi Bluetooth nelle vicinanze. Sono stati rilevati i seguenti dispositivi:</translation>
-<translation id="4353114845960720315">Mentre ti trovi nella VR, il sito potrebbe riuscire ad acquisire:</translation>
 <translation id="4354073718307267720">Chiedi conferma quando un sito vuole creare una mappa 3D dell'ambiente circostante o monitorare la posizione della fotocamera</translation>
 <translation id="4354344420232759511">Qui verranno visualizzati i siti visitati</translation>
 <translation id="435527878592612277">Seleziona la foto</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">Account principale</translation>
 <translation id="4660476621274971848">Versione prevista: "<ph name="EXPECTED_VERSION" />", versione rilevata: "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Ridimensionamento</translation>
-<translation id="4660838440047236328">Dati sulla struttura della tua stanza</translation>
 <translation id="4661407454952063730">Per dati delle app si intende qualsiasi dato salvato da un'app (in base alle impostazioni dello sviluppatore), inclusi dati come contatti, messaggi e foto.</translation>
 <translation id="4662373422909645029">Il nickname non può includere numeri</translation>
 <translation id="4662788913887017617">Condividi il preferito con l'iPhone</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">Consenti roaming dati mobile</translation>
 <translation id="4804818685124855865">Disconnetti</translation>
 <translation id="4804827417948292437">Avocado</translation>
-<translation id="4805077164141082536">Ti consigliamo di effettuare il backup del tuo attuale container Linux prima di eseguire l'upgrade.</translation>
 <translation id="4807098396393229769">Nome sulla carta di credito</translation>
-<translation id="4808319664292298116">Entrare nella VR da <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Popup bloccati</translation>
 <translation id="480990236307250886">Apri pagina iniziale</translation>
 <translation id="4811212958317149293">Scansione automatica tastiera Switch Access</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">Compressione non riuscita.</translation>
 <translation id="5225324770654022472">Mostra scorciatoia app</translation>
 <translation id="5227679487546032910">Avatar verde acqua predefinito</translation>
+<translation id="5228088094491423618">Sottotitoli in tempo reale</translation>
 <translation id="5228579091201413441">Abilita sincronizzazione</translation>
 <translation id="5229189185761556138">Gestisci metodi di immissione</translation>
 <translation id="5230516054153933099">Finestra</translation>
@@ -3709,7 +3705,6 @@
 <translation id="5739235828260127894">In attesa di verifica. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Molto grandi</translation>
 <translation id="574209121243317957">Tono</translation>
-<translation id="5745136023067925867">Ricevi suggerimenti, offerte e aggiornamenti per <ph name="DEVICE_TYPE" /> e condividi il tuo feedback</translation>
 <translation id="5746169159649715125">Salva come PDF</translation>
 <translation id="5747552184818312860">Scadenza</translation>
 <translation id="5747785204778348146">Sviluppatore - non stabile</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Esci dalla pagina}other{Esci dalle pagine}}</translation>
 <translation id="7207457272187520234">Invia dati diagnostici e sull'utilizzo. Attualmente, questo dispositivo invia a Google dati diagnostici e sull'utilizzo delle app e del dispositivo. Tali dati contribuiranno alla stabilità delle app e del sistema, nonché ad altri miglioramenti. Alcuni dati aggregati saranno utili anche alle app e ai partner di Google, come ad esempio agli sviluppatori Android. Questa impostazione è applicata dal proprietario. Se hai attivato l'impostazione Attività web e app aggiuntiva, queste informazioni potrebbero essere salvate nel tuo Account Google.</translation>
 <translation id="7207631048330366454">Cerca nelle app</translation>
-<translation id="7210171324714276060">L'estensione <ph name="EXTENSION_NAME" /> ha modificato la ricerca; d'ora in poi verrà utilizzato <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Stampanti estensione</translation>
 <translation id="7212097698621322584">Inserisci il PIN attuale per modificarlo. Se non conosci il PIN, devi reimpostare il token di sicurezza, quindi creare un nuovo PIN.</translation>
 <translation id="7216409898977639127">Fornitore del servizio di telefonia mobile</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">Accoppiamento con "<ph name="DEVICE_NAME" />"…</translation>
 <translation id="7737238973539693982">Elimina Linux (beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Questa pagina è stata modificata dall'estensione <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Visualizzazione della cronologia di stampa</translation>
 <translation id="7744192722284567281">Rilevata in una violazione dei dati</translation>
 <translation id="7750228210027921155">Picture in picture</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">Apri in una scheda bloccata</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> in sospeso</translation>
 <translation id="9124003689441359348">Le password salvate verranno visualizzate qui</translation>
+<translation id="9126149354162942022">Colore puntatore</translation>
 <translation id="9128317794749765148">Impossibile completare la configurazione</translation>
 <translation id="9128870381267983090">Collegati alla rete</translation>
 <translation id="9130015405878219958">La modalità inserita non è valida.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index e2a560c..1c8eda8 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">חותם על אישור </translation>
 <translation id="1145292499998999162">הפלאגין חסום</translation>
 <translation id="1145593918056169051">המדפסת הפסיקה לפעול</translation>
-<translation id="1146678959555564648">‏כניסה למצב VR</translation>
 <translation id="114721135501989771">‏תכונות חכמות של Google</translation>
 <translation id="1147991416141538220">כדי לבקש גישה, צריך לפנות למנהל של המכשיר הזה.</translation>
 <translation id="1149401351239820326">חודש פקיעת התוקף</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">‏ניקוי קובצי cookie של צד שלישי</translation>
 <translation id="2097372108957554726">‏עליך להיכנס מחדש ל-Chrome כדי לרשום מכשירים חדשים</translation>
 <translation id="2099172618127234427">‏אתה מאפשר תכונות ניפוי באגים במערכת ההפעלה של Chrome שיגדירו sshd daemon ויאפשרו אתחול מכונני USB.</translation>
-<translation id="2099625543891475722">התכונות הפיזיות שלך, כמו גובה.</translation>
 <translation id="2099686503067610784">למחוק את אישור השרת "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">כניסה אוטומטית</translation>
 <translation id="2101225219012730419">גרסה:</translation>
@@ -2655,7 +2653,6 @@
 <translation id="4350019051035968019">לא ניתן לרשום את המכשיר הזה לדומיין שאליו שייך החשבון שלך מפני שהמכשיר מסומן לניהול על ידי דומיין אחר.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152">‏<ph name="ORIGIN" /> מבקש לבצע סריקה כדי לאתר מכשירי Bluetooth בקרבת מקום. המכשירים הבאים נמצאו:</translation>
-<translation id="4353114845960720315">‏במצב VR, האתר הזה עשוי לקבל מידע על:</translation>
 <translation id="4354073718307267720">תוצג שאלה כשאתר ירצה ליצור מפה בתלת ממד של הסביבה שלך או לעקוב אחר מיקום המצלמה</translation>
 <translation id="4354344420232759511">אתרים שבהם ביקרת יופיעו כאן</translation>
 <translation id="435527878592612277">בחירת התמונה שלך</translation>
@@ -2890,7 +2887,6 @@
 <translation id="4659077111144409915">חשבון ראשי</translation>
 <translation id="4660476621274971848">הגירסה הצפויה היא "<ph name="EXPECTED_VERSION" />", אבל הגירסה הייתה "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">שינוי הגודל מתבצע</translation>
-<translation id="4660838440047236328">מבנה החדר שלך.</translation>
 <translation id="4661407454952063730">נתוני אפליקציות הם כל הנתונים שנשמרים באפליקציות (בהתאם להגדרות של המפתחים), כולל נתונים כמו אנשי קשר, הודעות ותמונות.</translation>
 <translation id="4662373422909645029">אין לכלול מספרים בכינוי</translation>
 <translation id="4662788913887017617">‏שיתוף הסימניה באמצעות ה-iPhone</translation>
@@ -2979,9 +2975,7 @@
 <translation id="4801512016965057443">אפשר נדידה</translation>
 <translation id="4804818685124855865">נתק</translation>
 <translation id="4804827417948292437">אבוקדו</translation>
-<translation id="4805077164141082536">‏מומלץ לגבות את מאגר Linux הנוכחי לפני השדרוג.</translation>
 <translation id="4807098396393229769">שם על הכרטיס</translation>
-<translation id="4808319664292298116">‏לעבור למצב VR מ-<ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">חלונות קופצים חסומים</translation>
 <translation id="480990236307250886">פתח את דף הבית</translation>
 <translation id="4811212958317149293">סריקה אוטומטית של מקלדת גישה באמצעות מתג</translation>
@@ -3708,7 +3702,6 @@
 <translation id="5739235828260127894">בהמתנה לאימות. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">גדול מאוד</translation>
 <translation id="574209121243317957">גובה צליל</translation>
-<translation id="5745136023067925867">אפשר לקבל טיפים, מידע על מבצעים ועדכונים בנוגע ל-<ph name="DEVICE_TYPE" /> ולשתף משוב</translation>
 <translation id="5746169159649715125">‏שמור כקובץ PDF</translation>
 <translation id="5747552184818312860">מועד תפוגה</translation>
 <translation id="5747785204778348146">מפתח - לא יציב</translation>
@@ -4831,7 +4824,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{יציאה מהדף}two{יציאה מהדפים}many{יציאה מהדפים}other{יציאה מהדפים}}</translation>
 <translation id="7207457272187520234">‏שליחת מידע לגבי אופן השימוש בנתונים וניתוח הביצועים. המכשיר הזה שולח עכשיו אל Google באופן אוטומטי נתוני אבחון, נתוני מכשיר ונתוני שימוש באפליקציות. הנתונים האלה יעזרו לשמור על היציבות של המערכת ושל האפליקציות ולבצע שיפורים אחרים. חלק מהנתונים הנצברים יעזרו גם לשפר את האפליקציות של Google וכן יעזרו לשותפים של Google, כמו מפתחים של Android. ההגדרה הזו נאכפת על-ידי הבעלים. אם הופעלה ההגדרה 'פעילות באתרי אינטרנט ובאפליקציות נוספים', ייתכן שהנתונים יישמרו בחשבון Google שלך.</translation>
 <translation id="7207631048330366454">חיפוש אפליקציות</translation>
-<translation id="7210171324714276060">התוסף <ph name="EXTENSION_NAME" /> שינה את ספק החיפוש ל-<ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">מדפסות בתוסף</translation>
 <translation id="7212097698621322584">צריך להזין את קוד האימות הנוכחי כדי לשנות אותו. אם קוד האימות לא ידוע לך, צריך לאפס את מפתח האבטחה ולאחר מכן ליצור קוד אימות חדש.</translation>
 <translation id="7216409898977639127">ספק שירות סלולרי</translation>
@@ -5231,7 +5223,6 @@
 <translation id="7737115349420013392">מתבצעת התאמה עם "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">‏מחיקת Linux (בטא)</translation>
 <translation id="7740996059027112821">רגילה</translation>
-<translation id="7743128043742060936">בדף זה בוצע שינוי באמצעות התוסף "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="7744047395460924128">הצגת היסטוריית ההדפסות שלך</translation>
 <translation id="7744192722284567281">נמצאה בפרצה באבטחת מידע</translation>
 <translation id="7750228210027921155">תמונה בתוך תמונה</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index f2d1c15..7cd915d 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">証明書の署名者</translation>
 <translation id="1145292499998999162">プラグインをブロックしました</translation>
 <translation id="1145593918056169051">プリンタが停止しました</translation>
-<translation id="1146678959555564648">VR を入力</translation>
 <translation id="114721135501989771">Chrome で Google の最先端技術を活用</translation>
 <translation id="1147991416141538220">アクセスをリクエストするには、このデバイスの管理者にご連絡ください。</translation>
 <translation id="1149401351239820326">有効期限(月)</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">サードパーティの Cookie を消去</translation>
 <translation id="2097372108957554726">新しいデバイスを登録するには、Chrome にログインする必要があります</translation>
 <translation id="2099172618127234427">Chrome OS デバッグ機能を有効にしています。この機能を有効にすると、sshd デーモンが設定され USB デバイスからの起動が可能になります。</translation>
-<translation id="2099625543891475722">あなたの身体的特徴(身長など)</translation>
 <translation id="2099686503067610784">サーバー証明書「<ph name="CERTIFICATE_NAME" />」を削除しますか?</translation>
 <translation id="2100273922101894616">自動ログイン</translation>
 <translation id="2101225219012730419">バージョン:</translation>
@@ -2125,6 +2123,7 @@
 <translation id="3677106374019847299">カスタム プロバイダを入力</translation>
 <translation id="3677657024345889897">最小</translation>
 <translation id="3677911431265050325">モバイルサイトをリクエスト</translation>
+<translation id="3677959414150797585">アプリやウェブページなどが含まれます。使用状況データの共有を指定した場合のみ、検索候補の精度を向上させるために統計情報を送信します。</translation>
 <translation id="3678156199662914018">拡張機能: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3680683624079082902">テキスト読み上げの音声</translation>
 <translation id="3681311097828166361">ご意見をお寄せいただきありがとうございます。現在オフラインのため、ご報告の内容は後で送信されます。</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">このデバイスは、別のドメインの管理対象として指定されているため、現在のアカウントの所属先ドメインに登録することはできません。</translation>
 <translation id="4350782034419308508">OK Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> が近くの Bluetooth デバイスのスキャンを求めています。検出済みのデバイスは次のとおりです。</translation>
-<translation id="4353114845960720315">VR の使用中、このサイトで次の情報が把握される場合があります。</translation>
 <translation id="4354073718307267720">サイトから周囲の 3D マップの作成またはカメラ位置の追跡を求められたときに確認する</translation>
 <translation id="4354344420232759511">アクセスしたサイトがここに表示されます</translation>
 <translation id="435527878592612277">写真を選択</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">メイン アカウント</translation>
 <translation id="4660476621274971848">バージョン「<ph name="EXPECTED_VERSION" />」が必要ですが、バージョン「<ph name="NEW_ID" />」が検出されました</translation>
 <translation id="4660540330091848931">サイズを変更しています</translation>
-<translation id="4660838440047236328">あなたの部屋のレイアウト</translation>
 <translation id="4661407454952063730">アプリのデータとは、(デベロッパーの設定に基づいて)アプリが保存したデータのことで、連絡先、メッセージ、写真などのデータが含まれます。</translation>
 <translation id="4662373422909645029">ニックネームに数字を含めることはできません</translation>
 <translation id="4662788913887017617">このブックマークは iPhone と共有できます</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">モバイル データ ローミングを許可する</translation>
 <translation id="4804818685124855865">切断</translation>
 <translation id="4804827417948292437">アボカド</translation>
-<translation id="4805077164141082536">アップグレードの前に、現在の Linux コンテナをバックアップすることをおすすめします。</translation>
 <translation id="4807098396393229769">カード名義人(半角英文字)</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> で VR を使用しますか?</translation>
 <translation id="4808667324955055115">ポップアップがブロックされました:</translation>
 <translation id="480990236307250886">ホームページを開く</translation>
 <translation id="4811212958317149293">スイッチ アクセスのキーボード自動スキャン</translation>
@@ -3711,7 +3706,6 @@
 <translation id="5739235828260127894">確認を待っています。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">極大</translation>
 <translation id="574209121243317957">高さ</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> のご利用のヒント、特典、最新情報を受け取って、フィードバックをお送りいただけます</translation>
 <translation id="5746169159649715125">PDF に保存</translation>
 <translation id="5747552184818312860">有効期限</translation>
 <translation id="5747785204778348146">Dev - 不安定</translation>
@@ -3779,6 +3773,7 @@
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> - カメラまたはマイクで記録中です</translation>
 <translation id="5841270259333717135">イーサネットを設定する</translation>
 <translation id="5842497610951477805">Bluetooth 有効</translation>
+<translation id="5844574845205796324">提案するコンテンツの範囲を拡大する</translation>
 <translation id="5846200638699387931">関係を表す構文にエラーがあります: <ph name="ERROR_LINE" /></translation>
 <translation id="5846807460505171493">アップデートやアプリをインストールします。続行すると、Google、ご利用の携帯通信会社、デバイスの製造元からのアップデートやアプリもデバイスで自動的にダウンロードおよびインストールされる場合があることについて、同意したものと見なされます(ダウンロードの際にはモバイルデータ通信が使用される可能性もあります)。こうしたアプリの一部ではアプリ内購入が提案される場合もあります。</translation>
 <translation id="5849212445710944278">すでに追加されています</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ページを離れる}other{ページを離れる}}</translation>
 <translation id="7207457272187520234">使用状況データや診断データを送信します。このデバイスは現在、診断データやデバイスとアプリの使用状況データを Google に自動送信するように設定されています。この情報は、システムとアプリの安定性の向上やその他の機能の改善に役立てられます。また、Google のアプリやパートナー(Android デベロッパーなど)も、集計データとしてこの情報を活用します。この設定は所有者によって管理されています。[その他のウェブとアプリのアクティビティ] の設定がオンになっている場合、このデータは Google アカウントに保存されます。</translation>
 <translation id="7207631048330366454">アプリを検索</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> 拡張機能により <ph name="SEARCH_PROVIDER_DOMAIN" /> を使用して検索するよう変更されました</translation>
 <translation id="7210499381659830293">拡張プリンタ</translation>
 <translation id="7212097698621322584">PIN を変更するには、現在の PIN を入力してください。PIN がわからない場合は、セキュリティ キーをリセットしたうえで新しい PIN を作成する必要があります。</translation>
 <translation id="7216409898977639127">モバイル プロバイダ</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">「<ph name="DEVICE_NAME" />」とペア設定しています…</translation>
 <translation id="7737238973539693982">Linux(ベータ版)の削除</translation>
 <translation id="7740996059027112821">標準</translation>
-<translation id="7743128043742060936">このページは <ph name="EXTENSION_NAME" /> 拡張機能によって変更されました</translation>
 <translation id="7744047395460924128">印刷履歴の表示</translation>
 <translation id="7744192722284567281">データ侵害で漏洩</translation>
 <translation id="7750228210027921155">ピクチャー イン ピクチャー</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 6cc2841..bf7a7bb 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">სერტიფიკატის ხელმომწერი</translation>
 <translation id="1145292499998999162">დანამატი დაბლოკილია</translation>
 <translation id="1145593918056169051">პრინტერმა შეწყვიტა მუშაობა</translation>
-<translation id="1146678959555564648">VR-ში შესვლა</translation>
 <translation id="114721135501989771">ისარგებლეთ Google-ის გონიერი ფუნქციებით Chrome-ში</translation>
 <translation id="1147991416141538220">წვდომის მოთხოვნით მიმართეთ ამ მოწყობილობის ადმინისტრატორს.</translation>
 <translation id="1149401351239820326">ვადის გასვლის თვე</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">მესამე მხარის ქუქი-ჩანაწერების გასუფთავება</translation>
 <translation id="2097372108957554726">ახალი მოწყობილობების რეგისრტაციისთვის უნდა შეხვიდეთ Chrome-ში</translation>
 <translation id="2099172618127234427">თქვენ საშუალებას აძლევთ Chrome OS -ს გამართვოს თვისებები, რომელიც შეიქმნა sshd daemon და რთავს ჩატვირთვას USB დრაივიდან.</translation>
-<translation id="2099625543891475722">თქვენი ფიზიკური მონაცემები, როგორიცაა სიმაღლე</translation>
 <translation id="2099686503067610784">წავშალოთ სერვერის სერთიფიკატი „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">ავტომატური შესვლა</translation>
 <translation id="2101225219012730419">ვერსია:</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">Google ასისტენტთან დაკავშირებული ინფორმაცია</translation>
 <translation id="3733127536501031542">SSL სერვერი დაყენებით</translation>
 <translation id="3735740477244556633">დალაგება</translation>
+<translation id="3738213647660363521">კურსორის მორგებული ფერი</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">გსურთ, გახსნათ <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">ეკრანის ანაბეჭდი გადაღებულია</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">ამ მოწყობილობის ჩაწერა დომენზე, რომელზეც განთავსებულია თქვენი ანგარიში, შეუძლებელია, რადგან მოწყობილობა მონიშნულია, როგორც სხვა დომენის მიერ მართული.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ითხოვს ახლომდებარე Bluetooth მოწყობილობების სკანირებას. ნაპოვნია შემდეგი მოწყობილობები:</translation>
-<translation id="4353114845960720315">VR რეჟიმში ყოფნისას ამ საიტს შეუძლია ინფორმაციის მიღება შემდეგის შესახებ:</translation>
 <translation id="4354073718307267720">შეკითხვა საიტის მიერ თქვენი გარემოს 3-განზომილებიანი რუკის შექმნის ან კამერის პოზიციისთვის თვალის მიდევნების მოთხოვნისას</translation>
 <translation id="4354344420232759511">აქ გამოჩნდება თქვენ მიერ მონახულებული საიტები</translation>
 <translation id="435527878592612277">აირჩიეთ თქვენი ფოტო</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">ძირითადი ანგარიში</translation>
 <translation id="4660476621274971848">მოსალოდნელი ვერსია: „<ph name="EXPECTED_VERSION" />“, მიღებული ვერსია: „<ph name="NEW_ID" />“</translation>
 <translation id="4660540330091848931">მიმდინარეობს ზომის შეცვლა</translation>
-<translation id="4660838440047236328">თქვენი ოთახის განლაგება</translation>
 <translation id="4661407454952063730">აპების მონაცემებად შეიძლება ჩაითვალოს ამა თუ იმ აპის მიერ შენახული ნებისმიერი სახის მონაცემი (დეველოპერის პარამეტრების მიხედვით), მათ შორის, ისეთი მონაცემები, როგორიცაა კონტაქტები, შეტყობინებები და ფოტოები.</translation>
 <translation id="4662373422909645029">მეტსახელი არ უნდა შეიცავდეს ციფრებს</translation>
 <translation id="4662788913887017617">გააზიარეთ სანიშნე თქვენს iPhone-თან</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">მობილური მონაცემების როუმინგის ჩართვა</translation>
 <translation id="4804818685124855865">გათიშვა</translation>
 <translation id="4804827417948292437">ავოკადო</translation>
-<translation id="4805077164141082536">ახალ ვერსიაზე გადასვლამდე გირჩევთ Linux-ის ამჟამინდელი კონტეინერის სარეზერვო ასლის შექმნას.</translation>
 <translation id="4807098396393229769">სახელი ბარათზე</translation>
-<translation id="4808319664292298116">გსურთ VR-ში შესვლა <ph name="DOMAIN" />-დან?</translation>
 <translation id="4808667324955055115">ამომხტარი ფანჯრები დაბლოკილია:</translation>
 <translation id="480990236307250886">გახსენით საწყისი გვერდი</translation>
 <translation id="4811212958317149293">კლავიატურის ავტომატური სკანირება გადამრთველით წვდომის ფუნქციით</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">შეფუთვა ვერ მოხერხდა.</translation>
 <translation id="5225324770654022472">პროგრამების მალსახმობის ჩვენება</translation>
 <translation id="5227679487546032910">ნაგულისხმევი ზურმუხტისფერი ავატარი</translation>
+<translation id="5228088094491423618">ავტოსუბტიტრები</translation>
 <translation id="5228579091201413441">სინქრონიზაციის ჩართვა</translation>
 <translation id="5229189185761556138">შეყვანის მეთოდების მართვა</translation>
 <translation id="5230516054153933099">ფანჯარა</translation>
@@ -3709,7 +3705,6 @@
 <translation id="5739235828260127894">დადასტურების მოლოდინში. <ph name="LINK_BEGIN" />შეიტყვეთ მეტი<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ძალიან დიდი</translation>
 <translation id="574209121243317957">სიმაღლე</translation>
-<translation id="5745136023067925867">მიიღეთ <ph name="DEVICE_TYPE" />-თან დაკავშირებული რჩევები, შემოთავაზებები თუ განახლებები და გაგვიზიარეთ გამოხმაურება</translation>
 <translation id="5746169159649715125">შენახვა PDF-ის სახით</translation>
 <translation id="5747552184818312860">ვადა</translation>
 <translation id="5747785204778348146">შემმუშავებელი - არასტაბილური</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{გვერდიდან გასვლა}other{გვერდებიდან გასვლა}}</translation>
 <translation id="7207457272187520234">გამოყენებისა და დიაგნოსტიკის მონაცემების გაგზავნა. ეს მოწყობილობა ამჟამად ავტომატურად უგზავნის Google-ს დიაგნოსტიკისა და მოწყობილობის/აპების გამოყენების მონაცემებს. აღნიშნული მონაცემები დაგვეხმარება სისტემის/აპების სტაბილურობისა და სხვა ფუნქციების გაუმჯობესებაში. გარდა ამისა, გაერთიანებული მონაცემების ნაწილი ხელს შეუწყობს Google აპებსა და პარტნიორებს, მაგალითად, Android-ის დეველოპერებს. ეს პარამეტრი არის იძულებით გააქტიურებული მფლობელის მიერ. თუ ჩართული გაქვთ ვებსა და აპებში დამატებითი აქტივობის პარამეტრი, აღნიშნული მონაცემები შესაძლოა შეინახოს თქვენს Google ანგარიშში.</translation>
 <translation id="7207631048330366454">აპებში ძიება</translation>
-<translation id="7210171324714276060">გაფართოებამ „<ph name="EXTENSION_NAME" />“ შეცვალა ძიების პროვაიდერი <ph name="SEARCH_PROVIDER_DOMAIN" />-ით</translation>
 <translation id="7210499381659830293">გაფართოების პრინტერები</translation>
 <translation id="7212097698621322584">შესაცვლელად შეიყვანეთ თქვენი ამჟამინდელი PIN-კოდი. თუ PIN-კოდი არ იცით, საჭირო იქნება უსაფრთხოების გასაღების გადაყენება და ახალი PIN-კოდის შექმნა.</translation>
 <translation id="7216409898977639127">ფიჭური ქსელის პროვაიდერი</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">მიმდინარეობს „<ph name="DEVICE_NAME" />“-თან დაწყვილება...</translation>
 <translation id="7737238973539693982">Linux-ის (ბეტა) წაშლა</translation>
 <translation id="7740996059027112821">სტანდარტული</translation>
-<translation id="7743128043742060936">ეს გვერდი შეიცვალა „<ph name="EXTENSION_NAME" />“ გაფართოების მიერ</translation>
 <translation id="7744047395460924128">თქვენი ბეჭდვის ისტორიის ნახვა</translation>
 <translation id="7744192722284567281">დაფიქსირდა პერსონალურ მონაცემთა გაჟონვისას</translation>
 <translation id="7750228210027921155">გამოსახულება გამოსახულებაში</translation>
@@ -6348,6 +6341,7 @@
 <translation id="9121814364785106365">გახსნა ჩამაგრებული ჩანართის სახით</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> დაპაუზებულია</translation>
 <translation id="9124003689441359348">შენახული პაროლები აქ გამოჩნდება</translation>
+<translation id="9126149354162942022">კურსორის ფერი</translation>
 <translation id="9128317794749765148">დაყენება ვერ შესრულდა</translation>
 <translation id="9128870381267983090">ქსელთან დაკავშირება</translation>
 <translation id="9130015405878219958">შეყვანილია არასწორი რეჟიმი.</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index e56fd4e3..f6258d0a 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Сертификатқа қол қоюшы</translation>
 <translation id="1145292499998999162">Плагинге тыйым салынған</translation>
 <translation id="1145593918056169051">Принтер тоқтады</translation>
-<translation id="1146678959555564648">VR режиміне өту</translation>
 <translation id="114721135501989771">Chrome-дағы Google ақылды функциялары</translation>
 <translation id="1147991416141538220">Пайдалану рұқсатын алу үшін құрылғының әкімшісіне хабарласыңыз.</translation>
 <translation id="1149401351239820326">Жарамдылық мерзімі бітетін ай</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Бөгде сайттардың cookie файлдарын тазалау</translation>
 <translation id="2097372108957554726">Жаңа құрылғыларды тіркеу үшін Chrome жүйесіне кіру қажет</translation>
 <translation id="2099172618127234427">Сіз Chrome OS жөндеу мүмкіндіктерін қосқалы жатырсыз. Олар sshd демонын орнатып, USB дискілерінен жүктеу мүмкіндігін береді.</translation>
-<translation id="2099625543891475722">бойыңыз сияқты физикалық сипаттар</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" сервер сертификатын жою қажет пе?</translation>
 <translation id="2100273922101894616">Автоматты кіру</translation>
 <translation id="2101225219012730419">Нұсқа:</translation>
@@ -2182,6 +2180,7 @@
 <translation id="3732857534841813090">Google Assistant кеңестері</translation>
 <translation id="3733127536501031542">Қадамдап артатын SSL сервері</translation>
 <translation id="3735740477244556633">Сұрыптау шарты</translation>
+<translation id="3738213647660363521">Арнаулы көрсеткі түсі</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ашу керек пе?</translation>
 <translation id="3742055079367172538">Скриншот түсірілді</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">Бұл құрылғыны есептік жазбаңыз кіретін доменге тіркеу мүмкін емес, себебі құрылғы басқа домен арқылы басқару үшін белгіленген.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> маңайдағы Bluetooth құрылғыларын іздеуде. Мына құрылғылар табылды:</translation>
-<translation id="4353114845960720315">Сіз VR режимінде болғанда, бұл сайт келесілер туралы ақпарат жинайды:</translation>
 <translation id="4354073718307267720">Сайт айналаңыздың 3D картасын жасағысы немесе камера орнын бақылағысы келгенде, рұқсат сұраy</translation>
 <translation id="4354344420232759511">Сіз пайдаланған сайттар осы жерде көрсетіледі.</translation>
 <translation id="435527878592612277">Суретті таңдаңыз</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">Негізгі есептік жазба</translation>
 <translation id="4660476621274971848">"<ph name="NEW_ID" />" нұсқасы күтілген "<ph name="EXPECTED_VERSION" />" нұсқасына сәйкес келмейді</translation>
 <translation id="4660540330091848931">Көлемі өзгертілуде.</translation>
-<translation id="4660838440047236328">бөлменің жобасы</translation>
 <translation id="4661407454952063730">Қолданба деректеріне контактілер, хабарлар және фотосуреттер сияқты қолданба сақтаған (әзірлеуші параметрлеріне байланысты) кез келген дерек жатуы мүмкін.</translation>
 <translation id="4662373422909645029">Лақап атта сан болмауы керек</translation>
 <translation id="4662788913887017617">Осы бетбелгіні iPhone арқылы бөлісіңіз</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">Ұялы деректер роумингіне рұқсат ету</translation>
 <translation id="4804818685124855865">Ажырату</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Жаңа нұсқаны орнатпас бұрын, қазіргі Linux контейнерінің сақтық көшірмесін жасағаныңыз жөн.</translation>
 <translation id="4807098396393229769">Картадағы ат</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> сайтынан VR режиміне өтесіз бе?</translation>
 <translation id="4808667324955055115">Қалқымалы терезелерге тыйым салынған</translation>
 <translation id="480990236307250886">Негізгі бетті ашу</translation>
 <translation id="4811212958317149293">Switch Access арқылы пернетақтаны автоматты түрде іздеу</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">Қысу сәтсіз болды.</translation>
 <translation id="5225324770654022472">Қолданбалар таңбашасын көрсету</translation>
 <translation id="5227679487546032910">Әдепкі көгілдір түсті аватар</translation>
+<translation id="5228088094491423618">Live Captions</translation>
 <translation id="5228579091201413441">Синхрондауды қосу</translation>
 <translation id="5229189185761556138">Енгізу әдістерін басқару</translation>
 <translation id="5230516054153933099">Терезе</translation>
@@ -3707,7 +3703,6 @@
 <translation id="5739235828260127894">Расталуы керек. <ph name="LINK_BEGIN" />Толығырақ ақпарат<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Тым үлкен</translation>
 <translation id="574209121243317957">Дыбыс биіктігі</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> құрылғысына қатысты кеңестерді, ұсыныстарды және жаңалықтарды алыңыз және пікірлер қалдырыңыз.</translation>
 <translation id="5746169159649715125">PDF ретінде сақтау</translation>
 <translation id="5747552184818312860">Мерзімі бітеді</translation>
 <translation id="5747785204778348146">Әзірлеуші – тұрақсыз</translation>
@@ -4830,7 +4825,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Беттен шығу}other{Беттерден шығу}}</translation>
 <translation id="7207457272187520234">Пайдалану және диагностика туралы деректерді жіберу. Бұл құрылғыдан Google-ға диагностика, құрылғы мен қолданбаны пайдалану деректері автоматты түрде жіберіліп тұрады. Олар жүйе мен қолданбаның тұрақты жұмыс істеуіне және басқа да жақсартулар енгізуге көмектеседі. Кейбір жиынтық деректер Google қолданбаларын жетілдіруге және Android әзірлеушілері сияқты серіктестердің жұмысына көмектеседі. Бұл параметрді иесі орнатқан. Егер "Интернет пен қолданбаларды пайдаланудың қосымша тарихы" параметрі қосулы болса, бұл деректер сіздің Google есептік жазбаңызға сақталуы мүмкін.</translation>
 <translation id="7207631048330366454">Қолданбалар іздеу</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> кеңейтімі іздеуді <ph name="SEARCH_PROVIDER_DOMAIN" /> доменіне ауыстырды.</translation>
 <translation id="7210499381659830293">Кеңейтім қолданатын принтерлер</translation>
 <translation id="7212097698621322584">Қолданыстағы PIN кодын өзгерту үшін оны енгізіңіз. PIN кодыңызды білмесеңіз, оны бастапқы күйге қайтарып, жаңа PIN кодын жасаңыз.</translation>
 <translation id="7216409898977639127">Ұялы байланыс провайдері</translation>
@@ -5230,7 +5224,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" құрылғысымен жұпталуда ...</translation>
 <translation id="7737238973539693982">Linux (Бета) жүйесін жою</translation>
 <translation id="7740996059027112821">Стандартты</translation>
-<translation id="7743128043742060936">Бұл бет <ph name="EXTENSION_NAME" /> кеңейтімі арқылы өзгертілді.</translation>
 <translation id="7744047395460924128">Басып шығару тарихыңызды көру</translation>
 <translation id="7744192722284567281">Деректер қолды болғанда табылды</translation>
 <translation id="7750228210027921155">Суреттегі сурет</translation>
@@ -6347,6 +6340,7 @@
 <translation id="9121814364785106365">Бекітілген қойынды ретінде ашу</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> кідіртілді</translation>
 <translation id="9124003689441359348">Сақталған құпия сөздер мына жерге шығады</translation>
+<translation id="9126149354162942022">Көрсеткі түсі</translation>
 <translation id="9128317794749765148">Реттеу аяқталмады</translation>
 <translation id="9128870381267983090">Желіге қосылу</translation>
 <translation id="9130015405878219958">Жарамсыз режим енгізілген.</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 82a2249..a4c6294 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">អ្នកចុះហត្ថលេខាវិញ្ញាបនប័ត្រ</translation>
 <translation id="1145292499998999162">រារាំងកម្មវិធីជំនួយ</translation>
 <translation id="1145593918056169051">ម៉ាស៊ីនបោះពុម្ព​បានឈប់</translation>
-<translation id="1146678959555564648">បញ្ចូល VR</translation>
 <translation id="114721135501989771">ទទួលបាន​មុខងារ​ឆ្លាតវៃ​របស់ Google នៅក្នុង Chrome</translation>
 <translation id="1147991416141538220">ដើម្បី​ស្នើសុំ​សិទ្ធិចូល​ប្រើប្រាស់ សូម​ទាក់ទង​អ្នកគ្រប់គ្រង​ឧបករណ៍​នេះ​។</translation>
 <translation id="1149401351239820326">ខែផុតកំណត់</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">សម្អាតខូគីភាគីទីបី</translation>
 <translation id="2097372108957554726">អ្នកត្រូវចូលទៅ Chrome ដើម្បីចុះឈ្មោះឧបករណ៍ថ្មី</translation>
 <translation id="2099172618127234427">អ្នកកំពុងបើកដំណើរការលក្ខណៈពិសេសកម្ចាត់កំហុស Chrome OS ដែលនឹងកំណត់  sshd daemon និងបើកដំណើរការចាប់ផ្តើមចេញពីឧបករណ៍ USB។</translation>
-<translation id="2099625543891475722">លក្ខណសម្បត្តិនៃរាងកាយ​របស់អ្នក ដូចជា​កម្ពស់​ជាដើម</translation>
 <translation id="2099686503067610784">លុបវិញ្ញាបនប័ត្រម៉ាស៊ីនមេ "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">ចូលស្វ័យប្រវត្តិ</translation>
 <translation id="2101225219012730419">កំណែ៖</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">ព័ត៌មានដែលពាក់ព័ន្ធនឹង Google ជំនួយការ</translation>
 <translation id="3733127536501031542">ម៉ាស៊ីនមេ SSL ជាមួយនឹង Step-up</translation>
 <translation id="3735740477244556633">តម្រៀបតាម</translation>
+<translation id="3738213647660363521">ពណ៌ទស្សន៍ទ្រនិច​ផ្ទាល់ខ្លួន</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">បើក <ph name="APPLICATION" /> ឬ?</translation>
 <translation id="3742055079367172538">រូបថតអេក្រង់ត្រូវបានថតយក</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">ឧបករណ៍នេះមិនអាចចុះឈ្មោះចូលគណនីដែនដែលជាកម្មសិទ្ធិរបស់អ្នកទេ ពីព្រោះឧបករណ៍នេះត្រូវបានកំណត់សម្រាប់ការគ្រប់គ្រងដោយដែនដ៏ទៃទៀត។</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ចង់ស្កេនរក​ឧបករណ៍ប៊្លូធូស​នៅជិត។ បានរកឃើញ​ឧបករណ៍​ខាងក្រោម៖</translation>
-<translation id="4353114845960720315">នៅពេល​អ្នកនៅក្នុង VR គេហទំព័រនេះ​ប្រហែលជាអាច​ដឹងអំពី៖</translation>
 <translation id="4354073718307267720">សួរ​នៅពេលគេហទំព័រចង់បង្កើតផែនទី 3D នៃមជ្ឈដ្ឋានជុំវិញរបស់អ្នក ឬតាមដានទីតាំងកាមេរ៉ា</translation>
 <translation id="4354344420232759511">គេហទំព័រ​ដែលអ្នកចូលមើលនឹង​បង្ហាញ​នៅ​ទីនេះ</translation>
 <translation id="435527878592612277">ជ្រើសរើសរូបថតរបស់អ្នក</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">គណនី​​ចម្បង</translation>
 <translation id="4660476621274971848">កំណែ​ដែល​បានរំពឹង​ទុកគឺ "<ph name="EXPECTED_VERSION" />" ប៉ុន្តែ​​កំណែជាក់ស្ដែង "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">កំពុង​ប្ដូរ​ទំហំ</translation>
-<translation id="4660838440047236328">ប្លង់​បន្ទប់​របស់អ្នក</translation>
 <translation id="4661407454952063730">ទិន្នន័យ​កម្មវិធី​អាច​ជា​ទិន្នន័យ​ទាំង​ឡាយ​ដែល​កម្មវិធី​បានរក្សាទុក (ផ្អែកលើ​ការ​កំណត់​របស់​អ្នកអភិវឌ្ឍន៍) រួមទាំង​ទិន្នន័យ​ដូចជា ​ទំនាក់ទំនង សារ និងរូបថតជាដើម។</translation>
 <translation id="4662373422909645029">ឈ្មោះហៅក្រៅមិនអាចមានលេខបានទេ</translation>
 <translation id="4662788913887017617">ចែករំលែក​ចំណាំនេះ​ជាមួយ iPhone របស់​អ្នក</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">អនុញ្ញាតការរ៉ូមីងទិន្នន័យទូរស័ព្ទ</translation>
 <translation id="4804818685124855865">ផ្តាច់</translation>
 <translation id="4804827417948292437">ផ្លែបឺរ</translation>
-<translation id="4805077164141082536">យើង​សូមណែនាំឱ្យ​អ្នក​បម្រុងទុក​ទម្រង់ផ្ទុក Linux បច្ចុប្បន្ន​របស់អ្នក​មុននឹង​ដំឡើងកំណែ​។</translation>
 <translation id="4807098396393229769">ឈ្មោះនៅលើកាត</translation>
-<translation id="4808319664292298116">ចូលក្នុង VR ពី <ph name="DOMAIN" /> ដែរទេ?</translation>
 <translation id="4808667324955055115">បានទប់ស្កាត់​ផ្ទាំងផុស៖</translation>
 <translation id="480990236307250886">បើកទំព័រដើម</translation>
 <translation id="4811212958317149293">ការស្កេន​ក្ដារចុច​ក្នុងមុខងារប្រើ​ប៊ូតុងចុច​ដោយស្វ័យប្រវត្តិ</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">មិនអាចវេចខ្ចប់បានទេ។</translation>
 <translation id="5225324770654022472">បង្ហាញផ្លូវកាត់កម្មវិធី</translation>
 <translation id="5227679487546032910">រូបតំណាងពណ៌ខៀវលាយបៃតងលំនាំដើម</translation>
+<translation id="5228088094491423618">អក្សររត់ក្នុងពេលជាក់ស្ដែង</translation>
 <translation id="5228579091201413441">បើកដំណើរការធ្វើសមកាលកម្ម</translation>
 <translation id="5229189185761556138">គ្រប់គ្រងវិធីសាស្ត្របញ្ចូល</translation>
 <translation id="5230516054153933099">វិនដូ</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">កំពុង​រង់ចាំធ្វើ​ការផ្ទៀងផ្ទាត់។ <ph name="LINK_BEGIN" />ស្វែងយល់​បន្ថែម<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ធំខ្លាំង</translation>
 <translation id="574209121243317957">កម្រិតកម្ពស់​សូរ</translation>
-<translation id="5745136023067925867">ទទួល​បានគន្លឹះ​ ការផ្ដល់ជូន និងព័ត៌មានថ្មីៗសម្រាប់ <ph name="DEVICE_TYPE" /> និងចែករំលែកមតិកែលម្អ</translation>
 <translation id="5746169159649715125">រក្សាទុកជា PDF</translation>
 <translation id="5747552184818312860">ផុតកំណត់</translation>
 <translation id="5747785204778348146">អ្នកអភិវឌ្ឍន៍ - មិនថេរ</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ចាកចេញ​ពី​ទំព័រ}other{ចាកចេញ​ពី​ទំព័រ}}</translation>
 <translation id="7207457272187520234">បញ្ជូន​ទិន្នន័យនៃការ​ប្រើប្រាស់ និង​ការវិភាគ។ បច្ចុប្បន្ននេះ ឧបករណ៍នេះ​កំពុងបញ្ជូន​ទិន្នន័យនៃការ​វិភាគ ឧបករណ៍ និងការ​ប្រើប្រាស់​កម្មវិធី​ទៅ Google ដោយស្វ័យប្រវត្តិ។ ការធ្វើ​បែបនេះ​នឹងជួយ​ដល់ស្ថិរភាព​កម្មវិធី និង​ប្រព័ន្ធ ព្រមទាំង​ការកែលម្អ​ផ្សេងទៀត។ ទិន្នន័យ​ប្រមូលបាន​មួយចំនួន​ក៏នឹង​ជួយដល់​កម្មវិធី និង​ដៃគូ Google ដូចជា​អ្នកអភិវឌ្ឍន៍ Android ផងដែរ។ ការកំណត់នេះត្រូវបាន​អនុវត្ត​ដោយម្ចាស់។ ប្រសិនបើ​ការកំណត់​សកម្មភាព​កម្មវិធី និង​គេហទំព័រ​បន្ថែម​របស់អ្នក​ត្រូវបាន​បើក នោះទិន្នន័យនេះ​អាចត្រូវ​បានរក្សាទុក​ទៅក្នុង​គណនី Google របស់អ្នក។</translation>
 <translation id="7207631048330366454">ស្វែងរក​កម្មវិធី</translation>
-<translation id="7210171324714276060">កម្មវិធីបន្ថែម <ph name="EXTENSION_NAME" /> បានប្ដូរ​ការស្វែងរក​ឱ្យប្រើ <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">ម៉ាស៊ីនបោះពុម្ព​​កម្មវិធីបន្ថែម</translation>
 <translation id="7212097698621322584">បញ្ចូលកូដ PIN បច្ចុប្បន្ន​របស់អ្នក ដើម្បីផ្លាស់ប្ដូរវា។ ប្រសិនបើអ្នក​មិនស្គាល់កូដ PIN របស់អ្នក អ្នកត្រូវ​កំណត់សោសុវត្ថិភាព​ឡើងវិញ រួចបង្កើតកូដ PIN ថ្មី។</translation>
 <translation id="7216409898977639127">ក្រុមហ៊ុន​ផ្តល់សេវា​ទូរសព្ទ</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">កំពុងផ្គូផ្គងជាមួយ "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">លុប​ Linux (បេតា)</translation>
 <translation id="7740996059027112821">បទដ្ឋាន</translation>
-<translation id="7743128043742060936">ទំព័រនេះ​ត្រូវបានផ្លាស់ប្ដូរដោយ​កម្មវិធីបន្ថែម <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">មើល​ប្រវត្តិបោះពុម្ព​របស់អ្នក</translation>
 <translation id="7744192722284567281">រកឃើញនៅក្នុងការបែកធ្លាយ​ទិន្នន័យ​</translation>
 <translation id="7750228210027921155">រូបក្នុងរូប​</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">បើកជាផ្ទាំងដែលបានដៅ</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> ត្រូវបានផ្អាក</translation>
 <translation id="9124003689441359348">ពាក្យសម្ងាត់​ដែល​បានរក្សាទុក​នឹង​បង្ហាញ​នៅទីនេះ</translation>
+<translation id="9126149354162942022">ពណ៌ទស្សន៍ទ្រនិច​</translation>
 <translation id="9128317794749765148">មិនអាចបញ្ចប់ការរៀបចំ​​បានទេ</translation>
 <translation id="9128870381267983090">ភ្ជាប់ទៅបណ្តាញ</translation>
 <translation id="9130015405878219958">របៀបគ្មានសុពលភាពត្រូវបានបញ្ចូល។</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index fedc0499..0fea866 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">ಪ್ರಮಾಣಪತ್ರ ಸಹಿ ಮಾಡುವವರು</translation>
 <translation id="1145292499998999162">ಪ್ಲಗ್-ಇನ್ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="1145593918056169051">ಪ್ರಿಂಟರ್ ನಿಂತುಹೋಗಿದೆ</translation>
-<translation id="1146678959555564648">VR ನಮೂದಿಸಿ</translation>
 <translation id="114721135501989771">Chrome ನಲ್ಲಿ Google ಸ್ಮಾರ್ಟ್‌ಗಳನ್ನು ಪಡೆಯಿರಿ</translation>
 <translation id="1147991416141538220">ಪ್ರವೇಶಕ್ಕಾಗಿ ಕೇಳಲು, ಈ ಸಾಧನದ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="1149401351239820326">ಮುಕ್ತಾಯದ ತಿಂಗಳು</translation>
@@ -867,7 +866,6 @@
 <translation id="2096715839409389970">ಮೂರನೇ ವ್ಯಕ್ತಿ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="2097372108957554726">ಹೊಸ ಸಾಧನಗಳನ್ನು ನೋಂದಾಯಿಸಲು ನೀವು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ</translation>
 <translation id="2099172618127234427">sshd daemon ಅನ್ನು ಹೊಂದಿಸುವಂತಹ Chrome OS ಡೀಬಗ್ ಮಾಡುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತಿರುವಿರಿ ಮತ್ತು USB ಡ್ರೈವ್‌ಗಳಿಂದ ಬೂಟ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
-<translation id="2099625543891475722">ನಿಮ್ಮ ಭೌತಿಕ ಗುಣಲಕ್ಷಣಗಳು, ಉದಾ. ಎತ್ತರ ಇತ್ಯಾದಿ</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಅಳಿಸುವುದೆ?</translation>
 <translation id="2100273922101894616">ಸ್ವಯಂ ಸೈನ್-ಇನ್</translation>
 <translation id="2101225219012730419">ಆವೃತ್ತಿ:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">ಈ ಸಾಧನವನ್ನು ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಡೊಮೇನ್‌ಗೆ ಸೇರಿಸಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಈ ಸಾಧನವನ್ನು ನಿರ್ವಹಿಸಲು ಬೇರೊಂದು ಡೊಮೇ‌ನ್ ಮೂಲಕ ಗುರುತಿಸಲಾಗಿದೆ.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152">ಸಮೀಪದಲ್ಲಿರುವ ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಲು <ph name="ORIGIN" /> ಬಯಸುತ್ತದೆ. ಈ ಕೆಳಗಿನ ಸಾಧನಗಳು ಕಂಡುಬಂದಿವೆ:</translation>
-<translation id="4353114845960720315">ನೀವು VR ನಲ್ಲಿರುವಾಗ, ಈ ಸೈಟ್ ಕುರಿತು ತಿಳಿಯಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ:</translation>
 <translation id="4354073718307267720">ಸೈಟ್, ನಿಮ್ಮ ಸುತ್ತಮುತ್ತಲಿನ 3D ನಕ್ಷೆಗಳನ್ನು ರಚಿಸಲು ಅಥವಾ ಕ್ಯಾಮರಾ ಸ್ಥಿತಿಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಯಸಿದಾಗ ಕೇಳಿ</translation>
 <translation id="4354344420232759511">ನೀವು ಭೇಟಿ ಮಾಡುವ ಸೈಟ್‌ಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ</translation>
 <translation id="435527878592612277">ನಿಮ್ಮ ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">ಪ್ರಾಥಮಿಕ ಖಾತೆ</translation>
 <translation id="4660476621274971848">ನಿರೀಕ್ಷಿತ ಆವೃತ್ತಿ "<ph name="EXPECTED_VERSION" />", ಆದರೆ ಆವೃತ್ತಿಯು "<ph name="NEW_ID" />" ಆಗಿದೆ</translation>
 <translation id="4660540330091848931">ಮರುಗಾತ್ರಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation>
-<translation id="4660838440047236328">ನಿಮ್ಮ ರೂಮ್‌ನ ವಿನ್ಯಾಸ</translation>
 <translation id="4661407454952063730">ಆ್ಯಪ್ ಡೇಟಾವು ಸಂಪರ್ಕಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ಫೋಟೋಗಳ ಡೇಟಾವನ್ನು ಒಳಗೊಂಡ ಹಾಗೆ, ಆ್ಯಪ್‌ನಲ್ಲಿ ಉಳಿಸಿದ ಯಾವುದೇ ಡೇಟಾ (ಡೆವಲಪರ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಆಧರಿಸಿ) ಆಗಿರಬಹುದು.</translation>
 <translation id="4662373422909645029">ಅಡ್ಡಹೆಸರಿಗೆ ಸಂಖ್ಯೆ ಇಲ್ಲ</translation>
 <translation id="4662788913887017617">ನಿಮ್ಮ iPhone ನೊಂದಿಗೆ ಈ ಬುಕ್‌ಮಾರ್ಕ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">ಮೊಬೈಲ್ ಡೇಟಾ ರೋಮಿಂಗ್ ಅನ್ನು ಅನುಮತಿಸಿ</translation>
 <translation id="4804818685124855865">ಡಿಸ್‌ಕನೆಕ್ಟ್</translation>
 <translation id="4804827417948292437">ಆವಕಾಡೊ</translation>
-<translation id="4805077164141082536">ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡುವ ಮೊದಲು ನಿಮ್ಮ ಪ್ರಸ್ತುತ Linux ಕಂಟೇನರ್ ಅನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿಕೊಳ್ಳಲು ನಾವು ನಿಮಗೆ ಶಿಫಾರಸು ಮಾಡುತ್ತೇವೆ.</translation>
 <translation id="4807098396393229769">ಕಾರ್ಡ್‌ನಲ್ಲಿರುವ ಹೆಸರು</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> ನಿಂದ VR ಅನ್ನು ನಮೂದಿಸುವುದೇ?</translation>
 <translation id="4808667324955055115">ಪಾಪ್-ಅಪ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ:</translation>
 <translation id="480990236307250886">ಹೋಮ್ ತೆರೆಯಿರಿ</translation>
 <translation id="4811212958317149293">ಕೀಬೋರ್ಡ್ ಸ್ವಯಂ-ಸ್ಕ್ಯಾನ್‌ನ ಪ್ರವೇಶ ಬದಲಾಯಿಸಿ</translation>
@@ -3714,7 +3708,6 @@
 <translation id="5739235828260127894">ಪರಿಶೀಲನೆಗಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ಅತ್ಯಂತ ದೊಡ್ಡದು</translation>
 <translation id="574209121243317957">ಪಿಚ್</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> ಕುರಿತು ಸಲಹೆಗಳು, ಆಫರ್‌ಗಳು ಹಾಗೂ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಪಡೆಯಿರಿ ಮತ್ತು ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation>
 <translation id="5746169159649715125">PDF ನಂತೆ ಉಳಿಸಿ</translation>
 <translation id="5747552184818312860">ಅವಧಿ ಮೀರುವುದು</translation>
 <translation id="5747785204778348146">ಡೆವಲಪರ್ - ಅಸ್ಥಿರ</translation>
@@ -4838,7 +4831,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ನಿರ್ಗಮನ ಪುಟ}one{ನಿರ್ಗಮನ ಪುಟಗಳು}other{ನಿರ್ಗಮನ ಪುಟಗಳು}}</translation>
 <translation id="7207457272187520234">ಬಳಕೆ ಮತ್ತು ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಿ. ಪ್ರಸ್ತುತ, ಈ ಸಾಧನವು ಡಯಾಗ್ನಾಸ್ಟಿಕ್, ಸಾಧನ ಹಾಗೂ ಆ್ಯಪ್ ಬಳಕೆಯ ಡೇಟಾವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ Google ಗೆ ಕಳುಹಿಸುತ್ತಿದೆ. ಇದು ಸಿಸ್ಟಂ ಮತ್ತು ಆ್ಯಪ್‌ನ ಸ್ಥಿರತೆ ಹಾಗೂ ಇತರ ಸುಧಾರಣೆಗಳಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಒಟ್ಟುಗೂಡಿಸಲಾದ ಕೆಲವೊಂದು ಡೇಟಾ, Google ಆ್ಯಪ್‌ಗಳಿಗೆ ಮತ್ತು Android ಡೆವಲಪರ್‌ಗಳಂತಹ ಪಾಲುದಾರರಿಗೂ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಮಾಲೀಕರು ಜಾರಿಗೊಳಿಸುತ್ತಾರೆ. ನಿಮ್ಮ ಹೆಚ್ಚುವರಿ ವೆಬ್‌ ಮತ್ತು ಆ್ಯಪ್ ಚಟುವಟಿಕೆ ಸೆಟ್ಟಿಂಗ್ ಆನ್‌ ಆಗಿದ್ದರೆ, ಈ ಡೇಟಾವನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಬಹುದು.</translation>
 <translation id="7207631048330366454">ಆ್ಯಪ್‌ಗಳನ್ನು ಹುಡುಕಿ</translation>
-<translation id="7210171324714276060"><ph name="SEARCH_PROVIDER_DOMAIN" /> ಅನ್ನು ಬಳಸಲು ಈ <ph name="EXTENSION_NAME" /> ವಿಸ್ತರಣೆಯು ಹುಡುಕಾಟವನ್ನು ಬದಲಾಯಿಸಿದೆ</translation>
 <translation id="7210499381659830293">ವಿಸ್ತರಣೆ ಪ್ರಿಂಟರ್‌ಗಳು</translation>
 <translation id="7212097698621322584">ಪಿನ್ ಬದಲಾಯಿಸಲು, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ. ನಿಮ್ಮ ಪಿನ್ ನಿಮಗೆ ಗೊತ್ತಿಲ್ಲದಿದ್ದರೆ, ನೀವು ಭದ್ರತೆ ಕೀ ಅನ್ನು ಮರುಹೊಂದಿಸಿ, ಆಮೇಲೆ ಹೊಸ ಪಿನ್ ಅನ್ನು ರಚಿಸಬೇಕಾಗುತ್ತದೆ.</translation>
 <translation id="7216409898977639127">ಸೆಲ್ಯುಲಾರ್ ಒದಗಿಸುವವರು</translation>
@@ -5238,7 +5230,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" ಜೊತೆ ಜೋಡಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="7737238973539693982">Linux (ಬೀಟಾ) ಅಳಿಸಿ</translation>
 <translation id="7740996059027112821">ಪ್ರಮಾಣಿತ</translation>
-<translation id="7743128043742060936">ಈ ಪುಟವನ್ನು <ph name="EXTENSION_NAME" /> ವಿಸ್ತರಣೆಯು ಬದಲಾಯಿಸಿದೆ</translation>
 <translation id="7744047395460924128">ನಿಮ್ಮ ಮುದ್ರಣ ಇತಿಹಾಸವನ್ನು ನೋಡಿ</translation>
 <translation id="7744192722284567281">ಡೇಟಾ ಉಲ್ಲಂಘಿಸಿದವುಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಕಂಡುಬಂದಿದೆ</translation>
 <translation id="7750228210027921155">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 52be700..506cf01 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">인증서 서명자</translation>
 <translation id="1145292499998999162">플러그인 차단됨</translation>
 <translation id="1145593918056169051">프린터가 중지됨</translation>
-<translation id="1146678959555564648">VR 시작</translation>
 <translation id="114721135501989771">Google로 Chrome을 더욱 스마트하게</translation>
 <translation id="1147991416141538220">액세스 권한을 요청하려면 기기 관리자에게 문의하세요.</translation>
 <translation id="1149401351239820326">유효기간 월</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">타사 쿠키 삭제</translation>
 <translation id="2097372108957554726">새 기기를 등록하려면 Chrome에 로그인하세요.</translation>
 <translation id="2099172618127234427">sshd 데몬을 설정하고 USB 드라이브에서 부팅하도록 사용 설정하는 Chrome OS 디버깅 기능을 사용 설정 중입니다.</translation>
-<translation id="2099625543891475722">키와 같은 신체적 특징</translation>
 <translation id="2099686503067610784">서버 인증서 '<ph name="CERTIFICATE_NAME" />'을(를) 삭제하시겠습니까?</translation>
 <translation id="2100273922101894616">자동 로그인</translation>
 <translation id="2101225219012730419">버전:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google 어시스턴트 관련 정보</translation>
 <translation id="3733127536501031542">SSL 서버(Step-up 사용)</translation>
 <translation id="3735740477244556633">정렬 기준</translation>
+<translation id="3738213647660363521">맞춤 커서 색상</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" />을(를) 여시겠습니까?</translation>
 <translation id="3742055079367172538">찍은 스크린샷</translation>
@@ -2655,7 +2654,6 @@
 <translation id="4350019051035968019">이 기기는 다른 도메인에서 관리하는 것으로 표시되어 있기 때문에 사용자의 계정이 속한 도메인에 등록할 수 없습니다.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" />에서 주변 블루투스 기기를 검색하려고 합니다. 다음 기기가 발견되었습니다.</translation>
-<translation id="4353114845960720315">VR 사용 중 이 사이트가 다음 정보를 학습할 수 있습니다.</translation>
 <translation id="4354073718307267720">사이트에서 주변 환경의 3D 지도를 생성하거나 카메라 위치를 추적하려고 할 때 확인</translation>
 <translation id="4354344420232759511">내가 방문한 사이트가 여기에 표시됩니다.</translation>
 <translation id="435527878592612277">사진 선택</translation>
@@ -2890,7 +2888,6 @@
 <translation id="4659077111144409915">기본 계정</translation>
 <translation id="4660476621274971848">'<ph name="EXPECTED_VERSION" />' 버전을 예상했으나 '<ph name="NEW_ID" />' 버전이 표시되었습니다</translation>
 <translation id="4660540330091848931">크기 조정 중</translation>
-<translation id="4660838440047236328">방의 구조</translation>
 <translation id="4661407454952063730">앱 데이터에는 연락처, 메시지, 사진을 비롯하여 앱에서 개발자 설정에 따라 저장한 모든 데이터가 포함될 수 있습니다.</translation>
 <translation id="4662373422909645029">닉네임에 숫자를 포함할 수 없음</translation>
 <translation id="4662788913887017617">이 북마크를 내 iPhone과 공유</translation>
@@ -2979,9 +2976,7 @@
 <translation id="4801512016965057443">모바일 데이터 로밍 허용</translation>
 <translation id="4804818685124855865">연결 해제</translation>
 <translation id="4804827417948292437">아보카도</translation>
-<translation id="4805077164141082536">업그레이드하기 전에 현재 Linux 컨테이너를 백업하는 것이 좋습니다.</translation>
 <translation id="4807098396393229769">카드 명의</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />에서 VR을 시작하시겠습니까?</translation>
 <translation id="4808667324955055115">팝업 차단됨</translation>
 <translation id="480990236307250886">홈페이지 열기</translation>
 <translation id="4811212958317149293">스위치 제어 키보드 자동 스캔</translation>
@@ -3295,6 +3290,7 @@
 <translation id="52232769093306234">압축에 실패했습니다.</translation>
 <translation id="5225324770654022472">앱 단축키 표시</translation>
 <translation id="5227679487546032910">기본 청록색 아바타</translation>
+<translation id="5228088094491423618">실시간 자막</translation>
 <translation id="5228579091201413441">동기화 사용</translation>
 <translation id="5229189185761556138">입력 방법 관리</translation>
 <translation id="5230516054153933099">창</translation>
@@ -3708,7 +3704,6 @@
 <translation id="5739235828260127894">확인을 기다리는 중입니다. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">아주 크게</translation>
 <translation id="574209121243317957">높낮이</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" />에 관한 도움말, 혜택 및 소식을 받아 보고 의견을 공유하세요.</translation>
 <translation id="5746169159649715125">PDF로 저장</translation>
 <translation id="5747552184818312860">만료</translation>
 <translation id="5747785204778348146">개발자 - 불안정</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{페이지 나가기}other{페이지 나가기}}</translation>
 <translation id="7207457272187520234">사용 및 진단 데이터를 보냅니다. 이 기기는 현재 진단, 기기 및 앱 사용 데이터를 Google에 자동으로 보내고 있습니다. 데이터는 시스템 및 앱 안정성 등을 개선하는 데 활용됩니다. 일부 수집 데이터는 Google 앱과 파트너(Android 개발자 등)에게도 도움을 줍니다. 설정은 소유자가 지정합니다. 추가 웹 및 앱 활동이 사용 설정되어 있다면 이 데이터가 Google 계정에 저장될 수 있습니다.</translation>
 <translation id="7207631048330366454">앱 검색</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> 확장 프로그램이 검색에 <ph name="SEARCH_PROVIDER_DOMAIN" /> 서비스를 사용하도록 변경되었습니다.</translation>
 <translation id="7210499381659830293">확장 프로그램 프린터</translation>
 <translation id="7212097698621322584">PIN을 변경하려면 현재 PIN을 입력하세요. PIN을 모르는 경우 보안 키를 재설정한 다음 새 PIN을 만들어야 합니다.</translation>
 <translation id="7216409898977639127">이동통신사</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">‘<ph name="DEVICE_NAME" />’ 페어링 중...</translation>
 <translation id="7737238973539693982">Linux(베타) 삭제</translation>
 <translation id="7740996059027112821">표준</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> 확장 프로그램에서 이 페이지를 변경했습니다.</translation>
 <translation id="7744047395460924128">인쇄 기록 보기</translation>
 <translation id="7744192722284567281">정보 유출에 포함됨</translation>
 <translation id="7750228210027921155">PIP 모드</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">고정 탭으로 열기</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" />이(가) 일시중지됨</translation>
 <translation id="9124003689441359348">저장한 비밀번호가 여기에 표시됩니다.</translation>
+<translation id="9126149354162942022">커서 색상</translation>
 <translation id="9128317794749765148">설정을 완료할 수 없음</translation>
 <translation id="9128870381267983090">네트워크에 연결</translation>
 <translation id="9130015405878219958">잘못된 모드를 입력했습니다.</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index d54e7b6..711ece4 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Тастыктамага кол коюучу</translation>
 <translation id="1145292499998999162">Плагин бөгөттөлдү</translation>
 <translation id="1145593918056169051">Принтер токтотулду</translation>
-<translation id="1146678959555564648">VR режимине кирүү</translation>
 <translation id="114721135501989771">Google'дун акылдуу жөндөөлөрүн Chrome'до колдонуңуз</translation>
 <translation id="1147991416141538220">Кирүү мүмкүнчүлүгүн алуу үчүн түзмөктүн администраторуна кайрылыңыз.</translation>
 <translation id="1149401351239820326">Колдонуу мөөнөтү аяктаган ай</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Үчүнчү тараптын cookie файлдары тазалансын</translation>
 <translation id="2097372108957554726">Жаңы түзмөктөрдү каттоо үчүн Chrome'го киришиңиз керек</translation>
 <translation id="2099172618127234427">sshd демонду орнотуп, USB дисктерден жүктөөнү иштете турган Chrome OS мүчүлүштүктөрдү оңдоо өзгөчөлүктөрүн иштетип жатасыз.</translation>
-<translation id="2099625543891475722">боюңуз сыяктуу физикалык мүнөздөмөлөрүңүз</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" сервер тастыктамасы жок кылынсынбы?</translation>
 <translation id="2100273922101894616">Авто кирүү</translation>
 <translation id="2101225219012730419">Версиясы:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google Жардамчыга тийиштүү маалымат</translation>
 <translation id="3733127536501031542">Жогорулатмасы бар SSL сервери</translation>
 <translation id="3735740477244556633">Төмөнкү боюнча иргөө</translation>
+<translation id="3738213647660363521">Курсордун ыңгайлаштырылган түсү</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> колдонмосун ачуу керекпи?</translation>
 <translation id="3742055079367172538">Скриншот тартылды</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Бул түзмөктү аккаунтуңуздун доменине киргизүү мүмкүн болбой жатат, себеби түзмөгүңүздү башка домен башкарат.</translation>
 <translation id="4350782034419308508">Окей Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> сайты жакын жердеги Bluetooth түзмөктөрүн скандаганы жатат. Төмөнкү түзмөктөр табылды:</translation>
-<translation id="4353114845960720315">VR режиминде бул сайт төмөнкүнү көрүшү мүмкүн:</translation>
 <translation id="4354073718307267720">Сайт айланаңыздын 3D картасын түзгөнү же камераңыздын абалын көргөнү жатканда уруксат суралсын</translation>
 <translation id="4354344420232759511">Баш баккан сайттарыңыз бул жерден көрүнөт</translation>
 <translation id="435527878592612277">Сүрөтүңүздү тандаңыз</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Негизги аккаунт</translation>
 <translation id="4660476621274971848">Күтүлүп жаткан версия – "<ph name="EXPECTED_VERSION" />" болчу, бирок "<ph name="NEW_ID" />" версиясы алынып калды</translation>
 <translation id="4660540330091848931">Өлчөмү өзгөртүлүүдө</translation>
-<translation id="4660838440047236328">бөлмөңүздүн көрүнүшү</translation>
 <translation id="4661407454952063730">Колдонмо тууралуу маалыматка иштеп чыгуучунун жөндөөлөрүнүн негизинде сакталган бардык маалымат, анын ичинде байланыштар, билдирүүлөр жана сүрөттөр кириши мүмкүн.</translation>
 <translation id="4662373422909645029">Ылакап атта сан болбошу керек</translation>
 <translation id="4662788913887017617">Бул кыстарманы iPhone’уңуз менен бөлүшүңүз</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Мобилдик дайындар роумингине мүмкүндүк берүү</translation>
 <translation id="4804818685124855865">Ажыратуу</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Жаңыртуудан мурда учурдагы Linux контейнериңиздин камдык көчүрмөсүн сактоону сунуштайбыз.</translation>
 <translation id="4807098396393229769">Картадагы ысым</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> сайтынын VR режимине өтөсүзбү?</translation>
 <translation id="4808667324955055115">Калкыма терезелер бөгөттөлгөн:</translation>
 <translation id="480990236307250886">Башкы бетти ачуу</translation>
 <translation id="4811212958317149293">Switch access баскычтоп менен авто-скандоо</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Таңгакталбай калды.</translation>
 <translation id="5225324770654022472">Колдонмолордун кыска жолун көрсөтүү</translation>
 <translation id="5227679487546032910">Демейки көгүш жашыл аватар</translation>
+<translation id="5228088094491423618">Ыкчам коштомо жазуулар</translation>
 <translation id="5228579091201413441">Шайкештирүүнү иштетүү</translation>
 <translation id="5229189185761556138">Киргизүү ыкмаларын башкаруу</translation>
 <translation id="5230516054153933099">Терезе</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Ырастоо күтүлүүдө. <ph name="LINK_BEGIN" />Кеңири маалымат<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Өтө чоң</translation>
 <translation id="574209121243317957">Тон</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> тууралуу кеңештерди, сунуштарды жана жаңылыктарды алып, пикир билдириңиз</translation>
 <translation id="5746169159649715125">PDF катары сактоо</translation>
 <translation id="5747552184818312860">Жарамдуулук мөөнөтү</translation>
 <translation id="5747785204778348146">Иштеп чыгуучу – туруктуу эмес</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Барактан чыгуу}other{Барактардан чыгуу}}</translation>
 <translation id="7207457272187520234">Колдонуу жана мүчүлүштүктөрдү аныктоо маалыматын жөнөтүү. Учурда бул түзмөк мүчүлүштүктөрдү аныктоо маалыматын, түзмөктүн жана колдонмонун иштетилиши жөнүндө маалыматты Google'га автоматтык түрдө жөнөтүп жатат. Бул маалымат тутум менен колдонмонун кыйла туруктуу иштешин камсыз кылууга жана башка нерселерди жакшыртууга көмөктөшөт. Айрым маалыматтар тобу Google колдонмолоруна жана Android'дин иштеп чыгуучулары сыяктуу өнөктөштөрүнө да жардам берет. Бул жөндөөнү түзмөктүн ээси иштетет. Эгер кошумча Колдонмолор жана Интернеттеги аракеттериңиздин таржымалынын жөндөөлөрү күйгүзүлгөн болсо, бул маалымат Google аккаунтуңузга сакталышы мүмкүн.</translation>
 <translation id="7207631048330366454">Колдонмолорду издөө</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> кеңейтүүсү эми издөө үчүн <ph name="SEARCH_PROVIDER_DOMAIN" /> колдонула тургандай кылып өзгөртүп койду</translation>
 <translation id="7210499381659830293">Кеңейтүү аркылуу иштеген принтерлер</translation>
 <translation id="7212097698621322584">Аны өзгөртүү үчүн, учурдагы PIN кодуңузду киргизиңиз. Эгер PIN кодду билбесеңиз, коопсуздук ачкычын баштапкы абалга келтирип, анан жаңы PIN код түзүшүңүз керек.</translation>
 <translation id="7216409898977639127">Интернет провайдери</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" менен жупташтырылууда...</translation>
 <translation id="7737238973539693982">Linux'ту (бета-версиясы) жок кылуу</translation>
 <translation id="7740996059027112821">Стандарт</translation>
-<translation id="7743128043742060936">Бул барак <ph name="EXTENSION_NAME" /> кеңейтүүсү аркылуу өзгөртүлгөн</translation>
 <translation id="7744047395460924128">Басып чыгаруу таржымалыңызды көрүү</translation>
 <translation id="7744192722284567281">Сырсөз уурдалды</translation>
 <translation id="7750228210027921155">Сүрөт ичиндеги сүрөт</translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">Кадалган өтмөк катары ачуу</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> тындырылды</translation>
 <translation id="9124003689441359348">Сакталган сырсөздөр бул жерден көрүнөт</translation>
+<translation id="9126149354162942022">Курсордун түсү</translation>
 <translation id="9128317794749765148">Жөндөө аягына чыккан жок</translation>
 <translation id="9128870381267983090">Тармакка туташуу</translation>
 <translation id="9130015405878219958">Жараксыз режим киргизилди.</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index b63ff0c..8b19c9f 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">ຜູ້ເຊັນໃບຢັ້ງຢືນ</translation>
 <translation id="1145292499998999162">ບລັອກປລັກອິນແລ້ວ</translation>
 <translation id="1145593918056169051">ເຄື່ອງພິມໄດ້ຢຸດແລ້ວ</translation>
-<translation id="1146678959555564648">ປ້ອນ VR</translation>
 <translation id="114721135501989771">ມີ Google ອັດສະລິຍະໃນ Chrome</translation>
 <translation id="1147991416141538220">ເພື່ອຂໍສິດເຂົ້າເຖິງ, ກະລຸນາຕິດຕໍ່ຫາຜູ້ເບິ່ງແຍງລະບົບຂອງອຸປະກອນນີ້.</translation>
 <translation id="1149401351239820326">ເດືອນ​ໝົດອາຍຸ</translation>
@@ -864,7 +863,6 @@
 <translation id="2096715839409389970">ລຶບລ້າງຄຸກກີ້ພາກສ່ວນທີສາມ</translation>
 <translation id="2097372108957554726">ທ່ານ​ຈໍາ​ເປັນ​ຕ້ອງ​ລົງຊື່ເຂົ້າ​ໃຊ້​ Chrome ເພື່ອ​ລົງທະບຽນ​ອຸ​ປະ​ກອນ​ໃໝ່</translation>
 <translation id="2099172618127234427">ທ່ານ​ກຳ​ລັງ​ເປີດ​ໃຊ້​ງານ​ຄຸນສົມບັດ​ການ​ແກ້​ໄຂ​ບັນ​ຫາ Chrome OS ເຊິ່ງ​ຈະ​ຕັ້ງ sshd daemon ແລaະ​ເປີດ​ໃຊ້​ງານ​ການ​ບູດnຈາກ​ອຸ​ປະ​ກອນ USB.</translation>
-<translation id="2099625543891475722">ລັກສະນະຮ່າງກາຍຂອງທ່ານ ເຊັ່ນ: ລວງສູງ</translation>
 <translation id="2099686503067610784">ລຶບໃບຢັ້ງຢືນເຊີບເວີ "<ph name="CERTIFICATE_NAME" />" ບໍ?</translation>
 <translation id="2100273922101894616">ເຂົ້າສູ່​ລະບົບ​ອັດຕະໂນມັດ</translation>
 <translation id="2101225219012730419">ລຸ້ນ:</translation>
@@ -2183,6 +2181,7 @@
 <translation id="3732857534841813090">ຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບຜູ້ຊ່ວຍ Google</translation>
 <translation id="3733127536501031542">ເຊີບເວີ SSL ດ້ວຍການກ້າວຕໍ່ໄປ</translation>
 <translation id="3735740477244556633">ຈັດຮຽງຕາມ</translation>
+<translation id="3738213647660363521">ສີເຄີເຊີແບບກຳນົດເອງ</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">ເປີດ <ph name="APPLICATION" /> ບໍ?</translation>
 <translation id="3742055079367172538">ຖ່າຍຮູບໜ້າຈໍແລ້ວ</translation>
@@ -2655,7 +2654,6 @@
 <translation id="4350019051035968019">ອຸປະກອນນີ້ບໍ່ສາມາດລົງທະບຽນໃສ່ໂດເມນທີ່ເປັນຂອງບັນຊີຂອງທ່ານໄດ້ ເພາະວ່າອຸປະກອນຖືກໝາຍສໍາລັບການຈັດການໂດຍໂດເມນອື່ນ.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ຕ້ອງການສະແກນຫາອຸປະກອນ Bluetooth ທີ່ຢູ່ໃກ້ຄຽງ, ພົບເຫັນອຸປະກອນຕໍ່ໄປນີ້ແລ້ວ:</translation>
-<translation id="4353114845960720315">ໃນຂະນະທີ່ທ່ານຢູ່ໃນ VR, ເວັບໄຊນີ້ອາດຈະສາມາດຮຽນຮູ້ກ່ຽວກັບ:</translation>
 <translation id="4354073718307267720">ຖາມເມື່ອເວັບໄຊຕ້ອງການສ້າງແຜນທີ່ 3 ມິຕິຂອງສິ່ງທີ່ຢູ່ອ້ອມຂ້າງຕົວທ່ານ ຫຼື ຕາມຕຳແໜ່ງກ້ອງ</translation>
 <translation id="4354344420232759511">ເວັບໄຊທີ່ທ່ານເຂົ້າເບິ່ງຈະປາກົດຢູ່ບ່ອນນີ້</translation>
 <translation id="435527878592612277">ເລືອກຮູບພາບຂອງທ່ານ</translation>
@@ -2890,7 +2888,6 @@
 <translation id="4659077111144409915">ບັນຊີຫຼັກ</translation>
 <translation id="4660476621274971848">ເວີຊັນທີ່ຄາດໄວ້ "<ph name="EXPECTED_VERSION" />", ແຕ່ເວີຊັນທີ່ຕິດຕັ້ງແມ່ນ "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">ກຳລັງປັບຂະໜາດ</translation>
-<translation id="4660838440047236328">ແຜນຜັງຫ້ອງຂອງທ່ານ</translation>
 <translation id="4661407454952063730">ຂໍ້ມູນແອັບອາດເປັນຂໍ້ມູນໃດກໍໄດ້ທີ່ແອັບບັນທຶກໄວ້ (ໂດຍຂຶ້ນກັບການຕັ້ງຄ່າຂອງນັກພັດທະນາ), ຮວມທັງຂໍ້ມູນຕ່າງໆ ເຊັ່ນ: ລາຍຊື່ຜູ້ຕິດຕໍ່, ຂໍ້ຄວາມ ແລະ ຮູບພາບ.</translation>
 <translation id="4662373422909645029">ຊື່ຫຼິ້ນບໍ່ສາມາດຮວມມີຕົວເລກໄດ້</translation>
 <translation id="4662788913887017617">ແບ່ງປັນບຸກມາກນີ້ກັບ iPhone ຂອງທ່ານ</translation>
@@ -2979,9 +2976,7 @@
 <translation id="4801512016965057443">ອະນຸຍາດການໂຣມມິງຂໍ້​ມູນ​ມື​ຖື</translation>
 <translation id="4804818685124855865">ຕັດເຊື່ອມຕໍ່</translation>
 <translation id="4804827417948292437">ອາໂວຄາໂດ</translation>
-<translation id="4805077164141082536">ພວກເຮົາຂໍແນະນຳໃຫ້ທ່ານສຳຮອງຂໍ້ມູນກ່ອງບັນຈຸ Linux ປັດຈຸບັນຂອງທ່ານໄວ້ກ່ອນທີ່ຈະອັບເກຣດ.</translation>
 <translation id="4807098396393229769">ຊື່​ຢູ່ໃນ​ບັດ</translation>
-<translation id="4808319664292298116">ເຂົ້າຫາ VR ຈາກ <ph name="DOMAIN" /> ບໍ?</translation>
 <translation id="4808667324955055115">ບລັອກປັອບອັບໄວ້ແລ້ວ:</translation>
 <translation id="480990236307250886">ເປີດໜ້າຫຼັກ</translation>
 <translation id="4811212958317149293">ການສະແກນອັດຕະໂນມັດຂອງແປ້ນພິມການເຂົ້າເຖິງດ້ວຍປຸ່ມກົດ</translation>
@@ -3295,6 +3290,7 @@
 <translation id="52232769093306234">ການເກັບຮວມກັນບໍ່ສຳເລັດ.</translation>
 <translation id="5225324770654022472">ສະ​ແດງ​ທາງລັດແອັບ</translation>
 <translation id="5227679487546032910">ຮູບແທນຕົວສີຟ້າອົມຂຽວຕາມຄ່າເລີ່ມຕົ້ນ</translation>
+<translation id="5228088094491423618">ຄຳບັນຍາຍສົດ</translation>
 <translation id="5228579091201413441">ເປີດໃຊ້ງານຊິງຄ໌</translation>
 <translation id="5229189185761556138">ຈັດການວິທີການປ້ອນຂໍ້ມູນ</translation>
 <translation id="5230516054153933099">ໜ້າຈໍ</translation>
@@ -3708,7 +3704,6 @@
 <translation id="5739235828260127894">ກຳລັງລໍຖ້າການຢັ້ງຢືນ. <ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">​ໃຫຍ່​ຫຼາຍ</translation>
 <translation id="574209121243317957">ລະດັບສຽງ</translation>
-<translation id="5745136023067925867">ຮັບເຄັດລັບ, ຂໍ້ສະເໜີ ແລະ ການອັບເດດກ່ຽວກັບ <ph name="DEVICE_TYPE" /> ແລະ ແບ່ງປັນຄຳຕິຊົມ</translation>
 <translation id="5746169159649715125">ບັນທຶກເປັນ PDF</translation>
 <translation id="5747552184818312860">ໝົດອາຍຸ</translation>
 <translation id="5747785204778348146">ຜູ້ພັດ​ທະ​ນາ - ບໍ່ໝັ້ນຄົງ</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ອອກຈາກໜ້າ}other{ອອກຈາກໜ້າ}}</translation>
 <translation id="7207457272187520234">ສົ່ງຂໍ້ມູນການນຳໃຊ້ ແລະ ການວິເຄາະ. ອຸປະກອນນີ້ກຳລັງສົ່ງຂໍ້ມູນການວິເຄາະ, ຂໍ້ມູນອຸປະກອນ ແລະ ການໃຊ້ແອັບໃຫ້ Google ໂດຍອັດຕະໂນມັດໃນຂະນະນີ້. ນີ້ຈະຊ່ວຍປັບປຸງຄວາມສະຖຽນຂອງລະບົບ ແລະ ແອັບ ແລະ ການປັບປຸງອື່ນໆ. ບາງຂໍ້ມູນແບບຮວມກັນຍັງຈະຊ່ວຍແອັບ ແລະ ຮຸ້ນສ່ວນຂອງ Google ນຳອີກ ເຊັ່ນ: ຜູ້ພັດທະນາ Android. ເຈົ້າຂອງບັງຄັບໃຊ້ການຕັ້ງຄ່ານີ້. ຖ້າເປີດການຕັ້ງຄ່າການເຄື່ອນໄຫວເວັບ ແລະ ແອັບເພີ່ມເຕີມຂອງທ່ານ, ລະບົບອາດຈະບັນທຶກຂໍ້ມູນນີ້ໄວ້ໃນບັນຊີ Google ຂອງທ່ານ.</translation>
 <translation id="7207631048330366454">ຊອກ​ຫາ​ແອັບ</translation>
-<translation id="7210171324714276060">ສ່ວນຂະຫຍາຍ <ph name="EXTENSION_NAME" /> ໄດ້ປ່ຽນການຊອກຫາໄປໃຊ້ <ph name="SEARCH_PROVIDER_DOMAIN" /> ແລ້ວ</translation>
 <translation id="7210499381659830293">ເຄື່ອງພິມຂອງສ່ວນຂະຫຍາຍ</translation>
 <translation id="7212097698621322584">ປ້ອນ PIN ປັດຈຸບັນຂອງທ່ານເພື່ອປ່ຽນມັນ. ຖ້າທ່ານບໍ່ຮູ້ຈັກ PIN ຂອງທ່ານ, ທ່ານຈະຈໍາເປັນຕ້ອງຣີເຊັດກະແຈຄວາມປອດໄພ, ແລ້ວສ້າງ PIN ໃໝ່.</translation>
 <translation id="7216409898977639127">ຜູ້ໃຫ້ບໍລິການມືຖື</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">ກຳລັງຈັບຄູ່ກັບ "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">ລຶບ Linux (ເບຕ້າ)</translation>
 <translation id="7740996059027112821">ມາດ​ຕະ​ຖານ</translation>
-<translation id="7743128043742060936">ໜ້ານີ້ຖືປ່ຽນໂດຍສ່ວນຂະຫຍາຍ <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">ເບິ່ງປະຫວັດການພິມຂອງທ່ານ</translation>
 <translation id="7744192722284567281">ພົບເຫັນໃນການລະເມີດຂໍ້ມູນ</translation>
 <translation id="7750228210027921155">ສະແດງຜົນຊ້ອນກັນ</translation>
@@ -6347,6 +6340,7 @@
 <translation id="9121814364785106365">ເປີດ​ເປັນ​ແຖບປັກໝຸດແລ້ວ</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> ຖືກຢຸດໄວ້ຊົ່ວຄາວ</translation>
 <translation id="9124003689441359348">ລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ຈະປາກົດຢູ່ບ່ອນນີ້</translation>
+<translation id="9126149354162942022">ສີເຄີເຊີ</translation>
 <translation id="9128317794749765148">ບໍ່ສາມາດເຮັດສຳເລັດການຕັ້ງຄ່າໄດ້</translation>
 <translation id="9128870381267983090">ເຊື່ອມ​ຕໍ່ກັບ​ເຄືອ​ຂ່າຍ</translation>
 <translation id="9130015405878219958">ປ້ອນໂໝດໃຊ້ບໍ່ໄດ້ເຂົ້າໄປແລ້ວ.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 4d448b7d..1b46cf5e 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Sertifikatą pasirašantis asmuo</translation>
 <translation id="1145292499998999162">Papildinys užblokuotas</translation>
 <translation id="1145593918056169051">Spausdintuvas sustabdytas</translation>
-<translation id="1146678959555564648">Įgalinti VR</translation>
 <translation id="114721135501989771">„Google“ išm. funkc. „Chrome“</translation>
 <translation id="1147991416141538220">Norėdami paprašyti prieigos, susisiekite su šio įrenginio administratoriumi.</translation>
 <translation id="1149401351239820326">Galiojimo laiko pabaigos mėnuo</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Išvalyti trečiųjų šalių slapukus</translation>
 <translation id="2097372108957554726">Reikia prisijungti prie „Chrome“, kad būtų galima užregistruoti naujus įrenginius</translation>
 <translation id="2099172618127234427">Įgalinsite „Chrome“ OS derinimo funkcijas ir bus nustatyta „sshd daemon“, kad būtų galima paleisti programas iš atmintuko.</translation>
-<translation id="2099625543891475722">jūsų fizines savybes, pavyzdžiui, ūgį;</translation>
 <translation id="2099686503067610784">Ištrinti „<ph name="CERTIFICATE_NAME" />“ serverio sertifikatą?</translation>
 <translation id="2100273922101894616">Automatinis prisijungimas</translation>
 <translation id="2101225219012730419">Versija:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">Šio įrenginio negalima užregistruoti domene, kuriam priklauso paskyra, nes pažymėta, kad įrenginys tvarkomas kito domeno.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> nori nuskaityti netoliese esančius „Bluetooth“ įrenginius. Rasti šie įrenginiai:</translation>
-<translation id="4353114845960720315">VR režimu ši svetainė gali sužinoti apie jus tam tikros informacijos:</translation>
 <translation id="4354073718307267720">Klausti, kai svetainė nori kurti jūsų aplinkos 3D žemėlapį ir stebėti kameros padėtį</translation>
 <translation id="4354344420232759511">Lankytos svetainės bus rodomos čia</translation>
 <translation id="435527878592612277">Pasirinkite nuotrauką</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">Pagrindinė paskyra</translation>
 <translation id="4660476621274971848">Versija turėjo būti <ph name="EXPECTED_VERSION" />, o buvo pateikta <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">Dydžio keitimas</translation>
-<translation id="4660838440047236328">patalpos išdėstymą.</translation>
 <translation id="4661407454952063730">Programos duomenys gali būti bet kokie programos išsaugoti duomenys (atsižvelgiant į kūrėjo nustatymus), įskaitant kontaktus, pranešimus ir nuotraukas.</translation>
 <translation id="4662373422909645029">Skaičiai slapyvardyje negalimi</translation>
 <translation id="4662788913887017617">Bendrinkite šią žymę su „iPhone“</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">Leisti mobiliųjų duomenų tarptinklinį ryšį</translation>
 <translation id="4804818685124855865">Atsijungti</translation>
 <translation id="4804827417948292437">Avokadas</translation>
-<translation id="4805077164141082536">Rekomenduojame prieš naujovinant sukurti atsarginę „Linux“ sudėtinio rodinio kopiją.</translation>
 <translation id="4807098396393229769">Kortelėje nurodytas vardas ir pavardė</translation>
-<translation id="4808319664292298116">Pradėti VR iš <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Iššokantieji langai užblokuoti:</translation>
 <translation id="480990236307250886">Atidaryti pagrindinį puslapį</translation>
 <translation id="4811212958317149293">Prieigos jungikliu klaviatūros automatinis nuskaitymas</translation>
@@ -3713,7 +3707,6 @@
 <translation id="5739235828260127894">Laukiama patvirtinimo. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Labai didelis</translation>
 <translation id="574209121243317957">Tonas</translation>
-<translation id="5745136023067925867">Gaukite „<ph name="DEVICE_TYPE" />“ patarimų, pasiūlymų ir naujinių bei pateikite atsiliepimų</translation>
 <translation id="5746169159649715125">Išsaugoti kaip PDF</translation>
 <translation id="5747552184818312860">Galioja iki</translation>
 <translation id="5747785204778348146">Kūrėjas – nestabilus</translation>
@@ -4836,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Išeiti iš puslapio}one{Išeiti iš puslapių}few{Išeiti iš puslapių}many{Išeiti iš puslapių}other{Išeiti iš puslapių}}</translation>
 <translation id="7207457272187520234">Siųskite naudojimo ir diagnostikos duomenis. Šiuo metu šis įrenginys automatiškai siunčia „Google“ diagnostikos, įrenginio ir programų naudojimo duomenis. Tai padės pagerinti sistemos bei programos stabilumą ir teikti kitus patobulinimus. Kai kurie sukaupti duomenys taip pat bus naudingi „Google“ programoms ir partneriams, pvz., „Android“ kūrėjams. Šį nustatymą taiko savininkas. Jei papildomas Žiniatinklio ir programų veiklos nustatymas įjungtas, šie duomenys gali būti išsaugoti „Google“ paskyroje.</translation>
 <translation id="7207631048330366454">Ieškoti programų</translation>
-<translation id="7210171324714276060">Pritaikius plėtinį „<ph name="EXTENSION_NAME" />“, paieškos svetainė buvo pakeista į <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Plėtinio spausdintuvai</translation>
 <translation id="7212097698621322584">Įveskite dabartinį PIN kodą, jei norite jį pakeisti. Jei dabartinio PIN kodo nežinote, turėsite nustatyti saugos raktą iš naujo ir sukurti naują PIN kodą.</translation>
 <translation id="7216409898977639127">Mobiliojo ryšio teikėjas</translation>
@@ -5236,7 +5228,6 @@
 <translation id="7737115349420013392">Susiejama su „<ph name="DEVICE_NAME" />“…</translation>
 <translation id="7737238973539693982">„Linux“ (beta vers.) ištrynimas</translation>
 <translation id="7740996059027112821">Standartinis</translation>
-<translation id="7743128043742060936">Šį puslapį pakeitė plėtinys „<ph name="EXTENSION_NAME" />“</translation>
 <translation id="7744047395460924128">Žr. spausdinimo istoriją</translation>
 <translation id="7744192722284567281">Rasta duomenų saugos pažeidime</translation>
 <translation id="7750228210027921155">Vaizdas vaizde</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index b2c5e945..cd15b9e1 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Sertifikāta parakstītājs</translation>
 <translation id="1145292499998999162">Spraudnis ir bloķēts</translation>
 <translation id="1145593918056169051">Printeris pārtrauca darboties</translation>
-<translation id="1146678959555564648">Ieiet virtuālajā realitātē</translation>
 <translation id="114721135501989771">Google viedās tehnoloģijas pārlūkā Chrome</translation>
 <translation id="1147991416141538220">Lai pieprasītu piekļuvi, sazinieties ar šīs ierīces administratoru.</translation>
 <translation id="1149401351239820326">Derīguma termiņa mēnesis</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Notīrīt trešo pušu sīkfailus</translation>
 <translation id="2097372108957554726">Lai reģistrētu jaunas ierīces, jums ir jāpierakstās pārlūkā Chrome.</translation>
 <translation id="2099172618127234427">Jūs iespējojat operētājsistēmas Chrome OS atkļūdošanas funkcijas, kas iestatīs sshd dēmonu un iespējos palaišanu no USB diskiem.</translation>
-<translation id="2099625543891475722">jūsu fiziskās īpašības, piemēram, garums;</translation>
 <translation id="2099686503067610784">Vai dzēst servera sertifikātu “<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Automātiski pierakstīties</translation>
 <translation id="2101225219012730419">versija:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Ar Google asistentu saistīta informācija</translation>
 <translation id="3733127536501031542">SSL serveris ar palielināšanu</translation>
 <translation id="3735740477244556633">Kārtot pēc</translation>
+<translation id="3738213647660363521">Pielāgota kursora krāsa</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vai atvērt lietojumprogrammu <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Ekrānuzņēmums ir uzņemts</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Šo ierīci nevar reģistrēt domēnā, kuram pieder jūsu konts, jo tā ir iestatīta pārvaldībai citā domēnā.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> vēlas meklēt tuvumā esošas Bluetooth ierīces. Ir atrastas šīs ierīces:</translation>
-<translation id="4353114845960720315">Kamēr izmantosiet VR režīmu, šī vietne varēs iegūt šādu informāciju:</translation>
 <translation id="4354073718307267720">Vaicāt, ja vietne vēlas izveidot jūsu apkārtnes 3D karti vai izsekot kameras pozīciju</translation>
 <translation id="4354344420232759511">Šeit tiks rādītas jūsu apmeklētās vietnes.</translation>
 <translation id="435527878592612277">Atlasiet savu fotoattēlu</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Primārais konts</translation>
 <translation id="4660476621274971848">Paredzētā versija bija <ph name="EXPECTED_VERSION" />, bet faktiskā versija bija <ph name="NEW_ID" />.</translation>
 <translation id="4660540330091848931">Notiek lieluma mainīšana</translation>
-<translation id="4660838440047236328">jūsu telpas izkārtojums.</translation>
 <translation id="4661407454952063730">Lietotņu dati var būt jebkādi lietotņu saglabātie dati (atkarībā no izstrādātāja iestatījumiem), tostarp kontaktpersonas, ziņojumi un fotoattēli.</translation>
 <translation id="4662373422909645029">Segvārdā nedrīkst būt cipari</translation>
 <translation id="4662788913887017617">Kopīgojiet šo grāmatzīmi ar savu iPhone tālruni</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Ļaut mobilo datu viesabonēšanu</translation>
 <translation id="4804818685124855865">Atvienot</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Pirms jaunināšanas ieteicams dublēt pašreizējo Linux konteineru.</translation>
 <translation id="4807098396393229769">Vārds uz kartes</translation>
-<translation id="4808319664292298116">Vai atvērt VR režīmu vietnē <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Uznirstošie logi ir bloķēti</translation>
 <translation id="480990236307250886">Atvērt sākumlapu</translation>
 <translation id="4811212958317149293">Automātiska meklēšana tastatūrā, izmantojot slēdžu piekļuvi</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Neizdevās izveidot pakotni.</translation>
 <translation id="5225324770654022472">Rādīt lietotņu saīsnes</translation>
 <translation id="5227679487546032910">Noklusējuma iemiesojums zilganzaļā krāsā</translation>
+<translation id="5228088094491423618">Subtitri reāllaikā</translation>
 <translation id="5228579091201413441">Iespējot sinhronizāciju</translation>
 <translation id="5229189185761556138">Pārvaldīt ievades metodes</translation>
 <translation id="5230516054153933099">Logs</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Tiek gaidīta verifikācija. <ph name="LINK_BEGIN" />Uzziniet vairāk<ph name="LINK_END" />.</translation>
 <translation id="5739458112391494395">Ļoti liels</translation>
 <translation id="574209121243317957">Tonis</translation>
-<translation id="5745136023067925867">Saņemiet ierīces (<ph name="DEVICE_TYPE" />) padomus, piedāvājumus un jaunumus, kā arī sniedziet atsauksmes.</translation>
 <translation id="5746169159649715125">Saglabāt kā PDF failu</translation>
 <translation id="5747552184818312860">Termiņš</translation>
 <translation id="5747785204778348146">Izstrādātāju — nav stabila</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Iziet no lapas}zero{Iziet no lapām}one{Iziet no lapām}other{Iziet no lapām}}</translation>
 <translation id="7207457272187520234">Lietojuma un diagnostikas datu sūtīšana. Pašlaik dati par šo ierīci un ierīces diagnostikas un lietotņu lietojuma dati tiek automātiski sūtīti uzņēmumam Google. Šī informācija palīdzēs uzlabot sistēmas un lietotņu stabilitāti un daudz ko citu. Noteiktus apkopotus datus izmantos arī Google lietotņu izstrādātāji un partneri, piemēram, Android izstrādātāji. Šo iestatījumu ir noteicis īpašnieks. Ja ir ieslēgts iestatījums “papildu darbības tīmeklī un lietotnēs”, šie dati var tikt saglabāti jūsu Google kontā.</translation>
 <translation id="7207631048330366454">Meklēt lietotnes</translation>
-<translation id="7210171324714276060">Paplašinājums <ph name="EXTENSION_NAME" /> nomainīja meklētājprogrammu uz<ph name="SEARCH_PROVIDER_DOMAIN" />.</translation>
 <translation id="7210499381659830293">Paplašinājuma printeri</translation>
 <translation id="7212097698621322584">Ievadiet pašreizējo PIN, lai to mainītu. Ja nezināt savu PIN, būs jāatiestata drošības atslēga un pēc tam jāizveido jauns PIN.</translation>
 <translation id="7216409898977639127">Mobilo sakaru operators</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Notiek savienošana pārī ar ierīci <ph name="DEVICE_NAME" />...</translation>
 <translation id="7737238973539693982">Linux (Beta) dzēšana</translation>
 <translation id="7740996059027112821">Standarta</translation>
-<translation id="7743128043742060936">Paplašinājums <ph name="EXTENSION_NAME" /> veica izmaiņas šajā lapā.</translation>
 <translation id="7744047395460924128">Skatiet savu drukāšanas vēsturi</translation>
 <translation id="7744192722284567281">Atklāta datu pārkāpuma dēļ</translation>
 <translation id="7750228210027921155">Attēls attēlā</translation>
@@ -5603,7 +5596,7 @@
 <translation id="8180239481735238521">Lapa</translation>
 <translation id="8180786512391440389">Ar paplašinājumu “<ph name="EXTENSION" />” var lasīt un dzēst attēlus, videoklipus un skaņu failus atzīmētajās vietās.</translation>
 <translation id="8181215761849004992">Nevar pievienoties domēnam. Pārbaudiet savā kontā, vai jums ir pietiekamas tiesības, lai pievienotu ierīces.</translation>
-<translation id="8182105986296479640">Lietojumprogramma neatbild.</translation>
+<translation id="8182105986296479640">Lietojumprogramma nereaģē.</translation>
 <translation id="8182664696082410784"><ph name="REASON" />
     Es uzskatu, ka šai vietnei nav jābūt bloķētai.</translation>
 <translation id="8184288427634747179">Pārslēgties uz profilu <ph name="AVATAR_NAME" /></translation>
@@ -6350,6 +6343,7 @@
 <translation id="9121814364785106365">Atvērt kā piespraustu cilni</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> darbība ir apturēta</translation>
 <translation id="9124003689441359348">Šeit tiks parādītas saglabātās paroles.</translation>
+<translation id="9126149354162942022">Kursora krāsa</translation>
 <translation id="9128317794749765148">Nevarēja pabeigt iestatīšanu</translation>
 <translation id="9128870381267983090">Izveidot savienojumu ar tīklu</translation>
 <translation id="9130015405878219958">Ievadīts nederīgs režīms.</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index f84b7059..147b56e 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Потписник на сертификат</translation>
 <translation id="1145292499998999162">Приклучокот е блокиран</translation>
 <translation id="1145593918056169051">Печатачот запре</translation>
-<translation id="1146678959555564648">Влези во VR</translation>
 <translation id="114721135501989771">Добијте ги паметните опции на Google во Chrome</translation>
 <translation id="1147991416141538220">За да побарате пристап, контактирајте со администраторот на уредов.</translation>
 <translation id="1149401351239820326">Месец на истекување</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Исчисти ги колачињата од трети страни</translation>
 <translation id="2097372108957554726">Треба да се најавите на Chrome за да регистрирате нови уреди</translation>
 <translation id="2099172618127234427">Овозможувате функции за отстранување грешки на Chrome OS коишто ќе постават sshd-демон и ќе овозможат подигање од USB-дискови.</translation>
-<translation id="2099625543891475722">вашите физички карактеристики, како висината</translation>
 <translation id="2099686503067610784">Да се избрише сертификатот на серверот „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Автоматско најавување</translation>
 <translation id="2101225219012730419">Верзија:</translation>
@@ -1920,7 +1918,7 @@
 <translation id="3432227430032737297">Отстрани ги сите прикажани</translation>
 <translation id="3432757130254800023">Испратете аудио и видео на екрани на локалната мрежа</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
-<translation id="3433621910545056227">Леле! Системот не успеа да воспостави заклучување на уредот за атрибути за време на инсталацијата.</translation>
+<translation id="3433621910545056227">Уф! Системот не успеа да воспостави заклучување на уредот за атрибути за време на инсталацијата.</translation>
 <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="3434272557872943250">Ако сте ја вклучиле дополнителната поставка „Активност на интернет и апликации“ за вашето дете, овие податоци може да се зачувуваат во сметката на Google на детето. Дознајте повеќе за поставкиве и за тоа како да ги приспособите на families.google.com.</translation>
 <translation id="3435688026795609344">„<ph name="EXTENSION_NAME" />“ го бара вашиот <ph name="CODE_TYPE" /></translation>
@@ -2657,7 +2655,6 @@
 <translation id="4350019051035968019">Овој уред не може да се запише на доменот на кој припаѓа вашата сметка бидејќи е означен за управување од различен домен.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> сака да скенира за уреди со Bluetooth во близина. Најдени се следниве уреди:</translation>
-<translation id="4353114845960720315">Додека сте во VR, сајтов ќе може да дознае за:</translation>
 <translation id="4354073718307267720">Прашувај кога некој сајт сака да создаде 3D-карта на опкружувањето или да ја следи позицијата на камерата</translation>
 <translation id="4354344420232759511">Сајтовите што ќе ги посетите ќе се појават тука</translation>
 <translation id="435527878592612277">Изберете ја вашата фотографија</translation>
@@ -2892,7 +2889,6 @@
 <translation id="4659077111144409915">Примарна сметка</translation>
 <translation id="4660476621274971848">Очекувана верзија „<ph name="EXPECTED_VERSION" />“, но верзијата беше „<ph name="NEW_ID" />“</translation>
 <translation id="4660540330091848931">Се менува големината</translation>
-<translation id="4660838440047236328">распоредот на вашата соба</translation>
 <translation id="4661407454952063730">Податоци од апликација се сите податоци што ги зачувала некоја апликација (според поставките на програмерот), вклучувајќи податоци како што се контакти, пораки и фотографии.</translation>
 <translation id="4662373422909645029">Прекарот не може да содржи броеви</translation>
 <translation id="4662788913887017617">Споделете го обележувачов со вашиот iPhone</translation>
@@ -2981,9 +2977,7 @@
 <translation id="4801512016965057443">Дозволи роаминг на мобилни податоци</translation>
 <translation id="4804818685124855865">Исклучи</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Ви препорачуваме да направите бекап на вашиот тековен контејнер на Linux пред да го надградите.</translation>
 <translation id="4807098396393229769">Име на картичка</translation>
-<translation id="4808319664292298116">Да се влезе во VR од <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Блокирани скокачки прозорци:</translation>
 <translation id="480990236307250886">Отвори ја почетната страница</translation>
 <translation id="4811212958317149293">Автоматско скенирање на тастатурата за „Пристап со прекинувачи“</translation>
@@ -3710,7 +3704,6 @@
 <translation id="5739235828260127894">Се чека потврда. <ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Многу голем</translation>
 <translation id="574209121243317957">Висина</translation>
-<translation id="5745136023067925867">Добивајте совети, понуди и ажурирања за <ph name="DEVICE_TYPE" /> и споделувајте повратни информации</translation>
 <translation id="5746169159649715125">Зачувај како ПДФ</translation>
 <translation id="5747552184818312860">Истекува на</translation>
 <translation id="5747785204778348146">Програмер - нестабилен</translation>
@@ -4833,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Излези од страницата}one{Излези од страниците}other{Излези од страниците}}</translation>
 <translation id="7207457272187520234">Испраќајте податоци за користење и дијагностика. Уредов во моментов автоматски испраќа дијагностички и податоци за користењето на уредот и апликациите до Google. Податоциве ќе ни помогнат околу стабилноста на системот и апликациите и за други подобрувања. Некои збирни податоци ќе им помогнат на апликациите и партнерите на Google, како што се програмерите на Android. Поставкава е наметната од сопственикот. Ако сте ја вклучиле дополнителната поставка „Активност на интернет и апликации“, податоциве може да се зачувуваат во вашата сметка на Google.</translation>
 <translation id="7207631048330366454">Пребарувајте апликации</translation>
-<translation id="7210171324714276060">Екстензијата <ph name="EXTENSION_NAME" /> го промени пребарувачот и ќе го користи <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Печатачи за екстензии</translation>
 <translation id="7212097698621322584">Внесете го тековниот PIN за да го промените. Ако не го знаете PIN-кодот, ќе треба да го ресетирате безбедносниот клуч, а потоа да создадете нов PIN.</translation>
 <translation id="7216409898977639127">Мобилен оператор</translation>
@@ -5233,7 +5225,6 @@
 <translation id="7737115349420013392">Се спарува со „<ph name="DEVICE_NAME" />“…</translation>
 <translation id="7737238973539693982">Избриши Linux (Бета)</translation>
 <translation id="7740996059027112821">Стандарден</translation>
-<translation id="7743128043742060936">Екстензијата „<ph name="EXTENSION_NAME" />“ ја промени страницава</translation>
 <translation id="7744047395460924128">Видете ја историјата на печатење</translation>
 <translation id="7744192722284567281">Откриена при упад во податоци</translation>
 <translation id="7750228210027921155">Слика во слика</translation>
@@ -5584,7 +5575,7 @@
 <translation id="8151638057146502721">Конфигурирај</translation>
 <translation id="8152091997436726702">Истече регистрирањето на печатачот. За да регистрирате печатач, мора да ја потврдите регистрацијата на печатачот.</translation>
 <translation id="8154790740888707867">Нема датотека</translation>
-<translation id="815491593104042026">Леле! Автентикацијата не успеа затоа што била конфигурирана да користи небезбеден URL (<ph name="BLOCKED_URL" />). Контактирајте со администраторот.</translation>
+<translation id="815491593104042026">Уф! Автентикацијата не успеа затоа што била конфигурирана да користи небезбеден URL (<ph name="BLOCKED_URL" />). Контактирајте со администраторот.</translation>
 <translation id="8155676038687609779">{COUNT,plural, =0{Не се најдени компромитирани лозинки}=1{{COUNT} компромитирана лозинка}one{{COUNT} компромитирана лозинка}other{{COUNT} компромитирани лозинки}}</translation>
 <translation id="8157704005178149728">Се поставува надзор</translation>
 <translation id="8158117992543756526">Уредов престана да добива автоматски софтверски и безбедносни ажурирања во <ph name="MONTH_AND_YEAR" />. <ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 0ea33e9..4bd4e84 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">സര്‍‌ട്ടിഫിക്കറ്റ് സൈന്‍‌ ചെയ്‌തയാള്‍‌</translation>
 <translation id="1145292499998999162">പ്ലഗ് ഇൻ തടഞ്ഞു</translation>
 <translation id="1145593918056169051">പ്രിന്റർ പ്രവർത്തനം നിർത്തി</translation>
-<translation id="1146678959555564648">VR-ൽ പ്രവേശിക്കുക</translation>
 <translation id="114721135501989771">Chrome-ൽ Google സ്‌മാർട്‌സ് നേടുക</translation>
 <translation id="1147991416141538220">ആക്സസ് ആവശ്യപ്പെടാൻ, ഈ ഉപകരണത്തിന്റെ അഡ്‌മിനെ ബന്ധപ്പെടുക.</translation>
 <translation id="1149401351239820326">കാലാവധി കഴിയുന്ന മാസം</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">മൂന്നാം കക്ഷി കുക്കികൾ മായ്‌ക്കുക</translation>
 <translation id="2097372108957554726">പുതിയ ഉപകരണങ്ങൾ രജിസ്റ്റർ ചെയ്യാൻ നിങ്ങൾ Chrome-ൽ സൈൻ ഇൻ ചെയ്യണം</translation>
 <translation id="2099172618127234427">sshd daemon സജ്ജീകരിക്കുന്നതും USB ഡ്രൈവുകളിൽ നിന്ന് ബൂട്ട് ചെയ്യൽ പ്രവർത്തനക്ഷമമാക്കുന്നതുമായ Chrome OS ഡീബഗ് ചെയ്യൽ ഫീച്ചറുകൾ നിങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുന്നു.</translation>
-<translation id="2099625543891475722">ഉയരം പോലുള്ള, നിങ്ങളുടെ ശാരീരിക സവിശേഷതകൾ</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" എന്ന സെർവർ സർട്ടിഫിക്കറ്റ് ഇല്ലാതാക്കണോ?</translation>
 <translation id="2100273922101894616">സ്വയമേവയുള്ള സൈൻ ഇൻ</translation>
 <translation id="2101225219012730419">പതിപ്പ്:</translation>
@@ -2653,7 +2651,6 @@
 <translation id="4350019051035968019">മറ്റൊരു ഡൊമെയ്‌ൻ, ഉപകരണത്തെ നിയന്ത്രിക്കുന്നതിനായി അടയാളപ്പെടുത്തിയിരിക്കുന്നതിനാൽ, ഈ ഉപകരണത്തിന് നിങ്ങളുടെ അക്കൗണ്ട് ഉൾപ്പെട്ടിരിക്കുന്ന ഡൊമെയ്‌നിലേക്ക് എൻറോൾ ചെയ്യാനാവില്ല.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> എന്നതിന് സമീപമുള്ള Bluetooth ഉപകരണങ്ങൾ സ്‌കാൻ ചെയ്യണമെന്നുണ്ട്. ഇനിപ്പറയുന്ന ഉപകരണങ്ങൾ കണ്ടെത്തി:</translation>
-<translation id="4353114845960720315">നിങ്ങൾ VR-ൽ ആയിരിക്കുമ്പോൾ, ഈ സൈറ്റിന് ഇനിപ്പറയുന്ന കാര്യങ്ങളെ കുറിച്ച് മനസ്സിലാക്കാൻ കഴിഞ്ഞേക്കും:</translation>
 <translation id="4354073718307267720">ഒരു സൈറ്റ് നിങ്ങളുടെ ചുറ്റുപാടുകളുടെ 3D മാപ്പ് സൃഷ്ടിക്കാനോ ക്യാമറയുടെ സ്ഥാനം ട്രാക്ക് ചെയ്യാനോ താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക</translation>
 <translation id="4354344420232759511">നിങ്ങൾ സന്ദർശിക്കുന്ന സൈറ്റുകൾ ഇവിടെ ദൃശ്യമാകും</translation>
 <translation id="435527878592612277">നിങ്ങളുടെ ഫോട്ടോ തിരഞ്ഞെടുക്കുക</translation>
@@ -2888,7 +2885,6 @@
 <translation id="4659077111144409915">പ്രാഥമിക അക്കൗണ്ട്</translation>
 <translation id="4660476621274971848">പ്രതീക്ഷിച്ച പതിപ്പ് "<ph name="EXPECTED_VERSION" />" ആണ്, എന്നാൽ ലഭിച്ച പതിപ്പ് "<ph name="NEW_ID" />" ആയിരുന്നു</translation>
 <translation id="4660540330091848931">വലുപ്പം മാറ്റുന്നു</translation>
-<translation id="4660838440047236328">നിങ്ങളുടെ റൂമിന്റെ ലേഔട്ട്</translation>
 <translation id="4661407454952063730">ആപ്പ് ഡാറ്റ എന്നത് കോൺടാക്റ്റുകൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ എന്നിവ ഉൾപ്പെടെ ആപ്പ് സംരക്ഷിച്ചിട്ടുള്ള ഏതൊരു ഡാറ്റയും (ഡെവലപ്പർ ക്രമീകരണം അടിസ്ഥാനമാക്കി) ആകാം.</translation>
 <translation id="4662373422909645029">വിളിപ്പേരിൽ അക്കങ്ങൾ പാടില്ല</translation>
 <translation id="4662788913887017617">നിങ്ങളുടെ iPhone ഉപയോഗിച്ച് ഈ ബുക്ക്‌മാർക്ക് പങ്കിടുക</translation>
@@ -2977,9 +2973,7 @@
 <translation id="4801512016965057443">മൊബൈല്‍ ഡാറ്റ റോമിംഗ് അനുവദിക്കുക</translation>
 <translation id="4804818685124855865">വിച്ഛേദിക്കുക</translation>
 <translation id="4804827417948292437">അവൊക്കാഡോ</translation>
-<translation id="4805077164141082536">അപ്‌ഗ്രേഡ് ചെയ്യുന്നതിന് മുമ്പ് നിങ്ങളുടെ നിലവിലെ Linux കണ്ടയ്‌നർ ബാക്കപ്പ് ചെയ്യാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു.</translation>
 <translation id="4807098396393229769">കാര്‍‌ഡിലെ നാമം</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> എന്നതിലൂടെ VR-ൽ പ്രവേശിക്കണോ?</translation>
 <translation id="4808667324955055115">പോപ്-അപ്പുകൾ ബ്ലോക്ക് ചെയ്തു</translation>
 <translation id="480990236307250886">ഹോംപേജ് തുറക്കുക</translation>
 <translation id="4811212958317149293">കീബോർഡ് ഓട്ടോ സ്‌കാൻ ആക്‌സസ് മാറുക</translation>
@@ -3707,7 +3701,6 @@
 <translation id="5739235828260127894">പരിശോധിച്ചുറപ്പിക്കാൻ കാത്തിരിക്കുന്നു. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">വളരെ വലുത്</translation>
 <translation id="574209121243317957">പിച്ച്</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> നുറുങ്ങുകളും ഓഫറുകളും അപ്‌ഡേറ്റുകളും നേടുകയും ഫീഡ്‌ബാക്ക് പങ്കിടുകയും ചെയ്യുക</translation>
 <translation id="5746169159649715125">PDF ആയി സംരക്ഷിക്കുക</translation>
 <translation id="5747552184818312860">കാലഹരണപ്പെടുന്നു</translation>
 <translation id="5747785204778348146">ഡെവലപ്പർ - അസ്ഥിരം</translation>
@@ -4833,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{പേജിൽ നിന്ന് പുറത്തുകടക്കുക}other{പേജുകളിൽ നിന്ന് പുറത്തുകടക്കുക}}</translation>
 <translation id="7207457272187520234">ഉപയോഗവും പ്രശ്‌നനിർണ്ണയവുമായി ബന്ധപ്പെട്ട ഡാറ്റ അയയ്ക്കുക. പ്രശ്‌നനിർണ്ണയം, ഉപകരണം, ആപ്പ് ഉപയോഗം എന്നിവയുമായി ബന്ധപ്പെട്ട ഡാറ്റ, ഈ ഉപകരണം നിലവിൽ സ്വയമേവ Google-ന് അയയ്ക്കുന്നുണ്ട്. സിസ്‌റ്റം, ആപ്പ് സ്ഥിരത, മറ്റ് മെച്ചപ്പെടുത്തലുകൾ എന്നിവയ്ക്ക് ഇത് സഹായിക്കും. ചില സംഗ്രഹ ഡാറ്റ, Google ആപ്പുകളെയും Android ഡെവലപ്പർമാരെപ്പോലുള്ള പങ്കാളികളെയും സഹായിക്കുകയും ചെയ്യും. ഈ ക്രമീകരണം നടപ്പിലാക്കിയിരിക്കുന്നത് ഉടമയാണ്. നിങ്ങളുടെ അധിക വെബ്, ആപ്പ് പ്രവർത്തനം ക്രമീകരണം ഓണാക്കിയിട്ടുണ്ടെങ്കിൽ, ഈ ഡാറ്റ നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിക്കപ്പെട്ടേക്കാം.</translation>
 <translation id="7207631048330366454">ആപ്പുകൾ തിരയുക</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> വിപുലീകരണം <ph name="SEARCH_PROVIDER_DOMAIN" /> ഉപയോഗിക്കാൻ തിരയൽ മാറ്റി</translation>
 <translation id="7210499381659830293">വിപുലീകരണ പ്രിന്ററുകള്‍</translation>
 <translation id="7212097698621322584">പിൻ മാറ്റാൻ നിലവിലെ പിൻ നൽകുക. നിങ്ങളുടെ പിൻ അറിയില്ലെങ്കിൽ, സുരക്ഷാ കീ പുനഃസജ്ജീകരിച്ച് പുതിയ പിൻ സൃഷ്‌ടിക്കേണ്ടി വരും.</translation>
 <translation id="7216409898977639127">സെല്ലുലാര്‍‌ സേവനദാതാവ്</translation>
@@ -5233,7 +5225,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"-മായി ജോടിയാക്കുന്നു ...</translation>
 <translation id="7737238973539693982">Linux (ബീറ്റ) ഇല്ലാതാക്കുക</translation>
 <translation id="7740996059027112821">സാധാരണം</translation>
-<translation id="7743128043742060936">ഈ പേജ് <ph name="EXTENSION_NAME" /> വിപുലീകരണം വഴി മാറ്റിയതാണ്</translation>
 <translation id="7744047395460924128">നിങ്ങളുടെ പ്രിന്റ് ചെയ്യൽ ചരിത്രം കാണുക</translation>
 <translation id="7744192722284567281">ഡാറ്റാ ലംഘനത്തിൽ കണ്ടെത്തി</translation>
 <translation id="7750228210027921155">ചിത്രത്തിനുള്ളിലെ ചിത്രം</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index a6380b2..f25204a0 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Сертификат баталгаажуулагч</translation>
 <translation id="1145292499998999162">Нэмэлт өргөтгөлийг хориглосон байна</translation>
 <translation id="1145593918056169051">Хэвлэгч зогсчихлоо</translation>
-<translation id="1146678959555564648">VR-г оруулна уу</translation>
 <translation id="114721135501989771">Chrome-д Google smarts авах</translation>
 <translation id="1147991416141538220">Хандалт хүсэхийн тулд энэ төхөөрөмжийн администратортай холбоо барина уу.</translation>
 <translation id="1149401351239820326">Хугацаа дуусах сар</translation>
@@ -862,7 +861,6 @@
 <translation id="2096715839409389970">Гуравдагч талын күүкиг устгах</translation>
 <translation id="2097372108957554726">Та шинэ төхөөрөмжүүдийг бүртгүүлэхийн тулд Chrome руу нэвтрэх хэрэгтэй</translation>
 <translation id="2099172618127234427">Та sshd daemon-г тохируулах мөн USB төхөөрөмжийг бүүт хийдэг тохиргоог идэвхжүүлэх Chrome OS-н алдаа засах тохиргоог идэвхжүүлж байна.</translation>
-<translation id="2099625543891475722">таны биеийн онцлог, жишээлбэл, өндөр</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" серверийн сертификатыг устгах уу?</translation>
 <translation id="2100273922101894616">Автоматаар нэвтэх</translation>
 <translation id="2101225219012730419">Хувилбар:</translation>
@@ -2180,6 +2178,7 @@
 <translation id="3732857534841813090">Google Туслахтай холбоотой мэдээлэл</translation>
 <translation id="3733127536501031542">Хурдасгагчтай SSL Сервер</translation>
 <translation id="3735740477244556633">Дараахаар эрэмбэлэх</translation>
+<translation id="3738213647660363521">Курсорын захиалгат өнгө</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" />-г нээх үү?</translation>
 <translation id="3742055079367172538">Дэлгэцний зургийг авсан болно (Screenshot)</translation>
@@ -2651,7 +2650,6 @@
 <translation id="4350019051035968019">Таны дансыг эзэмшигч домайнд энэ төхөөрөмжийг бүртгүүлэх боломжгүй байна. Учир нь энэхүү төхөөрөмж нь өөр домайнд зориулагдсан.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ойролцоох Bluetooth төхөөрөмжүүдийг скан хийх хүсэлтэй байна. Дараах төхөөрөмжүүд олдлоо:</translation>
-<translation id="4353114845960720315">Таныг Виртуал Орчинд байх үед энэ сайт нь дараахыг судалж болзошгүй:</translation>
 <translation id="4354073718307267720">Сайт таны эргэн тойрны 3D газрын зургийг үүсгэх эсвэл камерын хөдөлгөөнийг хянах хүсэлтэй үед асуух</translation>
 <translation id="4354344420232759511">Таны зочилдог сайтууд энд харагдана</translation>
 <translation id="435527878592612277">Зургаа сонгох</translation>
@@ -2886,7 +2884,6 @@
 <translation id="4659077111144409915">Үндсэн бүртгэл</translation>
 <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" хувилбарыг шаардсан хэдий ч "<ph name="NEW_ID" />" хувилбар байсан</translation>
 <translation id="4660540330091848931">Хэмжээг өөрчилж байна</translation>
-<translation id="4660838440047236328">таны өрөөний төлөвлөлт</translation>
 <translation id="4661407454952063730">Аппын өгөгдөл нь аппын хадгалсан (хөгжүүлэгчийн тохиргоонд үндэслэн) харилцагч, зурвас болон зураг зэрэг ямар ч өгөгдөл байж болно.</translation>
 <translation id="4662373422909645029">Хоч тоо агуулж болохгүй</translation>
 <translation id="4662788913887017617">Энэ хавчуургыг iPhone-д хуваалцах</translation>
@@ -2975,9 +2972,7 @@
 <translation id="4801512016965057443">Үүрэн холбооны дата роуминг зөвшөөрөх</translation>
 <translation id="4804818685124855865">Таслах</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Дэвшүүлэхийн өмнө одоогийн Linux контейнероо хуулбарлахыг бид танд зөвлөж байна.</translation>
 <translation id="4807098396393229769">Картан дээрх нэр</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />-с Виртуал Орчинд орох уу?</translation>
 <translation id="4808667324955055115">Попапыг хориглосон.</translation>
 <translation id="480990236307250886">Нүүр хуудсыг нээх</translation>
 <translation id="4811212958317149293">Сэлгүүрийн гарын автомат скан</translation>
@@ -3291,6 +3286,7 @@
 <translation id="52232769093306234">Багцалж чадсангүй.</translation>
 <translation id="5225324770654022472">Аппликэйшнүүдийн богино холболтыг үзүүлэх</translation>
 <translation id="5227679487546032910">Өгөгдмөл нугасны аватар</translation>
+<translation id="5228088094491423618">Шууд тайлбар</translation>
 <translation id="5228579091201413441">Синхроныг идэвхжүүлэх</translation>
 <translation id="5229189185761556138">Оролтын аргыг удирдах</translation>
 <translation id="5230516054153933099">Цонх</translation>
@@ -3705,7 +3701,6 @@
 <translation id="5739235828260127894">Баталгаажуулалтыг хүлээж байна. <ph name="LINK_BEGIN" />Нэмэлт мэдээлэл авах<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Маш том</translation>
 <translation id="574209121243317957">Авиа</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" />-н зөвлөгөө, санал болон шинэчлэлтийг авч, cанал хүсэлт хуваалцаарай</translation>
 <translation id="5746169159649715125">PDF хэлбэрээр хадгалах</translation>
 <translation id="5747552184818312860">Дуусах хугацаа</translation>
 <translation id="5747785204778348146">Хөгжүүлэгч - тогтворгүй</translation>
@@ -4827,7 +4822,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Хуудаснаас гарах}other{Хуудаснуудаас гарах}}</translation>
 <translation id="7207457272187520234">Ашиглалт болон оношилгооны өгөгдлийг илгээнэ үү. Энэ төхөөрөмж нь одоогоор оношилгоо, төхөөрөмж болон аппын ашиглалтын өгөгдлийг Google-д автоматаар илгээж байна. Энэ нь систем, аппын тогтвортой байдал болон бусад зүйлийг сайжруулахад тусална. Хуримтлуулсан зарим өгөгдөл нь Google-н аппууд болон Android хөгжүүлэгч зэрэг түншүүдэд мөн тусална. Энэ тохиргоог эзэмшигчийн зүгээс хэрэгжүүлнэ. Хэрэв таны Вэб, аппын нэмэлт үйл ажиллагааны тохиргоо асаалттай байвал энэ өгөгдлийг таны Google Бүртгэлд хадгалж болзошгүй.</translation>
 <translation id="7207631048330366454">Аппууд хайх</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> өргөтгөл хайлтыг <ph name="SEARCH_PROVIDER_DOMAIN" />-г ашиглах болгож өөрчилсөн</translation>
 <translation id="7210499381659830293">Өргөтгөлийн хэвлэгч</translation>
 <translation id="7212097698621322584">ПИН-г өөрчлөхийн тулд одоогийн ПИН-ээ оруулна уу. Хэрэв та ПИН-ээ мэдэхгүй бол аюулгүй байдлын түлхүүрээ шинэчлээд дараа нь шинэ ПИН үүсгэх шаардлагатай.</translation>
 <translation id="7216409898977639127">Үүрэн холбооны үйлчилгээ үзүүлэгч</translation>
@@ -5227,7 +5221,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"-тай хослуулж байна ...</translation>
 <translation id="7737238973539693982">Linux (Бэта)-г устгах</translation>
 <translation id="7740996059027112821">Стандарт</translation>
-<translation id="7743128043742060936">Энэ хуудсыг <ph name="EXTENSION_NAME" /> өргөтгөлөөр өөрчилсөн</translation>
 <translation id="7744047395460924128">Хэвлэлтийн түүхээ харах</translation>
 <translation id="7744192722284567281">Өгөгдлийн зөрчилд олдсон</translation>
 <translation id="7750228210027921155">Дэлгэцэн доторх дэлгэц</translation>
@@ -6339,6 +6332,7 @@
 <translation id="9121814364785106365">Тусгайлан сонгосон цонх хэлбэрээр нээх</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" />-г түр зогсоосон</translation>
 <translation id="9124003689441359348">Хадгалсан нууц үг энд харагдана</translation>
+<translation id="9126149354162942022">Курсорын өнгө</translation>
 <translation id="9128317794749765148">Тохируулгыг дуусгаж чадсангүй</translation>
 <translation id="9128870381267983090">Сүлжээнд холбогдох</translation>
 <translation id="9130015405878219958">Хүчин төгөлдөр бус горим оруулсан байна.</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index f279d95..00c7fc15 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">सर्टिफिकेट स्वाक्षरीकर्ता</translation>
 <translation id="1145292499998999162">प्लग-इन ब्लॉक केले</translation>
 <translation id="1145593918056169051">प्रिंटर थांबला आहे</translation>
-<translation id="1146678959555564648">VR एंटर करा</translation>
 <translation id="114721135501989771">Chrome मध्ये Google स्मार्ट मिळवा</translation>
 <translation id="1147991416141538220">अ‍ॅक्सेसची विनंती करण्यासाठी या डिव्हाइसच्या अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="1149401351239820326">कालबाह्य होण्याचा महिना:</translation>
@@ -865,7 +864,6 @@
 <translation id="2096715839409389970">तृतीय पक्ष कुकी साफ करा</translation>
 <translation id="2097372108957554726">नवीन डिव्हाइसेसची नोंदणी करण्यासाठी तुम्हाला Chrome वर साइन इन करणे आवश्यक आहे</translation>
 <translation id="2099172618127234427">तुम्ही Chrome OS डीबगिंग वैशिष्ट्ये सुरू करत आहात जी ssh केलेल्या daemon सेट आणि USB ड्राइव्हवरून बूट करणे सुरू करतील.</translation>
-<translation id="2099625543891475722">तुमची शारीरिक वैशिष्‍ट्ये जसे की, उंची</translation>
 <translation id="2099686503067610784">सर्व्हर सर्टिफिकेट "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
 <translation id="2100273922101894616">ऑटो साइन इन करा</translation>
 <translation id="2101225219012730419">आवृत्ती:</translation>
@@ -2124,7 +2122,7 @@
 <translation id="3677106374019847299">कस्टम पुरवठादार एंटर करा</translation>
 <translation id="3677657024345889897">सर्वात शांत</translation>
 <translation id="3677911431265050325">मोबाइल साइटची विनंती करा</translation>
-<translation id="3677959414150797585">अ‍ॅप्स, वेबपेज आणि बऱ्याच गोष्टींचा समावेश आहे. तुम्ही वापर डेटा शेअर करण्याचे निवडले असल्यासच सूचनांमध्ये सुधारणा करण्यासाठी आकडेवारी पाठवते.</translation>
+<translation id="3677959414150797585">अ‍ॅप्स, वेबपेज आणि बऱ्याच गोष्टींचा समावेश आहे. तुम्ही जर वापर डेटा शेअर करण्याचे निवडले असेल तरच सूचनांमध्ये सुधारणा करण्यासाठी आकडेवारी पाठवते.</translation>
 <translation id="3678156199662914018">एक्स्टेंशनः <ph name="EXTENSION_NAME" /></translation>
 <translation id="3680683624079082902">टेक्‍स्‍ट टू स्‍पीच व्हॉइस</translation>
 <translation id="3681311097828166361">तुमच्या फीडबॅकाबद्दल धन्यवाद. तुम्ही आता ऑफलाइन आहात आणि तुमचा अहवाल नंतर पाठविला जाईल.</translation>
@@ -2654,7 +2652,6 @@
 <translation id="4350019051035968019">एका भिन्न डोमेनद्वारे व्यवस्थापनासाठी डिव्हाइस चिन्हांकित केले असल्यामुळे तुमचे खाते ज्या मालकीचे आहे त्या डोमेवर या डिव्हाइसची नोंदणी केली जाऊ शकत नाही.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ला जवळपासची ब्लूटूथ डिव्हाइस स्कॅन करायची आहेत. खालील डिव्हाइस आढळली:</translation>
-<translation id="4353114845960720315">तुम्ही VR वापरत असताना ही साइट कदाचित पुढील गोष्टींबद्दल अधिक माहिती मिळवू शकेल:</translation>
 <translation id="4354073718307267720">साइटला तुमच्या आसपासच्या परिसराचा 3D नकाशा तयार करायचा किंवा कॅमेर्‍याचे स्थान ट्रॅक करायचे असेल तेव्हा विचारा</translation>
 <translation id="4354344420232759511">तुम्ही भेट दिलेल्या साइट येथे दिसतील</translation>
 <translation id="435527878592612277">तुमचा फोटो निवडा</translation>
@@ -2889,7 +2886,6 @@
 <translation id="4659077111144409915">प्राथमिक खाते</translation>
 <translation id="4660476621274971848">अपेक्षित आवृत्ती "<ph name="EXPECTED_VERSION" />", परंतु आवृत्ती "<ph name="NEW_ID" />" होती</translation>
 <translation id="4660540330091848931">आकार बदलत आहे</translation>
-<translation id="4660838440047236328">तुमच्या रूमचा लेआउट</translation>
 <translation id="4661407454952063730">अ‍ॅप डेटा म्हणजे अ‍ॅपने सेव्ह केलेला (डेव्हलपर सेटिंंग्जवर आधारित) कोणताही डेटा असू शकतो, ज्यामध्ये संपर्क, मेसेज आणि फोटो यांसारखा डेटा असतो.</translation>
 <translation id="4662373422909645029">टोपणनावामध्ये अंकांचा समावेश असू शकत नाही</translation>
 <translation id="4662788913887017617">हा बुकमार्क आपल्या iPhone सह शेअर करा</translation>
@@ -2978,9 +2974,7 @@
 <translation id="4801512016965057443">मोबाइल डेटा रोमिंगची अनुमती द्या</translation>
 <translation id="4804818685124855865">‍डिस्कनेक्ट</translation>
 <translation id="4804827417948292437">ॲव्होकॅडो</translation>
-<translation id="4805077164141082536">अपग्रेड करण्यापूर्वी आम्ही तुम्हाला तुमचा सध्याच्या Linux कंटेनरचा बॅकअप घेण्याची शिफारस करतो.</translation>
 <translation id="4807098396393229769">कार्डवरील नाव</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> मधून VR मध्ये एंटर करायचे आहे का?</translation>
 <translation id="4808667324955055115">पॉप-अप ब्लॉक केले</translation>
 <translation id="480990236307250886">होम पेज उघडा</translation>
 <translation id="4811212958317149293">स्विच अ‍ॅक्सेस कीबोर्ड ऑटो स्कॅन</translation>
@@ -3707,7 +3701,6 @@
 <translation id="5739235828260127894">पडताळणीसाठी वाट पाहत आहे. <ph name="LINK_BEGIN" />अधिक जाणून घ्या.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">खूप मोठा</translation>
 <translation id="574209121243317957">पिच</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> बाबत टिपा, ऑफर व अपडेट मिळवा आणि फीडबॅक शेअर करा</translation>
 <translation id="5746169159649715125">पीडीएफ म्हणून सेव्ह करा</translation>
 <translation id="5747552184818312860">कालबाह्य होईल</translation>
 <translation id="5747785204778348146">डेव्हलपर - अस्थिर</translation>
@@ -4831,7 +4824,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{पेजमधून बाहेर या}other{पेजमधून बाहेर या}}</translation>
 <translation id="7207457272187520234">वापर आणि निदान डेटा पाठवा. हे डिव्हाइस सध्या Google ला निदान, डिव्हाइस आणि अ‍ॅप वापर डेटा आपोआप पाठवत आहे. हे सिस्टम व अ‍ॅप स्थिरता आणि इतर सुधारणांमध्ये मदत करेल. काही एकत्रित केलेला डेटा Google अ‍ॅप्स आणि Android डेव्हलपर यांसारख्या भागीदारांनादेखील मदत करेल. हे सेटिंग मालकाद्वारे लागू केले जाते. तुमचे अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सेटिंग सुरू केलेले असल्यास, हा डेटा तुमच्या Google खाते वर सेव्ह केला जाऊ शकतो.</translation>
 <translation id="7207631048330366454">अ‍ॅप्स शोधा</translation>
-<translation id="7210171324714276060"><ph name="SEARCH_PROVIDER_DOMAIN" /> वापरण्यासाठी <ph name="EXTENSION_NAME" /> एक्स्टेंशन ने शोधामध्ये बदल केला आहे</translation>
 <translation id="7210499381659830293">एक्स्टेंशन प्रिंटर</translation>
 <translation id="7212097698621322584">बदलण्यासाठी तुमचा सध्याचा पिन एंटर करा. तुम्हाला तुमचा पिन माहित नसल्यास, तुम्हाला तुमची सिक्युरिटी की रीसेट करणे आवश्यक असेल, त्यानंतर तुम्ही नविन पिन तयार करू शकता.</translation>
 <translation id="7216409898977639127">सेल्युलर सेवा देणारा</translation>
@@ -5231,7 +5223,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" सोबत पेअर करत आहे...</translation>
 <translation id="7737238973539693982">Linux (बीटा) हटवा</translation>
 <translation id="7740996059027112821">मानक</translation>
-<translation id="7743128043742060936">हे पेज <ph name="EXTENSION_NAME" /> एक्स्टेंशनने बदलले</translation>
 <translation id="7744047395460924128">तुमचा प्रिंटिंग इतिहास पहा</translation>
 <translation id="7744192722284567281">डेटा भंग करत असल्याचे आढळले</translation>
 <translation id="7750228210027921155">चित्रात-चित्र</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 54ae038..6106e78 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Penandatangan Sijil</translation>
 <translation id="1145292499998999162">Pemalam disekat</translation>
 <translation id="1145593918056169051">Pencetak telah dihentikan</translation>
-<translation id="1146678959555564648">Masukkan VR</translation>
 <translation id="114721135501989771">Google pintar di Chrome</translation>
 <translation id="1147991416141538220">Untuk meminta akses, hubungi pentadbir peranti ini.</translation>
 <translation id="1149401351239820326">Bulan tamat tempoh</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Padamkan kuki pihak ketiga</translation>
 <translation id="2097372108957554726">Anda perlu log masuk ke Chrome untuk mendaftarkan peranti baharu</translation>
 <translation id="2099172618127234427">Anda mendayakan ciri penyahpepijatan OS Chrome yang akan menetapkan daemon sshd dan mendayakan pengebutan dari pemacu USB.</translation>
-<translation id="2099625543891475722">ciri fizikal anda, seperti ketinggian</translation>
 <translation id="2099686503067610784">Padamkan sijil pelayan "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Auto Log masuk</translation>
 <translation id="2101225219012730419">Versi:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Maklumat berkaitan Google Assistant</translation>
 <translation id="3733127536501031542">Pelayan SSL dengan Peningkatan</translation>
 <translation id="3735740477244556633">Isih mengikut</translation>
+<translation id="3738213647660363521">Warna kursor tersuai</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Buka <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Tangkapan skrin diambil</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Peranti ini tidak boleh didaftarkan pada domain bagi akaun anda kerana peranti telah ditandai untuk pengurusan oleh domain lain.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> mahu mengimbas untuk mengesan peranti Bluetooth berdekatan. Peranti berikut telah dijumpai:</translation>
-<translation id="4353114845960720315">Semasa anda dalam VR, tapak ini boleh mendapatkan maklumat tentang:</translation>
 <translation id="4354073718307267720">Tanya apabila tapak mahu membuat peta 3D bagi persekitaran anda atau menjejaki kedudukan kamera</translation>
 <translation id="4354344420232759511">Tapak yang anda lawati akan dipaparkan di sini</translation>
 <translation id="435527878592612277">Pilih foto anda</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Akaun utama</translation>
 <translation id="4660476621274971848">Versi yang dijangkakan "<ph name="EXPECTED_VERSION" />", tetapi versi sebenar ialah "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Mengubah saiz</translation>
-<translation id="4660838440047236328">reka letak bilik anda</translation>
 <translation id="4661407454952063730">Data apl boleh jadi sebarang data yang telah disimpan oleh apl (berdasarkan tetapan pembangun), termasuk data seperti kenalan, mesej dan foto.</translation>
 <translation id="4662373422909645029">Nama panggilan tidak boleh mengandungi nombor</translation>
 <translation id="4662788913887017617">Kongsi penanda halaman ini dengan iPhone anda</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Membenarkan perayauan data mudah alih</translation>
 <translation id="4804818685124855865">Putuskan sambungan</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Kami mengesyorkan anda menyandarkan bekas Linux semasa anda sebelum membuat peningkatan.</translation>
 <translation id="4807098396393229769">Nama pada kad</translation>
-<translation id="4808319664292298116">Masukkan VR daripada <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Tetingkap timbul disekat:</translation>
 <translation id="480990236307250886">Buka halaman utama</translation>
 <translation id="4811212958317149293">Autoimbas papan kekunci akses suis</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Gagal membungkus.</translation>
 <translation id="5225324770654022472">Paparkan pintasan apl</translation>
 <translation id="5227679487546032910">Avatar teal lalai</translation>
+<translation id="5228088094491423618">Sari Kata Langsung</translation>
 <translation id="5228579091201413441">Dayakan penyegerakan</translation>
 <translation id="5229189185761556138">Urus kaedah input</translation>
 <translation id="5230516054153933099">Tingkap</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Menunggu pengesahan. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Sangat besar</translation>
 <translation id="574209121243317957">Nada</translation>
-<translation id="5745136023067925867">Dapatkan petua, tawaran dan kemas kini <ph name="DEVICE_TYPE" />, serta kongsi maklum balas</translation>
 <translation id="5746169159649715125">Simpan sebagai PDF</translation>
 <translation id="5747552184818312860">Tamat tempoh</translation>
 <translation id="5747785204778348146">Pembangun - tidak stabil</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Keluar daripada halaman}other{Keluar daripada halaman}}</translation>
 <translation id="7207457272187520234">Hantar data penggunaan dan diagnostik. Pada masa ini, peranti ini menghantar data diagnostik dan penggunaan peranti serta apl kepada Google secara automatik. Data ini akan membantu peningkatan kestabilan sistem dan apl serta pelbagai lagi. Sesetengah data agregat juga akan membantu apl dan rakan kongsi Google, seperti pembangun Android. Tetapan ini dikuatkuasakan oleh pemilik. Jika tetapan Aktiviti Web &amp; Apl tambahan anda dihidupkan, data ini mungkin disimpan pada Akaun Google anda.</translation>
 <translation id="7207631048330366454">Cari apl</translation>
-<translation id="7210171324714276060">Sambungan <ph name="EXTENSION_NAME" /> telah menukar carian agar menggunakan <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Pencetak sambungan</translation>
 <translation id="7212097698621322584">Masukkan PIN semasa anda untuk menukar PIN. Jika anda tidak tahu PIN anda, anda perlu menetapkan semula kunci keselamatan, kemudian buat PIN baharu.</translation>
 <translation id="7216409898977639127">Penyedia selular</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Berpasangan dengan "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Padamkan Linux (Beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Halaman ini telah ditukar oleh sambungan <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Lihat sejarah pencetakan anda</translation>
 <translation id="7744192722284567281">Ditemukan dalam pelanggaran data</translation>
 <translation id="7750228210027921155">Gambar dalam gambar</translation>
@@ -6352,6 +6345,7 @@
 <translation id="9121814364785106365">Buka sebagai tab dipin</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> dijeda</translation>
 <translation id="9124003689441359348">Kata laluan yang disimpan akan kelihatan di sini</translation>
+<translation id="9126149354162942022">Warna kursor</translation>
 <translation id="9128317794749765148">Persediaan tidak dapat diselesaikan</translation>
 <translation id="9128870381267983090">Sambung ke rangkaian</translation>
 <translation id="9130015405878219958">Mod tidak sah dimasukkan.</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index a014982..b9aa165 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">အသိမှတ်ပြုလက်မှတ် ဆိုင်းထိုးသူ</translation>
 <translation id="1145292499998999162">ပလက်ဂင် ပိတ်ထား၏</translation>
 <translation id="1145593918056169051">ပုံနှိပ်စက် ရပ်သွားပါပြီ</translation>
-<translation id="1146678959555564648">VR သို့ ဝင်ပါ</translation>
 <translation id="114721135501989771">Chrome တွင် Google ကို ပို၍အဆင့်မြင့်လာအောင် ပြုလုပ်ခြင်း</translation>
 <translation id="1147991416141538220">ဝင်ကြည့်ခွင့်တောင်းရန် ဤစက်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။</translation>
 <translation id="1149401351239820326">သက်တမ်းကုန်ဆုံးမည့်လ</translation>
@@ -867,7 +866,6 @@
 <translation id="2096715839409389970">ပြင်ပကွတ်ကီးများ ရှင်းထုတ်ရန်</translation>
 <translation id="2097372108957554726">ကိရိယ အသစ်များကို မှတ်ပုံတင်ရန် Chrome သို့ လက်မှတ်ထိုး ဝင်ရန် မလို</translation>
 <translation id="2099172618127234427">သင်သည် Chrome OS ချို့ယွင်းချက်ရှာဖွေပြုပြင်ရေးအင်္ဂါရပ်များကို လုပ်ဆောင်နေသည်။ ၄င်းသည် sshd နောက်ခံတွင် လည်ပတ်နေသော ကွန်ပျူတာပရိုဂရမ်အား သတ်မှတ်ပြီး USB မောင်းနှင်ထည်များမှ စတင်ခြင်းကို လုပ်ဆောင်လိမ့်မည်။</translation>
-<translation id="2099625543891475722">အရပ်ကဲ့သို့ သင်၏ ပုံပန်းသဏ္ဌာန်</translation>
 <translation id="2099686503067610784">ဆာဗာ လက်မှတ် "<ph name="CERTIFICATE_NAME" />" ကို ဖျက်မလား?</translation>
 <translation id="2100273922101894616">အလိုအလျောက် ဝင်ရောက်ရန်</translation>
 <translation id="2101225219012730419">ဗားရှင်း:</translation>
@@ -2186,6 +2184,7 @@
 <translation id="3732857534841813090">Google Assistant နှင့် ဆက်စပ်သော အချက်အလက်များ</translation>
 <translation id="3733127536501031542">အဆင့်တက်ခြင်းဖြင့် SSL ဆာဗာ</translation>
 <translation id="3735740477244556633">အောက်ပါအတိုင်းစီရန်</translation>
+<translation id="3738213647660363521">စိတ်ကြိုက် ကာဆာအရောင်</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ကို ဖွင့်မလား။</translation>
 <translation id="3742055079367172538">မျက်နှာပြင်ပုံရိပ် ရယူပြီး</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">ဒီကိရိယာကို အခြား ဒိုမိန်းမှ စီမံကွပ်ကဲရန် မှတ်ထားသောကြောင့် ၎င်းကို သင့်အကောင့်ကို ပိုင်ဆိုင်သည့် ဒိုမိန့်းသို့ စာရင်းသွင် မရနိုင်ပါ။</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> သည် အနီးတစ်ဝိုက်ရှိ ဘလူးတုသ်စက်များကို ရှာဖွေလိုသည်။ အောက်ပါစက်များကို တွေ့ရှိထားသည်-</translation>
-<translation id="4353114845960720315">သင် VR တွင် ရှိနေစဉ် ဤဝဘ်ဆိုက်က အောက်ပါအကြောင်း လေ့လာနိုင်သည်−</translation>
 <translation id="4354073718307267720">ဝဘ်ဆိုက်က သင့်ပတ်ဝန်းကျင်၏ 3D မြေပုံဆွဲခြင်း သို့မဟုတ် ကင်မရာအနေအထား ခြေရာခံခြင်းတို့ ပြုလုပ်လိုသည့်အခါ မေးမြန်းရန်</translation>
 <translation id="4354344420232759511">သင်ဝင်ကြည့်သော ဝဘ်ဆိုက်များကို ဤနေရာတွင် မြင်ရပါမည်</translation>
 <translation id="435527878592612277">သင့်ဓာတ်ပုံ ရွေးရန်</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">ပင်မ အကောင့်</translation>
 <translation id="4660476621274971848">ဗားရှင်း "<ph name="EXPECTED_VERSION" />" ကို မျှော်မှန်းထားသော်လည်း ဗားရှင်းမှာ "<ph name="NEW_ID" />" ဖြစ်နေသည်</translation>
 <translation id="4660540330091848931">အရွယ်အစား ပြန်ပြင်နေသည်</translation>
-<translation id="4660838440047236328">သင့်အခန်း၏ အပြင်အဆင်</translation>
 <translation id="4661407454952063730">အက်ပ်ဒေတာဆိုသည်မှာ အဆက်အသွယ်၊ မက်ဆေ့ဂျ်နှင့် ဓာတ်ပုံများကဲ့သို့ ဒေတာများ အပါအဝင် (ဆော့ဖ်ဝဲအင်ဂျင်နီယာ၏ ဆက်တင်များအပေါ်မူတည်၍) အက်ပ်တစ်ခုက သိမ်းဆည်းလိုက်သော ဒေတာများဖြစ်ပါသည်။</translation>
 <translation id="4662373422909645029">ကိန်းဂဏန်းများ မပါဝင်ရပါ</translation>
 <translation id="4662788913887017617">ဤဝဘ်လိပ်စာကို သင်၏ iPhone နှင့် မျှဝေပါ</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">မိုဘိုင်း ဒေတာ ရိုမင်းကို ခွင့်ပြုရန်</translation>
 <translation id="4804818685124855865">အဆက်ဖြတ်ရန်</translation>
 <translation id="4804827417948292437">ထောပတ်သီး</translation>
-<translation id="4805077164141082536">အဆင့်မြှင့်တင်ခြင်း မပြုလုပ်မီ သင့် Linux ကွန်တိန်နာကို အရန်သိမ်းဆည်းထားရန် အကြံပြုပါသည်။</translation>
 <translation id="4807098396393229769">ကတ် အပေါ်က အမည်</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> မှ VR သို့ ဝင်မလား။</translation>
 <translation id="4808667324955055115">ပေါ့ပ်အပ်များကို ပိတ်ထားသည်</translation>
 <translation id="480990236307250886">ပင်မ စာမျက်နှာဖွင့်</translation>
 <translation id="4811212958317149293">ခလုတ်သုံးခြင်း လက်ကွက် အော်တိုရှာဖွေမှု</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">ထုပ်ပိုးခြင်း မအောင်မြင်ပါ။</translation>
 <translation id="5225324770654022472">အက်ပ်များ၏ ဖြတ်လမ်းကို ပြပေးရန်</translation>
 <translation id="5227679487546032910">မူရင်းရေစစ္စလီငှက်ချန်နယ်ပုံ</translation>
+<translation id="5228088094491423618">တိုက်ရိုက်စာတန်း</translation>
 <translation id="5228579091201413441">စင့်က် ဖွင့်ထားရန်</translation>
 <translation id="5229189185761556138">စာရိုက်စနစ်များကို စီမံခန့်ခွဲရန်</translation>
 <translation id="5230516054153933099">ဝင်းဒိုး</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">စစ်ဆေးအတည်ပြုချက် စောင့်နေသည်။ <ph name="LINK_BEGIN" />ပိုမို လေ့လာရန်<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">အလွန်ကြီး</translation>
 <translation id="574209121243317957">အသံအနိမ့်အမြင့်</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> အကြံပြုချက်၊ ကမ်းလှမ်းချက်နှင့် အပ်ဒိတ်များ ရယူပြီး ထင်မြင်ချက်ကို မျှဝေပါ</translation>
 <translation id="5746169159649715125">PDF အဖြစ်သိမ်း</translation>
 <translation id="5747552184818312860">သက်တမ်းကုန်ဆုံးချိန်</translation>
 <translation id="5747785204778348146">ပြုစုသူ - မတည်ငြိမ်</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{စာမျက်နှာကို ပိတ်ရန်}other{စာမျက်နှာများကို ပိတ်ရန်}}</translation>
 <translation id="7207457272187520234">အသုံးပြုမှုနှင့် အမှားရှာဖွေမှုဒေတာ ပို့ပါ။ ဤစက်ပစ္စည်းက အမှားရှာဖွေမှု၊ စက်ပစ္စည်းနှင့် အက်ပ်အသုံးပြုမှု ဒေတာတို့ကို လောလောဆယ်တွင် Google သို့ အလိုအလျောက် ပို့ပေးပါသည်။ ၎င်းက စနစ်နှင့် အက်ပ်တည်ငြိမ်မှု၊ အခြား တိုးတက်ပြင်ဆင်မှုများအတွက် ပံ့ပိုးပေးပါမည်။ စုစည်းထားသော ဒေတာအချို့က Google အက်ပ်နှင့် Android ဆော့ဖ်ဝဲအင်ဂျင်နီယာများကဲ့သို့ ပါတနာများကို ကူညီပေးပါမည်။ ဤဆက်တင်ကို ပိုင်ရှင်ဖြစ်သူက သတ်မှတ်ထားခြင်းဖြစ်သည်။ သင်၏ထပ်တိုး 'ဝဘ်နှင့် အက်ပ်လုပ်ဆောင်ချက်' ကို ဖွင့်ထားသည့်အခါ ဤဒေတာကို သင့် Google အကောင့်သို့ သိမ်းသွားပါမည်။</translation>
 <translation id="7207631048330366454">အက်ပ်များ ရှာပါ</translation>
-<translation id="7210171324714276060"><ph name="SEARCH_PROVIDER_DOMAIN" /> အသုံးပြုရန် <ph name="EXTENSION_NAME" /> နောက်ဆက်တွဲက ရှာဖွေမှုစနစ်ကို ပြောင်းလိုက်သည်</translation>
 <translation id="7210499381659830293">နောက်ဆက်တွဲ ပရင်တာများ</translation>
 <translation id="7212097698621322584">သင်၏ လက်ရှိပင်နံပါတ် ပြောင်းရန် ၎င်းကိုထည့်ပါ။ သင်၏ ပင်နံပါတ်ကို မသိလျှင် သင့်လုံခြုံရေးကီးကို ပြင်ဆင်သတ်မှတ်ပြီး ပင်နံပါတ်အသစ် ပြုလုပ်ပါ။</translation>
 <translation id="7216409898977639127">ဆယ်လူလာဝန်ဆောင်မှုပေးသူ</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" နှင့် တွဲချိတ်နေသည် ...</translation>
 <translation id="7737238973539693982">Linux (စမ်းသပ်ဆော့ဖ်ဝဲ) ကို ဖျက်ခြင်း</translation>
 <translation id="7740996059027112821">ပုံမှန်</translation>
-<translation id="7743128043742060936">ဤစာမျက်နှာကို <ph name="EXTENSION_NAME" /> နောက်ဆက်တွဲက ပြောင်းထားသည်</translation>
 <translation id="7744047395460924128">သင်၏ပုံနှိပ်မှတ်တမ်းကို ကြည့်ပါ</translation>
 <translation id="7744192722284567281">ဒေတာကျိုးပေါက်မှုတွင် တွေ့ထားသည်</translation>
 <translation id="7750228210027921155">တစ်ခုပေါ်တစ်ခုထပ်၍ ဖွင့်ရန်</translation>
@@ -6348,6 +6341,7 @@
 <translation id="9121814364785106365">ပင်ထိုးထား တဲဘ် အဖြစ် ဖွင့်ရန်</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> ကို ခေတ္တရပ်ထားသည်</translation>
 <translation id="9124003689441359348">သိမ်းဆည်းထားသော စကားဝှက်များကို ဤနေရာတွင် တွေ့ရပါမည်</translation>
+<translation id="9126149354162942022">ကာဆာအရောင်</translation>
 <translation id="9128317794749765148">စနစ်ထည့်သွင်းမှုကို အပြီးသတ်၍မရပါ</translation>
 <translation id="9128870381267983090">ကွန်ယက်သို့ ချိတ်ဆက်ပါ</translation>
 <translation id="9130015405878219958">ဝင်လိုက်သည့် မုဒ် မမှန်ပါ။</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 7ccd337..e0185fd 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -112,7 +112,6 @@
 <translation id="1143142264369994168">प्रमाणपत्र साइनर</translation>
 <translation id="1145292499998999162">प्लगइन रोकियो</translation>
 <translation id="1145593918056169051">प्रिन्टरले काम गरेको छैन</translation>
-<translation id="1146678959555564648">VR मा प्रवेश गर्नुहोस्</translation>
 <translation id="114721135501989771">Chrome मा Google स्मार्ट प्राप्त गर्नुहोस्‌</translation>
 <translation id="1147991416141538220">पहुँच माग्न यस यन्त्रका प्रशासकलाई सम्पर्क गर्नुहोस्।</translation>
 <translation id="1149401351239820326">म्याद सकिने महिना</translation>
@@ -862,7 +861,6 @@
 <translation id="2096715839409389970">तेस्रो पक्षीय कुकीहरू खाली गर्नुहोस्</translation>
 <translation id="2097372108957554726">नयाँ यन्त्रहरू दर्ता गराउन तपाईंले Chrome मा साइन इन गर्न आवश्यक छ।</translation>
 <translation id="2099172618127234427">तपाईं Chrome OS डिबगिङ विशेषताहरू सक्षम गर्दै हुनुहुन्छ जुन USB ड्राइभहरूबाट sshd daemon सेटअप गर्दछ।</translation>
-<translation id="2099625543891475722">उचाइ जस्ता तपाईंको शारीरिक विशेषता</translation>
 <translation id="2099686503067610784">सर्भर प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" मेटाउने?</translation>
 <translation id="2100273922101894616">स्वत: साइन-इन</translation>
 <translation id="2101225219012730419">संस्करण:</translation>
@@ -2653,7 +2651,6 @@
 <translation id="4350019051035968019">यो यन्त्रलाई तपाईंको खाताको सम्बन्धनमा भएको डोमेनमा नामांकन गर्न सकिंदैन किनकी यन्त्र फरक डोमेनद्वारा व्यवस्थापनका लागि चिन्हित छ।</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> वरपरका ब्लुटुथ यन्त्रहरू खोज्न स्क्यान गर्न चाहन्छ। निम्न यन्त्रहरू फेला परेका छन्:</translation>
-<translation id="4353114845960720315">तपाईं VR मा हुँदा यो साइटले निम्न कुराबारे सिक्न सक्छ:</translation>
 <translation id="4354073718307267720">कुनै साइटले आफू वरपरको ठाउँको 3D नक्सा बनाउन वा क्यामेराको अवस्था पत्ता लगाउन खोज्दा मलाई सोधियोस्</translation>
 <translation id="4354344420232759511">तपाईंले भ्रमण गर्ने साइटहरू यहाँ देखिने छन्</translation>
 <translation id="435527878592612277">आफ्नो तस्बिर चयन गर्नुहोस्</translation>
@@ -2888,7 +2885,6 @@
 <translation id="4659077111144409915">प्राथमिक खाता</translation>
 <translation id="4660476621274971848">अपेक्षित संस्करण "<ph name="EXPECTED_VERSION" />" हो, तर भएको संस्करण भने "<ph name="NEW_ID" />" छ</translation>
 <translation id="4660540330091848931">आकार बदल्दै</translation>
-<translation id="4660838440047236328">तपाईंको कोठाको लेआउट</translation>
 <translation id="4661407454952063730">एपको डेटा भनेको सम्पर्क ठेगाना, सन्देश र तस्बिरहरू जस्ता डेटालगायत कुनै अनुप्रयोगले (विकासकर्ताका सेटिङहरूमा आधारित भएर) सुरक्षित गरेको कुनै पनि डेटा हुन सक्छ।</translation>
 <translation id="4662373422909645029">उपनाममा अङ्क प्रयोग गर्न पाइँदैन</translation>
 <translation id="4662788913887017617">यो बुकमार्कलाई आफ्नो iPhone सँग सेयर गर्नुहोस्</translation>
@@ -2977,9 +2973,7 @@
 <translation id="4801512016965057443">मोबाइल डाटा रोमिङको लागि अनुमति दिनुहोस्</translation>
 <translation id="4804818685124855865">जडान विच्छेद</translation>
 <translation id="4804827417948292437">अभोकाडो</translation>
-<translation id="4805077164141082536">हामी स्तरवृद्धि गर्नुअघि आफ्नो Linux को हालको कन्टेनर ब्याकअप गर्न सिफारिस गर्छौँ।</translation>
 <translation id="4807098396393229769">कार्डमा रहेको नाम</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> बाट VR मा प्रवेश गर्ने हो?</translation>
 <translation id="4808667324955055115">रोक लगाइएका पपअपहरू:</translation>
 <translation id="480990236307250886">गृह पृष्ठ खोल्नुहोस्</translation>
 <translation id="4811212958317149293">स्विचमार्फत पहुँच राख्ने सुविधाको किबोर्ड स्वतः स्क्यान गर्ने सेटिङ</translation>
@@ -3706,7 +3700,6 @@
 <translation id="5739235828260127894">पुष्टिका लागि प्रतीक्षा गर्दै। <ph name="LINK_BEGIN" />थप जान्नुहोस्।<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">धेरै ठुलो</translation>
 <translation id="574209121243317957">पिच</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> सम्बन्धी सुझाव, योजना तथा अद्यावधिक प्राप्त गर्नुहोस् र प्रतिक्रिया दिनुहोस्</translation>
 <translation id="5746169159649715125">पीडीएपको रूपमा बचत गर्नुहोस्</translation>
 <translation id="5747552184818312860">म्याद सकिन्छ</translation>
 <translation id="5747785204778348146">विकासकर्ता - अस्थिर</translation>
@@ -4828,7 +4821,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{पृष्ठबाट बाहिरिनुहोस्}other{पृष्ठहरूबाट बाहिरिनुहोस्}}</translation>
 <translation id="7207457272187520234">प्रयोग तथा निदानसम्बन्धी डेटा पठाउनुहोस्। यो यन्त्रले हाल निदान, यन्त्र र एपको प्रयोगसम्बन्धी डेटा स्वतः Google लाई पठाइरहेको छ। यसले प्रणाली तथा एपको स्थिरता र अन्य कुराहरूमा सुधार ल्याउन मद्दत गर्ने छ। केही समग्र डेटाले Google का एप तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई पनि मद्दत गर्ने छन्। यो सेटिङ मालिकले लागू गर्छन्। तपाईंको खातामा अतिरिक्त वेब तथा एपसम्बन्धी गतिविधिको सेटिङ सक्रिय गरिएको छ भने यो डेटा तपाईंको Google खातामा सुरक्षित गरिन सक्छ।</translation>
 <translation id="7207631048330366454">एपहरू खोज्नुहोस्</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> एक्स्टेन्सनले <ph name="SEARCH_PROVIDER_DOMAIN" /> प्रयोग गर्न खोजमा परिवर्तन गरेको छ</translation>
 <translation id="7210499381659830293">विस्तारसम्बन्धी प्रिन्टरहरू</translation>
 <translation id="7212097698621322584">यसलाई बदल्न आफ्नो हालको PIN प्रविष्टि गर्नुहोस्। तपाईंलाई आफ्नो PIN थाहा छैन भने तपाईंले सुरक्षा साँचो रिसेट गर्नु पर्छ र त्यसपछि नयाँ PIN सिर्जना गर्नु पर्छ।</translation>
 <translation id="7216409898977639127">सेलुलर प्रदायक</translation>
@@ -5228,7 +5220,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" सँग जोडा बनाउँदै ...</translation>
 <translation id="7737238973539693982">Linux (बिटा) मेटनुहोस्</translation>
 <translation id="7740996059027112821">मानक</translation>
-<translation id="7743128043742060936"><ph name="EXTENSION_NAME" /> एक्स्टेन्सनले यो पृष्ठ परिवर्तन गरेको छ</translation>
 <translation id="7744047395460924128">आफ्नो छपाइसम्बन्धी इतिहास हेर्नुहोस्</translation>
 <translation id="7744192722284567281">डेटा चोरीको घटनामा फेला परेको</translation>
 <translation id="7750228210027921155">Picture in picture</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 8bb574e..5c90711 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Ondertekenaar van het certificaat</translation>
 <translation id="1145292499998999162">Plug-in geblokkeerd</translation>
 <translation id="1145593918056169051">Printer is gestopt</translation>
-<translation id="1146678959555564648">VR activeren</translation>
 <translation id="114721135501989771">Google-functies in Chrome</translation>
 <translation id="1147991416141538220">Neem contact op met de beheerder van dit apparaat om toegang te vragen.</translation>
 <translation id="1149401351239820326">Vervalmaand</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Cookies van derden wissen</translation>
 <translation id="2097372108957554726">Je moet inloggen bij Chrome om nieuwe apparaten te registreren</translation>
 <translation id="2099172618127234427">Je schakelt foutopsporingsfuncties in voor Chrome OS waarmee de sshd daemon wordt ingesteld en opstarten vanaf USB-stations wordt ingeschakeld.</translation>
-<translation id="2099625543891475722">je fysieke kenmerken, zoals je lengte</translation>
 <translation id="2099686503067610784">Servercertificaat '<ph name="CERTIFICATE_NAME" />' verwijderen?</translation>
 <translation id="2100273922101894616">Automatisch inloggen</translation>
 <translation id="2101225219012730419">Versie:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Aan de Google Assistent gerelateerde informatie</translation>
 <translation id="3733127536501031542">SSL-server met step-up</translation>
 <translation id="3735740477244556633">Sorteren op</translation>
+<translation id="3738213647660363521">Aangepaste kleur van cursor</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> openen?</translation>
 <translation id="3742055079367172538">Screenshot gemaakt</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Dit apparaat kan niet worden ingeschreven bij het domein waarbij je account hoort, omdat het apparaat is aangewezen voor beheer door een ander domein.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> wil scannen naar Bluetooth-apparaten in de buurt. De volgende apparaten zijn gevonden:</translation>
-<translation id="4353114845960720315">Als VR actief is, kan deze site mogelijk informatie verzamelen over het volgende:</translation>
 <translation id="4354073718307267720">Vragen als een site een 3D-kaart van je omgeving wil maken of de camerapositie wil volgen</translation>
 <translation id="4354344420232759511">Sites die je bezoekt, worden hier weergegeven</translation>
 <translation id="435527878592612277">Selecteer je foto</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Primair account</translation>
 <translation id="4660476621274971848">Verwachte versie '<ph name="EXPECTED_VERSION" />', maar versie is '<ph name="NEW_ID" />'</translation>
 <translation id="4660540330091848931">Grootte aanpassen</translation>
-<translation id="4660838440047236328">de indeling van je kamer</translation>
 <translation id="4661407454952063730">App-gegevens kunnen alle gegevens zijn die een app heeft opgeslagen (op basis van de ontwikkelaarsinstellingen), waaronder gegevens zoals contacten, berichten en foto's.</translation>
 <translation id="4662373422909645029">Cijfers niet toegestaan</translation>
 <translation id="4662788913887017617">Deze bladwijzer delen met je iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Mobiele dataroaming toestaan</translation>
 <translation id="4804818685124855865">Verbinding verbreken</translation>
 <translation id="4804827417948292437">Avocado</translation>
-<translation id="4805077164141082536">We raden je aan een back-up van je huidige Linux-container te maken voordat je een upgrade uitvoert.</translation>
 <translation id="4807098396393229769">Naam op pas</translation>
-<translation id="4808319664292298116">Wil je VR van <ph name="DOMAIN" /> starten?</translation>
 <translation id="4808667324955055115">Pop-ups geblokkeerd:</translation>
 <translation id="480990236307250886">Open de homepage</translation>
 <translation id="4811212958317149293">Automatische scan van toetsenbord voor 'Toegang via schakelaar'</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Inpakken mislukt.</translation>
 <translation id="5225324770654022472">Snelle link voor apps weergeven</translation>
 <translation id="5227679487546032910">Standaard blauwgroene avatar</translation>
+<translation id="5228088094491423618">Live ondertiteling</translation>
 <translation id="5228579091201413441">Synchronisatie inschakelen</translation>
 <translation id="5229189185761556138">Invoermethoden beheren</translation>
 <translation id="5230516054153933099">Venster</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Wachten op verificatie. <ph name="LINK_BEGIN" />Meer informatie.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Zeer groot</translation>
 <translation id="574209121243317957">Toonhoogte</translation>
-<translation id="5745136023067925867">Tips, aanbiedingen en updates over <ph name="DEVICE_TYPE" /> krijgen en je feedback delen</translation>
 <translation id="5746169159649715125">Opslaan als pdf</translation>
 <translation id="5747552184818312860">Verloopt</translation>
 <translation id="5747785204778348146">Ontwikkelaar - instabiel</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Pagina afsluiten}other{Pagina's afsluiten}}</translation>
 <translation id="7207457272187520234">Stuur gebruiks- en diagnostische gegevens. Dit apparaat stuurt momenteel automatisch diagnostische, apparaat- en app-gebruiksgegevens naar Google. Deze gegevens kunnen worden gebruikt om de systeem- en app-stabiliteit te verbeteren en andere optimalisaties mogelijk te maken. Daarnaast zijn bepaalde verzamelde gegevens nuttig voor Google-apps en -partners, zoals Android-ontwikkelaars. Deze instelling wordt afgedwongen door de eigenaar. Als je de instelling voor aanvullende Web- en app-activiteit hebt ingeschakeld, kunnen deze gegevens worden opgeslagen in je Google-account.</translation>
 <translation id="7207631048330366454">Apps zoeken</translation>
-<translation id="7210171324714276060">De extensie <ph name="EXTENSION_NAME" /> heeft ingesteld dat <ph name="SEARCH_PROVIDER_DOMAIN" /> wordt gebruikt voor zoeken</translation>
 <translation id="7210499381659830293">Printers via extensie</translation>
 <translation id="7212097698621322584">Voer je huidige pincode in om deze te wijzigen. Als je je pincode niet weet, moet je de beveiligingssleutel resetten en vervolgens een nieuwe pincode maken.</translation>
 <translation id="7216409898977639127">Mobiele provider</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Koppelen met '<ph name="DEVICE_NAME" />'…</translation>
 <translation id="7737238973539693982">Linux (bèta) verwijderen</translation>
 <translation id="7740996059027112821">Standaard</translation>
-<translation id="7743128043742060936">Deze pagina is gewijzigd door de extensie <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Je afdrukgeschiedenis weergeven</translation>
 <translation id="7744192722284567281">Gevonden in een gegevenslek</translation>
 <translation id="7750228210027921155">Scherm-in-scherm</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Openen als vastgezet tabblad</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> is onderbroken</translation>
 <translation id="9124003689441359348">Opgeslagen wachtwoorden worden hier weergegeven</translation>
+<translation id="9126149354162942022">Kleur van cursor</translation>
 <translation id="9128317794749765148">Installatie is niet voltooid</translation>
 <translation id="9128870381267983090">Verbinding maken met netwerk</translation>
 <translation id="9130015405878219958">Ongeldige modus opgegeven.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 749b5b88..c0ba127 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Sertifikat-signatar</translation>
 <translation id="1145292499998999162">Et programtillegg ble blokkert</translation>
 <translation id="1145593918056169051">Skriveren har stoppet</translation>
-<translation id="1146678959555564648">Slå på VR-modus</translation>
 <translation id="114721135501989771">Få Googles smarte funksjoner i Chrome</translation>
 <translation id="1147991416141538220">For å be om tilgang, kontakt administratoren for denne enheten.</translation>
 <translation id="1149401351239820326">Utløpsmåned</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Slett informasjonskapsler fra tredjeparter</translation>
 <translation id="2097372108957554726">Du må logge på Chrome for å registrere nye enheter</translation>
 <translation id="2099172618127234427">Du er i ferd med å slå på Chrome OS-feilsøkingsfunksjoner som kommer til å konfigurere sshd daemon og muliggjøre oppstart fra USB-stasjoner.</translation>
-<translation id="2099625543891475722">fysiske kjennetegn, for eksempel hvor høy du er</translation>
 <translation id="2099686503067610784">Slette tjenersertifikatet «<ph name="CERTIFICATE_NAME" />»?</translation>
 <translation id="2100273922101894616">Automatisk pålogging</translation>
 <translation id="2101225219012730419">Versjon:</translation>
@@ -2182,6 +2180,7 @@
 <translation id="3732857534841813090">Beslektet informasjon for Google Assistent</translation>
 <translation id="3733127536501031542">SSL-tjener med oppgradering </translation>
 <translation id="3735740477244556633">Sortér etter</translation>
+<translation id="3738213647660363521">Egendefinert markørfarge</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vil du åpne <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Skjermdump tatt</translation>
@@ -2652,7 +2651,6 @@
 <translation id="4350019051035968019">Denne enheten kan ikke registreres for domenet kontoen din tilhører. Enheten er merket for administrering av et annet domene.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> vil søke etter Bluetooth-enheter i nærheten. Fant disse enhetene:</translation>
-<translation id="4353114845960720315">Når du er i VR, kan dette nettstedet finne ut mer om følgende:</translation>
 <translation id="4354073718307267720">Spør når nettsteder vil lage 3D-kart av omgivelsene dine eller spore kameraposisjonen</translation>
 <translation id="4354344420232759511">Nettsteder du besøker, vises her</translation>
 <translation id="435527878592612277">Velg bilde</translation>
@@ -2887,7 +2885,6 @@
 <translation id="4659077111144409915">Primærkonto</translation>
 <translation id="4660476621274971848">Den forventede versjonen var «<ph name="EXPECTED_VERSION" />», men den faktiske versjonen var «<ph name="NEW_ID" />»</translation>
 <translation id="4660540330091848931">Endrer størrelsen</translation>
-<translation id="4660838440047236328">hvordan rommet ditt ser ut</translation>
 <translation id="4661407454952063730">Appdata kan være alle slags data som er lagret i en app (basert på utviklerinnstillingene), inkludert data som kontakter, meldinger og bilder.</translation>
 <translation id="4662373422909645029">Kallenavnet kan ikke inneholde tall</translation>
 <translation id="4662788913887017617">Del dette bokmerket med iPhone</translation>
@@ -2976,9 +2973,7 @@
 <translation id="4801512016965057443">Tillat mobildatabruk på andre nettverk</translation>
 <translation id="4804818685124855865">Koble fra</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Vi anbefaler at du sikkerhetskopierer den nåværende Linux-beholderen før du oppgraderer.</translation>
 <translation id="4807098396393229769">Navn som er oppført på kortet</translation>
-<translation id="4808319664292298116">Vil du starte VR fra <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Blokkerte forgrunnsvinduer:</translation>
 <translation id="480990236307250886">Åpne startsiden</translation>
 <translation id="4811212958317149293">Automatisk skanning av brytertilgangstastaturet</translation>
@@ -3292,6 +3287,7 @@
 <translation id="52232769093306234">Pakkingen mislyktes.</translation>
 <translation id="5225324770654022472">Vis appsnarveien</translation>
 <translation id="5227679487546032910">Blågrønt standardbrukerbilde</translation>
+<translation id="5228088094491423618">Direkteteksting</translation>
 <translation id="5228579091201413441">Slå på synkronisering</translation>
 <translation id="5229189185761556138">Administrer inndatametoder</translation>
 <translation id="5230516054153933099">Vindu</translation>
@@ -3705,7 +3701,6 @@
 <translation id="5739235828260127894">Venter på bekreftelse. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Veldig stor</translation>
 <translation id="574209121243317957">Stemmeleie</translation>
-<translation id="5745136023067925867">Få både tips om, tilbud på og oppdateringer for <ph name="DEVICE_TYPE" />, og gi tilbakemeldinger</translation>
 <translation id="5746169159649715125">Lagre som PDF</translation>
 <translation id="5747552184818312860">Utløper</translation>
 <translation id="5747785204778348146">Utvikler – ustabil</translation>
@@ -4828,7 +4823,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Lukk siden}other{Lukk sidene}}</translation>
 <translation id="7207457272187520234">Send bruks- og diagnostikkdata. Denne enheten sender for øyeblikket diagnostikk-, enhets- og appbruksdata til Google automatisk. Dette bidrar til å gjøre systemet og appene bedre og mer stabile. Noen aggregerte data hjelper også Google-apper og -partnere, for eksempel Android-utviklere. Denne innstillingen håndheves av eieren. Hvis du har slått på innstillingen for annen nett- og appaktivitet, kan disse dataene bli lagret i Google-kontoen din.</translation>
 <translation id="7207631048330366454">Søk etter apper</translation>
-<translation id="7210171324714276060">Utvidelsen <ph name="EXTENSION_NAME" /> endret søkemotoren til <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Utvidelsesskrivere</translation>
 <translation id="7212097698621322584">Skriv inn den nåværende PIN-koden for å endre den. Hvis du ikke kan PIN-koden, må du tilbakestille sikkerhetsnøkkelen og deretter opprette en ny PIN-kode.</translation>
 <translation id="7216409898977639127">Mobiloperatør</translation>
@@ -5228,7 +5222,6 @@
 <translation id="7737115349420013392">Sammenkobler med «<ph name="DEVICE_NAME" />» …</translation>
 <translation id="7737238973539693982">Slett Linux (beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Denne siden ble endret av <ph name="EXTENSION_NAME" />-utvidelsen</translation>
 <translation id="7744047395460924128">Se utskriftsloggen</translation>
 <translation id="7744192722284567281">Funnet i databrudd</translation>
 <translation id="7750228210027921155">Bilde i bilde</translation>
@@ -6346,6 +6339,7 @@
 <translation id="9121814364785106365">Åpne som festet fane</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> er satt på pause</translation>
 <translation id="9124003689441359348">Lagrede passord vises her</translation>
+<translation id="9126149354162942022">Markørfarge</translation>
 <translation id="9128317794749765148">Kunne ikke fullføre konfigureringen</translation>
 <translation id="9128870381267983090">Koble til nettverk</translation>
 <translation id="9130015405878219958">Ugyldig modus angitt.</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index 6e78414..3d47fe5 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">ସାର୍ଟିଫିକେଟ୍‌ ଦସ୍ତଖତକାରୀ</translation>
 <translation id="1145292499998999162">ପ୍ଲଗ୍‍ଇନ୍‍ ବ୍ଲକ୍ କରାଯାଇଛି</translation>
 <translation id="1145593918056169051">ପ୍ରିଣ୍ଟର୍ ବନ୍ଦ ହୋଇଯାଇଛି</translation>
-<translation id="1146678959555564648">VR ଲେଖନ୍ତୁ</translation>
 <translation id="114721135501989771">Chromeରେ Google ସ୍ମାର୍ଟ୍ସ ପ୍ରାପ୍ତ କରନ୍ତୁ</translation>
 <translation id="1147991416141538220">ଆକ୍ସେସ୍ କରିବାକୁ ଅନୁମତି ପାଇଁ, ଏହି ଡିଭାଇସ୍‍ର ଆଡ୍‍ମିନିଷ୍ଟ୍ରେଟର୍‍ଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="1149401351239820326">ମିଆଦ ଶେଷ ହେଉଥିବା ମାସ</translation>
@@ -860,7 +859,6 @@
 <translation id="2096715839409389970">ତୃତୀୟ-ପକ୍ଷ କୁକୀଗୁଡ଼ିକ ଖାଲି କରନ୍ତୁ</translation>
 <translation id="2097372108957554726">ନୂଆ ଡିଭାଇସ୍‍ଗୁଡ଼ିକ ପଞ୍ଜିକୃତ କରିବା ପାଇଁ ଆପଣଙ୍କୁ Chromeରେ ସାଇନ୍ ଇନ୍ କରିବାକୁ ହେବ</translation>
 <translation id="2099172618127234427">ଆପଣ Chrome OS ଡିବଗିଂ ବୈଶିଷ୍ଟ୍ୟକୁ ସକ୍ଷମ କରୁଛନ୍ତି, ଯାହା sshd ଡିମୋନ୍‌କୁ ସେଟ୍ ଅପ୍ କରିବ ଏବଂ USB ଡ୍ରାଇଭ୍‌ଗୁଡିକରୁ ବୁଟିଂ ସକ୍ଷମ କରିବ।</translation>
-<translation id="2099625543891475722">ଆପଣଙ୍କର ଶାରୀରିକ ଫିଚର୍‌ଗୁଡ଼ିକ, ଯେପରି ଉଚ୍ଚତା</translation>
 <translation id="2099686503067610784">ସର୍ଭର୍ ସାର୍ଟିଫିକେଟ୍ "<ph name="CERTIFICATE_NAME" />" ଡିଲିଟ୍ କରିବେ କି?</translation>
 <translation id="2100273922101894616">ସ୍ୱତଃ ସାଇନ୍-ଇନ୍‌</translation>
 <translation id="2101225219012730419">ସଂସ୍କରଣ:</translation>
@@ -2649,7 +2647,6 @@
 <translation id="4350019051035968019">ଏହି ଡିଭାଇସ୍‌କୁ ସେହି ଡୋମେନ୍‌ରେ ନାମାଙ୍କିତ କରାଯାଇପାରିବ ନାହିଁ ଯାହା ସହିତ ଆପଣଙ୍କର ଆକାଉଣ୍ଟ ସମ୍ବନ୍ଧିତ ଅଛି କାରଣ ଡିଭାଇସ୍‌କୁ ଅଲଗା ଡୋମେନ୍‌ ଦ୍ୱାରା ପରିଚାଳନା କରିବାକୁ ଚିହ୍ନଟ କରାଯାଇଛି।</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ଆଖପାଖର ବ୍ଲୁଟୁଥ୍ ଡିଭାଇସ୍‌ଗୁଡ଼ିକୁ ସ୍କାନ୍ କରିବାକୁ ଚାହୁଁଛି। ନିମ୍ନୋକ୍ତ ଡିଭାଇସ୍‌ଗୁଡ଼ିକ ମିଳିଛି:</translation>
-<translation id="4353114845960720315">ଆପଣ VRରେ ଥିବା ସମୟରେ, ଏହି ସାଇଟ୍ ଏ ବିଷୟରେ ଜାଣିପାରିବ:</translation>
 <translation id="4354073718307267720">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ ପରିପାର୍ଶ୍ୱର ଏକ 3D ମ୍ୟାପ୍ ତିଆରି କରିବା ଏବଂ କ୍ୟାମେରା ସ୍ଥିତି ଟ୍ରାକ୍ କରିବାକୁ ଚାହିଁଲେ ପଚାରନ୍ତୁ</translation>
 <translation id="4354344420232759511">ଆପଣ ଦେଖିଥିବା ସାଇଟ୍‌ଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯିବ</translation>
 <translation id="435527878592612277">ଆପଣଙ୍କର ଫଟୋ ଚୟନ କରନ୍ତୁ</translation>
@@ -2884,7 +2881,6 @@
 <translation id="4659077111144409915">ପ୍ରାଥମିକ ଆକାଉଣ୍ଟ</translation>
 <translation id="4660476621274971848">ଆଶା କରାଯାଉଥିବା ସଂସ୍କରଣ "<ph name="EXPECTED_VERSION" />" ଅଛି, କିନ୍ତୁ ସଂସ୍କରଣ "<ph name="NEW_ID" />" ଥିଲା</translation>
 <translation id="4660540330091848931">ଆକାର ପରିବର୍ତ୍ତନ କରାଯାଉଛି</translation>
-<translation id="4660838440047236328">ଆପଣଙ୍କର ରୁମ୍‍ର ଲେଆଉଟ୍</translation>
 <translation id="4661407454952063730">ଆପ୍ ଡାଟା, ଯୋଗାଯୋଗ, ମେସେଜ୍ ଓ ଫଟୋଗୁଡ଼ିକ ପରି ଡାଟା ସମେତ ଏକ ଆପ୍ ସେଭ୍ କରିଥିବା (ଡେଭଲପର୍ ସେଟିଂସ୍ ଉପରେ ଆଧାରିତ) ଯେ କୌଣସି ଡାଟା ହୋଇପାରିବ।</translation>
 <translation id="4662373422909645029">ଡାକନାମରେ ନମ୍ବର ରହିପାରିବନି</translation>
 <translation id="4662788913887017617">ଆପଣଙ୍କର iPhone ସହିତ ଏହି ବୁକ୍‌ମାର୍କ ସେୟାର୍‌ କରନ୍ତୁ</translation>
@@ -2973,9 +2969,7 @@
 <translation id="4801512016965057443">ମୋବାଇଲ୍ ଡାଟା ରୋମିଂକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation>
 <translation id="4804818685124855865">ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ</translation>
 <translation id="4804827417948292437">ଆଭୋକାଡୋ</translation>
-<translation id="4805077164141082536">ଆମେ ଆପଣଙ୍କୁ ଅପଗ୍ରେଡ୍ କରିବା ପୂର୍ବରୁ ଆପଣଙ୍କର ବର୍ତ୍ତମାନର Linux କଣ୍ଟେନର୍‍ର ବ୍ୟାକ୍ ଅପ୍ ନେବା ପାଇଁ ସୁପାରିଶ କରୁ।</translation>
 <translation id="4807098396393229769">କାର୍ଡରେ ଥିବା ନାମ</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />ରୁ VR ଲେଖିବେ କି?</translation>
 <translation id="4808667324955055115">ପପ୍-ଅପ୍‌ଗୁଡିକ ଅବରୋଧ ହୋଇଛି:</translation>
 <translation id="480990236307250886">ମୂଳପୃଷ୍ଠାଟି ଖୋଲନ୍ତୁ</translation>
 <translation id="4811212958317149293">ସ୍ଵିଚ୍ ଆକ୍ସେସ୍ କୀବୋର୍ଡ ସ୍ୱତଃ-ସ୍କାନ୍</translation>
@@ -3702,7 +3696,6 @@
 <translation id="5739235828260127894">ଯାଞ୍ଚକରଣ ପାଇଁ ଅପେକ୍ଷାରତ। <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ବହୁତ ବଡ଼</translation>
 <translation id="574209121243317957">ସ୍ୱରର ଉଚ୍ଚତା</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> ବିଷୟରେ ପରାମର୍ଶ, ଅଫର୍ ଓ ଅପଡେଟଗୁଡ଼ିକ ପାଆନ୍ତୁ ଏବଂ ମତାମତ ସେୟାର୍ କରନ୍ତୁ</translation>
 <translation id="5746169159649715125">PDF ଭାବରେ ସେଭ୍‍ କରନ୍ତୁ</translation>
 <translation id="5747552184818312860">ସମୟସୀମା ସମାପ୍ତ ହେବ</translation>
 <translation id="5747785204778348146">ଡେଭଲପର୍ - ଅସ୍ଥିର</translation>
@@ -4827,7 +4820,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ପୃଷ୍ଠାରୁ ବାହାରି ଯାଆନ୍ତୁ}other{ପୃଷ୍ଠାରୁ ବାହାରି ଯାଆନ୍ତୁ}}</translation>
 <translation id="7207457272187520234">ବ୍ୟବହାର ଏବଂ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା ପଠାନ୍ତୁ। ଏହି ଡିଭାଇସ୍ ବର୍ତ୍ତମାନ ସ୍ୱଚାଳିତ ରୂପେ ଡାଏଗ୍ନୋଷ୍ଟିକ୍, ଡିଭାଇସ୍ ଏବଂ ଆପ୍ ବ୍ୟବହାର ଡାଟା Googleକୁ ପଠାଉଛି। ସିଷ୍ଟମ୍ ଓ ଆପର ସ୍ଥିରତା ଏବଂ ଅନ୍ୟ ଉନ୍ନତିଗୁଡ଼ିକରେ ଏହା ସାହାଯ୍ୟ କରିବ। କିଛି ଏକତ୍ରିତ ଡାଟା Google ଆପ୍ ଓ Android ଡେଭଲପର୍ ପରି ଏହାର ପାର୍ଟନରଗୁଡ଼ିକୁ ମଧ୍ୟ ସାହାଯ୍ୟ କରିବ। ଏହି ସେଟିଂ ମାଲିକଙ୍କ ଦ୍ୱାରା ଲାଗୁ କରାଯାଇଛି। ଯଦି ଆପଣଙ୍କର ଅତିରିକ୍ତ ୱେବ୍ ଓ ଆପ୍ କାର୍ଯ୍ୟକଳାପ ସେଟିଂ ଚାଲୁ ଅଛି, ତେବେ ଏହି ଡାଟା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ୍ ହୋଇପାରେ।</translation>
 <translation id="7207631048330366454">ଆପ୍ସ ଖୋଜନ୍ତୁ</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> ଏକ୍ସଟେନସନ୍ <ph name="SEARCH_PROVIDER_DOMAIN" />କୁ ବ୍ୟବହାର କରିବା ପାଇଁ ସନ୍ଧାନକୁ ପରିବର୍ତ୍ତନ କରିଛି</translation>
 <translation id="7210499381659830293">ଏକ୍ସଟେନ୍‌ସନ୍ ପ୍ରିଣ୍ଟର୍‌</translation>
 <translation id="7212097698621322584">ଏହାକୁ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ ବର୍ତ୍ତମାନର ପିନ୍ ଲେଖନ୍ତୁ। ଯଦି ଆପଣ ନିଜର ପିନ୍ ଜାଣିନାହାନ୍ତି, ତେବେ ଆପଣଙ୍କୁ ସୁରକ୍ଷା କୀ ରିସେଟ୍ କରିବା ଆବଶ୍ୟକ, ଏହା ପରେ ଗୋଟିଏ ନୂଆ ପିନ୍ ତିଆରି କରନ୍ତୁ।</translation>
 <translation id="7216409898977639127">ସେଲ୍ୟୁଲାର୍ ସେବା ପ୍ରଦାତା</translation>
@@ -5227,7 +5219,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" ସହ ପେୟାର୍ କରାଯାଉଛି ...</translation>
 <translation id="7737238973539693982">Linux (ବେଟା) ଡିଲିଟ୍‍ କରନ୍ତୁ</translation>
 <translation id="7740996059027112821">ମାନାଙ୍କ</translation>
-<translation id="7743128043742060936">ଏହି ପୃଷ୍ଠାକୁ <ph name="EXTENSION_NAME" /> ଏକ୍ସଟେନସନ୍ ଦ୍ୱାରା ପରିବର୍ତ୍ତନ କରାଯାଇଥିଲା</translation>
 <translation id="7744047395460924128">ଆପଣଙ୍କର ପ୍ରିଣ୍ଟିଂ ଇତିହାସ ଦେଖନ୍ତୁ</translation>
 <translation id="7744192722284567281">ଡାଟା ଚୋରିରେ ପାସୱାର୍ଡ ମିଳିଛି</translation>
 <translation id="7750228210027921155">ଛବି ମଧ୍ୟରେ ଛବି</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index b4d45e2..0f3ed3dc9 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਸਾਈਨਰ</translation>
 <translation id="1145292499998999162">ਪਲੱਗਇਨ ਬਲਾਕ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="1145593918056169051">ਪ੍ਰਿੰਟਰ ਰੁਕ ਗਿਆ ਹੈ</translation>
-<translation id="1146678959555564648">VR ਵਿੱਚ ਦਾਖਲ ਹੋਵੋ</translation>
 <translation id="114721135501989771">Chrome ਵਿੱਚ Google ਸਮਾਰਟ ਲਓ</translation>
 <translation id="1147991416141538220">ਪਹੁੰਚ ਦੀ ਬੇਨਤੀ ਕਰਨ ਲਈ, ਇਸ ਡੀਵਾਈਸ ਦੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</translation>
 <translation id="1149401351239820326">ਮਿਆਦ ਸਮਾਪਤੀ ਦਾ ਮਹੀਨਾ</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">ਤੀਜੀ-ਧਿਰ ਦੀਆਂ ਕੁਕੀਜ਼ ਕਲੀਅਰ ਕਰੋ</translation>
 <translation id="2097372108957554726">ਤੁਹਾਨੂੰ ਨਵੇਂ ਡੀਵਾਈਸਾਂ ਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਲਈ Chrome 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ</translation>
 <translation id="2099172618127234427">ਤੁਸੀਂ Chrome OS ਡੀਬੱਗਿੰਗ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਚਾਲੂ ਕਰ ਰਹੇ ਹੋ, ਜੋ sshd daemon ਨੂੰ ਸੈੱਟ ਕਰਨਗੀਆਂ ਅਤੇ USB ਡਰਾਈਵ ਵਿੱਚੋਂ ਬੂਟਿੰਗ ਨੂੰ ਚਾਲੂ ਕਰਨਗੀਆਂ।</translation>
-<translation id="2099625543891475722">ਤੁਹਾਡੀਆਂ ਸਰੀਰਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ, ਜਿਵੇਂ ਕਿ ਲੰਬਾਈ</translation>
 <translation id="2099686503067610784">ਕੀ ਸਰਵਰ ਪ੍ਰਮਾਣ-ਪੱਤਰ "<ph name="CERTIFICATE_NAME" />" ਮਿਟਾਉਣਾ ਹੈ?</translation>
 <translation id="2100273922101894616">ਸਵੈਚਲਿਤ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="2101225219012730419">ਵਰਜਨ:</translation>
@@ -2655,7 +2653,6 @@
 <translation id="4350019051035968019">ਇਹ ਡੀਵਾਈਸ ਉਸ ਡੋਮੇਨ 'ਤੇ ਦਰਜ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਜਿਸ ਨਾਲ ਤੁਹਾਡਾ ਖਾਤਾ ਸੰਬੰਧਿਤ ਹੈ ਕਿਉਂਕਿ ਡੀਵਾਈਸ ਇੱਕ ਵੱਖਰੇ ਡੋਮੇਨ ਵੱਲੋਂ ਪ੍ਰਬੰਧਨ ਲਈ ਨਿਸ਼ਾਨਬੱਧ ਕੀਤਾ ਗਿਆ ਹੈ।</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ਦੀ ਨਜ਼ਦੀਕੀ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਲਈ ਸਕੈਨ ਕਰਨ ਦੀ ਇੱਛਾ ਹੈ, ਅੱਗੇ ਦਿੱਤੇ ਡੀਵਾਈਸ ਮਿਲੇ ਹਨ:</translation>
-<translation id="4353114845960720315">VR ਵਿੱਚ ਹੋਣ 'ਤੇ, ਇਹ ਸਾਈਟ ਇਸ ਬਾਰੇ ਜਾਣ ਸਕਦੀ ਹੈ:</translation>
 <translation id="4354073718307267720">ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਤੁਹਾਡੇ ਆਲੇ-ਦੁਆਲੇ ਦਾ 3D ਨਕਸ਼ਾ ਬਣਾਉਣ ਜਾਂ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਨੂੰ ਟਰੈਕ ਕਰਨ ਵੇਲੇ ਪੁੱਛੋ</translation>
 <translation id="4354344420232759511">ਤੁਹਾਡੇ ਵੱਲੋਂ ਦੇਖੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਸਾਈਟਾਂ ਇੱਥੇ ਦਿਸਣਗੀਆਂ</translation>
 <translation id="435527878592612277">ਆਪਣੀ ਫ਼ੋਟੋ ਚੁਣੋ</translation>
@@ -2890,7 +2887,6 @@
 <translation id="4659077111144409915">ਮੁੱਖ ਖਾਤਾ</translation>
 <translation id="4660476621274971848">ਸੰਭਾਵਿਤ ਵਰਜਨ "<ph name="EXPECTED_VERSION" />" ਹੈ, ਪਰ ਵਰਜਨ "<ph name="NEW_ID" />" ਸੀ</translation>
 <translation id="4660540330091848931">ਆਕਾਰ ਨੂੰ ਬਦਲਿਆ ਜਾ ਰਿਹਾ ਹੈ</translation>
-<translation id="4660838440047236328">ਤੁਹਾਡੇ ਕਮਰੇ ਦਾ ਖਾਕਾ</translation>
 <translation id="4661407454952063730">ਐਪ ਡਾਟਾ ਕਿਸੇ ਐਪ ਵੱਲੋਂ (ਵਿਕਾਸਕਾਰ ਸੈਟਿੰਗਾਂ ਦੇ ਆਧਾਰ 'ਤੇ) ਰੱਖਿਅਤ ਕੀਤਾ ਕੋਈ ਵੀ ਡਾਟਾ ਹੋ ਸਕਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਸੰਪਰਕਾਂ, ਸੁਨੇਹਿਆਂ ਅਤੇ ਫ਼ੋਟੋਆਂ ਵਰਗਾ ਡਾਟਾ ਸ਼ਾਮਲ ਹੈ।</translation>
 <translation id="4662373422909645029">ਉਪਨਾਮ 'ਚ ਅੰਕ ਨਹੀਂ ਹੋ ਸਕਦੇ</translation>
 <translation id="4662788913887017617">ਆਪਣੇ iPhone ਨਾਲ ਇਸ ਬੁੱਕਮਾਰਕ ਨੂੰ ਸਾਂਝਾ ਕਰੋ</translation>
@@ -2979,9 +2975,7 @@
 <translation id="4801512016965057443">ਮੋਬਾਈਲ ਡਾਟਾ ਰੋਮਿੰਗ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ</translation>
 <translation id="4804818685124855865">ਡਿਸਕਨੈਕਟ ਕਰੋ</translation>
 <translation id="4804827417948292437">ਐਵੋਕਾਡੋ</translation>
-<translation id="4805077164141082536">ਅਸੀਂ ਸਿਫ਼ਾਰਸ਼ ਕਰਦੇ ਹਾਂ ਕਿ ਤੁਸੀਂ ਆਪਣੇ ਮੌਜੂਦਾ Linux ਕੰਟੇਨਰ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਸਦਾ ਬੈਕਅੱਪ ਲੈ ਲਓ।</translation>
 <translation id="4807098396393229769">ਕਾਰਡ ਤੇ ਨਾਮ</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> ਤੋਂ VR ਵਿੱਚ ਦਾਖਲ ਹੋਣਾ ਹੈ?</translation>
 <translation id="4808667324955055115">ਪੌਪ-ਅੱਪ ਬਲਾਕ ਕੀਤੇ ਗਏ:</translation>
 <translation id="480990236307250886">ਹੋਮ ਪੇਜ ਖੋਲ੍ਹੋ</translation>
 <translation id="4811212958317149293">ਸਵਿੱਚ ਪਹੁੰਚ ਕੀ-ਬੋਰਡ ਲਈ ਸਵੈਚਲਿਤ-ਸਕੈਨ</translation>
@@ -3708,7 +3702,6 @@
 <translation id="5739235828260127894">ਪੁਸ਼ਟੀਕਰਨ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। <ph name="LINK_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ਬਹੁਤ ਵੱਡਾ</translation>
 <translation id="574209121243317957">ਪਿਚ</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> ਨੁਕਤੇ, ਪੇਸ਼ਕਸ਼ਾਂ ਅਤੇ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰੋ ਅਤੇ ਵਿਚਾਰ ਸਾਂਝੇ ਕਰੋ</translation>
 <translation id="5746169159649715125">PDF ਵਜੋਂ ਰੱਖਿਅਤ ਕਰੋ</translation>
 <translation id="5747552184818312860">ਮਿਆਦ ਸਮਾਪਤ ਹੁੰਦੀ ਹੈ</translation>
 <translation id="5747785204778348146">ਵਿਕਾਸਕਾਰ - ਅਸਥਿਰ</translation>
@@ -4831,7 +4824,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ਪੰਨੇ ਤੋਂ ਬਾਹਰ ਜਾਓ}one{ਪੰਨੇ ਤੋਂ ਬਾਹਰ ਜਾਓ}other{ਪੰਨਿਆਂ ਤੋਂ ਬਾਹਰ ਜਾਓ}}</translation>
 <translation id="7207457272187520234">ਵਰਤੋਂ ਅਤੇ ਤਸ਼ਖੀਸ ਡਾਟਾ ਭੇਜੋ। ਇਹ ਡੀਵਾਈਸ ਇਸ ਵੇਲੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਤਸ਼ਖੀਸ, ਡੀਵਾਈਸ ਅਤੇ ਐਪ ਵਰਤੋਂ ਡਾਟਾ Google ਨੂੰ ਭੇਜ ਰਿਹਾ ਹੈ। ਇਸ ਨਾਲ ਸਿਸਟਮ ਅਤੇ ਐਪ ਸਥਿਰਤਾ ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਮਿਲੇਗੀ। ਕੁਝ ਏਕੀਕ੍ਰਿਤ ਜਾਣਕਾਰੀ Google ਐਪਾਂ ਅਤੇ ਪਾਰਟਨਰਾਂ, ਜਿਵੇਂ ਕਿ Android ਵਿਕਾਸਕਾਰਾਂ ਦੀ ਵੀ ਮਦਦ ਕਰੇਗੀ। ਇਹ ਸੈਟਿੰਗ ਮਾਲਕ ਵੱਲੋਂ ਲਾਗੂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਜੇ ਤੁਹਾਡੀ ਵਧੀਕ 'ਵੈੱਬ ਅਤੇ ਐਪ ਸਰਗਰਮੀ' ਸੈਟਿੰਗ ਚਾਲੂ ਹੋਵੇ, ਤਾਂ ਇਹ ਡਾਟਾ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।</translation>
 <translation id="7207631048330366454">ਐਪਾਂ ਖੋਜੋ</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> ਐਕਸਟੈਂਸ਼ਨ ਨੇ <ph name="SEARCH_PROVIDER_DOMAIN" /> ਨੂੰ ਵਰਤਣ ਲਈ ਖੋਜ ਨੂੰ ਬਦਲਿਆ</translation>
 <translation id="7210499381659830293">ਐਕਸਟੈਂਸ਼ਨ ਪ੍ਰਿੰਟਰ</translation>
 <translation id="7212097698621322584">ਇਸਨੂੰ ਬਦਲਣ ਲਈ ਆਪਣਾ ਮੌਜੂਦਾ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਜੇ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਿੰਨ ਨਹੀਂ ਪਤਾ, ਤਾਂ ਤੁਹਾਨੂੰ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਨੂੰ ਰੀਸੈੱਟ ਕਰਕੇ ਨਵਾਂ ਪਿੰਨ ਬਣਾਉਣਾ ਪਵੇਗਾ।</translation>
 <translation id="7216409898977639127">ਸੈਲਿਊਲਰ ਪ੍ਰਦਾਨਕ</translation>
@@ -5231,7 +5223,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" ਨਾਲ ਜੋੜਾਬੱਧ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ ...</translation>
 <translation id="7737238973539693982">Linux (ਬੀਟਾ) ਮਿਟਾਓ</translation>
 <translation id="7740996059027112821">ਸਟੈਂਡਰਡ</translation>
-<translation id="7743128043742060936">ਇਹ ਪੰਨਾ <ph name="EXTENSION_NAME" /> ਐਕਸਟੈਂਸ਼ਨ ਵੱਲੋਂ ਬਦਲਿਆ ਗਿਆ ਸੀ</translation>
 <translation id="7744047395460924128">ਆਪਣਾ ਪ੍ਰਿੰਟ ਕਰਨ ਦਾ ਇਤਿਹਾਸ ਦੇਖੋ</translation>
 <translation id="7744192722284567281">ਡਾਟਾ ਉਲੰਘਣਾ ਵਿੱਚ ਮਿਲਿਆ</translation>
 <translation id="7750228210027921155">ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index b7eca10..893d0f5 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Podmiot podpisujący certyfikat</translation>
 <translation id="1145292499998999162">Wtyczka została zablokowana</translation>
 <translation id="1145593918056169051">Drukarka przestała działać</translation>
-<translation id="1146678959555564648">Włącz tryb VR</translation>
 <translation id="114721135501989771">Inteligentne rozwiązania Google w Chrome</translation>
 <translation id="1147991416141538220">Aby uzyskać dostęp, skontaktuj się z administratorem tego urządzenia.</translation>
 <translation id="1149401351239820326">Miesiąc utraty ważności</translation>
@@ -862,7 +861,6 @@
 <translation id="2096715839409389970">Wyczyść pliki cookie innych firm</translation>
 <translation id="2097372108957554726">Aby móc rejestrować nowe urządzenia, musisz się zalogować w Chrome</translation>
 <translation id="2099172618127234427">Chcesz włączyć funkcje debugowania w systemie operacyjnym Chrome – spowoduje to włączenie demona sshd i umożliwi rozruch urządzenia z dysku USB.</translation>
-<translation id="2099625543891475722">Twoje cechy fizyczne, np. wzrost;</translation>
 <translation id="2099686503067610784">Czy usunąć certyfikat serwera „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Automatyczne logowanie</translation>
 <translation id="2101225219012730419">Wersja:</translation>
@@ -2181,6 +2179,7 @@
 <translation id="3732857534841813090">Informacje powiązane z Asystentem Google</translation>
 <translation id="3733127536501031542">Serwer SSL z dostępem</translation>
 <translation id="3735740477244556633">Sortuj według</translation>
+<translation id="3738213647660363521">Niestandardowy kolor kursora</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Otworzyć <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Wykonano zrzut ekranu</translation>
@@ -2653,7 +2652,6 @@
 <translation id="4350019051035968019">To urządzenie jest oznaczone jako zarządzane przez inną domenę i nie można go przypisać do domeny, do której należy Twoje konto.</translation>
 <translation id="4350782034419308508">OK Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> chce wyszukać urządzenia Bluetooth w pobliżu. Znaleziono te urządzenia:</translation>
-<translation id="4353114845960720315">Gdy używasz VR, strona może poznać te informacje:</translation>
 <translation id="4354073718307267720">Pytaj, gdy strona chce tworzyć mapę 3D otoczenia lub śledzić pozycję kamery</translation>
 <translation id="4354344420232759511">Tutaj pojawią się odwiedzone przez Ciebie strony</translation>
 <translation id="435527878592612277">Wybierz swoje zdjęcie</translation>
@@ -2888,7 +2886,6 @@
 <translation id="4659077111144409915">Konto główne</translation>
 <translation id="4660476621274971848">To jest wersja „<ph name="NEW_ID" />”, a oczekiwano wersji „<ph name="EXPECTED_VERSION" />”</translation>
 <translation id="4660540330091848931">Zmieniam rozmiar</translation>
-<translation id="4660838440047236328">układ Twojego pokoju.</translation>
 <translation id="4661407454952063730">Dane aplikacji mogą obejmować dowolne informacje zapisane przez aplikację (w zależności od ustawień określonych przez dewelopera) – w tym dane takie jak kontakty, wiadomości i zdjęcia.</translation>
 <translation id="4662373422909645029">Pseudonim tylko bez cyfr</translation>
 <translation id="4662788913887017617">Udostępnij tę zakładkę na iPhonie</translation>
@@ -2977,9 +2974,7 @@
 <translation id="4801512016965057443">Zezwól na przesył danych w roamingu</translation>
 <translation id="4804818685124855865">Rozłącz</translation>
 <translation id="4804827417948292437">Awokado</translation>
-<translation id="4805077164141082536">Zalecamy, by przed uaktualnieniem utworzyć kopię zapasową bieżącego kontenera Linuksa.</translation>
 <translation id="4807098396393229769">Imię i nazwisko na karcie</translation>
-<translation id="4808319664292298116">Włączyć tryb VR z domeny <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Zablokowane wyskakujące okienka:</translation>
 <translation id="480990236307250886">Otwórz stronę główną</translation>
 <translation id="4811212958317149293">Automatyczne skanowanie klawiatury Switch Access</translation>
@@ -3293,6 +3288,7 @@
 <translation id="52232769093306234">Nie udało się spakować.</translation>
 <translation id="5225324770654022472">Pokaż skrót do aplikacji</translation>
 <translation id="5227679487546032910">Domyślny turkusowy awatar</translation>
+<translation id="5228088094491423618">Napisy na żywo</translation>
 <translation id="5228579091201413441">Włącz synchronizację</translation>
 <translation id="5229189185761556138">Zarządzaj metodami wprowadzania</translation>
 <translation id="5230516054153933099">Okno</translation>
@@ -3706,7 +3702,6 @@
 <translation id="5739235828260127894">Czekam na weryfikację. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Bardzo duża</translation>
 <translation id="574209121243317957">Ton</translation>
-<translation id="5745136023067925867">Otrzymuj wskazówki na temat urządzeń z systemem <ph name="DEVICE_TYPE" /> oraz najnowsze wiadomości i oferty. Dziel się swoją opinią.</translation>
 <translation id="5746169159649715125">Zapisz jako PDF</translation>
 <translation id="5747552184818312860">Wygasa</translation>
 <translation id="5747785204778348146">Deweloperska – niestabilna</translation>
@@ -4829,7 +4824,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Zamknij stronę}few{Zamknij strony}many{Zamknij strony}other{Zamknij strony}}</translation>
 <translation id="7207457272187520234">Wysyłaj dane diagnostyczne oraz informacje o użyciu. To urządzenie automatycznie wysyła do Google dane diagnostyczne oraz informacje o używaniu urządzenia i aplikacji. Dzięki temu będziemy mogli poprawić stabilność systemu i aplikacji oraz wprowadzić inne ulepszenia. Niektóre dane zbiorcze pomogą nam też udoskonalić aplikacje Google lub zostaną wykorzystane przez naszych partnerów, na przykład deweloperów aplikacji na Androida. To ustawienie jest wymuszone przez właściciela. Jeśli włączysz ustawienie Dodatkowa aktywność w internecie i aplikacjach, te dane mogą być zapisywane na Twoim koncie Google.</translation>
 <translation id="7207631048330366454">Szukaj aplikacji</translation>
-<translation id="7210171324714276060">Rozszerzenie <ph name="EXTENSION_NAME" /> zmieniło domenę wyszukiwania na <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Drukarki dostępne za pomocą rozszerzeń</translation>
 <translation id="7212097698621322584">Wpisz obecny kod PIN, by go zmienić. Jeśli go nie znasz, musisz zresetować klucz bezpieczeństwa, a potem utworzyć nowy kod PIN.</translation>
 <translation id="7216409898977639127">Operator komórkowy</translation>
@@ -5229,7 +5223,6 @@
 <translation id="7737115349420013392">Paruję z urządzeniem „<ph name="DEVICE_NAME" />”…</translation>
 <translation id="7737238973539693982">Usuń Linuksa (Beta)</translation>
 <translation id="7740996059027112821">Standardowa</translation>
-<translation id="7743128043742060936">Strona została zmieniona przez rozszerzenie <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Zobacz swoją historię drukowania</translation>
 <translation id="7744192722284567281">Doszło do naruszenia bezpieczeństwa danych</translation>
 <translation id="7750228210027921155">Obraz w obrazie</translation>
@@ -6347,6 +6340,7 @@
 <translation id="9121814364785106365">Otwórz jako przypiętą kartę</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> – wstrzymano</translation>
 <translation id="9124003689441359348">Tutaj pojawią się zapisane hasła</translation>
+<translation id="9126149354162942022">Kolor kursora</translation>
 <translation id="9128317794749765148">Nie udało się ukończyć konfiguracji</translation>
 <translation id="9128870381267983090">Połącz z siecią</translation>
 <translation id="9130015405878219958">Wprowadzono nieprawidłowy tryb.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index db450ee..b05b80f1 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Signatário do certificado</translation>
 <translation id="1145292499998999162">Plug-in bloqueado</translation>
 <translation id="1145593918056169051">A impressora parou</translation>
-<translation id="1146678959555564648">Entrar na RV</translation>
 <translation id="114721135501989771">A tecnologia Google no Chrome</translation>
 <translation id="1147991416141538220">Para solicitar acesso, entre em contato com o administrador deste dispositivo.</translation>
 <translation id="1149401351239820326">Mês de expiração</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Limpar cookies de terceiros</translation>
 <translation id="2097372108957554726">É necessário fazer login no Chrome para registrar novos dispositivos</translation>
 <translation id="2099172618127234427">Você está ativando recursos de depuração do Chrome OS que definirão sshd daemon e permitirão a inicialização a partir de drives USB.</translation>
-<translation id="2099625543891475722">suas características físicas, como altura;</translation>
 <translation id="2099686503067610784">Você quer mesmo excluir o certificado do servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Login automático</translation>
 <translation id="2101225219012730419">Versão:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">Este dispositivo não pode ser inscrito no domínio ao qual sua conta pertence, porque ele está marcado para ser gerenciado por outro domínio.</translation>
 <translation id="4350782034419308508">Oi Google</translation>
 <translation id="4351060348582610152">Solicitação de <ph name="ORIGIN" /> para procurar dispositivos Bluetooth próximos. Os seguintes dispositivos foram encontrados:</translation>
-<translation id="4353114845960720315">Enquanto você estiver em RV, o site poderá receber dados sobre:</translation>
 <translation id="4354073718307267720">Perguntar quando um site quiser criar um mapa 3D dos seus arredores ou acompanhar a posição da câmera</translation>
 <translation id="4354344420232759511">Os sites que você visitar serão exibidos aqui</translation>
 <translation id="435527878592612277">Selecione sua foto</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">Conta principal</translation>
 <translation id="4660476621274971848">A versão esperada era "<ph name="EXPECTED_VERSION" />", mas a instalada foi a "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Redimensionando</translation>
-<translation id="4660838440047236328">o layout do ambiente.</translation>
 <translation id="4661407454952063730">Os dados de apps podem ser quaisquer dados que um app tenha salvo (com base nas configurações do desenvolvedor), incluindo dados como contatos, mensagens e fotos.</translation>
 <translation id="4662373422909645029">O apelido não pode ter números</translation>
 <translation id="4662788913887017617">Compartilhar esse favorito com seu iPhone</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">Permitir roaming de dados móveis</translation>
 <translation id="4804818685124855865">Desconectar</translation>
 <translation id="4804827417948292437">Abacate</translation>
-<translation id="4805077164141082536">Recomendamos que você faça um backup do seu contêiner atual do Linux antes de fazer upgrade.</translation>
 <translation id="4807098396393229769">Nome no cartão de crédito</translation>
-<translation id="4808319664292298116">Entrar na RV do <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Pop-ups bloqueados:</translation>
 <translation id="480990236307250886">Abrir a página inicial</translation>
 <translation id="4811212958317149293">Verificação automática do teclado do acesso com interruptor</translation>
@@ -3713,7 +3707,6 @@
 <translation id="5739235828260127894">Aguardando verificação. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Muito grande</translation>
 <translation id="574209121243317957">Tom da fala</translation>
-<translation id="5745136023067925867">Receba ofertas, atualizações e dicas sobre o <ph name="DEVICE_TYPE" /> e compartilhe seu feedback</translation>
 <translation id="5746169159649715125">Salvar como PDF</translation>
 <translation id="5747552184818312860">Expira em</translation>
 <translation id="5747785204778348146">Desenvolvedor: instável</translation>
@@ -4837,7 +4830,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sair da página}one{Sair da página}other{Sair das páginas}}</translation>
 <translation id="7207457272187520234">Envie dados de uso e diagnóstico. No momento, este dispositivo está enviando automaticamente ao Google dados de diagnóstico, de uso de apps e do dispositivo. Eles ajudarão a melhorar o sistema, a estabilidade de apps e muito mais. Alguns dados agregados também ajudarão os apps do Google e nossos parceiros, como os desenvolvedores Android. Essa configuração é aplicada pelo proprietário, Se a configuração "Atividade na Web e de apps adicional" estiver ativada, esses dados poderão ser salvos na sua Conta do Google.</translation>
 <translation id="7207631048330366454">Pesquisar apps</translation>
-<translation id="7210171324714276060">A extensão <ph name="EXTENSION_NAME" /> mudou o mecanismo de pesquisa para <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Impressoras de extensão</translation>
 <translation id="7212097698621322584">Insira seu PIN atual para alterá-lo. Se você não sabe seu PIN, redefina a chave de segurança e crie um novo.</translation>
 <translation id="7216409898977639127">Operadora de celular</translation>
@@ -5237,7 +5229,6 @@
 <translation id="7737115349420013392">Pareando com "<ph name="DEVICE_NAME" />"…</translation>
 <translation id="7737238973539693982">Excluir o Linux (Beta)</translation>
 <translation id="7740996059027112821">Padrão</translation>
-<translation id="7743128043742060936">Esta página foi modificada pela extensão "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="7744047395460924128">Ver seu histórico de impressão</translation>
 <translation id="7744192722284567281">Encontrada em uma violação de dados</translation>
 <translation id="7750228210027921155">Picture-in-picture</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 2b3bd3f..d6fcc0c8 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Signatário do certificado</translation>
 <translation id="1145292499998999162">Plug-in bloqueado</translation>
 <translation id="1145593918056169051">A impressora parou</translation>
-<translation id="1146678959555564648">Entrar na RV</translation>
 <translation id="114721135501989771">Inteligên. Google no Chrome</translation>
 <translation id="1147991416141538220">Para solicitar acesso, contacte o administrador deste dispositivo.</translation>
 <translation id="1149401351239820326">Mês de expiração</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Limpar cookies de terceiros</translation>
 <translation id="2097372108957554726">É necessário iniciar sessão no Chrome para registar novos dispositivos</translation>
 <translation id="2099172618127234427">Está a ativar as funcionalidades de depuração do Chrome OS, o que vai configurar o sshd daemon e ativar o arranque a partir de unidades USB.</translation>
-<translation id="2099625543891475722">as suas caraterísticas físicas, como a altura</translation>
 <translation id="2099686503067610784">Eliminar o certificado do servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Início de sessão automático</translation>
 <translation id="2101225219012730419">Versão:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Informações relacionadas com o Assistente Google</translation>
 <translation id="3733127536501031542">Servidor SSL com "Step-up"</translation>
 <translation id="3735740477244556633">Ordenar por</translation>
+<translation id="3738213647660363521">Cor personalizada do cursor</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Pretende abrir <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Captura de ecrã efetuada</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Não é possível inscrever este dispositivo no domínio a que pertence a sua conta, porque está marcado para gestão por um domínio diferente.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> pretende procurar dispositivos Bluetooth próximos. Foram encontrados os seguintes dispositivos:</translation>
-<translation id="4353114845960720315">Enquanto estiver na RV, este site pode saber mais sobre:</translation>
 <translation id="4354073718307267720">Perguntar quando um site pretender criar um mapa 3D do ambiente à sua volta ou monitorizar a posição da câmara</translation>
 <translation id="4354344420232759511">Os sites que visitar aparecem aqui</translation>
 <translation id="435527878592612277">Selecionar a sua foto</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Conta principal</translation>
 <translation id="4660476621274971848">A versão esperada era "<ph name="EXPECTED_VERSION" />", mas a versão foi "<ph name="NEW_ID" />".</translation>
 <translation id="4660540330091848931">A redimensionar…</translation>
-<translation id="4660838440047236328">a disposição da divisão</translation>
 <translation id="4661407454952063730">Os dados de apps podem ser quaisquer dados que uma app guardou (com base nas definições do programador), incluindo dados como contactos, mensagens e fotos.</translation>
 <translation id="4662373422909645029">O pseudónimo n/ pode ter núm.</translation>
 <translation id="4662788913887017617">Partilhar este marcador com o seu iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Permitir roaming de dados móveis</translation>
 <translation id="4804818685124855865">Desligar</translation>
 <translation id="4804827417948292437">Abacate</translation>
-<translation id="4805077164141082536">Recomendamos que faça uma cópia de segurança do seu contentor do Linux atual antes de atualizar.</translation>
 <translation id="4807098396393229769">Nome no cartão</translation>
-<translation id="4808319664292298116">Pretende entrar na RV a partir do domínio <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Pop-ups bloqueados:</translation>
 <translation id="480990236307250886">Abrir a página de início</translation>
 <translation id="4811212958317149293">Análise automática do teclado do acesso por comutador</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Falha no acondicionamento.</translation>
 <translation id="5225324770654022472">Mostrar atalho das aplicações</translation>
 <translation id="5227679487546032910">Avatar azul esverdeado predefinido</translation>
+<translation id="5228088094491423618">Legendas instantâneas</translation>
 <translation id="5228579091201413441">Ativar a sincronização</translation>
 <translation id="5229189185761556138">Gerir métodos de introdução</translation>
 <translation id="5230516054153933099">Janela</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">A aguardar a validação. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Muito grande</translation>
 <translation id="574209121243317957">Tonalidade</translation>
-<translation id="5745136023067925867">Obtenha sugestões, ofertas e atualizações do <ph name="DEVICE_TYPE" /> e partilhe comentários.</translation>
 <translation id="5746169159649715125">Guardar como PDF</translation>
 <translation id="5747552184818312860">Expira</translation>
 <translation id="5747785204778348146">Programador – instável</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sair da página}other{Sair das páginas}}</translation>
 <translation id="7207457272187520234">Envie dados de utilização e diagnóstico. Agora, este dispositivo está a enviar automaticamente dados de diagnóstico, de utilização de apps e do dispositivo para a Google. Deste modo, ajudará a melhorar a estabilidade das apps e do sistema, entre outras melhorias. Alguns dados agregados também ajudarão as apps e os parceiros Google, como os programadores Android. Esta definição é aplicada pelo proprietário. Se a definição Atividade da Web e de apps adicional estiver ativada, estes dados podem ser guardados na sua Conta Google.</translation>
 <translation id="7207631048330366454">Pesquisar aplicações</translation>
-<translation id="7210171324714276060">A extensão <ph name="EXTENSION_NAME" /> alterou a pesquisa para utilizar <ph name="SEARCH_PROVIDER_DOMAIN" />.</translation>
 <translation id="7210499381659830293">Impressoras por extensão</translation>
 <translation id="7212097698621322584">Introduza o seu PIN atual para o alterar. Se não souber qual é o PIN, tem de repor a chave de segurança e, em seguida, criar um novo PIN.</translation>
 <translation id="7216409898977639127">Operador de telemóvel</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">A sincronizar com o dispositivo "<ph name="DEVICE_NAME" />"…</translation>
 <translation id="7737238973539693982">Eliminar o Linux (Beta)</translation>
 <translation id="7740996059027112821">Padrão</translation>
-<translation id="7743128043742060936">Esta página foi alterada pela extensão <ph name="EXTENSION_NAME" />.</translation>
 <translation id="7744047395460924128">Veja o seu histórico de impressão</translation>
 <translation id="7744192722284567281">Encontrada numa violação de dados</translation>
 <translation id="7750228210027921155">Ecrã no ecrã</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Abrir como separador fixo</translation>
 <translation id="9122176249172999202">O <ph name="IDS_SHORT_PRODUCT_NAME" /> foi colocado em pausa</translation>
 <translation id="9124003689441359348">As palavras-passe guardadas aparecem aqui</translation>
+<translation id="9126149354162942022">Cor do cursor</translation>
 <translation id="9128317794749765148">Não foi possível concluir a configuração</translation>
 <translation id="9128870381267983090">Ligar à rede</translation>
 <translation id="9130015405878219958">Introduzido modo inválido.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 57063a6..c5484cb 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Semnatarul certificatului</translation>
 <translation id="1145292499998999162">Plugin blocat</translation>
 <translation id="1145593918056169051">Imprimanta s-a oprit</translation>
-<translation id="1146678959555564648">Intră în RV</translation>
 <translation id="114721135501989771">Profită de ingeniozitatea Google în Chrome</translation>
 <translation id="1147991416141538220">Pentru a solicita acces, contactează administratorul dispozitivului.</translation>
 <translation id="1149401351239820326">Luna expirării</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Șterge cookie-urile terță parte</translation>
 <translation id="2097372108957554726">Pentru a înregistra dispozitive noi, este necesar să vă conectați la Chrome</translation>
 <translation id="2099172618127234427">În prezent, activezi funcțiile de remediere a erorilor în sistemul de operare Chrome, care vor configura SSH daemon și vor activa pornirea de pe dispozitive USB.</translation>
-<translation id="2099625543891475722">trăsăturile tale fizice, cum ar fi înălțimea;</translation>
 <translation id="2099686503067610784">Șterge certificatul de server „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Conectare automată</translation>
 <translation id="2101225219012730419">Versiune:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">Acest dispozitiv nu poate fi înregistrat pe domeniul căruia îi aparține contul dvs., deoarece dispozitivul este asociat pentru gestionare de alt domeniu.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> vrea să caute dispozitive Bluetooth în apropiere. Următoarele dispozitive au fost găsite:</translation>
-<translation id="4353114845960720315">În RV, acest site ar putea afla:</translation>
 <translation id="4354073718307267720">Anunță-mă dacă un site vrea să creeze o hartă 3D a lucrurilor din jur sau să urmărească poziția camerei video</translation>
 <translation id="4354344420232759511">Site-urile pe care le accesezi apar aici</translation>
 <translation id="435527878592612277">Selectează fotografia</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">Cont principal</translation>
 <translation id="4660476621274971848">Versiunea așteptată era „<ph name="EXPECTED_VERSION" />”, dar versiunea a fost „<ph name="NEW_ID" />”</translation>
 <translation id="4660540330091848931">Se redimensionează</translation>
-<translation id="4660838440047236328">aspectul camerei în care te afli.</translation>
 <translation id="4661407454952063730">Datele unei aplicații reprezintă toate datele pe care le-a salvat aplicația (în funcție de setările dezvoltatorului), inclusiv date cum ar fi agenda, mesajele și fotografiile.</translation>
 <translation id="4662373422909645029">Pseudonimele nu pot să includă cifre</translation>
 <translation id="4662788913887017617">Trimite marcajul pe iPhone</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">Permite roaming de date mobile</translation>
 <translation id="4804818685124855865">Deconectează-te</translation>
 <translation id="4804827417948292437">Avocado</translation>
-<translation id="4805077164141082536">Îți recomandăm să faci backup containerului Linux actual înainte să faci upgrade.</translation>
 <translation id="4807098396393229769">Numele de pe card</translation>
-<translation id="4808319664292298116">Intri în RV din <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Ferestre pop-up blocate:</translation>
 <translation id="480990236307250886">Deschide pagina de pornire</translation>
 <translation id="4811212958317149293">Căutarea automată a tastaturii pentru accesul prin comutare</translation>
@@ -3712,7 +3706,6 @@
 <translation id="5739235828260127894">Se așteaptă confirmarea. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Foarte mare</translation>
 <translation id="574209121243317957">Tonalitatea</translation>
-<translation id="5745136023067925867">Primește sfaturi, oferte și actualizări referitoare la <ph name="DEVICE_TYPE" /> și trimite feedback</translation>
 <translation id="5746169159649715125">Salvați ca PDF</translation>
 <translation id="5747552184818312860">Expiră</translation>
 <translation id="5747785204778348146">Canal pentru dezvoltatori – instabil</translation>
@@ -4835,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Închide pagina}few{Închide paginile}other{Închide paginile}}</translation>
 <translation id="7207457272187520234">Trimite date de utilizare și diagnosticare. Momentan, dispozitivul trimite automat date de diagnosticare și de utilizare a dispozitivului și aplicațiilor la Google. Aceasta va ajuta la stabilitatea sistemului, a aplicației și altele. Unele date cumulate vor ajuta aplicațiile și partenerii Google, cum ar fi dezvoltatorii Android. Această setare este impusă de proprietar. Dacă setarea Activitatea suplimentară de pe web și din aplicații este activată, aceste date pot fi salvate în Contul tău Google.</translation>
 <translation id="7207631048330366454">Caută aplicații</translation>
-<translation id="7210171324714276060">Extensia <ph name="EXTENSION_NAME" /> a modificat căutarea, astfel încât să folosească <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Imprimante de extensie</translation>
 <translation id="7212097698621322584">Introdu codul PIN actual pentru a-l schimba. Dacă nu știi codul PIN, trebuie să resetezi cheia de securitate, apoi să creezi un nou cod PIN.</translation>
 <translation id="7216409898977639127">Furnizor de date mobile</translation>
@@ -5235,7 +5227,6 @@
 <translation id="7737115349420013392">Se asociază cu „<ph name="DEVICE_NAME" />”...</translation>
 <translation id="7737238973539693982">Șterge Linux (Beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Această pagină a fost modificată de extensia <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Vezi istoricul de printare</translation>
 <translation id="7744192722284567281">S-a găsit în urma încălcării securității datelor</translation>
 <translation id="7750228210027921155">Picture-in-picture</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 9899656..f78f2c4 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Подписчик сертификата</translation>
 <translation id="1145292499998999162">Плагин заблокирован</translation>
 <translation id="1145593918056169051">Сбой в работе принтера</translation>
-<translation id="1146678959555564648">Войти в режим VR</translation>
 <translation id="114721135501989771">Интеллектуальные функции Google в Chrome</translation>
 <translation id="1147991416141538220">Чтобы запросить доступ, обратитесь к администратору устройства.</translation>
 <translation id="1149401351239820326">Месяц окончания срока действия</translation>
@@ -865,7 +864,6 @@
 <translation id="2096715839409389970">Удалить сторонние файлы cookie</translation>
 <translation id="2097372108957554726">Войдите в Chrome, чтобы зарегистрировать новое устройство</translation>
 <translation id="2099172618127234427">Вы включаете функции отладки Chrome OS. Будет настроен SSHD-демон и разрешена загрузка с USB-дисков.</translation>
-<translation id="2099625543891475722">получить представление о параметрах вашего тела, например о росте;</translation>
 <translation id="2099686503067610784">Удалить сертификат сервера <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Автоматический вход</translation>
 <translation id="2101225219012730419">Версия:</translation>
@@ -2183,6 +2181,7 @@
 <translation id="3732857534841813090">Подсказки от Google Ассистента</translation>
 <translation id="3733127536501031542">SSL-сервер с повышением</translation>
 <translation id="3735740477244556633">Сортировать по:</translation>
+<translation id="3738213647660363521">Пользовательский цвет курсора</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Открыть приложение "<ph name="APPLICATION" />"?</translation>
 <translation id="3742055079367172538">Сделан скриншот</translation>
@@ -2655,7 +2654,6 @@
 <translation id="4350019051035968019">Это устройство уже зарегистрировано в другом домене.</translation>
 <translation id="4350782034419308508">Фраза "Окей, Google"</translation>
 <translation id="4351060348582610152">Сайт <ph name="ORIGIN" /> ищет устройства Bluetooth поблизости. Обнаружены следующие устройства:</translation>
-<translation id="4353114845960720315">Когда вы находитесь в этом режиме, сайт может:</translation>
 <translation id="4354073718307267720">Запрашивать для сайтов разрешение на создание 3D-карты места, в котором вы находитесь, и отслеживание положения камеры</translation>
 <translation id="4354344420232759511">Здесь появятся сайты, на которые вы заходили.</translation>
 <translation id="435527878592612277">Выберите фото</translation>
@@ -2890,7 +2888,6 @@
 <translation id="4659077111144409915">Основной аккаунт</translation>
 <translation id="4660476621274971848">Ожидаемая версия: <ph name="EXPECTED_VERSION" />, полученная версия: <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">Изменение размера…</translation>
-<translation id="4660838440047236328">узнать планировку комнаты, в которой вы находитесь.</translation>
 <translation id="4661407454952063730">Данные приложений – это любая информация, которую приложения сохраняют на устройстве согласно настройкам разработчиков, например контакты, сообщения и фотографии.</translation>
 <translation id="4662373422909645029">Название не должно содержать цифры.</translation>
 <translation id="4662788913887017617">Поделитесь закладкой с iPhone</translation>
@@ -2979,9 +2976,7 @@
 <translation id="4801512016965057443">Разрешить мобильный интернет-роуминг</translation>
 <translation id="4804818685124855865">Отключиться</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Перед установкой обновления рекомендуем сохранить резервную копию контейнера Linux.</translation>
 <translation id="4807098396393229769">Имя владельца</translation>
-<translation id="4808319664292298116">Войти в режим виртуальной реальности на сайте <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Всплывающие окна заблокированы</translation>
 <translation id="480990236307250886">Перейти на главную страницу</translation>
 <translation id="4811212958317149293">Автосканирование клавиатуры с помощью функции Switch Access</translation>
@@ -3295,6 +3290,7 @@
 <translation id="52232769093306234">Не удалось выполнить сжатие.</translation>
 <translation id="5225324770654022472">Показывать кнопку "Сервисы"</translation>
 <translation id="5227679487546032910">Аватар по умолчанию (сине-зеленый)</translation>
+<translation id="5228088094491423618">Автоматические субтитры</translation>
 <translation id="5228579091201413441">Включить синхронизацию</translation>
 <translation id="5229189185761556138">Управление методами ввода</translation>
 <translation id="5230516054153933099">Окно</translation>
@@ -3708,7 +3704,6 @@
 <translation id="5739235828260127894">Требуется подтверждение. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Очень крупный</translation>
 <translation id="574209121243317957">Высота звука</translation>
-<translation id="5745136023067925867">Вы можете подписаться на нашу рассылку и получать советы по работе с устройствами <ph name="DEVICE_TYPE" />, специальные предложения и новости, а также оставлять отзывы.</translation>
 <translation id="5746169159649715125">Сохранить как PDF</translation>
 <translation id="5747552184818312860">Срок действия</translation>
 <translation id="5747785204778348146">Нестабильная</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Закрыть страницу}one{Закрыть страницы}few{Закрыть страницы}many{Закрыть страницы}other{Закрыть страницы}}</translation>
 <translation id="7207457272187520234">Отправка данных об использовании и диагностике. Сейчас это устройство автоматически отправляет в Google диагностическую информацию, сведения об использовании приложений и самого устройства. Эти сведения помогут нам повысить стабильность приложений и внести другие улучшения. Некоторые агрегированные данные пригодятся партнерам Google, например разработчикам Android. Эта настройка принудительно применяется владельцем. Если запись дополнительной истории приложений и веб-поиска включена, эта информация может сохраняться в вашем аккаунте.</translation>
 <translation id="7207631048330366454">Поиск приложений</translation>
-<translation id="7210171324714276060">Расширение "<ph name="EXTENSION_NAME" />" изменило поисковую систему на <ph name="SEARCH_PROVIDER_DOMAIN" />.</translation>
 <translation id="7210499381659830293">Принтеры, работающие через расширение</translation>
 <translation id="7212097698621322584">Сначала введите текущий PIN-код. Если вы его не знаете, сбросьте настройки электронного ключа и установите новый PIN-код.</translation>
 <translation id="7216409898977639127">Оператор сотовой связи</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">Подключение к устройству "<ph name="DEVICE_NAME" />"...</translation>
 <translation id="7737238973539693982">Удаление Linux (бета)</translation>
 <translation id="7740996059027112821">Стандартный</translation>
-<translation id="7743128043742060936">Эта страница изменена расширением "<ph name="EXTENSION_NAME" />".</translation>
 <translation id="7744047395460924128">Просмотр истории печати</translation>
 <translation id="7744192722284567281">Раскрыт при утечке данных</translation>
 <translation id="7750228210027921155">Картинка в картинке</translation>
@@ -6348,6 +6341,7 @@
 <translation id="9121814364785106365">Открыть в закрепленной вкладке</translation>
 <translation id="9122176249172999202">Работа приложения "<ph name="IDS_SHORT_PRODUCT_NAME" />" приостановлена</translation>
 <translation id="9124003689441359348">Здесь появятся сохраненные пароли</translation>
+<translation id="9126149354162942022">Цвет курсора</translation>
 <translation id="9128317794749765148">Не удалось завершить установку</translation>
 <translation id="9128870381267983090">Подключитесь к сети</translation>
 <translation id="9130015405878219958">Указан неверный режим.</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index e40956c..29f8ba0 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">සහතික අත්සන් කරන්නා</translation>
 <translation id="1145292499998999162">ප්ලගින අවහිර කරන ලදී</translation>
 <translation id="1145593918056169051">මුද්‍රකය නැවතී ඇත</translation>
-<translation id="1146678959555564648">VR ඇතුළු කරන්න</translation>
 <translation id="114721135501989771">Chromeවල Google ස්මාට් ගන්න</translation>
 <translation id="1147991416141538220">ප්‍රවේශය ඉල්ලීමට, මෙම උපාංගයේ පරිපාලකයා සම්බන්ධ කර ගන්න.</translation>
 <translation id="1149401351239820326">කල් ඉකුත් වන මාසය</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">තෙවන පාර්ශ්ව කුකී හිස් කරන්න</translation>
 <translation id="2097372108957554726">නව උපාංග වෙත ලියාපදිංචි වීමට ඔබ Chrome වෙත ලියාපදිංචි විය යුතුය</translation>
 <translation id="2099172618127234427">ඔබ sshd  ඩීමනයක් හා USB මගින් ආරම්භ වන සේ සැකසෙන  Chrome OS දෝශ නිරාකරණ විශේෂාංග සක්‍රීය කරයි.</translation>
-<translation id="2099625543891475722">උස වැනි ඔබේ ශාරීරික ලක්‍ෂණ</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" සේවාදායක සහතිකය මකන්නද?</translation>
 <translation id="2100273922101894616">ස්වයංක්‍රිය පුරනය වන්න</translation>
 <translation id="2101225219012730419">අනුවාදය:</translation>
@@ -2656,7 +2654,6 @@
 <translation id="4350019051035968019">උපාංගය වෙනත් වසමක් මගින් පරිපාලනය සඳහා ලකුණු කර ඇති බැවින් මෙම උපාංගට ඔබේ ගිනුම අයත් වසමට එක්විය නොහැක.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> හට අවට බ්ලූටූත් උපාංග සඳහා ස්කෑන් කිරීමට අවශ්‍යයි. පහත උපාංග සොයාගනු ලැබීය:</translation>
-<translation id="4353114845960720315">ඔබ VR තුළ සිටින විට, මෙම වෙබ් අඩවියට මේවා ගැන දැන ගත හැකි වීමට ඉඩ ඇත:</translation>
 <translation id="4354073718307267720">වෙබ් අඩවියකට ඔබේ වටපිටාවේ ත්‍රිමාන සිතියමක් සෑදීමට හෝ කැමරා ස්ථානය හඹා යෑමට ඉඩ දීමට පෙර අසන්න</translation>
 <translation id="4354344420232759511">ඔබ පැමිණෙන වෙබ් අඩවි මෙහි දිස් වෙති</translation>
 <translation id="435527878592612277">ඔබේ ඡායාරූපය තෝරන්න</translation>
@@ -2891,7 +2888,6 @@
 <translation id="4659077111144409915">ප්‍රාථමික ගිණුම</translation>
 <translation id="4660476621274971848">අපේක්ෂිත අනුවාදය "<ph name="EXPECTED_VERSION" />", නමුත් අනුවාදය වූයේ "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">ප්‍රතිප්‍රමාණ කිරීම</translation>
-<translation id="4660838440047236328">ඔබේ කාමරයේ වින්‍යාසය</translation>
 <translation id="4661407454952063730">යෙදුම් දත්ත යනු සම්බන්ධතා, පණිවුඩ, සහ ඡායාරූප වැනි දත්ත ඇතුළුව, යෙදුමක් විසින් සුරැක ඇති (සංවර්ධක සැකසීම් මත පදනම්ව) කිසියම් දත්ත වේ.</translation>
 <translation id="4662373422909645029">අපනාමයේ අංක ඇතුළත් විය නොහැක</translation>
 <translation id="4662788913887017617">ඔබේ iPhone සමඟ මෙම පිටුසන බෙදා ගන්න</translation>
@@ -2980,9 +2976,7 @@
 <translation id="4801512016965057443">ජංගම දත්ත රෝමිං සඳහා ඉඩ දෙන්න</translation>
 <translation id="4804818685124855865">විසන්ධි කරන්න</translation>
 <translation id="4804827417948292437">අලිගැටපේර</translation>
-<translation id="4805077164141082536">උත්ශ්‍රේණි කිරීමට පෙර අපි ඔබට ඔබේ වත්මන් ලිනක්ස් භාජනය උපස්ථ කිරීම නිර්දේශ කරමු.</translation>
 <translation id="4807098396393229769">කාඩ්පතෙහි නම</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> වෙතින් VR එකට ඇතුළත් වන්නේද?</translation>
 <translation id="4808667324955055115">උත්පතන අවහිරයි:</translation>
 <translation id="480990236307250886">මුල් පිටුව විවෘත කරන්න</translation>
 <translation id="4811212958317149293">යතුරු පුවරු ස්වයං ස්කෑන් වෙත ප්‍රවේශය මාරු කරන්න</translation>
@@ -3711,7 +3705,6 @@
 <translation id="5739235828260127894">සත්‍යාපනය බලාපොරොත්තුවෙන් <ph name="LINK_BEGIN" />තවත් දැන ගන්න.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ඉතා විශාල</translation>
 <translation id="574209121243317957">තාරතාව</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> ඉඟි, දීමනා සහ යාවත්කාලීන ලබා ගන්න, සහ ප්‍රතිපෝෂණ බෙදා ගන්න</translation>
 <translation id="5746169159649715125">PDF ලෙස සුරකින්න</translation>
 <translation id="5747552184818312860">කල් ඉකුත් වේ</translation>
 <translation id="5747785204778348146">සංවර්ධක - අස්ථිර</translation>
@@ -4832,7 +4825,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{පිටවීමේ පිටුව}one{පිටවීමේ පිටු}other{පිටවීමේ පිටු}}</translation>
 <translation id="7207457272187520234">භාවිත සහ දෝෂ නිර්ණ දත්ත යවන්න. මෙම උපාංගය ස්වයංක්‍රියව රෝග විනිශ්චය, උපාංග සහ යෙදුම් භාවිත දත්ත Google වෙත යවයි. මෙය පද්ධති සහ යෙදුම් ස්ථායිතාවට සහ අනෙකුත් වැඩිදියුණු කිරීම්වලට උදවු කරයි. සමහර එකතු කළ දත්ත Google යෙදුම්වලට සහ Android සංවර්ධකයින් වැනි හවුල්කරුවන්ට ද උදවු කරති. මෙම සැකසීම හිමිකරු විසින් බලාත්මක කෙරේ. ඔබේ අමතර වෙබ් සහ යෙදුම් ක්‍රියාකාරකම් සැකසීම සක්‍රීය නම්, මෙම දත්ත ඔබේ Google ගිණුුමට සුරකිනු ලැබේ.</translation>
 <translation id="7207631048330366454">යෙදුම් සොයන්න</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> දිගුව <ph name="SEARCH_PROVIDER_DOMAIN" /> භාවිතයට ඇති සෙවීම වෙනස් කළා</translation>
 <translation id="7210499381659830293">දිගු මුද්‍රක</translation>
 <translation id="7212097698621322584">එය වෙනස් කිරීමට ඔබේ රහස් අංකය ඇතුළත් කරන්න. ඔබ ඔබේ රහස් අංකය නොදන්නෙහි නම්, ඔබ ආරක්‍ෂක යතුර යළි සකසා, නව රහස් අංකයක් සෑදිය යුතු ය.</translation>
 <translation id="7216409898977639127">සෙලියුලර් සපයන්නා</translation>
@@ -5232,7 +5224,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" සමඟ යුගල කෙරේ...</translation>
 <translation id="7737238973539693982">Linux (Beta) මකා දමන්න</translation>
 <translation id="7740996059027112821">සම්මත</translation>
-<translation id="7743128043742060936">මෙම පිටුව <ph name="EXTENSION_NAME" /> දිගුව මඟින් වෙසන් කෙරිණි</translation>
 <translation id="7744047395460924128">ඔබේ මුද්‍රණ ඉතිහාසය බලන්න</translation>
 <translation id="7744192722284567281">දත්ත කඩ කිරීම තුළ හමු විය</translation>
 <translation id="7750228210027921155">පින්තූරය-තුළ-පින්තූරය</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index f739a23..1f4a9bd 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Podpisovateľ certifikátu</translation>
 <translation id="1145292499998999162">Doplnok je blokovaný</translation>
 <translation id="1145593918056169051">Tlačiareň sa zastavila</translation>
-<translation id="1146678959555564648">Zadať VR</translation>
 <translation id="114721135501989771">Získajte inteligentné doplnky Googlu v Chrome</translation>
 <translation id="1147991416141538220">Ak chcete požiadať o prístup, kontaktujte správcu tohto zariadenia.</translation>
 <translation id="1149401351239820326">Mesiac vypršania platnosti</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Vymazať súbory cookie tretej strany</translation>
 <translation id="2097372108957554726">Ak chcete registrovať nové zariadenia, musíte sa prihlásiť do prehliadača Chrome</translation>
 <translation id="2099172618127234427">Aktivujete funkcie ladenia systému OS Chrome, ktoré nastavia démona sshd a umožnia spúšťanie z jednotiek USB.</translation>
-<translation id="2099625543891475722">vašich fyzických vlastnostiach, napríklad výške;</translation>
 <translation id="2099686503067610784">Odstrániť certifikát servera „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Automaticky prihlasovať</translation>
 <translation id="2101225219012730419">Verzia:</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">Informácie súvisiace s Asistentom Google</translation>
 <translation id="3733127536501031542">Server SSL s prestupom na vyššiu edíciu</translation>
 <translation id="3735740477244556633">Zoradiť podľa</translation>
+<translation id="3738213647660363521">Vlastná farba kurzora</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Otvoriť <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Vytvorila sa snímka obrazovky</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">Toto zariadenie nemôže byť zaregistrované do domény vášho účtu, pretože je označené ako spravované inou doménou.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> chce vyhľadávať zariadenia Bluetooth nablízku. Našli sa tieto zariadenia:</translation>
-<translation id="4353114845960720315">Keď budete vo VR, tento web môže získať informácie o:</translation>
 <translation id="4354073718307267720">Opýtať sa, keď chce web vytvoriť 3D mapu vášho okolia alebo sledovať umiestnenie kamier</translation>
 <translation id="4354344420232759511">Navštívené weby sa zobrazia tu</translation>
 <translation id="435527878592612277">Vyberte fotku</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">Primárny účet</translation>
 <translation id="4660476621274971848">Očakávaná verzia bola „<ph name="EXPECTED_VERSION" />“. Skutočná verzia bola „<ph name="NEW_ID" />“.</translation>
 <translation id="4660540330091848931">Mení sa veľkosť</translation>
-<translation id="4660838440047236328">rozložení vašej miestnosti.</translation>
 <translation id="4661407454952063730">Dáta aplikácií môžu byť ľubovoľné údaje uložené aplikáciou (na základe nastavení vývojára) vrátane údajov, ako sú kontakty, správy a fotky.</translation>
 <translation id="4662373422909645029">Prezývka nemôže mať čísla</translation>
 <translation id="4662788913887017617">Zdieľajte túto záložku so zariadením iPhone</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">Povoliť roaming pre mobilné dáta</translation>
 <translation id="4804818685124855865">Odpojiť</translation>
 <translation id="4804827417948292437">Avokádo</translation>
-<translation id="4805077164141082536">Odporúčame vám pred inováciou zálohovať kontajner aktuálneho systému Linux.</translation>
 <translation id="4807098396393229769">Meno na karte</translation>
-<translation id="4808319664292298116">Chcete prejsť do VR z domény <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Boli zablokované kontextové okná:</translation>
 <translation id="480990236307250886">Otvoriť domovskú stránku</translation>
 <translation id="4811212958317149293">Automatické prehľadanie klávesnice na ovládanie prepínačmi</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">Nepodarilo sa zbaliť.</translation>
 <translation id="5225324770654022472">Zobrazovať odkaz aplikácií</translation>
 <translation id="5227679487546032910">Predvolený modrozelený avatar</translation>
+<translation id="5228088094491423618">Živý prepis</translation>
 <translation id="5228579091201413441">Povoliť synchronizáciu</translation>
 <translation id="5229189185761556138">Spravovať metódy vstupu</translation>
 <translation id="5230516054153933099">Okno</translation>
@@ -3709,7 +3705,6 @@
 <translation id="5739235828260127894">Čaká sa na overenie. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Veľmi veľké</translation>
 <translation id="574209121243317957">Výška hlasu</translation>
-<translation id="5745136023067925867">Dostávajte tipy, ponuky a aktuality týkajúce sa zariadenia <ph name="DEVICE_TYPE" /> a zdieľajte spätnú väzbu</translation>
 <translation id="5746169159649715125">Uložiť ako PDF</translation>
 <translation id="5747552184818312860">Koniec platnosti</translation>
 <translation id="5747785204778348146">Vývojár – nestabilné</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Opustiť stránku}few{Opustiť stránky}many{Opustiť stránky}other{Opustiť stránky}}</translation>
 <translation id="7207457272187520234">Odosielanie údajov o využití a diagnostiky. Toto zariadenie momentálne automaticky odosiela Googlu diagnostiky a údaje o používaní zariadenia a aplikácií. Pomôžu zvýšiť stabilitu systému a aplikácií a poskytovať ďalšie zlepšenia. Niektoré súhrnné údaje tiež pomôžu aplikáciám Google a partnerom, ako napríklad vývojárom pre Android. Používanie tohto nastavenia je presadzované vlastníkom. Ak aktivujete ďalšiu aktivitu na internete a v aplikáciách, tieto údaje sa uložia vo vašom účte Google.</translation>
 <translation id="7207631048330366454">Vyhľadajte aplikácie</translation>
-<translation id="7210171324714276060">Rozšírenie <ph name="EXTENSION_NAME" /> zmenilo doménu vyhľadávania na <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Tlačiarne s rozšíreniami</translation>
 <translation id="7212097698621322584">Zadajte svoj aktuálny kód PIN a zmeňte ho. Ak ho nepoznáte, musíte resetovať bezpečnostný kľúč a potom vytvoriť nový PIN.</translation>
 <translation id="7216409898977639127">Poskytovateľ mobilného pripojenia</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">Páruje sa so zariadením <ph name="DEVICE_NAME" />...</translation>
 <translation id="7737238973539693982">Odstrániť Linux (beta)</translation>
 <translation id="7740996059027112821">Štandardne</translation>
-<translation id="7743128043742060936">Táto stránka bola zmenená rozšírením <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Zobraziť históriu tlače</translation>
 <translation id="7744192722284567281">Nájdené v rámci porušenia ochrany údajov</translation>
 <translation id="7750228210027921155">Obraz v obraze</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">Otvoriť ako pevnú kartu</translation>
 <translation id="9122176249172999202">Aplikácia <ph name="IDS_SHORT_PRODUCT_NAME" /> je pozastavená</translation>
 <translation id="9124003689441359348">Tu sa zobrazia uložené heslá</translation>
+<translation id="9126149354162942022">Farba kurzora</translation>
 <translation id="9128317794749765148">Nastavenie sa nepodarilo dokončiť</translation>
 <translation id="9128870381267983090">Pripojiť k sieti</translation>
 <translation id="9130015405878219958">Zadali ste neplatný režim.</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 45a4e3c..62889c3 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Podpisnik potrdila</translation>
 <translation id="1145292499998999162">Vtičnik je blokiran</translation>
 <translation id="1145593918056169051">Tiskalnik se je ustavil</translation>
-<translation id="1146678959555564648">V navidezno resničnost</translation>
 <translation id="114721135501989771">Prejmite Googlove pametne rešitve v Chromu</translation>
 <translation id="1147991416141538220">Če želite zahtevati dostop, se obrnite na skrbnika naprave.</translation>
 <translation id="1149401351239820326">Mesec poteka</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Izbriši piškotke drugih spletnih mest</translation>
 <translation id="2097372108957554726">Za registracijo novih naprav se morate prijaviti v Chrome</translation>
 <translation id="2099172618127234427">Omogočili boste funkcije za odpravljanje napak sistema Chrome OS, tako da boste nastavili sshd daemon in omogočili zagon prek pogonov USB.</translation>
-<translation id="2099625543891475722">vaše fizične poteze, na primer višina,</translation>
 <translation id="2099686503067610784">Ali želite izbrisati strežniško potrdilo »<ph name="CERTIFICATE_NAME" />«?</translation>
 <translation id="2100273922101894616">Samodejna prijava</translation>
 <translation id="2101225219012730419">Različica:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Povezane informacije v Pomočniku Google</translation>
 <translation id="3733127536501031542">Strežnik SSL z nadgradnjo</translation>
 <translation id="3735740477244556633">Razvrsti po</translation>
+<translation id="3738213647660363521">Barva kazalca po meri</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Želite odpreti aplikacijo <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Posnetek zaslona je narejen</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Te naprave ni mogoče včlaniti v domeno vašega računa, ker je naprava označena za upravljanje v drugi domeni.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> želi iskati naprave Bluetooth v bližini. Najdene so bile te naprave:</translation>
-<translation id="4353114845960720315">Med uporabo navidezne resničnosti lahko to spletno mesto o vas izve to:</translation>
 <translation id="4354073718307267720">Vprašaj, ko želi spletno mesto ustvariti 3D-zemljevid vaše okolice ali spremljati položaj kamere</translation>
 <translation id="4354344420232759511">Spletna mesta, ki jih obiščete, bodo prikazana tu</translation>
 <translation id="435527878592612277">Izberite fotografijo</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Glavni račun</translation>
 <translation id="4660476621274971848">Pričakovana različica je »<ph name="EXPECTED_VERSION" />«, toda različica je bila »<ph name="NEW_ID" />«</translation>
 <translation id="4660540330091848931">Spreminjanje velikosti</translation>
-<translation id="4660838440047236328">tloris sobe.</translation>
 <translation id="4661407454952063730">Podatki aplikacij so lahko kateri koli podatki, ki jih je shranila aplikacija (glede na nastavitve razvijalca), vključno s podatki, kot so stiki, sporočila in fotografije.</translation>
 <translation id="4662373422909645029">Vzdevek ne sme vsebovati številk</translation>
 <translation id="4662788913887017617">Deljenje tega zaznamka z iPhonom</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Dovoli mobilno podatkovno gostovanje</translation>
 <translation id="4804818685124855865">Prekini povezavo</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Priporočamo, da pred nadgradnjo varnostno kopirate trenutni vsebnik za Linux.</translation>
 <translation id="4807098396393229769">Ime na kartici</translation>
-<translation id="4808319664292298116">Želite zagnati navidezno resničnost z domene <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Blokirana so pojavna okna:</translation>
 <translation id="480990236307250886">Odpri domačo stran</translation>
 <translation id="4811212958317149293">Samodejno pregledovanje tipkovnice stikalnega dostopa</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Pakiranje ni uspelo.</translation>
 <translation id="5225324770654022472">Prikaži bližnjico do aplikacij</translation>
 <translation id="5227679487546032910">Privzeti modrozeleni avatar</translation>
+<translation id="5228088094491423618">Samodejni podnapisi</translation>
 <translation id="5228579091201413441">Omogoči sinhronizacijo</translation>
 <translation id="5229189185761556138">Upravljanje načinov vnosa</translation>
 <translation id="5230516054153933099">Okno</translation>
@@ -3712,7 +3708,6 @@
 <translation id="5739235828260127894">Čakanje na potrditev. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Zelo velika</translation>
 <translation id="574209121243317957">Višina tona</translation>
-<translation id="5745136023067925867">Prejmite nasvete, ponudbe in obvestila za napravo <ph name="DEVICE_TYPE" /> ter pošiljajte povratne informacije</translation>
 <translation id="5746169159649715125">Shrani kot PDF</translation>
 <translation id="5747552184818312860">Poteče</translation>
 <translation id="5747785204778348146">Razvijalska različica – ni stabilna</translation>
@@ -4835,7 +4830,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Zapri stran}one{Zapri strani}two{Zapri strani}few{Zapri strani}other{Zapri strani}}</translation>
 <translation id="7207457272187520234">Pošiljanje podatkov o uporabi in diagnostičnih podatkov. Ta naprava trenutno Googlu samodejno pošilja diagnostične podatke ter podatke o uporabi naprave in aplikacij. Te podatke uporabljamo za izboljšanje stabilnosti sistema in izvajanja aplikacij ter drugega. Nekateri združeni podatki bodo pomagali tudi Googlovim aplikacijam in partnerjem, na primer razvijalcem za Android. To nastavitev je uveljavil lastnik naprave. Če ste vklopili dodatno beleženje dejavnosti v spletu in aplikacijah, bodo ti podatki morda shranjeni v vašem računu Google.</translation>
 <translation id="7207631048330366454">Iščite aplikacije</translation>
-<translation id="7210171324714276060">Razširitev <ph name="EXTENSION_NAME" /> je spremenila ponudnika iskanja; poslej se uporablja <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Tiskalniki razširitev</translation>
 <translation id="7212097698621322584">Vnesite trenutno kodo PIN, da jo spremenite. Če kode PIN ne poznate, morate ponastaviti varnostni ključ, nato ustvarite novo kodo PIN.</translation>
 <translation id="7216409898977639127">Ponudnik mobilnih storitev</translation>
@@ -5235,7 +5229,6 @@
 <translation id="7737115349420013392">Seznanjanje z napravo »<ph name="DEVICE_NAME" />« …</translation>
 <translation id="7737238973539693982">Izbris Linuxa (beta)</translation>
 <translation id="7740996059027112821">Standardno</translation>
-<translation id="7743128043742060936">To stran je spremenila razširitev <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Ogled zgodovine tiskanja</translation>
 <translation id="7744192722284567281">Najdeno pri podatkovni kršitvi</translation>
 <translation id="7750228210027921155">Slika v sliki</translation>
@@ -6353,6 +6346,7 @@
 <translation id="9121814364785106365">Odpri na pripetem zavihku</translation>
 <translation id="9122176249172999202">Aplikacija <ph name="IDS_SHORT_PRODUCT_NAME" /> je začasno zaustavljena</translation>
 <translation id="9124003689441359348">Shranjena gesla bodo prikazana tukaj</translation>
+<translation id="9126149354162942022">Barva kazalca</translation>
 <translation id="9128317794749765148">Nastavitve ni bilo mogoče dokončati</translation>
 <translation id="9128870381267983090">Vzpostavi povezavo z omrežjem</translation>
 <translation id="9130015405878219958">Vneseni način ni veljaven.</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 33d961e..d624cc2a 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Nënshkruesi i certifikatës</translation>
 <translation id="1145292499998999162">Përbërësi shtesë u bllokua</translation>
 <translation id="1145593918056169051">Printeri ka ndaluar</translation>
-<translation id="1146678959555564648">Hyr në VR</translation>
 <translation id="114721135501989771">Merr funksionet inteligjente të Google në Chrome</translation>
 <translation id="1147991416141538220">Për të kërkuar qasjen, kontakto me administratorin e kësaj pajisjeje.</translation>
 <translation id="1149401351239820326">Muaji i skadimit</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Pastro kukit e palëve të treta</translation>
 <translation id="2097372108957554726">Duhet të identifikohesh te Chrome për të regjistruar pajisjet e tua</translation>
 <translation id="2099172618127234427">Po aktivizon funksionet e korrigjimit të sistemit operativ Chrome që do të konfigurojnë sshd daemon dhe do të aktivizojnë fillimin nga disqet USB.</translation>
-<translation id="2099625543891475722">karakteristikat e tua fizike, si gjatësia</translation>
 <translation id="2099686503067610784">Dëshiron ta fshish certifikatën "<ph name="CERTIFICATE_NAME" />" të serverit?</translation>
 <translation id="2100273922101894616">Identifikohu automatikisht</translation>
 <translation id="2101225219012730419">Versioni:</translation>
@@ -2655,7 +2653,6 @@
 <translation id="4350019051035968019">Kjo pajisje nuk mund të regjistrohet në domenin të cilit i përket llogaria jote sepse pajisja është e shënuar për menaxhim nga një domen tjetër.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> dëshiron të skanojë për pajisje Bluetooth në afërsi. Janë gjetur pajisjet e mëposhtme:</translation>
-<translation id="4353114845960720315">Kur je në VR, ky sajt mund të arrijë të mësojë për:</translation>
 <translation id="4354073718307267720">Pyet kur një sajt kërkon të krijojë një hartë 3D të ambientit tënd rrethues ose të gjurmojë pozicionin e kamerës</translation>
 <translation id="4354344420232759511">Sajtet që viziton do të shfaqen këtu</translation>
 <translation id="435527878592612277">Zgjidh foton tënde</translation>
@@ -2890,7 +2887,6 @@
 <translation id="4659077111144409915">Llogaria parësore</translation>
 <translation id="4660476621274971848">Versioni i pritur ishte "<ph name="EXPECTED_VERSION" />", por versioni rezultoi "<ph name="NEW_ID" />".</translation>
 <translation id="4660540330091848931">Po ndryshon madhësinë</translation>
-<translation id="4660838440047236328">struktura e dhomës</translation>
 <translation id="4661407454952063730">E dhënë aplikacioni mund të jetë çdo e dhënë që një aplikacion ka ruajtur (bazuar në cilësimet e zhvilluesit), duke përfshirë të dhënat si kontaktet, mesazhet dhe fotografitë.</translation>
 <translation id="4662373422909645029">Pseudonimi nuk mund të përmbajë numra</translation>
 <translation id="4662788913887017617">Ndaje këtë faqeshënues me telefonin tënd iPhone</translation>
@@ -2979,9 +2975,7 @@
 <translation id="4801512016965057443">Lejo roaming-un për të dhënat celulare</translation>
 <translation id="4804818685124855865">Shkëputu</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Rekomandojmë që të rezervosh kontejnerin aktual të Linux përpara përmirësimit.</translation>
 <translation id="4807098396393229769">Emri në kartë</translation>
-<translation id="4808319664292298116">Do të hysh në VR nga <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Dritaret kërcyese u bllokuan:</translation>
 <translation id="480990236307250886">Hap faqen bazë</translation>
 <translation id="4811212958317149293">Skanimi automatik i tastierës së qasjes me çelës</translation>
@@ -3709,7 +3703,6 @@
 <translation id="5739235828260127894">Në pritje të verifikimit. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Shumë të mëdha</translation>
 <translation id="574209121243317957">Tonaliteti</translation>
-<translation id="5745136023067925867">Merr këshilla, oferta dhe përditësime për <ph name="DEVICE_TYPE" /> dhe ndaj komentet e tua</translation>
 <translation id="5746169159649715125">Ruaj si PDF</translation>
 <translation id="5747552184818312860">Skadon</translation>
 <translation id="5747785204778348146">Programimi - i paqëndrueshëm</translation>
@@ -4832,7 +4825,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Dil nga faqja}other{Dil nga faqet}}</translation>
 <translation id="7207457272187520234">Dërgo të dhënat e përdorimit dhe të diagnostikimit. Aktualisht kjo pajisje po dërgon automatikisht te Google të dhënat e diagnostikimit dhe të përdorimit të pajisjes dhe të aplikacioneve. Këto do të ndihmojnë për qëndrueshmërinë e sistemit dhe të aplikacioneve dhe për përmirësime të tjera. Disa të dhëna të përmbledhura do të ndihmojnë po ashtu aplikacionet dhe partnerët e Google, si p.sh. zhvilluesit e Android. Ky cilësim zbatohet nga zotëruesi. Nëse cilësimi i "Aktivitetit shtesë të uebit dhe të aplikacioneve" është i aktivizuar, këto të dhëna mund të ruhen në "Llogarinë tënde të Google".</translation>
 <translation id="7207631048330366454">Kërko për aplikacione</translation>
-<translation id="7210171324714276060">Shtesa <ph name="EXTENSION_NAME" /> ndryshoi kërkimin për të përdorur <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Printerët e shtesës</translation>
 <translation id="7212097698621322584">Fut kodin PIN aktual për ta ndryshuar. Nëse nuk e di kodin PIN, duhet të rivendosësh çelësin e sigurisë, dhe më pas të krijosh një kod të ri PIN.</translation>
 <translation id="7216409898977639127">Operatori celular</translation>
@@ -5232,7 +5224,6 @@
 <translation id="7737115349420013392">Po çiftohet me "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Fshi Linux (Beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Kjo faqe është ndryshuar nga shtesa "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="7744047395460924128">Shiko historikun tënd të printimit</translation>
 <translation id="7744192722284567281">U gjet në një nxjerrje të paautorizuar të të dhënave</translation>
 <translation id="7750228210027921155">Figurë brenda figurës</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 346ac02..fcc704a 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Potpisnik sertifikata</translation>
 <translation id="1145292499998999162">Dodatna komponenta je blokirana</translation>
 <translation id="1145593918056169051">Štampač je prestao da radi</translation>
-<translation id="1146678959555564648">Uđi u VR</translation>
 <translation id="114721135501989771">Pametne Google funkcije</translation>
 <translation id="1147991416141538220">Da biste zatražili pristup, obratite se administratoru ovog uređaja.</translation>
 <translation id="1149401351239820326">Mesec isteka</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Obriši kolačiće treće strane</translation>
 <translation id="2097372108957554726">Potrebno je da se prijavite u Chrome da biste registrovali nove uređaje</translation>
 <translation id="2099172618127234427">Omogućavate Chrome OS funkcije za otklanjanje grešaka koje će podesiti sshd daemon i omogućiti uključivanje sa USB diskova.</translation>
-<translation id="2099625543891475722">vašim fizičkim osobinama, poput visine</translation>
 <translation id="2099686503067610784">Želite da izbrišete serverski sertifikat „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Automatsko prijavljivanje</translation>
 <translation id="2101225219012730419">Verzija:</translation>
@@ -2182,6 +2180,7 @@
 <translation id="3732857534841813090">Informacije povezane sa Google pomoćnikom</translation>
 <translation id="3733127536501031542">SSL server sa mogućnošću prelaska na noviju verziju</translation>
 <translation id="3735740477244556633">Sortiraj prema</translation>
+<translation id="3738213647660363521">Prilagođena boja kursora</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Želite li da otvorite <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Snimak ekrana je napravljen</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">Ovaj uređaj ne može da se registruje na domenu kome pripada vaš nalog jer je označen kao uređaj kojim upravlja drugi domen.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> želi da traži Bluetooth uređaje u blizini. Pronađeni su sledeći uređaji:</translation>
-<translation id="4353114845960720315">Dok ste u VR režimu, ovaj sajt će možda moći da sazna nešto o vama:</translation>
 <translation id="4354073718307267720">Pitaj kada sajt želi da pravi 3D mapu okruženja ili da prati položaj kamere</translation>
 <translation id="4354344420232759511">Ovde se prikazuju sajtovi koje ste posetili</translation>
 <translation id="435527878592612277">Izaberite sliku</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">Primarni nalog</translation>
 <translation id="4660476621274971848">Očekivala se verzija „<ph name="EXPECTED_VERSION" />“, ali je verzija bila „<ph name="NEW_ID" />“</translation>
 <translation id="4660540330091848931">Promena veličine</translation>
-<translation id="4660838440047236328">izgledu vaše sobe</translation>
 <translation id="4661407454952063730">Podaci aplikacija mogu da budu bilo koji podaci koje je aplikacija sačuvala (na osnovu podešavanja programera), uključujući podatke kao što su kontakti, poruke i slike.</translation>
 <translation id="4662373422909645029">Nadimak ne sme da sadrži brojeve</translation>
 <translation id="4662788913887017617">Delite ovaj obeleživač sa iPhone-om</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">Dozvoli roming za podatke sa mobilnog uređaja</translation>
 <translation id="4804818685124855865">Prekini vezu</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Preporučujemo da napravite rezervnu kopiju aktuelnog Linux kontejnera pre nadogradnje.</translation>
 <translation id="4807098396393229769">Ime i prezime na kartici</translation>
-<translation id="4808319664292298116">Želite da aktivirate VR sa <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Iskačući prozori su blokirani:</translation>
 <translation id="480990236307250886">Otvori početnu stranicu</translation>
 <translation id="4811212958317149293">Automatsko skeniranje tastature za pristup pomoću prekidača</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">Pakovanje nije uspelo.</translation>
 <translation id="5225324770654022472">Prikaži prečicu za aplikacije</translation>
 <translation id="5227679487546032910">Podrazumevani tirkizni avatar</translation>
+<translation id="5228088094491423618">Titl uživo</translation>
 <translation id="5228579091201413441">Omogući sinhronizaciju</translation>
 <translation id="5229189185761556138">Upravljanje metodima unosa</translation>
 <translation id="5230516054153933099">Prozor</translation>
@@ -3708,7 +3704,6 @@
 <translation id="5739235828260127894">Čeka se verifikacija. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Jako veliki</translation>
 <translation id="574209121243317957">Nivo</translation>
-<translation id="5745136023067925867">Preuzmite <ph name="DEVICE_TYPE" /> savete, ponude i ažuriranja i delite povratne informacije</translation>
 <translation id="5746169159649715125">Sačuvaj kao PDF</translation>
 <translation id="5747552184818312860">Ističe</translation>
 <translation id="5747785204778348146">Programer – nestabilno</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Zatvori stranicu}one{Zatvori stranice}few{Zatvori stranice}other{Zatvori stranice}}</translation>
 <translation id="7207457272187520234">Šaljite podatke o korišćenju i dijagnostičke podatke. Ovaj uređaj trenutno automatski šalje podatke o dijagnostici, uređaju i korišćenju aplikacija Google-u. To doprinosi održavanju stabilnosti sistema i aplikacije i drugim podešavanjima. Neki objedinjeni podaci će takođe pomoći Google aplikacijama i partnerima, poput Android programera. To podešavanje primenjuje vlasnik. Ako uključite podešavanje dodatne aktivnosti na vebu i u aplikacijama, ti podaci će se možda čuvati na Google nalogu.</translation>
 <translation id="7207631048330366454">Pretražite aplikacije</translation>
-<translation id="7210171324714276060">Dodatak <ph name="EXTENSION_NAME" /> je promenio dobavljača pretrage, pa se sad koristi <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Štampači dodaci</translation>
 <translation id="7212097698621322584">Unesite aktuelni PIN da biste ga promenili. Ako ne znate PIN, morate da resetujete bezbednosni ključ, pa da napravite novi PIN.</translation>
 <translation id="7216409898977639127">Mobilni operater</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">Uparuje se sa „<ph name="DEVICE_NAME" />“ ...</translation>
 <translation id="7737238973539693982">Izbrišite Linux (beta)</translation>
 <translation id="7740996059027112821">Standardno</translation>
-<translation id="7743128043742060936">Ovu stranicu je promenio dodatak <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Pogledajte istoriju štampanja</translation>
 <translation id="7744192722284567281">Pronađeno u upadu u podatke</translation>
 <translation id="7750228210027921155">Slika u slici</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">Otvori kao zakačenu karticu</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> – pauzirano</translation>
 <translation id="9124003689441359348">Sačuvane lozinke će se pojaviti ovde</translation>
+<translation id="9126149354162942022">Boja kursora</translation>
 <translation id="9128317794749765148">Podešavanje nije dovršeno</translation>
 <translation id="9128870381267983090">Povezivanje sa mrežom</translation>
 <translation id="9130015405878219958">Unet je nevažeći režim.</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 88a08e5..fd4d24e 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Потписник сертификата</translation>
 <translation id="1145292499998999162">Додатна компонента је блокирана</translation>
 <translation id="1145593918056169051">Штампач је престао да ради</translation>
-<translation id="1146678959555564648">Уђи у ВР</translation>
 <translation id="114721135501989771">Паметне Google функције</translation>
 <translation id="1147991416141538220">Да бисте затражили приступ, обратите се администратору овог уређаја.</translation>
 <translation id="1149401351239820326">Месец истека</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Обриши колачиће треће стране</translation>
 <translation id="2097372108957554726">Потребно је да се пријавите у Chrome да бисте регистровали нове уређаје</translation>
 <translation id="2099172618127234427">Омогућавате Chrome ОС функције за отклањање грешака које ће подесити sshd daemon и омогућити укључивање са USB дискова.</translation>
-<translation id="2099625543891475722">вашим физичким особинама, попут висине</translation>
 <translation id="2099686503067610784">Желите да избришете серверски сертификат „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Аутоматско пријављивање</translation>
 <translation id="2101225219012730419">Верзија:</translation>
@@ -2182,6 +2180,7 @@
 <translation id="3732857534841813090">Информације повезане са Google помоћником</translation>
 <translation id="3733127536501031542">SSL сервер са могућношћу преласка на новију верзију</translation>
 <translation id="3735740477244556633">Сортирај према</translation>
+<translation id="3738213647660363521">Прилагођена боја курсора</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Желите ли да отворите <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Снимак екрана је направљен</translation>
@@ -2654,7 +2653,6 @@
 <translation id="4350019051035968019">Овај уређај не може да се региструје на домену коме припада ваш налог јер је означен као уређај којим управља други домен.</translation>
 <translation id="4350782034419308508">Ок Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> жели да тражи Bluetooth уређаје у близини. Пронађени су следећи уређаји:</translation>
-<translation id="4353114845960720315">Док сте у ВР режиму, овај сајт ће можда моћи да сазна нешто о вама:</translation>
 <translation id="4354073718307267720">Питај када сајт жели да прави 3D мапу окружења или да прати положај камере</translation>
 <translation id="4354344420232759511">Овде се приказују сајтови које сте посетили</translation>
 <translation id="435527878592612277">Изаберите слику</translation>
@@ -2889,7 +2887,6 @@
 <translation id="4659077111144409915">Примарни налог</translation>
 <translation id="4660476621274971848">Очекивала се верзија „<ph name="EXPECTED_VERSION" />“, али је верзија била „<ph name="NEW_ID" />“</translation>
 <translation id="4660540330091848931">Промена величине</translation>
-<translation id="4660838440047236328">изгледу ваше собе</translation>
 <translation id="4661407454952063730">Подаци апликација могу да буду било који подаци које је апликација сачувала (на основу подешавања програмера), укључујући податке као што су контакти, поруке и слике.</translation>
 <translation id="4662373422909645029">Надимак не сме да садржи бројеве</translation>
 <translation id="4662788913887017617">Делите овај обележивач са iPhone-ом</translation>
@@ -2978,9 +2975,7 @@
 <translation id="4801512016965057443">Дозволи роминг за податке са мобилног уређаја</translation>
 <translation id="4804818685124855865">Прекини везу</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Препоручујемо да направите резервну копију актуелног Linux контејнера пре надоградње.</translation>
 <translation id="4807098396393229769">Име и презиме на картици</translation>
-<translation id="4808319664292298116">Желите да активирате ВР са <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Искачући прозори су блокирани:</translation>
 <translation id="480990236307250886">Отвори почетну страницу</translation>
 <translation id="4811212958317149293">Аутоматско скенирање тастатуре за приступ помоћу прекидача</translation>
@@ -3294,6 +3289,7 @@
 <translation id="52232769093306234">Паковање није успело.</translation>
 <translation id="5225324770654022472">Прикажи пречицу за апликације</translation>
 <translation id="5227679487546032910">Подразумевани тиркизни аватар</translation>
+<translation id="5228088094491423618">Титл уживо</translation>
 <translation id="5228579091201413441">Омогући синхронизацију</translation>
 <translation id="5229189185761556138">Управљање методима уноса</translation>
 <translation id="5230516054153933099">Прозор</translation>
@@ -3708,7 +3704,6 @@
 <translation id="5739235828260127894">Чека се верификација. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Јако велики</translation>
 <translation id="574209121243317957">Ниво</translation>
-<translation id="5745136023067925867">Преузмите <ph name="DEVICE_TYPE" /> савете, понуде и ажурирања и делите повратне информације</translation>
 <translation id="5746169159649715125">Сачувај као PDF</translation>
 <translation id="5747552184818312860">Истиче</translation>
 <translation id="5747785204778348146">Програмер – нестабилно</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Затвори страницу}one{Затвори странице}few{Затвори странице}other{Затвори странице}}</translation>
 <translation id="7207457272187520234">Шаљите податке о коришћењу и дијагностичке податке. Овај уређај тренутно аутоматски шаље податке о дијагностици, уређају и коришћењу апликација Google-у. То доприноси одржавању стабилности система и апликације и другим подешавањима. Неки обједињени подаци ће такође помоћи Google апликацијама и партнерима, попут Android програмера. То подешавање примењује власник. Ако укључите подешавање додатне активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу.</translation>
 <translation id="7207631048330366454">Претражите апликације</translation>
-<translation id="7210171324714276060">Додатак <ph name="EXTENSION_NAME" /> је променио добављача претраге, па се сад користи <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Штампачи додаци</translation>
 <translation id="7212097698621322584">Унесите актуелни PIN да бисте га променили. Ако не знате PIN, морате да ресетујете безбедносни кључ, па да направите нови PIN.</translation>
 <translation id="7216409898977639127">Мобилни оператер</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">Упарује се са „<ph name="DEVICE_NAME" />“ ...</translation>
 <translation id="7737238973539693982">Избришите Linux (бета)</translation>
 <translation id="7740996059027112821">Стандардно</translation>
-<translation id="7743128043742060936">Ову страницу је променио додатак <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Погледајте историју штампања</translation>
 <translation id="7744192722284567281">Пронађено у упаду у податке</translation>
 <translation id="7750228210027921155">Слика у слици</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">Отвори као закачену картицу</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> – паузирано</translation>
 <translation id="9124003689441359348">Сачуване лозинке ће се појавити овде</translation>
+<translation id="9126149354162942022">Боја курсора</translation>
 <translation id="9128317794749765148">Подешавање није довршено</translation>
 <translation id="9128870381267983090">Повезивање са мрежом</translation>
 <translation id="9130015405878219958">Унет је неважећи режим.</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index c2c83d0..537f458 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Certifikatsignerare</translation>
 <translation id="1145292499998999162">Pluginprogrammet har blockerats</translation>
 <translation id="1145593918056169051">Skrivaren har stannat</translation>
-<translation id="1146678959555564648">Kliv in i VR</translation>
 <translation id="114721135501989771">Få Google-teknik i Chrome</translation>
 <translation id="1147991416141538220">Kontakta enhetens administratör om du vill ha åtkomst.</translation>
 <translation id="1149401351239820326">Utgångsmånad</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Rensa cookies från tredje part</translation>
 <translation id="2097372108957554726">Du måste logga in i Chrome för att kunna registrera nya enheter</translation>
 <translation id="2099172618127234427">Du aktiverar felsökningsfunktioner i Chrome OS som konfigurerar sshd daemon och aktiverar start från USB-enheter.</translation>
-<translation id="2099625543891475722">dina fysiska egenskaper, t.ex. hur lång du är</translation>
 <translation id="2099686503067610784">Vill du ta bort servercertifikatet <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Automatisk inloggning</translation>
 <translation id="2101225219012730419">Version:</translation>
@@ -2125,7 +2123,7 @@
 <translation id="3677106374019847299">Ange annan leverantör</translation>
 <translation id="3677657024345889897">Lägst</translation>
 <translation id="3677911431265050325">Begär mobilversion</translation>
-<translation id="3677959414150797585">Bland annat appar och webbsidor. Skickar bara statistik för att förbättra förlagen om du har valt att dela data om användning.</translation>
+<translation id="3677959414150797585">Bland annat appar och webbsidor. Skickar bara statistik för att förbättra förslagen om du har valt att dela data om användning.</translation>
 <translation id="3678156199662914018">Tillägg: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3680683624079082902">Röst för text till tal</translation>
 <translation id="3681311097828166361">Tack för din feedback. Just nu är du offline, så rapporten skickas senare.</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Relaterad information via Google Assistent</translation>
 <translation id="3733127536501031542">SSL-server med uppgradering</translation>
 <translation id="3735740477244556633">Sortera efter</translation>
+<translation id="3738213647660363521">Anpassad textmarkörfärg</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vill du öppna <ph name="APPLICATION" />?</translation>
 <translation id="3742055079367172538">Skärmdumpen har tagits</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Det går inte att registrera enheten på samma domän som dina konton eftersom enheten har registrerats som hanterad av en annan domän.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> vill söka efter Bluetooth-enheter i närheten. Följande enheter har hittats:</translation>
-<translation id="4353114845960720315">Medan du använder VR-läget kan den här webbplatsen ta reda på följande om dig:</translation>
 <translation id="4354073718307267720">Fråga när en webbplats vill skapa en 3D-karta över dina omgivningar eller registrera kamerans position</translation>
 <translation id="4354344420232759511">Webbplatser du besöker visas här</translation>
 <translation id="435527878592612277">Välj foto</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Primärt konto</translation>
 <translation id="4660476621274971848">Version <ph name="EXPECTED_VERSION" /> förväntades men versionen är <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">Ändrar storlek</translation>
-<translation id="4660838440047236328">hur ditt rum ser ut</translation>
 <translation id="4661407454952063730">Appdata är all data som har sparats i en app (utifrån utvecklarens inställningar), bland annat data som kontakter, meddelanden och foton.</translation>
 <translation id="4662373422909645029">Namnet får inte innehålla siffror</translation>
 <translation id="4662788913887017617">Dela det här bokmärket med din iPhone</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Tillåt mobil dataroaming</translation>
 <translation id="4804818685124855865">Koppla från</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Vi rekommenderar att du säkerhetskopierar din nuvarande Linux-behållare innan du uppgraderar.</translation>
 <translation id="4807098396393229769">Namn på kort</translation>
-<translation id="4808319664292298116">Vill du låta <ph name="DOMAIN" /> aktivera VR-läget?</translation>
 <translation id="4808667324955055115">Popup-fönster har blockerats</translation>
 <translation id="480990236307250886">Öppna startsidan</translation>
 <translation id="4811212958317149293">Automatisk tangentbordsgenomsökning vid brytarstyrning</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Komprimeringen misslyckades.</translation>
 <translation id="5225324770654022472">Visa genväg för appar</translation>
 <translation id="5227679487546032910">Blågrön standardavatar</translation>
+<translation id="5228088094491423618">Direkttextning</translation>
 <translation id="5228579091201413441">Aktivera synkronisering</translation>
 <translation id="5229189185761556138">Hantera inmatningsmetoder</translation>
 <translation id="5230516054153933099">Fönster</translation>
@@ -3710,7 +3706,6 @@
 <translation id="5739235828260127894">Väntar på verifiering. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Mycket stor</translation>
 <translation id="574209121243317957">Ton</translation>
-<translation id="5745136023067925867">Få tips, erbjudanden och uppdateringar för <ph name="DEVICE_TYPE" /> och dela din feedback</translation>
 <translation id="5746169159649715125">Spara som PDF</translation>
 <translation id="5747552184818312860">Upphör att gälla</translation>
 <translation id="5747785204778348146">Utvecklare – instabil</translation>
@@ -4833,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Lämna sidan}other{Lämna sidorna}}</translation>
 <translation id="7207457272187520234">Skicka diagnostik- och användningsdata. Den här enheten skickar för närvarande diagnostikdata, enhetsdata och data om appanvändning till Google automatiskt. Denna data används till att förbättra systemets och apparnas stabilitet med mera. Viss samlad data används även till att förbättra appar från Google och Googles partner, till exempel Android-utvecklare. Ägaren har gjort denna inställning obligatorisk. Om ytterligare webb- och appaktivitet har aktiverats kan denna data sparas i Google-kontot.</translation>
 <translation id="7207631048330366454">Sök efter appar</translation>
-<translation id="7210171324714276060">Tillägget <ph name="EXTENSION_NAME" /> ändrade sökleverantören till <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Tilläggsskrivare</translation>
 <translation id="7212097698621322584">Ange den nuvarande pinkoden om du vill ändra den. Om du inte kan pinkoden måste du återställa säkerhetsnyckeln och sedan ställa in en ny pinkod.</translation>
 <translation id="7216409898977639127">Mobiloperatör</translation>
@@ -5233,7 +5227,6 @@
 <translation id="7737115349420013392">Parkopplas med <ph name="DEVICE_NAME" /> …</translation>
 <translation id="7737238973539693982">Radera Linux (beta)</translation>
 <translation id="7740996059027112821">Standard</translation>
-<translation id="7743128043742060936">Den här sidan ändrades av tillägget <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Visa utskriftshistoriken</translation>
 <translation id="7744192722284567281">Upptäckt i ett dataintrång</translation>
 <translation id="7750228210027921155">Bild-i-bild</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">Öppna som en fast flik</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> har pausats</translation>
 <translation id="9124003689441359348">Sparade lösenord visas här</translation>
+<translation id="9126149354162942022">Textmarkörfärg</translation>
 <translation id="9128317794749765148">Det gick inte att slutföra konfigurationen</translation>
 <translation id="9128870381267983090">Anslut till ett nätverk</translation>
 <translation id="9130015405878219958">Du har angett ett ogiltigt läge.</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index d15725a..dea9758b 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Mtia Sahihi kwenye Cheti</translation>
 <translation id="1145292499998999162">Programu jalizi imezuiwa</translation>
 <translation id="1145593918056169051">Printa imeacha kufanya kazi</translation>
-<translation id="1146678959555564648">Tumia hali ya VR</translation>
 <translation id="114721135501989771">Pata Google mahiri kwenye Chrome</translation>
 <translation id="1147991416141538220">Ili uombe uwezo wa kufikia, wasiliana na msimamizi wa kifaa hiki.</translation>
 <translation id="1149401351239820326">Mwezi wa kuisha kwa muda wa matumizi</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">Futa vidakuzi vya watu au kampuni nyingine</translation>
 <translation id="2097372108957554726">Unahitaji kuingia katika akaunti kwenye Chrome ili usajili vifaa vipya</translation>
 <translation id="2099172618127234427">Unawasha vipengele vya kutatua vya Chrome OS ambavyo vitasanidi sshd daemon na kuwezesha uwashaji kutoka kwenye hifadhi za USB.</translation>
-<translation id="2099625543891475722">sifa zako za kimwili, kama vile urefu</translation>
 <translation id="2099686503067610784">Futa cheti cha seva "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Ingia katika Akaunti Kiotomatiki</translation>
 <translation id="2101225219012730419">Toleo:</translation>
@@ -2653,7 +2651,6 @@
 <translation id="4350019051035968019">Kifaa hiki hakiwezi kusajiliwa kwenye kikoa cha akaunti yako kwa sababu kifaa kimewekewa alama kwa usimamizi wa kikoa tofauti.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> inataka kutafuta vifaa vya Bluetooth vilivyo karibu. Vifaa vifuatavyo vimepatikana:</translation>
-<translation id="4353114845960720315">Wakati uko katika hali ya VR, tovuti hii inaweza kujifunza kuhusu:</translation>
 <translation id="4354073718307267720">Uliza wakati tovuti inataka kubuni ramani ya 3D ya mazingira yako au kufuatilia mkao wa kamera</translation>
 <translation id="4354344420232759511">Tovuti unazotembelea zitaonekana hapa</translation>
 <translation id="435527878592612277">Chagua picha yako</translation>
@@ -2888,7 +2885,6 @@
 <translation id="4659077111144409915">Akaunti ya msingi</translation>
 <translation id="4660476621274971848">Ilitarajia toleo la "<ph name="EXPECTED_VERSION" />", lakini ilipata toleo la "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Inabadilisha ukubwa</translation>
-<translation id="4660838440047236328">muundo wa chumba chako</translation>
 <translation id="4661407454952063730">Data ya programu inaweza kuwa data yoyote ambayo imehifadhiwa na programu (kulingana na mipangilio ya msanidi programu), ikiwa ni pamoja na data kama vile anwani, ujumbe na picha.</translation>
 <translation id="4662373422909645029">Jina la kuwakilisha halipaswi kuwa na nambari</translation>
 <translation id="4662788913887017617">Shiriki alamisho hii na iPhone yako</translation>
@@ -2977,9 +2973,7 @@
 <translation id="4801512016965057443">Ruhusu matumizi ya data nje ya mtandao wa kawaida</translation>
 <translation id="4804818685124855865">Tenganisha</translation>
 <translation id="4804827417948292437">Parachichi</translation>
-<translation id="4805077164141082536">Tunapendekeza uhifadhi nakala ya metadata yako ya sasa ya Linux kabla ya kupata toleo jipya.</translation>
 <translation id="4807098396393229769">Jina kwenye kadi</translation>
-<translation id="4808319664292298116">Ungependa kuingia hali ya VR ukitumia <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Umezuia madirisha ibukizi:</translation>
 <translation id="480990236307250886">Fungua ukurasa wa kwanza</translation>
 <translation id="4811212958317149293">Kuchanganua kiotomatiki kibodi ya kufikia kupitia swichi</translation>
@@ -3707,7 +3701,6 @@
 <translation id="5739235828260127894">Inasubiri uthibitishaji. <ph name="LINK_BEGIN" />Pata maelezo zaidi.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Kubwa sana</translation>
 <translation id="574209121243317957">Uzito wa sauti</translation>
-<translation id="5745136023067925867">Pata taarifa, ofa na vidokezo kuhusu <ph name="DEVICE_TYPE" /> na ushiriki maoni</translation>
 <translation id="5746169159649715125">Hifadhi kama PDF</translation>
 <translation id="5747552184818312860">Muda wake unakwisha</translation>
 <translation id="5747785204778348146">Msanidi programu - sio imara</translation>
@@ -4830,7 +4823,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Funga ukurasa}other{Funga kurasa}}</translation>
 <translation id="7207457272187520234">Tuma data ya matumizi na uchunguzi. Kwa sasa, kifaa hiki kinatuma kiotomatiki data ya uchunguzi na matumizi ya programu na kifaa kwa Google. Maelezo haya yatatusaidia kuboresha uthabiti wa programu na mfumo na maboresho mengine. Baadhi ya maelezo yaliyojumlishwa pia yatasaidia programu na washirika wa Google kama vile wasanidi programu za Android. Mipangilio hii hutekelezwa na mmiliki. Ikiwa umewasha mipangilio ya historia ya Shughuli za ziada kwenye Wavuti na Programu, huenda data hii itahifadhiwa kwenye Akaunti yako ya Google.</translation>
 <translation id="7207631048330366454">Tafuta programu</translation>
-<translation id="7210171324714276060">Kiendelezi cha <ph name="EXTENSION_NAME" /> kilibadilisha mtoa huduma wa utafutaji ili kitumie <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Printa za viendelezi</translation>
 <translation id="7212097698621322584">Weka PIN yako ya sasa ili uibadilishe. Ikiwa hujui PIN yako, utahitaji kubadilisha ufunguo wako wa usalama, kisha uunde PIN mpya.</translation>
 <translation id="7216409898977639127">Mtoa huduma za vifaa vya mkononi</translation>
@@ -5230,7 +5222,6 @@
 <translation id="7737115349420013392">Inaoanisha na "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Futa Linux (Beta)</translation>
 <translation id="7740996059027112821">Wastani</translation>
-<translation id="7743128043742060936">Ukurasa huu ulibadilishwa na kiendelezi cha <ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Angalia historia yako ya uchapishaji</translation>
 <translation id="7744192722284567281">Limepatikana kwenye tukio la ufichuzi haramu wa data</translation>
 <translation id="7750228210027921155">Picha ndani ya picha</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 856a72d..7ad852f7 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">சான்றிதழ் கையொப்பமிடுநர்</translation>
 <translation id="1145292499998999162">செருகுநிரல் தடுக்கப்பட்டது</translation>
 <translation id="1145593918056169051">பிரிண்டர் நின்றுவிட்டது</translation>
-<translation id="1146678959555564648">VRஐ உள்ளிடு</translation>
 <translation id="114721135501989771">Chromeமில் Google ஸ்மார்ட்களை பெறுக</translation>
 <translation id="1147991416141538220">அணுகலைக் கோர இந்தச் சாதனத்தின் நிர்வாகியைத் தொடர்பு கொள்ளவும்.</translation>
 <translation id="1149401351239820326">காலாவதியாகும் மாதம்</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">மூன்றாம் தரப்பினரின் குக்கீகளை அழி</translation>
 <translation id="2097372108957554726">புதிய சாதனங்களைப் பதிவுசெய்ய நீங்கள் Chrome இல் உள்நுழைய வேண்டும்</translation>
 <translation id="2099172618127234427">sshd daemonனை அமைத்து, USB டிரைவ்களிலிருந்து தொடங்குவதை இயக்கும் Chrome OS பிழைத் திருத்த அம்சங்களை இயக்குகிறீர்கள்.</translation>
-<translation id="2099625543891475722">உங்களின் உயரம் போன்ற உடல் அமைப்பு விவரங்கள்</translation>
 <translation id="2099686503067610784">சேவையக சான்றிதழ் "<ph name="CERTIFICATE_NAME" />" ஐ நீக்கவா?</translation>
 <translation id="2100273922101894616">தானாக உள்நுழையவும்</translation>
 <translation id="2101225219012730419">பதிப்பு:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google Assistantடிற்குத் தொடர்புடைய தகவல்கள்</translation>
 <translation id="3733127536501031542">அதிகமாக்குதலுடனான SSL சேவையகம்</translation>
 <translation id="3735740477244556633">இதன்படி வரிசைப்படுத்து</translation>
+<translation id="3738213647660363521">பிரத்தியேக கர்சர் வண்ணம்</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" />ஐத் திறக்கவா?</translation>
 <translation id="3742055079367172538">ஸ்கிரீன்ஷாட் எடுக்கப்பட்டது</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">இந்தச் சாதனத்தை உங்கள் கணக்கிற்குச் சொந்தமான களத்தில் பதிவுசெய்ய முடியாது, ஏனெனில் சாதனமானது வேறு களத்தால் நிர்வகிக்கப்படுவதற்காகக் குறிக்கப்பட்டுள்ளது.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152">அருகிலுள்ள புளூடூத் சாதனங்களை <ph name="ORIGIN" /> ஸ்கேன் செய்ய விரும்புகிறது. இவை கண்டறியப்பட்டுள்ளன:</translation>
-<translation id="4353114845960720315">VRரில் இருக்கும்போது இந்தத் தளம் இவற்றைப் பற்றி அறியக்கூடும்:</translation>
 <translation id="4354073718307267720">ஒரு தளம் என்னைச் சுற்றியுள்ள இடங்களின் 3D மேப்பை உருவாக்கவோ கேமரா நிலையை டிராக் செய்யவோ விரும்பினால் அனுமதி கேள்</translation>
 <translation id="4354344420232759511">நீங்கள் பார்வையிட்ட தளங்கள் இங்கே தோன்றும்</translation>
 <translation id="435527878592612277">உங்கள் படத்தைத் தேர்ந்தெடுக்கவும்</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">முதன்மைக் கணக்கு</translation>
 <translation id="4660476621274971848">எதிர்பார்க்கப்பட்ட பதிப்பு "<ph name="EXPECTED_VERSION" />", ஆனால் இருப்பது "<ph name="NEW_ID" />" பதிப்பு ஆகும்</translation>
 <translation id="4660540330091848931">அளவு மாற்றப்படுகிறது</translation>
-<translation id="4660838440047236328">உங்கள் அறையின் வடிவமைப்பு</translation>
 <translation id="4661407454952063730">ஆப்ஸ் தரவு என்பது தொடர்புகள், செய்திகள், படங்கள் போன்ற தரவு உட்பட ஆப்ஸ் சேமித்த (டெவெலப்பர் அமைப்புகளின் அடிப்படையில்) எந்தத் தரவாகவும் இருக்கலாம்.</translation>
 <translation id="4662373422909645029">புனைப்பெயரில் எண்கள் இருக்கக்கூடாது</translation>
 <translation id="4662788913887017617">இந்தப் புத்தகக்குறியை உங்கள் iPhone உடன் பகிருங்கள்</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">மொபைல் டேட்டா ரோமிங்கை அனுமதி</translation>
 <translation id="4804818685124855865">தொடர்பைத் துண்டி</translation>
 <translation id="4804827417948292437">அவகாடோ</translation>
-<translation id="4805077164141082536">மேம்படுத்துவதற்கு முன்பாக உங்களின் தற்போதைய Linux கண்டெய்னரைக் காப்புப் பிரதி எடுத்துக்கொள்ளுமாறு பரிந்துரைக்கிறோம்.</translation>
 <translation id="4807098396393229769">அட்டையிலுள்ள பெயர் </translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> வழங்கும் VRரைப் பார்க்க விரும்புகிறீர்களா?</translation>
 <translation id="4808667324955055115">பாப்-அப்கள் தடுக்கப்பட்டுள்ளன</translation>
 <translation id="480990236307250886">முகப்புப் பக்கத்தைத் திற</translation>
 <translation id="4811212958317149293">ஸ்விட்ச் அணுகலுக்கான கீபோர்டு தானியங்கு ஸ்கேன்</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">தொகுக்க முடியவில்லை.</translation>
 <translation id="5225324770654022472">ஆப்ஸின் ஷார்ட்கட்டைக் காட்டு</translation>
 <translation id="5227679487546032910">இயல்பு பசும்நீலநிற அவதார்</translation>
+<translation id="5228088094491423618">உடனடி வசனம்</translation>
 <translation id="5228579091201413441">ஒத்திசைவை இயக்கு</translation>
 <translation id="5229189185761556138">உள்ளீட்டு முறைகளை நிர்வகி</translation>
 <translation id="5230516054153933099">விண்டோ</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">சரிபார்ப்புக்காகக் காத்திருக்கிறது. <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">மிகப் பெரியது</translation>
 <translation id="574209121243317957">குரல் அழுத்தம்</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> உதவிக்குறிப்புகள், சலுகைகள், அறிவிப்புகள் ஆகியவற்றைப் பெறலாம், கருத்தைப் பகிரலாம்</translation>
 <translation id="5746169159649715125">PDFஆக சேமி</translation>
 <translation id="5747552184818312860">காலாவதியாகும் தேதி</translation>
 <translation id="5747785204778348146">டெவெலப்பர் - நிலையற்றது</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{பக்கத்திலிருந்து வெளியேறு}other{பக்கங்களிலிருந்து வெளியேறு}}</translation>
 <translation id="7207457272187520234">உபயோகம் மற்றும் பிழை கண்டறிதல் தரவை அனுப்பவும். பிழை கண்டறிதல் தரவு, சாதனம் மற்றும் ஆப்ஸ் உபயோகத் தரவு போன்றவற்றை இந்தச் சாதனம் தற்போது Googleளுக்குத் தானாக அனுப்புகிறது. இது சிஸ்டம் மற்றும் ஆப்ஸின் நிலைத்தன்மையை மேம்படுத்தவும் பிற மேம்பாடுகளைச் செய்யவும் உதவும். ஒருங்கிணைக்கப்பட்ட சில தரவு, Google ஆப்ஸுக்கும் Android டெவெலப்பர்கள் போன்ற கூட்டாளர்களுக்கும் உதவும். உரிமையாளர் இந்த அமைப்பைச் செயல்படுத்தியுள்ளார். கூடுதல் ’இணையம் &amp; ஆப்ஸ் செயல்பாடு’ அமைப்பு இயக்கப்பட்டிருந்தால், இந்தத் தரவு உங்கள் Google கணக்கில் சேமிக்கப்படக்கூடும்.</translation>
 <translation id="7207631048330366454">ஆப்ஸில் தேடுக</translation>
-<translation id="7210171324714276060"><ph name="SEARCH_PROVIDER_DOMAIN" /> டொமைனைப் பயன்படுத்தும் வகையில் தேடலை <ph name="EXTENSION_NAME" /> நீட்டிப்பு மாற்றியுள்ளது</translation>
 <translation id="7210499381659830293">நீட்டிப்பு பிரிண்டர்கள்</translation>
 <translation id="7212097698621322584">தற்போதைய பின்னை மாற்ற அதை உள்ளிடவும். பின் தெரியவில்லை என்றால் புதிய பின்னை உருவாக்க பாதுகாப்பு விசையை மீட்டமைக்க வேண்டும்.</translation>
 <translation id="7216409898977639127">செல்லுலார் வழங்குநர்</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" உடன் இணைக்கிறது ...</translation>
 <translation id="7737238973539693982">Linuxஸை (பீட்டா) நீக்கு</translation>
 <translation id="7740996059027112821">நிலையானது</translation>
-<translation id="7743128043742060936">இந்தப் பக்கத்தை <ph name="EXTENSION_NAME" /> நீட்டிப்பு மாற்றிவிட்டது</translation>
 <translation id="7744047395460924128">பிரிண்ட்டிங் வரலாற்றைக் காட்டு</translation>
 <translation id="7744192722284567281">தரவு மீறலில் உள்ளது</translation>
 <translation id="7750228210027921155">பிக்ச்சர்-இன்-பிக்ச்சர்</translation>
@@ -6352,6 +6345,7 @@
 <translation id="9121814364785106365">பொருத்திய தாவலாகத் திற</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> இடைநிறுத்தப்பட்டது</translation>
 <translation id="9124003689441359348">சேமித்த கடவுச்சொற்கள் இங்கே தோன்றும்</translation>
+<translation id="9126149354162942022">கர்சர் வண்ணம்</translation>
 <translation id="9128317794749765148">அமைவை நிறைவுசெய்ய இயலவில்லை</translation>
 <translation id="9128870381267983090">நெட்வொர்க்குடன் இணையவும்</translation>
 <translation id="9130015405878219958">செல்லாத பயன்முறை உள்ளிடப்பட்டது. </translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 23a2760..8b721bc 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">సర్టిఫికెట్ సంతకందారు</translation>
 <translation id="1145292499998999162">ప్లగ్ఇన్‌ బ్లాక్ చేయబడింది</translation>
 <translation id="1145593918056169051">ప్రింటర్ ఆపివేయబడింది</translation>
-<translation id="1146678959555564648">VRలోకి ప్రవేశించు</translation>
 <translation id="114721135501989771">Chromeలో Google స్మార్ట్‌లను పొందండి</translation>
 <translation id="1147991416141538220">యాక్సెస్‌ను అడగడానికి, ఈ పరికరం యొక్క నిర్వాహకులను సంప్రదించండి.</translation>
 <translation id="1149401351239820326">గడువు ముగింపు నెల</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">మూడవ పక్షం కుక్కీలను తొలగించు</translation>
 <translation id="2097372108957554726">మీరు కొత్త పరికరాలను నమోదు చేయడానికి Chromeకు సైన్ ఇన్ చేయాలి</translation>
 <translation id="2099172618127234427">మీరు sshd daemonను సెటప్ చేసే మరియు USB డ్రైవ్‌ల నుండి బూటింగ్‌ను ప్రారంభించే Chrome OS డీబగ్గింగ్ ఫీచ‌ర్‌లను ప్రారంభిస్తున్నారు.</translation>
-<translation id="2099625543891475722">మీ ఎత్తు వంటి భౌతిక లక్షణాలు</translation>
 <translation id="2099686503067610784">సర్వర్ ప్రమాణపత్రం "<ph name="CERTIFICATE_NAME" />" తొలగించాలా?</translation>
 <translation id="2100273922101894616">స్వీయ సైన్-ఇన్</translation>
 <translation id="2101225219012730419">వెర్షన్:</translation>
@@ -2657,7 +2655,6 @@
 <translation id="4350019051035968019">ఈ పరికరాన్ని మీ ఖాతా చెందిన డొమైన్‌కు నమోదు చేయడం సాధ్యపడదు. ఎందుకంటే పరికరం వేరే డొమైన్ ద్వారా నిర్వహించబడేలా గుర్తించబడింది.</translation>
 <translation id="4350782034419308508">హే Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> సమీపంలోని బ్లూటూత్ పరికరాల కోసం స్కాన్ చేయాలనుకుంటోంది. కింది పరికరాలు కనుగొనబడ్డాయి:</translation>
-<translation id="4353114845960720315">మీరు VRలో ఉన్నప్పుడు, ఈ సైట్ కింది వాటిని గురించి తెలుసుకునే అవకాశం ఉంది:</translation>
 <translation id="4354073718307267720">ఒక సైట్ మీ పరిసరాల 3D మ్యాప్‌ను రూపొందించాలన్నప్పుడు లేదా కెమెరా పొజిషన్‌ను ట్రాక్ చేయాలన్నప్పుడు అనుమతి అడగాలి</translation>
 <translation id="4354344420232759511">మీరు సందర్శించే సైట్‌లు ఇక్కడ చూపబడతాయి</translation>
 <translation id="435527878592612277">మీ ఫోటోని ఎంచుకోండి</translation>
@@ -2892,7 +2889,6 @@
 <translation id="4659077111144409915">ప్రాథమిక ఖాతా</translation>
 <translation id="4660476621274971848">ఆశించిన వెర్షన్ "<ph name="EXPECTED_VERSION" />", కానీ ఉన్న వెర్షన్ "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">పరిమాణాన్ని మారుస్తోంది</translation>
-<translation id="4660838440047236328">మీ గది యొక్క లేఅవుట్</translation>
 <translation id="4661407454952063730">కాంటాక్ట్‌లు, మెసేజ్‌లు, ఫోటోలు లాంటి డేటాతో సహా యాప్ సేవ్ చేసిన (డెవలపర్ సెట్టింగ్‌ల ఆధారంగా) ఎలాంటి డేటా అయినా యాప్ డేటా లాగా పరిగణించబడుతుంది.</translation>
 <translation id="4662373422909645029">మారుపేరులో అంకెలు ఉండరాదు</translation>
 <translation id="4662788913887017617">ఈ బుక్‌మార్క్‌ను మీ iPhoneతో షేర్ చేయండి</translation>
@@ -2981,9 +2977,7 @@
 <translation id="4801512016965057443">మొబైల్ డేటా రోమింగ్‌ను అనుమతించు</translation>
 <translation id="4804818685124855865">డిస్‌కనెక్ట్ చెయ్యి</translation>
 <translation id="4804827417948292437">వెన్నపండు</translation>
-<translation id="4805077164141082536">మీరు అప్‌గ్రేడ్ చేసే ముందు మీ ప్రస్తుత Linux కంటెయినర్ బ్యాకప్ తీసుకోవాల్సిందిగా సిఫార్సు చేయడమైనది.</translation>
 <translation id="4807098396393229769">కార్డ్‌పై పేరు</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> నుండి VR మోడ్‌లోకి ప్రవేశించాలా?</translation>
 <translation id="4808667324955055115">పాప్-అప్‌లు బ్లాక్ చేయబడ్డాయి:</translation>
 <translation id="480990236307250886">హోమ్ పేజీని తెరువు</translation>
 <translation id="4811212958317149293">స్విచ్ యాక్సెస్ కీబోర్డ్ ఆటో స్కాన్</translation>
@@ -3710,7 +3704,6 @@
 <translation id="5739235828260127894">ధృవీకరణ కోసం వేచి ఉంది. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">చాలా పెద్దవిగా</translation>
 <translation id="574209121243317957">పిచ్</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> చిట్కాలు, ఆఫర్‌లు, అప్‌డేట్‌లను పొందండి, అలాగే ఫీడ్‌బ్యాక్‌ను షేర్ చేయండి.</translation>
 <translation id="5746169159649715125">PDF లాగా సేవ్ చేయి</translation>
 <translation id="5747552184818312860">గడువు ముగింపు</translation>
 <translation id="5747785204778348146">డెవలపర్ - అస్థిరం</translation>
@@ -4833,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{పేజీ నుండి నిష్క్రమించు}other{పేజీల నుండి నిష్క్రమించు}}</translation>
 <translation id="7207457272187520234">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ డేటాను, పరికరం డేటాను, దానితో పాటు యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపుతోంది. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత ఏకీకృత డేటా కూడా Google యాప్‌లకు, Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ సెట్టింగ్‌ను యజమాని సెట్ చేశారు. మీ అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు.</translation>
 <translation id="7207631048330366454">యాప్‌లను వెతకండి</translation>
-<translation id="7210171324714276060"><ph name="SEARCH_PROVIDER_DOMAIN" />ను ఉపయోగించడానికి ఎక్స్‌టెన్షన్ <ph name="EXTENSION_NAME" /> సెర్చ్‌ను మార్చింది</translation>
 <translation id="7210499381659830293">ఎక్స్‌టెన్షన్ ప్రింటర్‌లు</translation>
 <translation id="7212097698621322584">మీ ప్రస్తుత పిన్‌ను మార్చడానికి దానిని నమోదు చేయండి. మీ పిన్ మీకు తెలియకుంటే, మీరు సెక్యూరిటీ కీని రీసెట్ చేసి, ఆపై కొత్త పిన్‌ను సృష్టించాలి.</translation>
 <translation id="7216409898977639127">సెల్యులార్ ప్రదాత</translation>
@@ -5233,7 +5225,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"తో పెయిర్ చేస్తోంది ...</translation>
 <translation id="7737238973539693982">Linux (బీటా)ని తొలగించండి</translation>
 <translation id="7740996059027112821">ప్రామాణికం</translation>
-<translation id="7743128043742060936">ఈ పేజీ <ph name="EXTENSION_NAME" /> ఎక్స్‌టెన్షన్ ద్వారా మార్చబడింది</translation>
 <translation id="7744047395460924128">మీ ప్రింటింగ్ చరిత్రను చూడండి</translation>
 <translation id="7744192722284567281">డేటా ఉల్లంఘనలో కనుగొనబడింది</translation>
 <translation id="7750228210027921155">చిత్రంలో చిత్రం</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 64bd4979..e47c934 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">ผู้เซ็นชื่อในใบรับรอง</translation>
 <translation id="1145292499998999162">ปลั๊กอินถูกบล็อก</translation>
 <translation id="1145593918056169051">เครื่องพิมพ์หยุดทำงาน</translation>
-<translation id="1146678959555564648">เข้าสู่ VR</translation>
 <translation id="114721135501989771">ใช้ฟีเจอร์เจ๋งๆ จาก Google ใน Chrome</translation>
 <translation id="1147991416141538220">หากต้องการสิทธิ์เข้าถึง ให้ติดต่อผู้ดูแลระบบของอุปกรณ์นี้</translation>
 <translation id="1149401351239820326">เดือนที่หมดอายุ</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">ล้างคุกกี้ของบุคคลที่สาม</translation>
 <translation id="2097372108957554726">คุณต้องลงชื่อเข้าใช้ Chrome เพื่อลงทะเบียนอุปกรณ์ใหม่</translation>
 <translation id="2099172618127234427">คุณกำลังเปิดใช้ฟีเจอร์การแก้ไขข้อบกพร่องของ Chrome OS ซึ่งจะตั้งค่า sshd daemon และเปิดใช้การเปิดเครื่องจากไดรฟ์ USB</translation>
-<translation id="2099625543891475722">ลักษณะทางกายภาพของคุณ เช่น ส่วนสูง</translation>
 <translation id="2099686503067610784">ลบใบรับรองของเซิร์ฟเวอร์ "<ph name="CERTIFICATE_NAME" />" หรือไม่</translation>
 <translation id="2100273922101894616">ลงชื่อเข้าใช้อัตโนมัติ</translation>
 <translation id="2101225219012730419">รุ่น:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">ไม่สามารถลงทะเบียนอุปกรณ์นี้กับโดเมนที่บัญชีของคุณใช้อยู่ได้ เนื่องจากอุปกรณ์มีการทำเครื่องหมายไว้ว่าได้รับการจัดการจากโดเมนอื่น</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> ต้องการสแกนหาอุปกรณ์บลูทูธที่อยู่ใกล้เคียงและได้พบอุปกรณ์ต่อไปนี้</translation>
-<translation id="4353114845960720315">ขณะอยู่ในโหมด VR เว็บไซต์นี้อาจรู้เกี่ยวกับ</translation>
 <translation id="4354073718307267720">ถามเมื่อเว็บไซต์ต้องการสร้างแผนที่ 3 มิติของสิ่งที่อยู่รอบตัวคุณหรือติดตามตำแหน่งของกล้อง</translation>
 <translation id="4354344420232759511">เว็บไซต์ที่คุณเข้าชมจะปรากฏที่นี่</translation>
 <translation id="435527878592612277">เลือกรูปภาพของคุณ</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">บัญชีหลัก</translation>
 <translation id="4660476621274971848">เวอร์ชันที่คาดการณ์ "<ph name="EXPECTED_VERSION" />" แต่เวอร์ชันที่แจ้งคือ "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">กำลังปรับขนาด</translation>
-<translation id="4660838440047236328">เลย์เอาต์ของห้อง</translation>
 <translation id="4661407454952063730">ข้อมูลแอปอาจเป็นข้อมูลใดก็ตามที่แอปบันทึกไว้ (ขึ้นอยู่กับการตั้งค่าของนักพัฒนาซอฟต์แวร์) ซึ่งรวมถึงข้อมูลอย่างเช่นรายชื่อติดต่อ ข้อความ และรูปภาพ</translation>
 <translation id="4662373422909645029">ชื่อเล่นต้องไม่มีตัวเลข</translation>
 <translation id="4662788913887017617">แชร์บุ๊กมาร์กนี้กับ iPhone ของคุณ</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">อนุญาตการโรมมิ่งข้อมูลมือถือ</translation>
 <translation id="4804818685124855865">ตัดการเชื่อมต่อ</translation>
 <translation id="4804827417948292437">อะโวคาโด</translation>
-<translation id="4805077164141082536">เราขอแนะนำให้สำรองข้อมูลในคอนเทนเนอร์ Linux ปัจจุบันก่อนที่จะอัปเกรด</translation>
 <translation id="4807098396393229769">ชื่อบนบัตร</translation>
-<translation id="4808319664292298116">เข้าสู่โหมด VR จาก <ph name="DOMAIN" /> ใช่ไหม</translation>
 <translation id="4808667324955055115">บล็อกป๊อปอัปอยู่:</translation>
 <translation id="480990236307250886">เปิดหน้าแรก</translation>
 <translation id="4811212958317149293">การสแกนอัตโนมัติของแป้นพิมพ์การเข้าถึงด้วยสวิตช์</translation>
@@ -3712,7 +3706,6 @@
 <translation id="5739235828260127894">กำลังรอการยืนยัน <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">ใหญ่มาก</translation>
 <translation id="574209121243317957">ระดับเสียงสูงต่ำ</translation>
-<translation id="5745136023067925867">รับเคล็ดลับการใช้งาน ข้อเสนอ และข้อมูลอัปเดต รวมถึงแชร์ความคิดเห็นสำหรับ <ph name="DEVICE_TYPE" /></translation>
 <translation id="5746169159649715125">บันทึกเป็น PDF</translation>
 <translation id="5747552184818312860">หมดอายุ</translation>
 <translation id="5747785204778348146">นักพัฒนาซอฟต์แวร์ - ไม่เสถียร</translation>
@@ -4835,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{หน้าที่ออกไป}other{หน้าที่ออกไป}}</translation>
 <translation id="7207457272187520234">ส่งข้อมูลการใช้งานและการวินิจฉัย ปัจจุบันอุปกรณ์นี้ส่งข้อมูลการวินิจฉัย อุปกรณ์ และการใช้งานแอปไปยัง Google โดยอัตโนมัติ ซึ่งจะช่วยปรับปรุงความเสถียรของแอปและระบบ และอื่นๆ ข้อมูลที่รวบรวมมาบางส่วนจะมีประโยชน์ต่อแอปและพาร์ทเนอร์ของ Google ด้วย เช่น นักพัฒนาซอฟต์แวร์ Android เจ้าของเป็นผู้บังคับใช้การตั้งค่านี้ หากเปิดการตั้งค่ากิจกรรมเพิ่มเติมบนเว็บและแอปไว้ ระบบอาจบันทึกข้อมูลนี้ไว้ในบัญชี Google ของคุณ</translation>
 <translation id="7207631048330366454">ค้นหาแอป</translation>
-<translation id="7210171324714276060">ส่วนขยาย <ph name="EXTENSION_NAME" /> เปลี่ยนไปใช้การค้นหาโดย <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">เครื่องพิมพ์ที่สั่งการผ่านส่วนขยาย</translation>
 <translation id="7212097698621322584">ป้อน PIN ปัจจุบันเพื่อเปลี่ยน PIN หากไม่ทราบ PIN คุณจะต้องรีเซ็ตคีย์ความปลอดภัย แล้วสร้าง PIN ใหม่</translation>
 <translation id="7216409898977639127">ผู้ให้บริการเครือข่ายมือถือ</translation>
@@ -5235,7 +5227,6 @@
 <translation id="7737115349420013392">กำลังจับคู่กับ "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">ลบ Linux (เบต้า)</translation>
 <translation id="7740996059027112821">มาตรฐาน</translation>
-<translation id="7743128043742060936">ส่วนขยาย <ph name="EXTENSION_NAME" /> ได้เปลี่ยนแปลงหน้านี้</translation>
 <translation id="7744047395460924128">ดูประวัติการพิมพ์</translation>
 <translation id="7744192722284567281">พบในการละเมิดข้อมูล</translation>
 <translation id="7750228210027921155">การแสดงภาพซ้อนภาพ</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 54426d0..83e8064 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Sertifika İmza Sahibi</translation>
 <translation id="1145292499998999162">Eklenti engellendi</translation>
 <translation id="1145593918056169051">Yazıcı durdu</translation>
-<translation id="1146678959555564648">VR'ye Gir</translation>
 <translation id="114721135501989771">Google zekası Chrome'da</translation>
 <translation id="1147991416141538220">Erişim izni istemek için bu cihazın yöneticisiyle iletişime geçin.</translation>
 <translation id="1149401351239820326">Son kullanım tarihinin ayı</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Üçüncü taraf çerezlerini sil</translation>
 <translation id="2097372108957554726">Yeni cihazlar kaydettirebilmeniz için Chrome'da oturum açmanız gerekir</translation>
 <translation id="2099172618127234427">sshd yardımcı programını ayarlayacak ve USB sürücülerinden önyüklemeyi etkinleştirecek Chrome OS hata ayıklama özelliklerini etkinleştiriyorsunuz.</translation>
-<translation id="2099625543891475722">boyunuz gibi fiziksel özellikleriniz</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" sunucusu sertifikası silinsin mi?</translation>
 <translation id="2100273922101894616">Otomatik Oturum Aç</translation>
 <translation id="2101225219012730419">Sürüm:</translation>
@@ -2185,6 +2183,7 @@
 <translation id="3732857534841813090">Google Asistan'la ilgili bilgiler</translation>
 <translation id="3733127536501031542">İlerlemeli SSL Sunucusu</translation>
 <translation id="3735740477244556633">Sıralama ölçütü</translation>
+<translation id="3738213647660363521">Özel imleç rengi</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> açılsın mı?</translation>
 <translation id="3742055079367172538">Ekran görüntüsü alındı</translation>
@@ -2657,7 +2656,6 @@
 <translation id="4350019051035968019">Bu cihaz, farklı bir alan adı tarafından yönetilen cihaz olarak işaretlendiğinden hesabınızın ait olduğu alan adına kaydettirilemiyor.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" />, yakındaki Bluetooth cihazlar için tarama yapmak istiyor. Şu cihazlar bulundu:</translation>
-<translation id="4353114845960720315">Bu site, siz VR'deyken aşağıdakileri öğrenebilir:</translation>
 <translation id="4354073718307267720">Bir site çevremin 3D haritasını oluşturmak veya kamera konumunu takip etmek istediğinde sor</translation>
 <translation id="4354344420232759511">Ziyaret ettiğiniz siteler burada görünür</translation>
 <translation id="435527878592612277">Fotoğrafınızı seçin</translation>
@@ -2892,7 +2890,6 @@
 <translation id="4659077111144409915">Birincil hesap</translation>
 <translation id="4660476621274971848">Beklenen sürüm "<ph name="EXPECTED_VERSION" />" idi, ancak "<ph name="NEW_ID" />" sürümü belirlendi</translation>
 <translation id="4660540330091848931">Yeniden boyutlandırılıyor</translation>
-<translation id="4660838440047236328">odanızın düzeni</translation>
 <translation id="4661407454952063730">Uygulama verisi, geliştiricinin ayarlarına bağlı olarak bir uygulamanın kaydettiği her tür veri olabilir. Bunlar arasında kişiler, mesajlar ve fotoğraflar gibi veriler bulunabilir.</translation>
 <translation id="4662373422909645029">Takma ad sayı içeremez</translation>
 <translation id="4662788913887017617">Bu yer işaretini iPhone'unuzla paylaşın</translation>
@@ -2981,9 +2978,7 @@
 <translation id="4801512016965057443">Mobil veri dolaşımına izin ver</translation>
 <translation id="4804818685124855865">Bağlantıyı kes</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Yeni sürüme geçmeden önce mevcut Linux kapsayıcınızı yedeklemenizi öneririz.</translation>
 <translation id="4807098396393229769">Kartın üzerindeki ad</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> adresinden VR'ye girilsin mi?</translation>
 <translation id="4808667324955055115">Engellenen pop-up'lar:</translation>
 <translation id="480990236307250886">Ana sayfayı aç</translation>
 <translation id="4811212958317149293">Anahtar erişimi klavye otomatik taraması</translation>
@@ -3297,6 +3292,7 @@
 <translation id="52232769093306234">Paketleme başarısız oldu.</translation>
 <translation id="5225324770654022472">Uygulamalar kısayolunu göster</translation>
 <translation id="5227679487546032910">Varsayılan koyu turkuaz avatar</translation>
+<translation id="5228088094491423618">Canlı Altyazı</translation>
 <translation id="5228579091201413441">Senkronizasyonu etkinleştir</translation>
 <translation id="5229189185761556138">Giriş yöntemlerini yönet</translation>
 <translation id="5230516054153933099">Pencere</translation>
@@ -3711,7 +3707,6 @@
 <translation id="5739235828260127894">Doğrulama bekleniyor. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Çok büyük</translation>
 <translation id="574209121243317957">Ses Kalınlığı</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> ile ilgili ipuçları, fırsatlar ve güncellemeler alın, geri bildiriminizi paylaşın</translation>
 <translation id="5746169159649715125">PDF olarak kaydet</translation>
 <translation id="5747552184818312860">Süre sonu tarihi</translation>
 <translation id="5747785204778348146">Geliştirici - kararsız</translation>
@@ -4834,7 +4829,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sayfadan çık}other{Sayfalardan çık}}</translation>
 <translation id="7207457272187520234">Kullanım ve teşhis verilerini gönder. Bu cihaz şu anda teşhis, cihaz ve uygulama kullanımı verilerini otomatik olarak Google'a gönderiyor. Bu veriler, sistem ve uygulama kararlılığı ile diğer özellikleri iyileştirmeye yardımcı olur. Bazı birleştirilmiş veriler, Google uygulamalarına ve iş ortaklarına da (ör. Android geliştiricileri) yardımcı olur. Bu ayar, cihazın sahibi tarafından zorunlu kılınmıştır. Ek Web ve Uygulama Etkinliği açıksa bu veriler Google Hesabınıza kaydedilebilir.</translation>
 <translation id="7207631048330366454">Uygulamalarda ara</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> uzantısı, aramayı <ph name="SEARCH_PROVIDER_DOMAIN" /> arama sağlayıcısını kullanacak şekilde değiştirdi.</translation>
 <translation id="7210499381659830293">Uzantı yazıcılar</translation>
 <translation id="7212097698621322584">Değiştirmek için geçerli PIN'inizi girin. PIN'inizi bilmiyorsanız güvenlik anahtarınızı sıfırlayarak yeni bir PIN oluşturmanız gerekir.</translation>
 <translation id="7216409898977639127">Hücresel sağlayıcı</translation>
@@ -5234,7 +5228,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" ile eşleniyor...</translation>
 <translation id="7737238973539693982">Linux'u (Beta) silin</translation>
 <translation id="7740996059027112821">Standart</translation>
-<translation id="7743128043742060936">Bu sayfa, <ph name="EXTENSION_NAME" /> uzantısı tarafından değiştirildi</translation>
 <translation id="7744047395460924128">Yazdırma geçmişinizi görme</translation>
 <translation id="7744192722284567281">Veri ihlali kapsamında bulundu</translation>
 <translation id="7750228210027921155">Pencere içinde pencere</translation>
@@ -6351,6 +6344,7 @@
 <translation id="9121814364785106365">İğnelenmiş sekme olarak aç</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> duraklatıldı</translation>
 <translation id="9124003689441359348">Kayıtlı şifreleriniz burada görünür</translation>
+<translation id="9126149354162942022">İmleç rengi</translation>
 <translation id="9128317794749765148">Kurulum tamamlanamadı</translation>
 <translation id="9128870381267983090">Ağa bağlan</translation>
 <translation id="9130015405878219958">Geçersiz mod girildi</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 562b168..0cbcc6e 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Підписувач сертифіката</translation>
 <translation id="1145292499998999162">Плагін заблоковано</translation>
 <translation id="1145593918056169051">Збій у роботі принтера</translation>
-<translation id="1146678959555564648">Увійти у VR-режим</translation>
 <translation id="114721135501989771">Розумні функції в Chrome</translation>
 <translation id="1147991416141538220">Щоб отримати доступ, зверніться до адміністратора цього пристрою.</translation>
 <translation id="1149401351239820326">Місяць закінчення терміну дії</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Очистити файли cookie третіх сторін</translation>
 <translation id="2097372108957554726">Щоб зареєструвати нові пристрої, потрібно ввійти в Chrome</translation>
 <translation id="2099172618127234427">Ви ввімкнути функції налагодження ОС Chrome, які встановлять демон SSHD та ввімкнуть завантаження з носіїв USB.</translation>
-<translation id="2099625543891475722">ваші фізичні характеристики, такі як зріст;</translation>
 <translation id="2099686503067610784">Видалити сертифікат сервера "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Автоматичний вхід</translation>
 <translation id="2101225219012730419">Версія:</translation>
@@ -2658,7 +2656,6 @@
 <translation id="4350019051035968019">Цей пристрій не можна зареєструвати в домені, до якого належить ваш обліковий запис, оскільки пристрій зареєстрований в іншому домені.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152">Сайт <ph name="ORIGIN" /> хоче шукати пристрої Bluetooth поруч. Виявлено такі пристрої:</translation>
-<translation id="4353114845960720315">Під час сеансу VR цей сайт може розпізнавати:</translation>
 <translation id="4354073718307267720">Запитувати, коли сайт хоче створити 3D-карту вашого оточення або відстежувати положення камери</translation>
 <translation id="4354344420232759511">Відвідані вами сайти з’являтимуться тут</translation>
 <translation id="435527878592612277">Виберіть фотографію</translation>
@@ -2893,7 +2890,6 @@
 <translation id="4659077111144409915">Основний обліковий запис</translation>
 <translation id="4660476621274971848">Очікувалася версія <ph name="EXPECTED_VERSION" />, але отримано <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">Змінення розміру</translation>
-<translation id="4660838440047236328">вигляд вашої кімнати.</translation>
 <translation id="4661407454952063730">Даними додатків може бути будь-яка інформація, яку вони зберігають (залежно від налаштувань розробника), зокрема такі відомості, як контакти, повідомлення та фотографії.</translation>
 <translation id="4662373422909645029">Не можна додавати цифри</translation>
 <translation id="4662788913887017617">Надішліть цю закладку на iPhone</translation>
@@ -2982,9 +2978,7 @@
 <translation id="4801512016965057443">Дозволити роумінг мобільних даних</translation>
 <translation id="4804818685124855865">Від'єднатися</translation>
 <translation id="4804827417948292437">Авокадо</translation>
-<translation id="4805077164141082536">Радимо створити резервну копію поточного контейнера Linux, перш ніж оновлювати його.</translation>
 <translation id="4807098396393229769">Ім'я на картці</translation>
-<translation id="4808319664292298116">Увійти у VR-режим на сайті <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Спливаючі вікна заблоковано:</translation>
 <translation id="480990236307250886">Відкрити домашню сторінку</translation>
 <translation id="4811212958317149293">Автосканування клавіатури в режимі кнопкового доступу</translation>
@@ -3712,7 +3706,6 @@
 <translation id="5739235828260127894">Очікується підтвердження. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Дуже великий</translation>
 <translation id="574209121243317957">Тон</translation>
-<translation id="5745136023067925867">Отримуйте поради, пропозиції й оновлення для пристрою <ph name="DEVICE_TYPE" />, а також надсилайте відгуки</translation>
 <translation id="5746169159649715125">Зберегти у форматі PDF</translation>
 <translation id="5747552184818312860">Діє до</translation>
 <translation id="5747785204778348146">Для розробників (нестабільна)</translation>
@@ -4835,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Закрити сторінку}one{Закрити сторінки}few{Закрити сторінки}many{Закрити сторінки}other{Закрити сторінки}}</translation>
 <translation id="7207457272187520234">Надсилати дані про використання й діагностику. Наразі цей пристрій автоматично надсилає в Google дані про діагностику та використання пристрою й додатків. Ця інформація допоможе підвищити стабільність системи, додатків тощо. Деякі зведені дані також корисні для додатків і партнерів Google, як-от розробників Android. Це налаштування застосовує власник. Якщо ввімкнено також запис Історії додатків і веб-пошуку, ці дані можуть зберігатися в обліковому записі Google.</translation>
 <translation id="7207631048330366454">Пошук у додатках</translation>
-<translation id="7210171324714276060">Розширення "<ph name="EXTENSION_NAME" />" змінило пошукову систему на <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Принтери розширення</translation>
 <translation id="7212097698621322584">Введіть поточний PIN-код, щоб змінити його. Якщо ви не знаєте його, необхідно скинути ключ безпеки, а тоді створити новий PIN-код.</translation>
 <translation id="7216409898977639127">Постачальник мобільного зв’язку</translation>
@@ -5235,7 +5227,6 @@
 <translation id="7737115349420013392">Підключення до пристрою "<ph name="DEVICE_NAME" />"…</translation>
 <translation id="7737238973539693982">Видалення Linux (бета-версія)</translation>
 <translation id="7740996059027112821">Стандартно</translation>
-<translation id="7743128043742060936">Цю сторінку змінено розширенням "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="7744047395460924128">Перегляд історії друку</translation>
 <translation id="7744192722284567281">Знайдено в порушеннях безпеки даних</translation>
 <translation id="7750228210027921155">Картинка в картинці</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 7a71c32..ea8dfe2a 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">سرٹیفکیٹ پر دستخط کنندہ</translation>
 <translation id="1145292499998999162">پلگ ان کو مسدود کر دیا گیا</translation>
 <translation id="1145593918056169051">پرنٹر رک گیا ہے</translation>
-<translation id="1146678959555564648">‏VR درج کریں</translation>
 <translation id="114721135501989771">‏Chrome میں Google کی اسمارٹ سروسز حاصل کریں</translation>
 <translation id="1147991416141538220">رسائی طلب کرنے کے لیے، اس آلہ کے منتظم سے رابطہ کریں۔</translation>
 <translation id="1149401351239820326">میعاد کے اختتام کا مہینہ</translation>
@@ -867,7 +866,6 @@
 <translation id="2096715839409389970">فریق ثالث کوکیز صاف کریں</translation>
 <translation id="2097372108957554726">‏نئے آلات رجسٹر کرنے کیلئے آپ کو Chrome میں سائن ان کرنے کی ضرورت ہے</translation>
 <translation id="2099172618127234427">‏آپ Chrome OS ڈیبگنگ کی خصوصیات فعال کر رہے رہیں جو sshd daemon تشکیل دیں گی اور USB ڈرائیورز سے بوٹنگ کو فعال کریں گی۔</translation>
-<translation id="2099625543891475722">آپ کی جسمانی خصوصیات، جیسے کہ قد</translation>
 <translation id="2099686503067610784">سرور سرٹیفیکیٹ "<ph name="CERTIFICATE_NAME" />" حذف کریں؟</translation>
 <translation id="2100273922101894616">خودکار سائن ان</translation>
 <translation id="2101225219012730419">ورژن:</translation>
@@ -2187,6 +2185,7 @@
 <translation id="3732857534841813090">‏Google اسسٹنٹ سے متعلق معلومات</translation>
 <translation id="3733127536501031542">‏Step-up والا SSL سرور</translation>
 <translation id="3735740477244556633">ترتیب دیں بلحاظ</translation>
+<translation id="3738213647660363521">حسب ضرورت کرسر کا رنگ</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> کھولیں؟</translation>
 <translation id="3742055079367172538">اسکرین شاٹ لی گئی</translation>
@@ -2659,7 +2658,6 @@
 <translation id="4350019051035968019">اس آلے کا اندراج اس ڈومین پر نہیں کیا جا سکتا ہے جس سے آپ کے اکاؤنٹ کا تعلق ہے کیونکہ آلہ ایک مختلف ڈومین کے ذریعہ مینیجمنٹ کیلئے نشان زد ہے۔</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> قریبی بلوٹوتھ آلات کے لیے اسکین کرنا چاہتی ہے، مندرجہ ذیل آلات ملے ہیں:</translation>
-<translation id="4353114845960720315">‏آپ کے VR میں ہونے کے دوران یہ سائٹ درج ذیل چیزیں جاننے کے قابل ہو سکتی ہے:</translation>
 <translation id="4354073718307267720">‏جب کوئی سائٹ آپ کے اطراف کا 3D نقشہ تخلیق یا کیمرے کی پوزیشن ٹریک کرنا چاہے تو پوچھیں</translation>
 <translation id="4354344420232759511">آپ کی ملاحظہ کردہ سائٹس یہاں ظاہر ہوں گی</translation>
 <translation id="435527878592612277">اپنی تصویر منتخب کریں</translation>
@@ -2894,7 +2892,6 @@
 <translation id="4659077111144409915">بنیادی اکاؤنٹ</translation>
 <translation id="4660476621274971848">متوقع ورژن "<ph name="EXPECTED_VERSION" />"، لیکن ورژن تھا "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">سائز تبدیل ہو رہا ہے</translation>
-<translation id="4660838440047236328">آپ کے کمرے کا لے آؤٹ</translation>
 <translation id="4661407454952063730">ایپ ڈیٹا رابطے، پیغامات اور تصاویر سمیت کوئی بھی ایسا ڈیٹا ہو سکتا ہے جسے کسی ایپ نے (ڈیولپر کی ترتیبات کی بنیاد پر) محفوظ کیا ہو۔</translation>
 <translation id="4662373422909645029">عرفی نام میں نمبرز شامل نہیں ہو سکتے</translation>
 <translation id="4662788913887017617">‏اپنے iPhone کے ساتھ اس بُک مارک کا اشتراک کریں</translation>
@@ -2983,9 +2980,7 @@
 <translation id="4801512016965057443">موبائل ڈیٹا رومنگ کی اجازت دیں</translation>
 <translation id="4804818685124855865">منقطع کریں</translation>
 <translation id="4804827417948292437">مَگَر ناشپاتی</translation>
-<translation id="4805077164141082536">‏ہم آپ کو اپ گریڈ کرنے سے پہلے اپنے موجودہ Linux کنٹینر کا بیک اپ لینے کی تجویز کرتے ہیں۔</translation>
 <translation id="4807098396393229769">کارڈ پر نام</translation>
-<translation id="4808319664292298116">‏<ph name="DOMAIN" /> سے VR داخل کریں؟</translation>
 <translation id="4808667324955055115">پوپ - اپس مسدود ہیں:</translation>
 <translation id="480990236307250886">ہوم صفحہ کھولیں</translation>
 <translation id="4811212958317149293">سوئچ رسائی کی بورڈ خودکار اسکین</translation>
@@ -3299,6 +3294,7 @@
 <translation id="52232769093306234">پیکنگ نہیں ہو سکی۔</translation>
 <translation id="5225324770654022472">ایپس شارٹ کٹ دکھائیں</translation>
 <translation id="5227679487546032910">ڈیفالٹ نیلگوں سبز اوتار</translation>
+<translation id="5228088094491423618">لائیو کیپشنز</translation>
 <translation id="5228579091201413441">مطابقت پذیری فعال کریں</translation>
 <translation id="5229189185761556138">اندراج کے طریقوں کا نظم کریں</translation>
 <translation id="5230516054153933099">ونڈو</translation>
@@ -3712,7 +3708,6 @@
 <translation id="5739235828260127894">توثیق کا انتظار ہے۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">بہت بڑا</translation>
 <translation id="574209121243317957">پچ</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> کی تجاویز، پیشکشیں اور اپ ڈیٹس حاصل کریں اور تاثرات کا اشتراک کریں</translation>
 <translation id="5746169159649715125">‏PDF کے بطور محفوظ کریں</translation>
 <translation id="5747552184818312860">میعاد کا اختتام</translation>
 <translation id="5747785204778348146">ڈیولپر - ناپائیدار</translation>
@@ -4835,7 +4830,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{صفحہ سے باہر نکلیں}other{صفحات سے باہر نکلیں}}</translation>
 <translation id="7207457272187520234">‏استعمال اور ڈائیگناسٹک کا ڈیٹا بھیجیں۔ فی الوقت یہ آلہ خود کار طور پر ڈائیگناسٹک، آلے اور ایپ کے استعمال کا ڈیٹا Google کو بھیج رہا ہے۔ اس سے سسٹم اور ایپ کے استحکام اور دیگر بہتریوں میں مدد ملے گی۔ کچھ مجموعی ڈیٹا Google ایپس اور پارٹنرز، جیسے Android ڈیولپرز، کی مدد بھی کرے گا۔ اس ترتیب کو مالک نافذ کرتا ہے۔ اگر آپ کی ویب اور ایپ کی اضافی سرگرمی کی ترتیب آن ہے تو اس ڈیٹا کو آپ کے Google اکاؤنٹ میں محفوظ کیا جا سکتا ہے۔</translation>
 <translation id="7207631048330366454">ایپس تلاش کریں</translation>
-<translation id="7210171324714276060"><ph name="EXTENSION_NAME" /> ایکسٹینشن نے <ph name="SEARCH_PROVIDER_DOMAIN" /> کو استعمال کرنے کے ليے تلاش کو تبدیل کر دیا</translation>
 <translation id="7210499381659830293">ایکسٹینشن پرنٹرز</translation>
 <translation id="7212097698621322584">‏PIN تبدیل کرنے کیلئے، اپنا موجودہ PIN درج کریں۔ اگر آپ کو اپنا PIN نہیں معلوم ہے تو آپ کو پہلے اپنی سیکیورٹی کلید دوبارہ ترتیب دینی ہوگی اور پھر ایک نیا PIN تخلیق کرنا ہوگا۔</translation>
 <translation id="7216409898977639127">سیلولر فراہم کنندہ</translation>
@@ -5235,7 +5229,6 @@
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" کے ساتھ جوڑا بنایا جا رہا ہے ...</translation>
 <translation id="7737238973539693982">‏Linux (بی ٹا) کو حذف کریں</translation>
 <translation id="7740996059027112821">معیاری</translation>
-<translation id="7743128043742060936">اس صفحہ کو "<ph name="EXTENSION_NAME" />" ایکسٹینشن کے ذریعہ تبدیل کیا گیا تھا۔</translation>
 <translation id="7744047395460924128">اپنی پرنٹنگ کی سرگزشت دیکھیں</translation>
 <translation id="7744192722284567281">ڈیٹا کی خلاف ورزی میں ملا</translation>
 <translation id="7750228210027921155">تصویر میں تصویر</translation>
@@ -6353,6 +6346,7 @@
 <translation id="9121814364785106365">پن کردہ ٹیب کے بطور کھولیں</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> موقوف ہے</translation>
 <translation id="9124003689441359348">محفوظ کردہ پاس ورڈز یہاں ظاہر ہوں گے</translation>
+<translation id="9126149354162942022">کرسر کا رنگ</translation>
 <translation id="9128317794749765148">سیٹ اپ مکمل نہیں ہو سکا</translation>
 <translation id="9128870381267983090">نیٹ ورک سے منسلک ہوں</translation>
 <translation id="9130015405878219958">غلط وضع درج کر دی گئی۔</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 259234d9..6e8d0be 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Sertifikat imzolovchisi</translation>
 <translation id="1145292499998999162">Plagin bloklandi</translation>
 <translation id="1145593918056169051">Printer ishlamay qoldi</translation>
-<translation id="1146678959555564648">Virtual reallikka kirish</translation>
 <translation id="114721135501989771">Chromedagi Google texnologiyalari</translation>
 <translation id="1147991416141538220">Ruxsat olish uchun bu qurilma administratoriga murojaat qiling.</translation>
 <translation id="1149401351239820326">Muddati tugaydigan oy</translation>
@@ -864,7 +863,6 @@
 <translation id="2096715839409389970">Tashqi cookie fayllarni tozalash</translation>
 <translation id="2097372108957554726">Yangi qurilmani ro‘yxatdan o‘tkazish uchun Chrome hisobingizga kiring</translation>
 <translation id="2099172618127234427">Siz Chrome OS tuzatish xususiyatlarini ishga tushirmoqdasiz, ular debugging features which sshd xizmatini o‘rnatib, USB disklardan yuklanishni xususiyatini yoqadi.</translation>
-<translation id="2099625543891475722">boʻy kabi jismoniy xususiyatlaringiz</translation>
 <translation id="2099686503067610784">“<ph name="CERTIFICATE_NAME" />” server sertifikati o‘chirilsinmi?</translation>
 <translation id="2100273922101894616">Avtomatik kirish</translation>
 <translation id="2101225219012730419">Versiya:</translation>
@@ -2656,7 +2654,6 @@
 <translation id="4350019051035968019">Bu qurilma allaqachon boshqa domenda ro‘yxatdan o‘tkazilgan.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> sayti yaqin-atrofdagi Bluetooth qurilmalarni tekshirmoqchi. Quyidagi qurilmalar topilgan:</translation>
-<translation id="4353114845960720315">VR seansida bu sayt ayrim axborotlar ishlatilishini taniy oladi, jumladan:</translation>
 <translation id="4354073718307267720">Saytlar atrofingiz 3D xaritasini yaratish yoki kamera holatini kuzatishdan oldin ruxsat olsin</translation>
 <translation id="4354344420232759511">Tashrif buyurgan saytlaringiz shu yerda chiqadi</translation>
 <translation id="435527878592612277">Surat tanlang</translation>
@@ -2891,7 +2888,6 @@
 <translation id="4659077111144409915">Asosiy hisob</translation>
 <translation id="4660476621274971848">“<ph name="EXPECTED_VERSION" />” versiyasi kutilayotgandi, lekin “<ph name="NEW_ID" />” versiyasi o‘rnatildi</translation>
 <translation id="4660540330091848931">Hajmi oʻzgartirilmoqda</translation>
-<translation id="4660838440047236328">xonangiz dizayni</translation>
 <translation id="4661407454952063730">Ilovalarga tegishli maʼlumotlar – bu (dasturchi oʻrnatgan sozlamalarga asoslanib) ilovalar tomonidan saqlangan har qanday maʼlumot, shuningdek, kontaktlar, xabarlar va suratlar bo‘lishi mumkin.</translation>
 <translation id="4662373422909645029">Taxallusga raqam kiritish mumkin emas</translation>
 <translation id="4662788913887017617">Xatcho‘pni iPhone bilan ulashing</translation>
@@ -2980,9 +2976,7 @@
 <translation id="4801512016965057443">Mobil internet roumingdan foydalanishga ruxsat berish</translation>
 <translation id="4804818685124855865">Uzilish</translation>
 <translation id="4804827417948292437">Avokado</translation>
-<translation id="4805077164141082536">Yangilashdan oldin joriy Linux konteynerini zaxiralash tavsiya etiladi.</translation>
 <translation id="4807098396393229769">Karta egasining ismi</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> orqali VR rejimiga kirilsinmi?</translation>
 <translation id="4808667324955055115">Qalqib chiquvchi oynalar taqiqlangan</translation>
 <translation id="480990236307250886">Bosh sahifani ochish</translation>
 <translation id="4811212958317149293">Switch access yordamida klaviaturalarni avtomatik skanerlash</translation>
@@ -3710,7 +3704,6 @@
 <translation id="5739235828260127894">Tasdiqlanishi zarur. <ph name="LINK_BEGIN" />Batafsil axborot.<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Juda katta</translation>
 <translation id="574209121243317957">Ovoz balandligi</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" /> bilan ishlashga oid takliflar, maslahatlar va yangiliklar oling va fikr-mulohaza yuboring</translation>
 <translation id="5746169159649715125">PDF sifatida saqlash</translation>
 <translation id="5747552184818312860">Amal qilish muddati</translation>
 <translation id="5747785204778348146">Dasturchilar kanali (barqaror emas)</translation>
@@ -4833,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sahifani yopish}other{Sahifalarni yopish}}</translation>
 <translation id="7207457272187520234">Foydalanish statistikasi va diagnostika axborotini yuborish. Bu qurilma hozirda qurilma va ilovalardan foydalanish haqidagi hamda diagnostika axborotini avtomatik tarzda Google kompaniyasiga yubormoqda. Ular tizim va ilovalar barqarorligi kabilarni yaxshilash uchun ishlatiladi. Ayrim toʻplangan maʼlumotlar Android dasturchilar kabi hamkorlarimizga ham oʻz ilovalari va mahsulotlarini yanada yaxshilashga yordam beradi. Bu parametr qurilma egasi tomonidan oʻrnatilgan. Agar Kengaytirilgan veb-qidiruv va ilovalar tarixi yoqilsa, bu maʼlumotlar Google hisobingizda saqlanadi.</translation>
 <translation id="7207631048330366454">Ilovalar ichidan qidirish</translation>
-<translation id="7210171324714276060"><ph name="SEARCH_PROVIDER_DOMAIN" /> sayti <ph name="EXTENSION_NAME" /> kengaytmasi tomonidan qidiruv tizimi etib tayinlandi</translation>
 <translation id="7210499381659830293">Kengaytmalar ishlatuvchi printerlar</translation>
 <translation id="7212097698621322584">PIN kodni oʻzgartirish uchun joriy kodni kiriting. PIN kodni bilmasangiz, avval elektron kalit sozlamalarini qayta tiklab, keyingina yangi PIN belgilash mumkin.</translation>
 <translation id="7216409898977639127">Mobil tarmoq</translation>
@@ -5233,7 +5225,6 @@
 <translation id="7737115349420013392">“<ph name="DEVICE_NAME" />” bilan ulanmoqda...</translation>
 <translation id="7737238973539693982">Linux (Beta)ni o‘chirish</translation>
 <translation id="7740996059027112821">Standart</translation>
-<translation id="7743128043742060936">Bu sahifa <ph name="EXTENSION_NAME" /> kengaytmasi tomonidan oʻzgartirildi</translation>
 <translation id="7744047395460924128">Chop etishlar tarixini koʻrish</translation>
 <translation id="7744192722284567281">Oshkor qilingan axborotlarda bor</translation>
 <translation id="7750228210027921155">Tasvir ustida tasvir</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 5a158d9..bd6c01b 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Người ký Chứng chỉ</translation>
 <translation id="1145292499998999162">Plugin bị chặn</translation>
 <translation id="1145593918056169051">Máy in đã dừng</translation>
-<translation id="1146678959555564648">Nhập VR</translation>
 <translation id="114721135501989771">Trải nghiệm Google thông minh trong Chrome</translation>
 <translation id="1147991416141538220">Để yêu cầu quyền truy cập, hãy liên hệ với quản trị viên của thiết bị này.</translation>
 <translation id="1149401351239820326">Tháng hết hạn</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">Xóa cookie của bên thứ ba</translation>
 <translation id="2097372108957554726">Bạn cần đăng nhập Chrome để đăng ký thiết bị mới</translation>
 <translation id="2099172618127234427">Bạn đâng bật tính năng gỡ lỗi của Chrome OS, thao tác này sẽ thiết lập sshd daemon và bật tính năng khởi động từ ổ USB.</translation>
-<translation id="2099625543891475722">đặc điểm hình thể của bạn, chẳng hạn như chiều cao</translation>
 <translation id="2099686503067610784">Xóa chứng chỉ máy chủ "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Tự động đăng nhập</translation>
 <translation id="2101225219012730419">Phiên bản:</translation>
@@ -2125,6 +2123,7 @@
 <translation id="3677106374019847299">Nhập nhà cung cấp tùy chỉnh</translation>
 <translation id="3677657024345889897">Nhỏ nhất</translation>
 <translation id="3677911431265050325">Yêu cầu trang web dành cho thiết bị di động</translation>
+<translation id="3677959414150797585">Bao gồm ứng dụng, trang web và nhiều nội dung khác. Chỉ gửi số liệu thống kê để cải thiện nội dung đề xuất nếu bạn chọn chia sẻ dữ liệu sử dụng.</translation>
 <translation id="3678156199662914018">Tiện ích: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3680683624079082902">Giọng nói của tính năng chuyển văn bản sang lời nói</translation>
 <translation id="3681311097828166361">Cảm ơn bạn đã phản hồi. Bạn hiện đang ngoại tuyến và báo cáo của bạn sẽ được gửi sau.</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">Không thể đăng ký thiết bị này vào miền có tài khoản của bạn vì thiết bị được miền khác đánh dấu để quản lý.</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> muốn quét tìm các thiết bị Bluetooth ở gần và đã tìm thấy các thiết bị sau đây:</translation>
-<translation id="4353114845960720315">Khi bạn ở chế độ thực tế ảo, trang web này có thể biết được:</translation>
 <translation id="4354073718307267720">Hỏi khi một trang web muốn tạo bản đồ 3D về các khu vực xung quanh bạn hoặc theo dõi thông tin vị trí của máy ảnh</translation>
 <translation id="4354344420232759511">Các trang web bạn truy cập sẽ xuất hiện ở đây</translation>
 <translation id="435527878592612277">Chọn ảnh của bạn</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">Tài khoản chính</translation>
 <translation id="4660476621274971848">Phiên bản mong muốn là "<ph name="EXPECTED_VERSION" />", nhưng phiên bản phát hiện là "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Đang thay đổi dung lượng</translation>
-<translation id="4660838440047236328">cách bài trí phòng của bạn</translation>
 <translation id="4661407454952063730">Dữ liệu ứng dụng có thể là bất kỳ dữ liệu nào mà một ứng dụng đã lưu (dựa trên các tùy chọn cài đặt của nhà phát triển), bao gồm các dữ liệu như danh bạ, tin nhắn và ảnh.</translation>
 <translation id="4662373422909645029">Biệt hiệu không được bao gồm số</translation>
 <translation id="4662788913887017617">Chia sẻ dấu trang này với iPhone của bạn</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">Cho phép chuyển vùng dữ liệu di động</translation>
 <translation id="4804818685124855865">Ngắt kết nối</translation>
 <translation id="4804827417948292437">Quả bơ</translation>
-<translation id="4805077164141082536">Bạn nên sao lưu vùng chứa Linux hiện tại trước khi nâng cấp.</translation>
 <translation id="4807098396393229769">Tên trên thẻ</translation>
-<translation id="4808319664292298116">Chuyển sang chế độ thực tế ảo trên <ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Đã chặn cửa sổ bật lên:</translation>
 <translation id="480990236307250886">Mở trang chủ</translation>
 <translation id="4811212958317149293">Tự động quét tìm bàn phím của tính năng Tiếp cận bằng công tắc</translation>
@@ -3709,7 +3704,6 @@
 <translation id="5739235828260127894">Đang chờ xác minh. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Rất lớn</translation>
 <translation id="574209121243317957">Cao độ</translation>
-<translation id="5745136023067925867">Nhận các mẹo, ưu đãi và thông tin cập nhật về <ph name="DEVICE_TYPE" />, cũng như chia sẻ ý kiến phản hồi</translation>
 <translation id="5746169159649715125">Lưu dưới dạng PDF</translation>
 <translation id="5747552184818312860">Hết hạn</translation>
 <translation id="5747785204778348146">Nhà phát triển - không chính thức</translation>
@@ -3777,6 +3771,7 @@
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> - Đang ghi âm hoặc quay phim</translation>
 <translation id="5841270259333717135">Định cấu hình Ethernet</translation>
 <translation id="5842497610951477805">Bật Bluetooth</translation>
+<translation id="5844574845205796324">Đề xuất nội dung mới để khám phá</translation>
 <translation id="5846200638699387931">Lỗi cú pháp về mối quan hệ: <ph name="ERROR_LINE" /></translation>
 <translation id="5846807460505171493">Cài đặt các bản cập nhật và ứng dụng. Bằng việc tiếp tục, bạn đồng ý rằng thiết bị này cũng có thể tự động tải xuống và cài đặt các bản cập nhật cũng như ứng dụng từ Google, nhà mạng và nhà sản xuất thiết bị, có thể bằng cách sử dụng dữ liệu di động. Một vài ứng dụng có thể cung cấp tùy chọn mua hàng trong ứng dụng.</translation>
 <translation id="5849212445710944278">Đã thêm</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Thoát khỏi trang}other{Thoát khỏi các trang}}</translation>
 <translation id="7207457272187520234">Gửi dữ liệu chẩn đoán và dữ liệu về mức sử dụng. Thiết bị này hiện tự động gửi dữ liệu chẩn đoán, dữ liệu về thiết bị và mức sử dụng ứng dụng 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. Tùy chọn cài đặt này do chủ sở hữu thực thi. Nếu bạn bật tùy chọn cài đặt Hoạt động trên web và ứng dụng bổ sung, thì dữ liệu này có thể được lưu vào Tài khoản Google của bạn.</translation>
 <translation id="7207631048330366454">Tìm kiếm ứng dụng</translation>
-<translation id="7210171324714276060">Tiện ích <ph name="EXTENSION_NAME" /> đã thay đổi tùy chọn tìm kiếm để sử dụng <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Máy in tiện ích</translation>
 <translation id="7212097698621322584">Nhập mã PIN hiện tại của bạn để thay đổi. Nếu không nhớ mã PIN, thì bạn cần đặt lại khóa bảo mật rồi tạo mã PIN mới.</translation>
 <translation id="7216409898977639127">Nhà cung cấp dịch vụ di động</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">Đang ghép nối với "<ph name="DEVICE_NAME" />"...</translation>
 <translation id="7737238973539693982">Xóa Linux (Beta)</translation>
 <translation id="7740996059027112821">Chuẩn</translation>
-<translation id="7743128043742060936">Tiện ích <ph name="EXTENSION_NAME" /> đã thay đổi trang này</translation>
 <translation id="7744047395460924128">Xem lịch sử in của bạn</translation>
 <translation id="7744192722284567281">Phát hiện mật khẩu bị rò rỉ</translation>
 <translation id="7750228210027921155">Hình trong hình</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 8c2ebd8..f6b6da6 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">证书签名人</translation>
 <translation id="1145292499998999162">插件已被拦截</translation>
 <translation id="1145593918056169051">打印机已停止运行</translation>
-<translation id="1146678959555564648">进入 VR</translation>
 <translation id="114721135501989771">在 Chrome 中畅享 Google 的智能技术</translation>
 <translation id="1147991416141538220">要申请访问权限,请与此设备的管理员联系。</translation>
 <translation id="1149401351239820326">过期月份</translation>
@@ -863,7 +862,6 @@
 <translation id="2096715839409389970">清除第三方 Cookie</translation>
 <translation id="2097372108957554726">您需要登录 Chrome 才能注册新设备</translation>
 <translation id="2099172618127234427">您正在启用 Chrome 操作系统调试功能,此功能将设置 sshd 守护程序并允许从 U 盘启动设备。</translation>
-<translation id="2099625543891475722">您的身体特征,例如身高</translation>
 <translation id="2099686503067610784">要删除服务器证书“<ph name="CERTIFICATE_NAME" />”吗?</translation>
 <translation id="2100273922101894616">自动登录</translation>
 <translation id="2101225219012730419">版本:</translation>
@@ -2180,6 +2178,7 @@
 <translation id="3732857534841813090">Google 助理相关信息</translation>
 <translation id="3733127536501031542">带有递升式验证机制的 SSL 服务器</translation>
 <translation id="3735740477244556633">排序依据</translation>
+<translation id="3738213647660363521">自定义光标颜色</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">要打开 <ph name="APPLICATION" /> 吗?</translation>
 <translation id="3742055079367172538">已完成屏幕截图</translation>
@@ -2651,7 +2650,6 @@
 <translation id="4350019051035968019">该设备无法注册到您的帐号所属的网域,因为它已标记为受其他网域管理。</translation>
 <translation id="4350782034419308508">Ok Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> 想搜索附近的蓝牙设备,并发现了以下设备:</translation>
-<translation id="4353114845960720315">当您处于 VR 环境时,此网站或许能够得知:</translation>
 <translation id="4354073718307267720">在网站想为您的周边环境创建 3D 地图或跟踪摄像头位置时询问您</translation>
 <translation id="4354344420232759511">您访问的网站将显示在此处</translation>
 <translation id="435527878592612277">选择您的照片</translation>
@@ -2886,7 +2884,6 @@
 <translation id="4659077111144409915">主帐号</translation>
 <translation id="4660476621274971848">预期版本是“<ph name="EXPECTED_VERSION" />”,但实际版本是“<ph name="NEW_ID" />”</translation>
 <translation id="4660540330091848931">正在调整大小</translation>
-<translation id="4660838440047236328">您房间的布局</translation>
 <translation id="4661407454952063730">应用数据可以是应用根据开发者设置而保存的任何数据,包括通讯录、邮件/消息、照片等数据。</translation>
 <translation id="4662373422909645029">昵称不能包含数字</translation>
 <translation id="4662788913887017617">将此书签共享给您的 iPhone</translation>
@@ -2975,9 +2972,7 @@
 <translation id="4801512016965057443">允许移动数据漫游</translation>
 <translation id="4804818685124855865">断开连接</translation>
 <translation id="4804827417948292437">牛油果</translation>
-<translation id="4805077164141082536">我们建议您在升级前先备份您当前的 Linux 容器。</translation>
 <translation id="4807098396393229769">持卡人姓名</translation>
-<translation id="4808319664292298116">从 <ph name="DOMAIN" /> 进入 VR 环境?</translation>
 <translation id="4808667324955055115">已拦截弹出式窗口:</translation>
 <translation id="480990236307250886">打开主页</translation>
 <translation id="4811212958317149293">开关控制键盘自动扫描</translation>
@@ -3291,6 +3286,7 @@
 <translation id="52232769093306234">打包失败。</translation>
 <translation id="5225324770654022472">显示应用快捷方式</translation>
 <translation id="5227679487546032910">默认的蓝绿色头像</translation>
+<translation id="5228088094491423618">实时字幕</translation>
 <translation id="5228579091201413441">启用同步功能</translation>
 <translation id="5229189185761556138">管理输入法</translation>
 <translation id="5230516054153933099">窗口</translation>
@@ -3704,7 +3700,6 @@
 <translation id="5739235828260127894">正在等待验证。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">特大</translation>
 <translation id="574209121243317957">音高</translation>
-<translation id="5745136023067925867">接收 <ph name="DEVICE_TYPE" />相关提示、优惠和动态,并分享反馈</translation>
 <translation id="5746169159649715125">另存为 PDF</translation>
 <translation id="5747552184818312860">到期时间</translation>
 <translation id="5747785204778348146">开发者版本 - 不稳定</translation>
@@ -4826,7 +4821,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{退出网页}other{退出网页}}</translation>
 <translation id="7207457272187520234">发送使用情况数据和诊断数据。目前,此设备会自动向 Google 发送诊断数据、设备数据和应用使用情况数据。这些数据会有助于提高系统和应用的稳定性以及实现其他方面的改进。部分汇总数据还会对 Google 应用和合作伙伴(例如 Android 开发者)有所帮助。这项设置是由此设备的所有者强制指定的。如果您已开启“其他网络与应用活动记录”设置,这些数据可能会被保存到您的 Google 帐号中。</translation>
 <translation id="7207631048330366454">搜索应用</translation>
-<translation id="7210171324714276060">扩展程序“<ph name="EXTENSION_NAME" />”已改用 <ph name="SEARCH_PROVIDER_DOMAIN" /> 进行搜索</translation>
 <translation id="7210499381659830293">扩展打印机</translation>
 <translation id="7212097698621322584">请输入您的当前 PIN 码以更改它。如果您不知道 PIN 码,则需要重置安全密钥,然后创建新 PIN 码。</translation>
 <translation id="7216409898977639127">移动网络服务提供商</translation>
@@ -5226,7 +5220,6 @@
 <translation id="7737115349420013392">正在与“<ph name="DEVICE_NAME" />”配对…</translation>
 <translation id="7737238973539693982">删除 Linux(测试版)</translation>
 <translation id="7740996059027112821">标准</translation>
-<translation id="7743128043742060936">此网页被“<ph name="EXTENSION_NAME" />”扩展程序更改了</translation>
 <translation id="7744047395460924128">查看您的打印记录</translation>
 <translation id="7744192722284567281">遭遇了数据泄露</translation>
 <translation id="7750228210027921155">画中画</translation>
@@ -6343,6 +6336,7 @@
 <translation id="9121814364785106365">在固定标签页中打开</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" />已被暂停</translation>
 <translation id="9124003689441359348">已保存的密码将显示在这里</translation>
+<translation id="9126149354162942022">光标颜色</translation>
 <translation id="9128317794749765148">无法完成设置</translation>
 <translation id="9128870381267983090">连接到网络</translation>
 <translation id="9130015405878219958">输入的模式无效。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 6cfd8406..7694b6b 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">憑證簽署者</translation>
 <translation id="1145292499998999162">已封鎖外掛程式</translation>
 <translation id="1145593918056169051">打印機已停止運作</translation>
-<translation id="1146678959555564648">進入 VR</translation>
 <translation id="114721135501989771">在 Chrome 中體驗 Google 的智能功能</translation>
 <translation id="1147991416141538220">如要求存取權,請聯絡此裝置的管理員。</translation>
 <translation id="1149401351239820326">到期月份</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">清除第三方 Cookie</translation>
 <translation id="2097372108957554726">您必須登入 Chrome 以註冊新裝置</translation>
 <translation id="2099172618127234427">您即將啟用 Chrome 作業系統偵錯功能;啟用後,系統會設定 sshd 協助程式,並啟用 USB 記憶體開機功能。</translation>
-<translation id="2099625543891475722">您的身體特徵,例如身高</translation>
 <translation id="2099686503067610784">要刪除伺服器憑證「<ph name="CERTIFICATE_NAME" />」嗎?</translation>
 <translation id="2100273922101894616">自動登入</translation>
 <translation id="2101225219012730419">版本:</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">「Google 助理」相關資料</translation>
 <translation id="3733127536501031542">具有 Step-Up 功能的 SSL 伺服器</translation>
 <translation id="3735740477244556633">排序方式</translation>
+<translation id="3738213647660363521">自訂游標顏色</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">要開啟「<ph name="APPLICATION" />」嗎?</translation>
 <translation id="3742055079367172538">已拍攝螢幕擷圖</translation>
@@ -2656,7 +2655,6 @@
 <translation id="4350019051035968019">這部裝置已標示為由其他網域管理,因此無法註冊到您帳戶所屬的網域。</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> 要求掃瞄附近的藍牙裝置,並已找到以下裝置:</translation>
-<translation id="4353114845960720315">當您處於 VR 模式時,此網站可以識別:</translation>
 <translation id="4354073718307267720">在網站要求建立您身處環境的 3D 地圖或追蹤攝錄機位置時詢問您</translation>
 <translation id="4354344420232759511">您瀏覽過的網站會在這裡顯示</translation>
 <translation id="435527878592612277">選取相片</translation>
@@ -2891,7 +2889,6 @@
 <translation id="4659077111144409915">主要帳戶</translation>
 <translation id="4660476621274971848">預期版本為 <ph name="EXPECTED_VERSION" />,但實際為 <ph name="NEW_ID" /></translation>
 <translation id="4660540330091848931">正在調整大小</translation>
-<translation id="4660838440047236328">您的房間配置</translation>
 <translation id="4661407454952063730">應用程式資料泛指應用程式根據開發人員設定所儲存的任何資料,可能包括聯絡人、訊息和相片等資料。</translation>
 <translation id="4662373422909645029">暱稱不可包含數字</translation>
 <translation id="4662788913887017617">透過您的 iPhone 分享此書籤</translation>
@@ -2980,9 +2977,7 @@
 <translation id="4801512016965057443">允許流動數據漫遊</translation>
 <translation id="4804818685124855865">中斷連線</translation>
 <translation id="4804827417948292437">牛油果</translation>
-<translation id="4805077164141082536">建議您在升級前備份目前的 Linux 容器。</translation>
 <translation id="4807098396393229769">信用卡持有人姓名</translation>
-<translation id="4808319664292298116">要從 <ph name="DOMAIN" /> 進入 VR 嗎?</translation>
 <translation id="4808667324955055115">已封鎖彈出式視窗:</translation>
 <translation id="480990236307250886">開啟首頁</translation>
 <translation id="4811212958317149293">「按鈕控制」鍵盤自動掃瞄</translation>
@@ -3296,6 +3291,7 @@
 <translation id="52232769093306234">無法封裝。</translation>
 <translation id="5225324770654022472">顯示應用程式捷徑</translation>
 <translation id="5227679487546032910">預設藍綠色圖片</translation>
+<translation id="5228088094491423618">即時字幕</translation>
 <translation id="5228579091201413441">啟用同步功能</translation>
 <translation id="5229189185761556138">管理輸入法</translation>
 <translation id="5230516054153933099">視窗</translation>
@@ -3709,7 +3705,6 @@
 <translation id="5739235828260127894">正在等待驗證。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">非常大</translation>
 <translation id="574209121243317957">音調</translation>
-<translation id="5745136023067925867">取得 <ph name="DEVICE_TYPE" /> 提示、優惠和最新資訊,並分享意見</translation>
 <translation id="5746169159649715125">另存為 PDF</translation>
 <translation id="5747552184818312860">到期日</translation>
 <translation id="5747785204778348146">開發人員版 - 不穩定</translation>
@@ -4832,7 +4827,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{離開網頁}other{離開網頁}}</translation>
 <translation id="7207457272187520234">傳送使用情況和診斷資料。此裝置目前會自動將診斷、裝置及應用程式的使用情況資料傳送至 Google。這可協助改善系統及應用程式的穩定性及其他功能。部分彙整資料也會用於協助 Google 應用程式與合作夥伴 (例如 Android 開發人員)。擁有者可強制執行此設定。如果已開啟其他「網絡及應用程式活動記錄」設定,系統可能會將此資料儲存至您的 Google 帳戶。</translation>
 <translation id="7207631048330366454">搜尋應用程式</translation>
-<translation id="7210171324714276060">「<ph name="EXTENSION_NAME" />」擴充程式已變更搜尋引擎,改為使用 <ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">擴充程式打印機</translation>
 <translation id="7212097698621322584">請輸入目前的 PIN 以進行變更。如果您不知道自己的 PIN,請重設安全密鑰,然後建立新的 PIN。</translation>
 <translation id="7216409898977639127">流動服務供應商</translation>
@@ -5232,7 +5226,6 @@
 <translation id="7737115349420013392">正在與「<ph name="DEVICE_NAME" />」配對…</translation>
 <translation id="7737238973539693982">刪除 Linux (Beta 版本)</translation>
 <translation id="7740996059027112821">標準</translation>
-<translation id="7743128043742060936">「<ph name="EXTENSION_NAME" />」擴充程式已變更此頁面</translation>
 <translation id="7744047395460924128">查看您的列印記錄</translation>
 <translation id="7744192722284567281">發生資料外洩事件</translation>
 <translation id="7750228210027921155">畫中畫</translation>
@@ -6349,6 +6342,7 @@
 <translation id="9121814364785106365">在固定分頁中開啟</translation>
 <translation id="9122176249172999202">「<ph name="IDS_SHORT_PRODUCT_NAME" />」已暫停</translation>
 <translation id="9124003689441359348">已儲存的密碼將會在這裡顯示</translation>
+<translation id="9126149354162942022">游標顏色</translation>
 <translation id="9128317794749765148">無法完成設定</translation>
 <translation id="9128870381267983090">連線至網路</translation>
 <translation id="9130015405878219958">輸入的模式無效。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 6872b84..009e88b 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">憑證簽署者</translation>
 <translation id="1145292499998999162">已封鎖外掛程式</translation>
 <translation id="1145593918056169051">印表機已停止運作</translation>
-<translation id="1146678959555564648">進入 VR</translation>
 <translation id="114721135501989771">在 Chrome 中體驗 Google 智慧功能</translation>
 <translation id="1147991416141538220">如需要求存取權限,請與這個裝置的系統管理員聯絡。</translation>
 <translation id="1149401351239820326">到期月份</translation>
@@ -866,7 +865,6 @@
 <translation id="2096715839409389970">清除第三方 Cookie</translation>
 <translation id="2097372108957554726">你必須登入 Chrome 註冊新裝置</translation>
 <translation id="2099172618127234427">你即將啟用 Chrome 作業系統偵錯功能,這會一併設定 sshd 精靈,並允許從 USB 磁碟機執行啟動作業。</translation>
-<translation id="2099625543891475722">你的身體特徵,例如身高</translation>
 <translation id="2099686503067610784">要刪除伺服器憑證「<ph name="CERTIFICATE_NAME" />」嗎?</translation>
 <translation id="2100273922101894616">自動登入</translation>
 <translation id="2101225219012730419">版本:</translation>
@@ -2184,6 +2182,7 @@
 <translation id="3732857534841813090">Google 助理相關資訊</translation>
 <translation id="3733127536501031542">具有 Step-Up 功能的 SSL 伺服器</translation>
 <translation id="3735740477244556633">排序依據</translation>
+<translation id="3738213647660363521">自訂游標顏色</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">要開啟「<ph name="APPLICATION" />」嗎?</translation>
 <translation id="3742055079367172538">已拍攝螢幕截圖</translation>
@@ -2655,7 +2654,6 @@
 <translation id="4350019051035968019">這台裝置已標示為由其他網域管理,因此無法註冊到你帳戶所屬的網域。</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152"><ph name="ORIGIN" /> 要求掃描附近的藍牙裝置。已找到下列裝置:</translation>
-<translation id="4353114845960720315">當你進入 VR 時,這個網站可能會取得以下資訊:</translation>
 <translation id="4354073718307267720">網站必須先詢問你,才能根據你的周遭環境建立 3D 地圖或追蹤攝影機位置</translation>
 <translation id="4354344420232759511">這裡會顯示你曾造訪的網站</translation>
 <translation id="435527878592612277">請選取你的相片</translation>
@@ -2890,7 +2888,6 @@
 <translation id="4659077111144409915">主要帳戶</translation>
 <translation id="4660476621274971848">預期的版本為「<ph name="EXPECTED_VERSION" />」,但實際的版本為「<ph name="NEW_ID" />」</translation>
 <translation id="4660540330091848931">正在調整大小</translation>
-<translation id="4660838440047236328">你的房間配置</translation>
 <translation id="4661407454952063730">應用程式資料泛指應用程式依據開發人員設定所儲存的任何資料,包括聯絡人、訊息和相片等。</translation>
 <translation id="4662373422909645029">暱稱不可包含數字</translation>
 <translation id="4662788913887017617">在 iPhone 上取得這個書籤</translation>
@@ -2979,9 +2976,7 @@
 <translation id="4801512016965057443">允許行動數據漫遊</translation>
 <translation id="4804818685124855865">中斷連線</translation>
 <translation id="4804827417948292437">酪梨</translation>
-<translation id="4805077164141082536">我們建議你先備份目前的 Linux 容器再升級。</translation>
 <translation id="4807098396393229769">持卡人姓名</translation>
-<translation id="4808319664292298116">要從 <ph name="DOMAIN" /> 進入 VR 嗎?</translation>
 <translation id="4808667324955055115">已封鎖彈出式視窗:</translation>
 <translation id="480990236307250886">開啟首頁</translation>
 <translation id="4811212958317149293">開關功能鍵盤自動掃描</translation>
@@ -3295,6 +3290,7 @@
 <translation id="52232769093306234">封裝失敗。</translation>
 <translation id="5225324770654022472">顯示應用程式捷徑</translation>
 <translation id="5227679487546032910">預設的藍綠色顯示圖片</translation>
+<translation id="5228088094491423618">即時字幕</translation>
 <translation id="5228579091201413441">啟用同步功能</translation>
 <translation id="5229189185761556138">管理輸入法</translation>
 <translation id="5230516054153933099">視窗</translation>
@@ -3708,7 +3704,6 @@
 <translation id="5739235828260127894">等待驗證中。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">非常大</translation>
 <translation id="574209121243317957">音調</translation>
-<translation id="5745136023067925867">你可以取得 <ph name="DEVICE_TYPE" /> 實用提示、優惠資訊與最新消息,並提供意見回饋</translation>
 <translation id="5746169159649715125">另存為 PDF</translation>
 <translation id="5747552184818312860">有效期限</translation>
 <translation id="5747785204778348146">開發人員版 - 不穩定</translation>
@@ -4831,7 +4826,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{離開網頁}other{離開網頁}}</translation>
 <translation id="7207457272187520234">傳送使用狀況與診斷資料。這部裝置目前會自動將診斷資料、裝置和應用程式的使用資料傳送給 Google。這些資料將有助於改善系統和應用程式的穩定性與其他功能。此外,部分匯總資料還能協助 Google 應用程式和合作夥伴 (例如 Android 開發人員) 改善自己的產品和服務。這項設定是由裝置擁有者強制執行。如果你將「其他網路和應用程式活動」設定為開啟,這些資料可能會儲存在你的 Google 帳戶中。</translation>
 <translation id="7207631048330366454">搜尋應用程式</translation>
-<translation id="7210171324714276060">「<ph name="EXTENSION_NAME" />」擴充功能已改用 <ph name="SEARCH_PROVIDER_DOMAIN" /> 進行搜尋</translation>
 <translation id="7210499381659830293">擴充印表機</translation>
 <translation id="7212097698621322584">請輸入目前的 PIN 碼以進行變更。如果你不知道自己的 PIN 碼,請重設安全金鑰,然後建立新的 PIN 碼。</translation>
 <translation id="7216409898977639127">行動網路提供者</translation>
@@ -5231,7 +5225,6 @@
 <translation id="7737115349420013392">正在與「<ph name="DEVICE_NAME" />」配對…</translation>
 <translation id="7737238973539693982">刪除 Linux (測試版)</translation>
 <translation id="7740996059027112821">標準</translation>
-<translation id="7743128043742060936">「<ph name="EXTENSION_NAME" />」擴充功能已變更這個頁面</translation>
 <translation id="7744047395460924128">查看你的列印歷史記錄</translation>
 <translation id="7744192722284567281">發生資料侵害事件</translation>
 <translation id="7750228210027921155">子母畫面</translation>
@@ -6348,6 +6341,7 @@
 <translation id="9121814364785106365">在固定分頁中開啟</translation>
 <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> 已暫停</translation>
 <translation id="9124003689441359348">你所儲存的密碼會顯示在這裡</translation>
+<translation id="9126149354162942022">游標顏色</translation>
 <translation id="9128317794749765148">無法完成設定</translation>
 <translation id="9128870381267983090">連線至網路</translation>
 <translation id="9130015405878219958">輸入的模式無效。</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index fa98557..38ade604 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -114,7 +114,6 @@
 <translation id="1143142264369994168">Isisayini sesitifiketi</translation>
 <translation id="1145292499998999162">I-Plug in ivinjelwe</translation>
 <translation id="1145593918056169051">Iphrinta imile</translation>
-<translation id="1146678959555564648">Faka i-VR</translation>
 <translation id="114721135501989771">Thola okuhlakaniphile kwe-Google ku-Chrome</translation>
 <translation id="1147991416141538220">Ukuze ucele ukufinyelela, xhumana nomlawuli wale divayisi.</translation>
 <translation id="1149401351239820326">Inyanga yokuphelelwa isikhathi</translation>
@@ -864,7 +863,6 @@
 <translation id="2096715839409389970">Sula amakhukhi enkampani yangaphandle</translation>
 <translation id="2097372108957554726">Kuzomele ungene ngemvume ku-Chrome ukuze ubhalise amadivayisi amasha</translation>
 <translation id="2099172618127234427">Unika amandla izici zokususa amaphutha ze-Chrome OS okuzosetha i-sshd daemon futhi kunike amandla ukuqala kusuka kumadrayivu we-USB.</translation>
-<translation id="2099625543891475722">izici zakho zomzimba, njengobude</translation>
 <translation id="2099686503067610784">Susa isitifiketi seseva se-"<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Ngena ngemvume ngokuzenzakalela</translation>
 <translation id="2101225219012730419">Inguqulo:</translation>
@@ -2655,7 +2653,6 @@
 <translation id="4350019051035968019">Le divayisi ayikwazi ukubhaliswa kusizinda se-akhawunti yakho ngoba i-akhawunti imakelwe ukuphathwa yisizinda esihlukile.</translation>
 <translation id="4350782034419308508">Hey Google</translation>
 <translation id="4351060348582610152">I-<ph name="ORIGIN" /> ifuna ukuskenela amadivayisi aseduze e-Bluetooth. Amadivayisi alandelayo atholiwe:</translation>
-<translation id="4353114845960720315">Ngenkathi uku-VR, leli sayithi lingakwazi ukufunda ngokulandelayo:</translation>
 <translation id="4354073718307267720">Buza uma amasayithi efuna ukudala imephu ye-3D yendawo ekuzungezile noma ukulandelela indawo yekhamera (kuyanconywa)</translation>
 <translation id="4354344420232759511">Amasayithi owavakashelayo azovela lapha</translation>
 <translation id="435527878592612277">Khetha isithombe sakho</translation>
@@ -2890,7 +2887,6 @@
 <translation id="4659077111144409915">I-akhawunti eyinhloko</translation>
 <translation id="4660476621274971848">Inguqulo elindelwe ngu-"<ph name="EXPECTED_VERSION" />", kodwa inguqulo ibikade ingu-"<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">Ishintsha usayizi</translation>
-<translation id="4660838440047236328">isendlalelo segumbi lakho</translation>
 <translation id="4661407454952063730">Idatha yohlelo lokusebenza kungaba inoma iyiphi idatha elondolozwe uhlelo lokusebenza (kusukela kuzilungiselelo zonjiniyela), okufaka idatha efana noxhumana nabo, imilayezo, nezithombe.</translation>
 <translation id="4662373422909645029">Isiteketiso asikwazi ukuba nezinombolo</translation>
 <translation id="4662788913887017617">Yabelana ngale bhukhimakhi nge-iPhone yakho</translation>
@@ -2979,9 +2975,7 @@
 <translation id="4801512016965057443">Vumela ukuzulazula kwedatha yeselula</translation>
 <translation id="4804818685124855865">Nqamula</translation>
 <translation id="4804827417948292437">Ukotapeya</translation>
-<translation id="4805077164141082536">Sincoma ukuthi wenze isipele isiqukathi sakho samanje se-Linux ngaphambi kokuthuthukisa.</translation>
 <translation id="4807098396393229769">Igama kukhadi</translation>
-<translation id="4808319664292298116">Faka i-VR kusuka ku-<ph name="DOMAIN" />?</translation>
 <translation id="4808667324955055115">Okwesikhashana kuvinjelwe:</translation>
 <translation id="480990236307250886">Vula ikhasi lasekhaya</translation>
 <translation id="4811212958317149293">Shintsha ukufinyelela kukhibhodi ekuphequluleni ngokuzenzakalelayo</translation>
@@ -3712,7 +3706,6 @@
 <translation id="5739235828260127894">Ilinde ukuqinisekisa. <ph name="LINK_BEGIN" />Funda kabanzi<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Yinkulu kakhulu</translation>
 <translation id="574209121243317957">Ukuphakama</translation>
-<translation id="5745136023067925867">Thola amathiphu we-<ph name="DEVICE_TYPE" />, okunikezwayo nezibuyekezo, futhi wabelana ngempendulo</translation>
 <translation id="5746169159649715125">Londoloza njenge-PDF</translation>
 <translation id="5747552184818312860">Iphelelwa yisikhathi</translation>
 <translation id="5747785204778348146">Unjiniyela - akuzinzile</translation>
@@ -4835,7 +4828,6 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Phuma ekhasini}one{Phuma emakhasini}other{Phuma emakhasini}}</translation>
 <translation id="7207457272187520234">Thumela idatha yokusetshenziswa neyokuxilonga. Le divayisi manje ithumela ngokuzenzakalela idatha yokuxilonga, yedivayisi, neyokusetshenziswa kwedatha ku-Google. Lokhu kuzosiza ukuzinza kwesistimu nokohlelo lokusebenza nokunye ukuthuthukiswa. Enye idatha izophinda isize izinhlelo zokusebenza ze-Google nozakwethu, abafana nonjiniyela be-Android. Lesi silungiselelo siphoqelelwa umnikazi. Uma isilungiselelo sakho esingeziwe somsebenzi wewebhu nowohlelo lokusebenza sivuliwe, le datha ingalondolozwa ku-akhawunti yakho ye-Google.</translation>
 <translation id="7207631048330366454">Sesha izinhlelo zokusebenza</translation>
-<translation id="7210171324714276060">Isandiso se-<ph name="EXTENSION_NAME" /> sishintshe usesho ukuba lusebenzise i-<ph name="SEARCH_PROVIDER_DOMAIN" /></translation>
 <translation id="7210499381659830293">Amaphrinta ezandiso</translation>
 <translation id="7212097698621322584">Faka i-PIN yakho yamanje ukuze uyishintshe. Uma ungazi i-PIN yakho, uzodinga ukusetha kabusha ukhiye wokuqinisekisa ubunikazi, bese udale i-PIN entsha.</translation>
 <translation id="7216409898977639127">Umhlinzeki weselula</translation>
@@ -5235,7 +5227,6 @@
 <translation id="7737115349420013392">Imatanisa ne-"<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737238973539693982">Susa i-Linux (Beta)</translation>
 <translation id="7740996059027112821">Okujwayelekile</translation>
-<translation id="7743128043742060936">Leli khasi lishintshwe yisandiso se-<ph name="EXTENSION_NAME" /></translation>
 <translation id="7744047395460924128">Bona umlando wakho wokuphrinta</translation>
 <translation id="7744192722284567281">Kutholakele ekukhuphuleni isivumelwano sedatha</translation>
 <translation id="7750228210027921155">Isithombe-esithombeni</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index fcc1c28..70c74fa 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -643,6 +643,12 @@
     "lifetime/application_lifetime_mac.mm",
     "lifetime/browser_shutdown.cc",
     "lifetime/browser_shutdown.h",
+    "lite_video/lite_video_features.cc",
+    "lite_video/lite_video_features.h",
+    "lite_video/lite_video_hint.cc",
+    "lite_video/lite_video_hint.h",
+    "lite_video/lite_video_hint_cache.cc",
+    "lite_video/lite_video_hint_cache.h",
     "lookalikes/lookalike_url_blocking_page.cc",
     "lookalikes/lookalike_url_blocking_page.h",
     "lookalikes/lookalike_url_controller_client.cc",
@@ -1263,6 +1269,8 @@
     "policy/javascript_policy_handler.h",
     "policy/messaging_layer/encryption/encryption_module.cc",
     "policy/messaging_layer/encryption/encryption_module.h",
+    "policy/messaging_layer/public/report_client.cc",
+    "policy/messaging_layer/public/report_client.h",
     "policy/messaging_layer/public/report_queue.cc",
     "policy/messaging_layer/public/report_queue.h",
     "policy/messaging_layer/public/report_queue_configuration.cc",
@@ -1733,8 +1741,6 @@
     "site_isolation/prefs_observer.h",
     "site_isolation/site_details.cc",
     "site_isolation/site_details.h",
-    "site_isolation/site_isolation_policy.cc",
-    "site_isolation/site_isolation_policy.h",
     "speech/chrome_speech_recognition_manager_delegate.cc",
     "speech/chrome_speech_recognition_manager_delegate.h",
     "speech/speech_recognizer.cc",
@@ -2680,8 +2686,6 @@
       "android/preferences/pref_change_registrar_android.cc",
       "android/preferences/pref_change_registrar_android.h",
       "android/preferences/pref_service_bridge.cc",
-      "android/preferences/pref_service_bridge.h",
-      "android/preferences/prefs.h",
       "android/preferences/privacy_preferences_manager.cc",
       "android/profile_key_startup_accessor.cc",
       "android/profile_key_startup_accessor.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index dacfc9fb..b5d8db87 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -22,10 +22,8 @@
 #include "base/i18n/base_i18n_switches.h"
 #include "base/memory/singleton.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/metrics/metrics_hashes.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time_win_features.h"
 #include "base/values.h"
@@ -87,6 +85,7 @@
 #include "components/flags_ui/feature_entry.h"
 #include "components/flags_ui/feature_entry_macros.h"
 #include "components/flags_ui/flags_storage.h"
+#include "components/flags_ui/flags_ui_metrics.h"
 #include "components/flags_ui/flags_ui_switches.h"
 #include "components/games/core/games_features.h"
 #include "components/invalidation/impl/invalidation_switches.h"
@@ -121,6 +120,7 @@
 #include "components/signin/core/browser/dice_account_reconcilor_delegate.h"
 #include "components/signin/public/base/signin_buildflags.h"
 #include "components/signin/public/base/signin_switches.h"
+#include "components/site_isolation/features.h"
 #include "components/spellcheck/common/spellcheck_features.h"
 #include "components/spellcheck/spellcheck_buildflags.h"
 #include "components/sync/driver/sync_driver_switches.h"
@@ -2651,7 +2651,8 @@
     {"enable-site-isolation-for-password-sites",
      flag_descriptions::kSiteIsolationForPasswordSitesName,
      flag_descriptions::kSiteIsolationForPasswordSitesDescription, kOsAndroid,
-     FEATURE_VALUE_TYPE(features::kSiteIsolationForPasswordSites)},
+     FEATURE_VALUE_TYPE(
+         site_isolation::features::kSiteIsolationForPasswordSites)},
     {"enable-site-per-process", flag_descriptions::kStrictSiteIsolationName,
      flag_descriptions::kStrictSiteIsolationDescription, kOsAndroid,
      SINGLE_VALUE_TYPE(switches::kSitePerProcess)},
@@ -4753,10 +4754,6 @@
      flag_descriptions::kDisplayChangeModalDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(ash::features::kDisplayChangeModal)},
 
-    {"corner-shortcuts", flag_descriptions::kCornerShortcutsName,
-     flag_descriptions::kCornerShortcutsDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(ash::features::kCornerShortcuts)},
-
     {"printer-status", flag_descriptions::kPrinterStatusName,
      flag_descriptions::kPrinterStatusDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kPrinterStatus)},
@@ -5776,43 +5773,6 @@
   return false;
 }
 
-// Records a set of feature switches (prefixed with "--").
-void ReportAboutFlagsHistogramSwitches(const std::string& uma_histogram_name,
-                                       const std::set<std::string>& switches) {
-  for (const std::string& flag : switches) {
-    int uma_id = about_flags::testing::kBadSwitchFormatHistogramId;
-    if (base::StartsWith(flag, "--", base::CompareCase::SENSITIVE)) {
-      // Skip '--' before switch name.
-      std::string switch_name(flag.substr(2));
-
-      // Kill value, if any.
-      const size_t value_pos = switch_name.find('=');
-      if (value_pos != std::string::npos)
-        switch_name.resize(value_pos);
-
-      uma_id = GetSwitchUMAId(switch_name);
-    } else {
-      NOTREACHED() << "ReportAboutFlagsHistogram(): flag '" << flag
-                   << "' has incorrect format.";
-    }
-    DVLOG(1) << "ReportAboutFlagsHistogram(): histogram='" << uma_histogram_name
-             << "' '" << flag << "', uma_id=" << uma_id;
-    base::UmaHistogramSparse(uma_histogram_name, uma_id);
-  }
-}
-
-// Records a set of FEATURE_VALUE_TYPE features (suffixed with ":enabled" or
-// "disabled", depending on their state).
-void ReportAboutFlagsHistogramFeatures(const std::string& uma_histogram_name,
-                                       const std::set<std::string>& features) {
-  for (const std::string& feature : features) {
-    int uma_id = GetSwitchUMAId(feature);
-    DVLOG(1) << "ReportAboutFlagsHistogram(): histogram='" << uma_histogram_name
-             << "' '" << feature << "', uma_id=" << uma_id;
-    base::UmaHistogramSparse(uma_histogram_name, uma_id);
-  }
-}
-
 }  // namespace
 
 void ConvertFlagsToSwitches(flags_ui::FlagsStorage* flags_storage,
@@ -5901,25 +5861,12 @@
   std::set<std::string> features;
   FlagsStateSingleton::GetFlagsState()->GetSwitchesAndFeaturesFromFlags(
       flags_storage, &switches, &features);
-  ReportAboutFlagsHistogram("Launch.FlagsAtStartup", switches, features);
-}
-
-base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name) {
-  return static_cast<base::HistogramBase::Sample>(
-      base::HashMetricName(switch_name));
-}
-
-void ReportAboutFlagsHistogram(const std::string& uma_histogram_name,
-                               const std::set<std::string>& switches,
-                               const std::set<std::string>& features) {
-  ReportAboutFlagsHistogramSwitches(uma_histogram_name, switches);
-  ReportAboutFlagsHistogramFeatures(uma_histogram_name, features);
+  flags_ui::ReportAboutFlagsHistogram("Launch.FlagsAtStartup", switches,
+                                      features);
 }
 
 namespace testing {
 
-const base::HistogramBase::Sample kBadSwitchFormatHistogramId = 0;
-
 std::vector<FeatureEntry>* GetEntriesForTesting() {
   static base::NoDestructor<std::vector<FeatureEntry>> entries;
   return entries.get();
diff --git a/chrome/browser/about_flags.h b/chrome/browser/about_flags.h
index 7688670..2b33e725 100644
--- a/chrome/browser/about_flags.h
+++ b/chrome/browser/about_flags.h
@@ -103,16 +103,6 @@
 // startup.
 void RecordUMAStatistics(flags_ui::FlagsStorage* flags_storage);
 
-// Returns the UMA id for the specified switch name.
-base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name);
-
-// Sends stats (as UMA histogram) about a set of command line |flags| in
-// a histogram, with an enum value for each flag in |switches| and |features|,
-// based on the hash of the flag name.
-void ReportAboutFlagsHistogram(const std::string& uma_histogram_name,
-                               const std::set<std::string>& switches,
-                               const std::set<std::string>& features);
-
 namespace testing {
 
 // Returns the global set of feature entries.
@@ -121,10 +111,6 @@
 // Sets the global set of feature entries.
 void SetFeatureEntries(const std::vector<flags_ui::FeatureEntry>& entries);
 
-// This value is reported as switch histogram ID if switch name has unknown
-// format.
-extern const base::HistogramBase::Sample kBadSwitchFormatHistogramId;
-
 }  // namespace testing
 
 }  // namespace about_flags
diff --git a/chrome/browser/about_flags_unittest.cc b/chrome/browser/about_flags_unittest.cc
index ad0af09..241566a 100644
--- a/chrome/browser/about_flags_unittest.cc
+++ b/chrome/browser/about_flags_unittest.cc
@@ -18,6 +18,7 @@
 #include "chrome/common/chrome_version.h"
 #include "components/flags_ui/feature_entry.h"
 #include "components/flags_ui/flags_test_helpers.h"
+#include "components/flags_ui/flags_ui_metrics.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace about_flags {
@@ -159,20 +160,21 @@
   // Build reverse map {switch_name => id} from login_custom_flags.
   SwitchToIdMap histograms_xml_switches_ids;
 
-  EXPECT_TRUE(login_custom_flags->count(testing::kBadSwitchFormatHistogramId))
+  EXPECT_TRUE(
+      login_custom_flags->count(flags_ui::testing::kBadSwitchFormatHistogramId))
       << "Entry for UMA ID of incorrect command-line flag is not found in "
          "enums.xml enum LoginCustomFlags. "
          "Consider adding entry:\n"
       << "  " << GetHistogramEnumEntryText("BAD_FLAG_FORMAT", 0);
   // Check that all LoginCustomFlags entries have correct values.
   for (const auto& entry : *login_custom_flags) {
-    if (entry.first == testing::kBadSwitchFormatHistogramId) {
+    if (entry.first == flags_ui::testing::kBadSwitchFormatHistogramId) {
       // Add error value with empty name.
       SetSwitchToHistogramIdMapping(std::string(), entry.first,
                                     &histograms_xml_switches_ids);
       continue;
     }
-    const Sample uma_id = GetSwitchUMAId(entry.second);
+    const Sample uma_id = flags_ui::GetSwitchUMAId(entry.second);
     EXPECT_EQ(uma_id, entry.first)
         << "enums.xml enum LoginCustomFlags "
            "entry '"
@@ -189,12 +191,12 @@
     // Skip empty placeholders.
     if (flag.empty())
       continue;
-    const Sample uma_id = GetSwitchUMAId(flag);
-    EXPECT_NE(testing::kBadSwitchFormatHistogramId, uma_id)
+    const Sample uma_id = flags_ui::GetSwitchUMAId(flag);
+    EXPECT_NE(flags_ui::testing::kBadSwitchFormatHistogramId, uma_id)
         << "Command-line switch '" << flag
         << "' from about_flags.cc has UMA ID equal to reserved value "
            "kBadSwitchFormatHistogramId="
-        << testing::kBadSwitchFormatHistogramId
+        << flags_ui::testing::kBadSwitchFormatHistogramId
         << ". Please modify switch name.";
     auto enum_entry = histograms_xml_switches_ids.lower_bound(flag);
 
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/SessionHelper.java b/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/SessionHelper.java
index 98a46d1..5517917 100644
--- a/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/SessionHelper.java
+++ b/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/SessionHelper.java
@@ -4,8 +4,7 @@
 
 package org.chromium.customtabsclient;
 
-import android.support.annotation.Nullable;
-
+import androidx.annotation.Nullable;
 import androidx.browser.customtabs.CustomTabsSession;
 
 import java.lang.ref.WeakReference;
diff --git a/chrome/browser/android/preferences/pref_change_registrar_android.cc b/chrome/browser/android/preferences/pref_change_registrar_android.cc
index 54c11ac..4f3eca0 100644
--- a/chrome/browser/android/preferences/pref_change_registrar_android.cc
+++ b/chrome/browser/android/preferences/pref_change_registrar_android.cc
@@ -7,7 +7,6 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
 #include "base/bind.h"
-#include "chrome/browser/android/preferences/pref_service_bridge.h"
 #include "chrome/browser/preferences/jni_headers/PrefChangeRegistrar_jni.h"
 #include "chrome/browser/profiles/profile_manager.h"
 
@@ -32,26 +31,30 @@
   delete this;
 }
 
-void PrefChangeRegistrarAndroid::Add(JNIEnv* env,
-                                     const JavaParamRef<jobject>& obj,
-                                     const jint j_pref_index) {
+void PrefChangeRegistrarAndroid::Add(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& obj,
+    const JavaParamRef<jstring>& j_preference) {
+  std::string preference =
+      base::android::ConvertJavaStringToUTF8(env, j_preference);
   pref_change_registrar_.Add(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index),
-      base::Bind(&PrefChangeRegistrarAndroid::OnPreferenceChange,
-                 base::Unretained(this), j_pref_index));
+      preference, base::Bind(&PrefChangeRegistrarAndroid::OnPreferenceChange,
+                             base::Unretained(this), preference));
 }
 
-void PrefChangeRegistrarAndroid::Remove(JNIEnv* env,
-                                        const JavaParamRef<jobject>& obj,
-                                        const jint j_pref_index) {
+void PrefChangeRegistrarAndroid::Remove(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& obj,
+    const JavaParamRef<jstring>& j_preference) {
   pref_change_registrar_.Remove(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index));
+      base::android::ConvertJavaStringToUTF8(env, j_preference));
 }
 
-void PrefChangeRegistrarAndroid::OnPreferenceChange(const int pref_index) {
+void PrefChangeRegistrarAndroid::OnPreferenceChange(std::string preference) {
   JNIEnv* env = AttachCurrentThread();
   Java_PrefChangeRegistrar_onPreferenceChange(
-      env, pref_change_registrar_jobject_, pref_index);
+      env, pref_change_registrar_jobject_,
+      base::android::ConvertUTF8ToJavaString(env, preference));
 }
 
 jlong JNI_PrefChangeRegistrar_Init(JNIEnv* env,
diff --git a/chrome/browser/android/preferences/pref_change_registrar_android.h b/chrome/browser/android/preferences/pref_change_registrar_android.h
index ba84b86..d1126f8f 100644
--- a/chrome/browser/android/preferences/pref_change_registrar_android.h
+++ b/chrome/browser/android/preferences/pref_change_registrar_android.h
@@ -22,14 +22,14 @@
   void Destroy(JNIEnv*, const JavaParamRef<jobject>&);
   void Add(JNIEnv* env,
            const JavaParamRef<jobject>& obj,
-           const jint j_pref_index);
+           const JavaParamRef<jstring>& j_preference);
   void Remove(JNIEnv* env,
               const JavaParamRef<jobject>& obj,
-              const jint j_pref_index);
+              const JavaParamRef<jstring>& j_preference);
 
  private:
   ~PrefChangeRegistrarAndroid();
-  void OnPreferenceChange(const int pref_index);
+  void OnPreferenceChange(std::string preference);
 
   PrefChangeRegistrar pref_change_registrar_;
   ScopedJavaGlobalRef<jobject> pref_change_registrar_jobject_;
diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc
index b7d9c72..727e9b1 100644
--- a/chrome/browser/android/preferences/pref_service_bridge.cc
+++ b/chrome/browser/android/preferences/pref_service_bridge.cc
@@ -2,21 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/android/preferences/pref_service_bridge.h"
-
 #include <jni.h>
 
 #include <string>
 
 #include "base/android/jni_string.h"
 #include "base/android/scoped_java_ref.h"
-#include "chrome/browser/android/preferences/prefs.h"
 #include "chrome/browser/preferences/jni_headers/PrefServiceBridge_jni.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "components/prefs/pref_service.h"
 
 namespace {
 
+using base::android::JavaParamRef;
+
 PrefService* GetPrefService() {
   return ProfileManager::GetActiveUserProfile()
       ->GetOriginalProfile()
@@ -25,68 +24,67 @@
 
 }  // namespace
 
-const char* PrefServiceBridge::GetPrefNameExposedToJava(int pref_index) {
-  DCHECK_GE(pref_index, 0);
-  DCHECK_LT(pref_index, Pref::PREF_NUM_PREFS);
-  return kPrefsExposedToJava[pref_index];
-}
-
 // ----------------------------------------------------------------------------
 // Native JNI methods
 // ----------------------------------------------------------------------------
 
-static void JNI_PrefServiceBridge_ClearPref(JNIEnv* env,
-                                            const jint j_pref_index) {
+static void JNI_PrefServiceBridge_ClearPref(
+    JNIEnv* env,
+    const JavaParamRef<jstring>& j_preference) {
   GetPrefService()->ClearPref(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index));
+      base::android::ConvertJavaStringToUTF8(env, j_preference));
 }
 
 static jboolean JNI_PrefServiceBridge_GetBoolean(
     JNIEnv* env,
-    const jint j_pref_index) {
+    const JavaParamRef<jstring>& j_preference) {
   return GetPrefService()->GetBoolean(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index));
+      base::android::ConvertJavaStringToUTF8(env, j_preference));
 }
 
-static void JNI_PrefServiceBridge_SetBoolean(JNIEnv* env,
-                                             const jint j_pref_index,
-                                             const jboolean j_value) {
+static void JNI_PrefServiceBridge_SetBoolean(
+    JNIEnv* env,
+    const JavaParamRef<jstring>& j_preference,
+    const jboolean j_value) {
   GetPrefService()->SetBoolean(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index), j_value);
+      base::android::ConvertJavaStringToUTF8(env, j_preference), j_value);
 }
 
-static jint JNI_PrefServiceBridge_GetInteger(JNIEnv* env,
-                                             const jint j_pref_index) {
+static jint JNI_PrefServiceBridge_GetInteger(
+    JNIEnv* env,
+    const JavaParamRef<jstring>& j_preference) {
   return GetPrefService()->GetInteger(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index));
+      base::android::ConvertJavaStringToUTF8(env, j_preference));
 }
 
-static void JNI_PrefServiceBridge_SetInteger(JNIEnv* env,
-                                             const jint j_pref_index,
-                                             const jint j_value) {
+static void JNI_PrefServiceBridge_SetInteger(
+    JNIEnv* env,
+    const JavaParamRef<jstring>& j_preference,
+    const jint j_value) {
   GetPrefService()->SetInteger(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index), j_value);
+      base::android::ConvertJavaStringToUTF8(env, j_preference), j_value);
 }
 
 static base::android::ScopedJavaLocalRef<jstring>
-JNI_PrefServiceBridge_GetString(JNIEnv* env, const jint j_pref_index) {
+JNI_PrefServiceBridge_GetString(JNIEnv* env,
+                                const JavaParamRef<jstring>& j_preference) {
   return base::android::ConvertUTF8ToJavaString(
       env, GetPrefService()->GetString(
-               PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index)));
+               base::android::ConvertJavaStringToUTF8(env, j_preference)));
 }
 
 static void JNI_PrefServiceBridge_SetString(
     JNIEnv* env,
-    const jint j_pref_index,
+    const JavaParamRef<jstring>& j_preference,
     const base::android::JavaParamRef<jstring>& j_value) {
   GetPrefService()->SetString(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index),
+      base::android::ConvertJavaStringToUTF8(env, j_preference),
       base::android::ConvertJavaStringToUTF8(env, j_value));
 }
 
 static jboolean JNI_PrefServiceBridge_IsManagedPreference(
     JNIEnv* env,
-    const jint j_pref_index) {
+    const JavaParamRef<jstring>& j_preference) {
   return GetPrefService()->IsManagedPreference(
-      PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index));
+      base::android::ConvertJavaStringToUTF8(env, j_preference));
 }
diff --git a/chrome/browser/android/preferences/pref_service_bridge.h b/chrome/browser/android/preferences/pref_service_bridge.h
deleted file mode 100644
index 2043c84a..0000000
--- a/chrome/browser/android/preferences/pref_service_bridge.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ANDROID_PREFERENCES_PREF_SERVICE_BRIDGE_H_
-#define CHROME_BROWSER_ANDROID_PREFERENCES_PREF_SERVICE_BRIDGE_H_
-
-class PrefServiceBridge {
- public:
-  static const char* GetPrefNameExposedToJava(int pref_index);
-};
-
-#endif  // CHROME_BROWSER_ANDROID_PREFERENCES_PREF_SERVICE_BRIDGE_H_
diff --git a/chrome/browser/android/preferences/prefs.h b/chrome/browser/android/preferences/prefs.h
deleted file mode 100644
index 3d897183..0000000
--- a/chrome/browser/android/preferences/prefs.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ANDROID_PREFERENCES_PREFS_H_
-#define CHROME_BROWSER_ANDROID_PREFERENCES_PREFS_H_
-
-#include <cstddef>
-
-#include "build/build_config.h"
-#include "chrome/common/pref_names.h"
-#include "components/autofill/core/common/autofill_prefs.h"
-#include "components/content_settings/core/common/pref_names.h"
-#include "components/dom_distiller/core/pref_names.h"
-#include "components/embedder_support/pref_names.h"
-#include "components/feed/buildflags.h"
-#include "components/feed/core/shared_prefs/pref_names.h"
-#include "components/offline_pages/core/prefetch/prefetch_prefs.h"
-#include "components/password_manager/core/common/password_manager_pref_names.h"
-#include "components/payments/core/payment_prefs.h"
-#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
-#include "components/signin/public/base/signin_pref_names.h"
-#include "components/translate/core/browser/translate_pref_names.h"
-
-// A preference exposed to Java.
-// A Java counterpart will be generated for this enum.
-// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.preferences
-enum Pref {
-  ALLOW_DELETING_BROWSER_HISTORY,
-  INCOGNITO_MODE_AVAILABILITY,
-  NTP_ARTICLES_SECTION_ENABLED,
-  NTP_ARTICLES_LIST_VISIBLE,
-  READER_FOR_ACCESSIBILITY_ENABLED,
-  PROMPT_FOR_DOWNLOAD_ANDROID,
-  SHOW_MISSING_SD_CARD_ERROR_ANDROID,
-  CAN_MAKE_PAYMENT_ENABLED,
-  CONTEXTUAL_SEARCH_ENABLED,
-  AUTOFILL_PROFILE_ENABLED,
-  AUTOFILL_CREDIT_CARD_ENABLED,
-  USAGE_STATS_ENABLED,
-  OFFLINE_PREFETCH_USER_SETTING_ENABLED,
-  SAFE_BROWSING_EXTENDED_REPORTING_OPT_IN_ALLOWED,
-  SAFE_BROWSING_ENABLED,
-  PASSWORD_MANAGER_ONBOARDING_STATE,
-  SEARCH_SUGGEST_ENABLED,
-  REMEMBER_PASSWORDS_ENABLED,
-  PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED,
-  PASSWORD_MANAGER_LEAK_DETECTION_ENABLED,
-  SUPERVISED_USER_SAFE_SITES,
-  DEFAULT_SUPERVISED_USER_FILTERING_BEHAVIOR,
-  SUPERVISED_USER_ID,
-  SUPERVISED_USER_CUSTODIAN_EMAIL,
-  SUPERVISED_USER_SECOND_CUSTODIAN_NAME,
-  SUPERVISED_USER_SECOND_CUSTODIAN_EMAIL,
-  CLICKED_UPDATE_MENU_ITEM,
-  LATEST_VERSION_WHEN_CLICKED_UPDATE_MENU_ITEM,
-  BLOCK_THIRD_PARTY_COOKIES,
-  COOKIE_CONTROLS_MODE,
-  ENABLE_DO_NOT_TRACK,
-  PRINTING_ENABLED,
-  OFFER_TRANSLATE_ENABLED,
-  NOTIFICATIONS_VIBRATE_ENABLED,
-  ALTERNATE_ERROR_PAGES_ENABLED,
-  SYNC_LAST_ACCOUNT_NAME,
-  WEBKIT_PASSWORD_ECHO_ENABLED,
-  WEBKIT_FORCE_DARK_MODE_ENABLED,
-  HOME_PAGE,
-  AUTOFILL_CREDIT_CARD_FIDO_AUTH_ENABLED,
-  ENABLE_QUIET_NOTIFICATION_PERMISSION_UI,
-  // PREF_NUM_PREFS must be the last entry.
-  PREF_NUM_PREFS
-};
-
-// The indices must match value of Pref.
-// Remember to update prefs_unittest.cc as well.
-const char* const kPrefsExposedToJava[] = {
-    prefs::kAllowDeletingBrowserHistory,
-    prefs::kIncognitoModeAvailability,
-    feed::prefs::kEnableSnippets,
-    feed::prefs::kArticlesListVisible,
-    dom_distiller::prefs::kReaderForAccessibility,
-    prefs::kPromptForDownloadAndroid,
-    prefs::kShowMissingSdCardErrorAndroid,
-    payments::kCanMakePaymentEnabled,
-    prefs::kContextualSearchEnabled,
-    autofill::prefs::kAutofillProfileEnabled,
-    autofill::prefs::kAutofillCreditCardEnabled,
-    prefs::kUsageStatsEnabled,
-    offline_pages::prefetch_prefs::kUserSettingEnabled,
-    prefs::kSafeBrowsingExtendedReportingOptInAllowed,
-    prefs::kSafeBrowsingEnabled,
-    password_manager::prefs::kPasswordManagerOnboardingState,
-    prefs::kSearchSuggestEnabled,
-    password_manager::prefs::kCredentialsEnableService,
-    password_manager::prefs::kCredentialsEnableAutosignin,
-    password_manager::prefs::kPasswordLeakDetectionEnabled,
-    prefs::kSupervisedUserSafeSites,
-    prefs::kDefaultSupervisedUserFilteringBehavior,
-    prefs::kSupervisedUserId,
-    prefs::kSupervisedUserCustodianEmail,
-    prefs::kSupervisedUserSecondCustodianName,
-    prefs::kSupervisedUserSecondCustodianEmail,
-    prefs::kClickedUpdateMenuItem,
-    prefs::kLatestVersionWhenClickedUpdateMenuItem,
-    prefs::kBlockThirdPartyCookies,
-    prefs::kCookieControlsMode,
-    prefs::kEnableDoNotTrack,
-    prefs::kPrintingEnabled,
-    prefs::kOfferTranslateEnabled,
-    prefs::kNotificationsVibrateEnabled,
-    embedder_support::kAlternateErrorPagesEnabled,
-    prefs::kGoogleServicesLastUsername,
-    prefs::kWebKitPasswordEchoEnabled,
-    prefs::kWebKitForceDarkModeEnabled,
-    prefs::kHomePage,
-    autofill::prefs::kAutofillCreditCardFidoAuthEnabled,
-    prefs::kEnableQuietNotificationPermissionUi,
-};
-
-#endif  // CHROME_BROWSER_ANDROID_PREFERENCES_PREFS_H_
diff --git a/chrome/browser/android/preferences/prefs_unittest.cc b/chrome/browser/android/preferences/prefs_unittest.cc
deleted file mode 100644
index 3396f42..0000000
--- a/chrome/browser/android/preferences/prefs_unittest.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/android/preferences/prefs.h"
-
-#include "base/stl_util.h"
-#include "chrome/browser/android/preferences/pref_service_bridge.h"
-#include "chrome/common/pref_names.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-class PrefsTest : public ::testing::Test {
- protected:
-  const char* GetPrefName(Pref pref) {
-    pref_count_++;
-    return PrefServiceBridge::GetPrefNameExposedToJava(pref);
-  }
-
-  int pref_count_;
-};
-
-TEST_F(PrefsTest, TestIndex) {
-  pref_count_ = 0;
-
-  // If one of these checks fails, most likely the Pref enum and
-  // |kPrefExposedToJava| are out of sync.
-  EXPECT_EQ(Pref::PREF_NUM_PREFS, base::size(kPrefsExposedToJava));
-
-  EXPECT_EQ(prefs::kAllowDeletingBrowserHistory,
-            GetPrefName(ALLOW_DELETING_BROWSER_HISTORY));
-  EXPECT_EQ(prefs::kIncognitoModeAvailability,
-            GetPrefName(INCOGNITO_MODE_AVAILABILITY));
-  EXPECT_EQ(feed::prefs::kEnableSnippets,
-            GetPrefName(NTP_ARTICLES_SECTION_ENABLED));
-  EXPECT_EQ(feed::prefs::kArticlesListVisible,
-            GetPrefName(NTP_ARTICLES_LIST_VISIBLE));
-  EXPECT_EQ(prefs::kPromptForDownloadAndroid,
-            GetPrefName(PROMPT_FOR_DOWNLOAD_ANDROID));
-  EXPECT_EQ(dom_distiller::prefs::kReaderForAccessibility,
-            GetPrefName(READER_FOR_ACCESSIBILITY_ENABLED));
-  EXPECT_EQ(prefs::kShowMissingSdCardErrorAndroid,
-            GetPrefName(SHOW_MISSING_SD_CARD_ERROR_ANDROID));
-  EXPECT_EQ(payments::kCanMakePaymentEnabled,
-            GetPrefName(CAN_MAKE_PAYMENT_ENABLED));
-  EXPECT_EQ(prefs::kContextualSearchEnabled,
-            GetPrefName(CONTEXTUAL_SEARCH_ENABLED));
-  EXPECT_EQ(autofill::prefs::kAutofillProfileEnabled,
-            GetPrefName(AUTOFILL_PROFILE_ENABLED));
-  EXPECT_EQ(autofill::prefs::kAutofillCreditCardEnabled,
-            GetPrefName(AUTOFILL_CREDIT_CARD_ENABLED));
-  EXPECT_EQ(prefs::kUsageStatsEnabled, GetPrefName(USAGE_STATS_ENABLED));
-  EXPECT_EQ(offline_pages::prefetch_prefs::kUserSettingEnabled,
-            GetPrefName(OFFLINE_PREFETCH_USER_SETTING_ENABLED));
-  EXPECT_EQ(prefs::kSafeBrowsingExtendedReportingOptInAllowed,
-            GetPrefName(SAFE_BROWSING_EXTENDED_REPORTING_OPT_IN_ALLOWED));
-  EXPECT_EQ(prefs::kSafeBrowsingEnabled, GetPrefName(SAFE_BROWSING_ENABLED));
-  EXPECT_EQ(password_manager::prefs::kPasswordManagerOnboardingState,
-            GetPrefName(PASSWORD_MANAGER_ONBOARDING_STATE));
-  EXPECT_EQ(prefs::kSearchSuggestEnabled, GetPrefName(SEARCH_SUGGEST_ENABLED));
-  EXPECT_EQ(password_manager::prefs::kCredentialsEnableService,
-            GetPrefName(REMEMBER_PASSWORDS_ENABLED));
-  EXPECT_EQ(password_manager::prefs::kCredentialsEnableAutosignin,
-            GetPrefName(PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED));
-  EXPECT_EQ(password_manager::prefs::kPasswordLeakDetectionEnabled,
-            GetPrefName(PASSWORD_MANAGER_LEAK_DETECTION_ENABLED));
-  EXPECT_EQ(prefs::kSupervisedUserSafeSites,
-            GetPrefName(SUPERVISED_USER_SAFE_SITES));
-  EXPECT_EQ(prefs::kDefaultSupervisedUserFilteringBehavior,
-            GetPrefName(DEFAULT_SUPERVISED_USER_FILTERING_BEHAVIOR));
-  EXPECT_EQ(prefs::kSupervisedUserId, GetPrefName(SUPERVISED_USER_ID));
-  EXPECT_EQ(prefs::kSupervisedUserCustodianEmail,
-            GetPrefName(SUPERVISED_USER_CUSTODIAN_EMAIL));
-  EXPECT_EQ(prefs::kSupervisedUserSecondCustodianName,
-            GetPrefName(SUPERVISED_USER_SECOND_CUSTODIAN_NAME));
-  EXPECT_EQ(prefs::kSupervisedUserSecondCustodianEmail,
-            GetPrefName(SUPERVISED_USER_SECOND_CUSTODIAN_EMAIL));
-  EXPECT_EQ(prefs::kClickedUpdateMenuItem,
-            GetPrefName(CLICKED_UPDATE_MENU_ITEM));
-  EXPECT_EQ(prefs::kLatestVersionWhenClickedUpdateMenuItem,
-            GetPrefName(LATEST_VERSION_WHEN_CLICKED_UPDATE_MENU_ITEM));
-  EXPECT_EQ(prefs::kBlockThirdPartyCookies,
-            GetPrefName(BLOCK_THIRD_PARTY_COOKIES));
-  EXPECT_EQ(prefs::kCookieControlsMode, GetPrefName(COOKIE_CONTROLS_MODE));
-  EXPECT_EQ(prefs::kEnableDoNotTrack, GetPrefName(ENABLE_DO_NOT_TRACK));
-  EXPECT_EQ(prefs::kPrintingEnabled, GetPrefName(PRINTING_ENABLED));
-  EXPECT_EQ(prefs::kOfferTranslateEnabled,
-            GetPrefName(OFFER_TRANSLATE_ENABLED));
-  EXPECT_EQ(prefs::kNotificationsVibrateEnabled,
-            GetPrefName(NOTIFICATIONS_VIBRATE_ENABLED));
-  EXPECT_EQ(embedder_support::kAlternateErrorPagesEnabled,
-            GetPrefName(ALTERNATE_ERROR_PAGES_ENABLED));
-  EXPECT_EQ(prefs::kGoogleServicesLastUsername,
-            GetPrefName(SYNC_LAST_ACCOUNT_NAME));
-  EXPECT_EQ(prefs::kWebKitPasswordEchoEnabled,
-            GetPrefName(WEBKIT_PASSWORD_ECHO_ENABLED));
-  EXPECT_EQ(prefs::kWebKitForceDarkModeEnabled,
-            GetPrefName(WEBKIT_FORCE_DARK_MODE_ENABLED));
-  EXPECT_EQ(prefs::kHomePage, GetPrefName(HOME_PAGE));
-  EXPECT_EQ(autofill::prefs::kAutofillCreditCardFidoAuthEnabled,
-            GetPrefName(AUTOFILL_CREDIT_CARD_FIDO_AUTH_ENABLED));
-  EXPECT_EQ(prefs::kEnableQuietNotificationPermissionUi,
-            GetPrefName(ENABLE_QUIET_NOTIFICATION_PERMISSION_UI));
-
-  // If this check fails, a pref is missing a test case above.
-  EXPECT_EQ(Pref::PREF_NUM_PREFS, pref_count_);
-}
-
-}  // namespace
diff --git a/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc b/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
index 6ce4f19..ce080bd 100644
--- a/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
+++ b/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/json/json_reader.h"
 #include "base/macros.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/ui/autofill/chrome_autofill_client.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
@@ -17,6 +18,7 @@
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
+#include "components/autofill/core/common/autofill_payments_features.h"
 #include "components/autofill/core/common/autofill_prefs.h"
 #include "components/infobars/core/confirm_infobar_delegate.h"
 #include "components/prefs/pref_service.h"
@@ -37,16 +39,19 @@
   void TearDown() override;
 
  protected:
-  std::unique_ptr<ConfirmInfoBarDelegate> CreateDelegate(
+  std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile> CreateDelegate(
       bool is_uploading,
       prefs::PreviousSaveCreditCardPromptUserDecision
           previous_save_credit_card_prompt_user_decision =
-              prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_NONE);
-  std::unique_ptr<ConfirmInfoBarDelegate> CreateDelegateWithLegalMessage(
+              prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_NONE,
+      CreditCard credit_card = CreditCard());
+  std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile>
+  CreateDelegateWithLegalMessage(
       bool is_uploading,
       std::string legal_message_string,
       prefs::PreviousSaveCreditCardPromptUserDecision
-          previous_save_credit_card_prompt_user_decision);
+          previous_save_credit_card_prompt_user_decision,
+      CreditCard credit_card = CreditCard());
 
   std::unique_ptr<TestPersonalDataManager> personal_data_;
 
@@ -93,22 +98,24 @@
   ChromeRenderViewHostTestHarness::TearDown();
 }
 
-std::unique_ptr<ConfirmInfoBarDelegate>
+std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile>
 AutofillSaveCardInfoBarDelegateMobileTest::CreateDelegate(
     bool is_uploading,
     prefs::PreviousSaveCreditCardPromptUserDecision
-        previous_save_credit_card_prompt_user_decision) {
+        previous_save_credit_card_prompt_user_decision,
+    CreditCard credit_card) {
   return CreateDelegateWithLegalMessage(
-      is_uploading, "", previous_save_credit_card_prompt_user_decision);
+      is_uploading, "", previous_save_credit_card_prompt_user_decision,
+      credit_card);
 }
 
-std::unique_ptr<ConfirmInfoBarDelegate>
+std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile>
 AutofillSaveCardInfoBarDelegateMobileTest::CreateDelegateWithLegalMessage(
     bool is_uploading,
     std::string legal_message_string,
     prefs::PreviousSaveCreditCardPromptUserDecision
-        previous_save_credit_card_prompt_user_decision) {
-  CreditCard credit_card;
+        previous_save_credit_card_prompt_user_decision,
+    CreditCard credit_card) {
   LegalMessageLines legal_message_lines;
   if (!legal_message_string.empty()) {
     std::unique_ptr<base::Value> value(
@@ -123,7 +130,7 @@
   if (is_uploading) {
     // Upload save infobar delegate:
     credit_card_to_save_ = credit_card;
-    std::unique_ptr<ConfirmInfoBarDelegate> delegate(
+    std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate(
         new AutofillSaveCardInfoBarDelegateMobile(
             is_uploading, AutofillClient::SaveCreditCardOptions(), credit_card,
             legal_message_lines,
@@ -136,7 +143,7 @@
   }
   // Local save infobar delegate:
   credit_card_to_save_ = credit_card;
-  std::unique_ptr<ConfirmInfoBarDelegate> delegate(
+  std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate(
       new AutofillSaveCardInfoBarDelegateMobile(
           is_uploading, AutofillClient::SaveCreditCardOptions(), credit_card,
           legal_message_lines,
@@ -388,4 +395,48 @@
   }
 }
 
+// Tests to ensure the card nickname is correctly shown in the Upstream infobar.
+// The param here indicates whether the nickname experiment is enabled.
+class AutofillSaveCardInfoBarDelegateMobileTestForNickname
+    : public AutofillSaveCardInfoBarDelegateMobileTest,
+      public ::testing::WithParamInterface<bool> {
+ protected:
+  void SetUp() override {
+    scoped_feature_list_.InitWithFeatureState(
+        features::kAutofillEnableSurfacingServerCardNickname, GetParam());
+
+    AutofillSaveCardInfoBarDelegateMobileTest::SetUp();
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(,
+                         AutofillSaveCardInfoBarDelegateMobileTestForNickname,
+                         testing::Bool());
+
+TEST_P(AutofillSaveCardInfoBarDelegateMobileTestForNickname,
+       LocalCardHasNickname) {
+  CreditCard card = test::GetCreditCard();
+  card.SetNickname(base::ASCIIToUTF16("Nickname"));
+  std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate =
+      CreateDelegate(/*is_uploading=*/true,
+                     prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_NONE,
+                     card);
+  EXPECT_EQ(delegate->card_label(),
+            GetParam() ? card.NicknameAndLastFourDigitsForTesting()
+                       : card.NetworkAndLastFourDigits());
+}
+
+TEST_P(AutofillSaveCardInfoBarDelegateMobileTestForNickname,
+       LocalCardHasNoNickname) {
+  CreditCard card = test::GetCreditCard();
+  std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate =
+      CreateDelegate(/*is_uploading=*/true,
+                     prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_NONE,
+                     card);
+  EXPECT_EQ(delegate->card_label(), card.NetworkAndLastFourDigits());
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
index 0e80522c..5e1fa5b 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -100,6 +100,7 @@
 #include "components/permissions/permission_decision_auto_blocker.h"
 #include "components/prefs/pref_service.h"
 #include "components/previews/content/previews_ui_service.h"
+#include "components/site_isolation/pref_names.h"
 #include "components/web_cache/browser/web_cache_manager.h"
 #include "components/webrtc_logging/browser/log_cleanup.h"
 #include "components/webrtc_logging/browser/text_log_list.h"
@@ -1152,7 +1153,7 @@
   // TODO(alexmos): Support finer-grained filtering based on time ranges and
   // |filter|. For now, conservatively delete all saved isolated origins.
   if (remove_mask & (DATA_TYPE_ISOLATED_ORIGINS | DATA_TYPE_HISTORY)) {
-    prefs->ClearPref(prefs::kUserTriggeredIsolatedOrigins);
+    prefs->ClearPref(site_isolation::prefs::kUserTriggeredIsolatedOrigins);
     // Note that this does not clear these sites from the in-memory map in
     // ChildProcessSecurityPolicy, since that is not supported at runtime. That
     // list of isolated sites is not directly exposed to users, though, and
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
index 7fab9db..94d3e5b 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -93,6 +93,7 @@
 #include "components/prefs/testing_pref_service.h"
 #include "components/safe_browsing/core/verdict_cache_manager.h"
 #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
+#include "components/site_isolation/pref_names.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browsing_data_filter_builder.h"
@@ -1485,18 +1486,24 @@
   // Add foo.com to the list of stored isolated origins.
   base::ListValue list;
   list.AppendString("http://foo.com");
-  prefs->Set(prefs::kUserTriggeredIsolatedOrigins, list);
-  EXPECT_FALSE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  prefs->Set(site_isolation::prefs::kUserTriggeredIsolatedOrigins, list);
+  EXPECT_FALSE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 
   // Clear history and ensure the stored isolated origins are cleared.
   BlockUntilBrowsingDataRemoved(
       base::Time(), base::Time::Max(),
       ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, false);
-  EXPECT_TRUE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  EXPECT_TRUE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 
   // Re-add foo.com to stored isolated origins.
-  prefs->Set(prefs::kUserTriggeredIsolatedOrigins, list);
-  EXPECT_FALSE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  prefs->Set(site_isolation::prefs::kUserTriggeredIsolatedOrigins, list);
+  EXPECT_FALSE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 
   // Now clear cookies and other site data, and ensure foo.com is cleared.
   // Note that this uses a short time period to document that time ranges are
@@ -1504,21 +1511,29 @@
   BlockUntilBrowsingDataRemoved(
       AnHourAgo(), base::Time::Max(),
       ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA, false);
-  EXPECT_TRUE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  EXPECT_TRUE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 
   // Re-add foo.com.
-  prefs->Set(prefs::kUserTriggeredIsolatedOrigins, list);
-  EXPECT_FALSE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  prefs->Set(site_isolation::prefs::kUserTriggeredIsolatedOrigins, list);
+  EXPECT_FALSE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 
   // Clear the isolated origins data type.
   BlockUntilBrowsingDataRemoved(
       base::Time(), base::Time::Max(),
       ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ISOLATED_ORIGINS, false);
-  EXPECT_TRUE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  EXPECT_TRUE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 
   // Re-add foo.com.
-  prefs->Set(prefs::kUserTriggeredIsolatedOrigins, list);
-  EXPECT_FALSE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  prefs->Set(site_isolation::prefs::kUserTriggeredIsolatedOrigins, list);
+  EXPECT_FALSE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 
   // Clear both history and site data, and ensure the stored isolated origins
   // are cleared.
@@ -1527,7 +1542,9 @@
       ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY |
           ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA,
       false);
-  EXPECT_TRUE(prefs->GetList(prefs::kUserTriggeredIsolatedOrigins)->empty());
+  EXPECT_TRUE(
+      prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins)
+          ->empty());
 }
 
 // Test that clearing history deletes favicons not associated with bookmarks.
diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc
index 3b404c3..c8ce00c 100644
--- a/chrome/browser/chrome_browser_field_trials.cc
+++ b/chrome/browser/chrome_browser_field_trials.cc
@@ -33,6 +33,7 @@
 #endif
 
 #if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/sync/split_settings_sync_field_trial.h"
 #include "chromeos/services/multidevice_setup/public/cpp/first_run_field_trial.h"
 #endif
 
@@ -90,6 +91,11 @@
     chromeos::multidevice_setup::CreateFirstRunFieldTrial(feature_list);
 #endif
   }
+#if defined(OS_CHROMEOS)
+  // This trial is fully client controlled and must be configured whether or not
+  // a seed is available.
+  split_settings_sync_field_trial::Create(feature_list, local_state_);
+#endif
 }
 
 void ChromeBrowserFieldTrials::RegisterSyntheticTrials() {
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 6e52377d..317aae11 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -84,7 +84,6 @@
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/sessions/chrome_serialized_navigation_driver.h"
 #include "chrome/browser/shell_integration.h"
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
 #include "chrome/browser/startup_data.h"
 #include "chrome/browser/tracing/background_tracing_field_trial.h"
 #include "chrome/browser/tracing/trace_event_system_stats_monitor.h"
@@ -135,6 +134,7 @@
 #include "components/prefs/pref_value_store.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/rappor/rappor_service_impl.h"
+#include "components/site_isolation/site_isolation_policy.h"
 #include "components/spellcheck/spellcheck_buildflags.h"
 #include "components/startup_metric_utils/browser/startup_metric_utils.h"
 #include "components/tracing/common/tracing_switches.h"
@@ -957,7 +957,7 @@
   // Add Site Isolation switches as dictated by policy.
   auto* command_line = base::CommandLine::ForCurrentProcess();
   if (local_state->GetBoolean(prefs::kSitePerProcess) &&
-      SiteIsolationPolicy::IsEnterprisePolicyApplicable() &&
+      site_isolation::SiteIsolationPolicy::IsEnterprisePolicyApplicable() &&
       !command_line->HasSwitch(switches::kSitePerProcess)) {
     command_line->AppendSwitch(switches::kSitePerProcess);
   }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index ab78caf..3a7df7f7 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -128,7 +128,6 @@
 #include "chrome/browser/signin/chrome_signin_url_loader_throttle.h"
 #include "chrome/browser/signin/header_modification_delegate_impl.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
 #include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h"
 #include "chrome/browser/speech/tts_controller_delegate_impl.h"
 #include "chrome/browser/ssl/chrome_security_blocking_page_factory.h"
@@ -253,7 +252,9 @@
 #include "components/security_interstitials/content/ssl_error_handler.h"
 #include "components/security_interstitials/content/ssl_error_navigation_throttle.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
+#include "components/site_isolation/pref_names.h"
 #include "components/site_isolation/preloaded_isolated_origins.h"
+#include "components/site_isolation/site_isolation_policy.h"
 #include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
 #include "components/translate/core/common/translate_switches.h"
 #include "components/ukm/app_source_url_recorder.h"
@@ -1268,7 +1269,8 @@
   // used for mapping the command-line flags).
   registry->RegisterStringPref(prefs::kIsolateOrigins, std::string());
   registry->RegisterBooleanPref(prefs::kSitePerProcess, false);
-  registry->RegisterListPref(prefs::kUserTriggeredIsolatedOrigins);
+  registry->RegisterListPref(
+      site_isolation::prefs::kUserTriggeredIsolatedOrigins);
   registry->RegisterDictionaryPref(
       prefs::kDevToolsBackgroundServicesExpirationDict);
   registry->RegisterBooleanPref(prefs::kSignedHTTPExchangeEnabled, true);
@@ -2009,12 +2011,13 @@
 }
 
 bool ChromeContentBrowserClient::ShouldDisableSiteIsolation() {
-  return SiteIsolationPolicy::ShouldDisableSiteIsolationDueToMemoryThreshold();
+  return site_isolation::SiteIsolationPolicy::
+      ShouldDisableSiteIsolationDueToMemoryThreshold();
 }
 
 std::vector<std::string>
 ChromeContentBrowserClient::GetAdditionalSiteIsolationModes() {
-  if (SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled())
+  if (site_isolation::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled())
     return {"Isolate Password Sites"};
   else
     return {};
@@ -2026,7 +2029,7 @@
   DCHECK(!context->IsOffTheRecord());
   Profile* profile = Profile::FromBrowserContext(context);
   ListPrefUpdate update(profile->GetPrefs(),
-                        prefs::kUserTriggeredIsolatedOrigins);
+                        site_isolation::prefs::kUserTriggeredIsolatedOrigins);
   base::ListValue* list = update.Get();
   base::Value value(origin.Serialize());
   if (!base::Contains(list->GetList(), value))
diff --git a/chrome/browser/chrome_content_browser_client_browsertest.cc b/chrome/browser/chrome_content_browser_client_browsertest.cc
index 564b2f6..90127373 100644
--- a/chrome/browser/chrome_content_browser_client_browsertest.cc
+++ b/chrome/browser/chrome_content_browser_client_browsertest.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/search/instant_service.h"
 #include "chrome/browser/search/instant_service_factory.h"
 #include "chrome/browser/search/search.h"
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/search/instant_test_base.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
@@ -35,6 +34,7 @@
 #include "components/network_session_configurator/common/network_switches.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "components/prefs/pref_service.h"
+#include "components/site_isolation/site_isolation_policy.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/render_frame_host.h"
diff --git a/chrome/browser/chrome_navigation_browsertest.cc b/chrome/browser/chrome_navigation_browsertest.cc
index f95ee65..3e9cafa 100644
--- a/chrome/browser/chrome_navigation_browsertest.cc
+++ b/chrome/browser/chrome_navigation_browsertest.cc
@@ -30,6 +30,8 @@
 #include "components/network_session_configurator/common/network_switches.h"
 #include "components/omnibox/browser/omnibox_view.h"
 #include "components/prefs/pref_service.h"
+#include "components/site_isolation/features.h"
+#include "components/site_isolation/pref_names.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "components/url_formatter/url_formatter.h"
 #include "components/variations/active_field_trials.h"
@@ -1700,8 +1702,9 @@
     : public ChromeNavigationBrowserTest {
  public:
   SiteIsolationForPasswordSitesBrowserTest() {
-    feature_list_.InitWithFeatures({features::kSiteIsolationForPasswordSites},
-                                   {features::kSitePerProcess});
+    feature_list_.InitWithFeatures(
+        {site_isolation::features::kSiteIsolationForPasswordSites},
+        {features::kSitePerProcess});
   }
 
   std::vector<std::string> GetSavedIsolatedSites() {
@@ -1710,7 +1713,8 @@
 
   std::vector<std::string> GetSavedIsolatedSites(Profile* profile) {
     PrefService* prefs = profile->GetPrefs();
-    auto* list = prefs->GetList(prefs::kUserTriggeredIsolatedOrigins);
+    auto* list =
+        prefs->GetList(site_isolation::prefs::kUserTriggeredIsolatedOrigins);
     std::vector<std::string> sites;
     for (const base::Value& value : list->GetList())
       sites.push_back(value.GetString());
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 84c0275..8b71380 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -92,6 +92,7 @@
     "//chrome/common",
     "//chrome/common/extensions/api",
     "//chrome/common/string_matching",
+    "//chrome/installer/util:with_no_strings",
     "//chrome/services/file_util/public/cpp",
     "//chrome/services/keymaster/public/mojom",
     "//chrome/services/printing/public/mojom",
@@ -215,6 +216,7 @@
     "//components/language/core/browser",
     "//components/language/core/common",
     "//components/login",
+    "//components/metrics",
     "//components/metrics:serialization",
     "//components/omnibox/browser",
     "//components/onc",
@@ -2378,6 +2380,8 @@
     "sync/os_sync_util.h",
     "sync/os_syncable_service_model_type_controller.cc",
     "sync/os_syncable_service_model_type_controller.h",
+    "sync/split_settings_sync_field_trial.cc",
+    "sync/split_settings_sync_field_trial.h",
     "sync/turn_sync_on_helper.cc",
     "sync/turn_sync_on_helper.h",
     "system/automatic_reboot_manager.cc",
@@ -2446,6 +2450,8 @@
     "tpm_firmware_update.h",
     "tpm_firmware_update_notification.cc",
     "tpm_firmware_update_notification.h",
+    "tracing_allocation_failure_tracker.cc",
+    "tracing_allocation_failure_tracker.h",
     "u2f_notification.cc",
     "u2f_notification.h",
     "ui/echo_dialog_listener.h",
@@ -3577,9 +3583,11 @@
 
     deps = [
       ":policy_fuzzer_proto",
+      "//base/test:test_support",
       "//chrome/browser",
       "//chrome/browser/chromeos",
       "//chromeos/dbus:dbus",
+      "//chromeos/tpm",
       "//third_party/libprotobuf-mutator",
     ]
   }
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
index 522f52e..9ea9b57b 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -75,6 +75,8 @@
 #include "content/public/browser/tts_controller.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/common/content_switches.h"
+#include "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_delegate.h"
+#include "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_private_api.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_messages.h"
@@ -1394,6 +1396,15 @@
     extensions::UnloadedExtensionReason reason) {
   if (extension->id() == keyboard_listener_extension_id_)
     keyboard_listener_extension_id_ = std::string();
+
+  if (extension->id() == extension_misc::kSwitchAccessExtensionId) {
+    extensions::VirtualKeyboardAPI* api =
+        extensions::BrowserContextKeyedAPIFactory<
+            extensions::VirtualKeyboardAPI>::Get(browser_context);
+    DCHECK(api);
+    api->delegate()->SetRequestedKeyboardState(
+        extensions::api::virtual_keyboard_private::KEYBOARD_STATE_AUTO);
+  }
 }
 
 void AccessibilityManager::OnShutdown(extensions::ExtensionRegistry* registry) {
@@ -1536,7 +1547,7 @@
 }
 
 void AccessibilityManager::PostUnloadSwitchAccess() {
-  // Do any teardown work needed immediately after SwitchAccess actually
+  // Do any teardown work needed immediately after Switch Access actually
   // unloads.
 
   // Clear the accessibility focus ring.
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc
index 8ab7d42..4338bb6 100644
--- a/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc
@@ -7,10 +7,15 @@
 #include "ash/app_list/test/app_list_test_model.h"
 #include "ash/app_list/test/test_search_result.h"
 #include "ash/app_list/views/app_list_view.h"
+#include "ash/public/cpp/ash_switches.h"
+#include "ash/public/cpp/tablet_mode.h"
+#include "ash/public/cpp/test/shell_test_api.h"
 #include "ash/shell.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.h"
 #include "chrome/browser/ui/app_list/app_list_client_impl.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/grit/generated_resources.h"
 #include "chromeos/constants/chromeos_switches.h"
@@ -18,6 +23,8 @@
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/display/display.h"
+#include "ui/display/manager/display_manager.h"
 
 namespace chromeos {
 
@@ -96,6 +103,104 @@
                          ::testing::Values(kTestAsNormalUser,
                                            kTestAsGuestUser));
 
+class TabletModeSpokenFeedbackAppListTest : public SpokenFeedbackAppListTest {
+ protected:
+  TabletModeSpokenFeedbackAppListTest() = default;
+  ~TabletModeSpokenFeedbackAppListTest() = default;
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    SpokenFeedbackAppListTest::SetUpCommandLine(command_line);
+    command_line->AppendSwitch(ash::switches::kAshEnableTabletMode);
+  }
+
+  void SetTabletMode(bool enabled) {
+    ash::ShellTestApi().SetTabletModeEnabledForTest(enabled);
+  }
+
+  bool IsTabletModeEnabled() const {
+    return ash::TabletMode::Get()->InTabletMode();
+  }
+};
+
+INSTANTIATE_TEST_SUITE_P(TestAsNormalAndGuestUser,
+                         TabletModeSpokenFeedbackAppListTest,
+                         ::testing::Values(kTestAsNormalUser,
+                                           kTestAsGuestUser));
+
+// Checks that entering and exiting tablet mode with a browser window open does
+// not generate an accessibility event.
+IN_PROC_BROWSER_TEST_P(
+    TabletModeSpokenFeedbackAppListTest,
+    HiddenAppListDoesNotCreateAccessibilityEventWhenTransitioningToTabletMode) {
+  EnableChromeVox();
+
+  sm_.Call([this]() { EXPECT_FALSE(IsTabletModeEnabled()); });
+  sm_.Call([this]() { SetTabletMode(true); });
+  sm_.Call([this]() { EXPECT_TRUE(IsTabletModeEnabled()); });
+  sm_.ExpectNextSpeechIsNot("Launcher, all apps");
+  sm_.Call([this]() { SetTabletMode(false); });
+  sm_.Call([this]() { EXPECT_FALSE(IsTabletModeEnabled()); });
+  sm_.ExpectNextSpeechIsNot("Launcher, all apps");
+  sm_.Replay();
+}
+
+// Checks that rotating the display in tablet mode does not generate an
+// accessibility event.
+IN_PROC_BROWSER_TEST_P(
+    TabletModeSpokenFeedbackAppListTest,
+    LauncherAppListScreenRotationDoesNotCreateAccessibilityEvent) {
+  display::DisplayManager* display_manager =
+      ash::Shell::Get()->display_manager();
+  const int display_id = display_manager->GetDisplayAt(0).id();
+  EnableChromeVox();
+
+  sm_.Call(
+      [this]() { EXPECT_TRUE(PerformAcceleratorAction(ash::FOCUS_SHELF)); });
+
+  sm_.Call(
+      [this]() { EXPECT_TRUE(PerformAcceleratorAction(ash::FOCUS_SHELF)); });
+  sm_.ExpectSpeech("Shelf");
+
+  // Press space on the launcher button in shelf, this opens peeking launcher.
+  sm_.Call([this]() { SendKeyPressWithSearch(ui::VKEY_SPACE); });
+  sm_.ExpectSpeech("Launcher, partial view");
+
+  // Send a key press to enable keyboard traversal
+  sm_.Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_TAB); });
+
+  // Move focus to expand all apps button.
+  sm_.Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_TAB); });
+  sm_.ExpectSpeech("Expand to all apps");
+
+  // Press space on expand arrow to go to fullscreen launcher.
+  sm_.Call([this]() { SendKeyPressWithSearch(ui::VKEY_SPACE); });
+  sm_.ExpectSpeech("Launcher, all apps");
+
+  sm_.Call([this]() { EXPECT_FALSE(IsTabletModeEnabled()); });
+  sm_.Call([this]() { SetTabletMode(true); });
+  sm_.Call([this]() { EXPECT_TRUE(IsTabletModeEnabled()); });
+
+  sm_.Call([this]() { browser()->window()->Minimize(); });
+  // Set screen rotation to 90 degrees. No ChromeVox event should be created.
+  sm_.Call([&, display_manager, display_id]() {
+    display_manager->SetDisplayRotation(display_id, display::Display::ROTATE_90,
+                                        display::Display::RotationSource::USER);
+  });
+  sm_.ExpectNextSpeechIsNot("Launcher, all apps");
+
+  // Set screen rotation to 0 degrees. No ChromeVox event should be created.
+  sm_.Call([&, display_manager, display_id]() {
+    display_manager->SetDisplayRotation(display_id, display::Display::ROTATE_0,
+                                        display::Display::RotationSource::USER);
+  });
+  sm_.ExpectNextSpeechIsNot("Launcher, all apps");
+
+  sm_.Call([this]() { EXPECT_TRUE(IsTabletModeEnabled()); });
+  sm_.Call([this]() { SetTabletMode(false); });
+  sm_.Call([this]() { EXPECT_FALSE(IsTabletModeEnabled()); });
+  sm_.Replay();
+}
+
 IN_PROC_BROWSER_TEST_P(SpokenFeedbackAppListTest, LauncherStateTransition) {
   EnableChromeVox();
 
@@ -241,8 +346,7 @@
   // Move focus to app list window;
   sm_.Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); });
   sm_.ExpectSpeech(
-      "Search your device, apps, and web. Use the arrow keys to navigate "
-      "your "
+      "Search your device, apps, and web. Use the arrow keys to navigate your "
       "apps.");
   // Move focus to search box;
   sm_.ExpectSpeech("Edit text");
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
index 6f80735..6424e2a 100644
--- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
+++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -368,6 +368,8 @@
 api::autotest_private::HotseatState GetHotseatState(
     ash::HotseatState hotseat_state) {
   switch (hotseat_state) {
+    case ash::HotseatState::kNone:
+      return api::autotest_private::HotseatState::HOTSEAT_STATE_NONE;
     case ash::HotseatState::kHidden:
       return api::autotest_private::HotseatState::HOTSEAT_STATE_HIDDEN;
     case ash::HotseatState::kShownClamshell:
diff --git a/chrome/browser/chromeos/external_metrics.cc b/chrome/browser/chromeos/external_metrics.cc
index cd5d738..0573a586 100644
--- a/chrome/browser/chromeos/external_metrics.cc
+++ b/chrome/browser/chromeos/external_metrics.cc
@@ -48,15 +48,14 @@
   return CheckValues(name, 1, maximum, maximum + 1);
 }
 
-// The file from which externally-reported metrics are read.
-constexpr char kEventsFilePath[] = "/var/lib/metrics/uma-events";
-
 // Default interval between externally-reported metrics being collected.
 constexpr base::TimeDelta kDefaultCollectionInterval =
     base::TimeDelta::FromSeconds(30);
 
 }  // namespace
 
+constexpr char ExternalMetrics::kEventsFilePath[];
+
 ExternalMetrics::ExternalMetrics()
     : uma_events_file_(kEventsFilePath),
       collection_interval_(kDefaultCollectionInterval) {
diff --git a/chrome/browser/chromeos/external_metrics.h b/chrome/browser/chromeos/external_metrics.h
index d7f0285..9e2feae 100644
--- a/chrome/browser/chromeos/external_metrics.h
+++ b/chrome/browser/chromeos/external_metrics.h
@@ -27,6 +27,9 @@
 // flock() to synchronize accesses to the file.
 class ExternalMetrics : public base::RefCountedThreadSafe<ExternalMetrics> {
  public:
+  // The file from which externally-reported metrics are read.
+  static constexpr char kEventsFilePath[] = "/var/lib/metrics/uma-events";
+
   ExternalMetrics();
 
   // Begins the external data collection.  This service is started and stopped
diff --git a/chrome/browser/chromeos/input_method/input_method_persistence.cc b/chrome/browser/chromeos/input_method/input_method_persistence.cc
index 43b0ce13..d897b88 100644
--- a/chrome/browser/chromeos/input_method/input_method_persistence.cc
+++ b/chrome/browser/chromeos/input_method/input_method_persistence.cc
@@ -9,14 +9,14 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/language_preferences.h"
 #include "chrome/browser/chromeos/login/lock/screen_locker.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/common/pref_names.h"
+#include "components/account_id/account_id.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
-#include "components/signin/public/identity_manager/consent_level.h"
-#include "components/signin/public/identity_manager/identity_manager.h"
+#include "components/user_manager/known_user.h"
 #include "ui/base/ime/chromeos/input_method_util.h"
 
 namespace chromeos {
@@ -32,47 +32,19 @@
 }
 
 // Returns the user email, whether or not they have consented to browser sync.
-std::string GetUserName(Profile* profile) {
-  auto* identity_manager = IdentityManagerFactory::GetForProfile(profile);
-  if (!identity_manager)
-    return std::string();
-  return identity_manager
-      ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired)
-      .email;
+AccountId GetUserAccount(Profile* profile) {
+  const user_manager::User* user =
+      ProfileHelper::Get()->GetUserByProfile(profile);
+  if (!user)
+    return EmptyAccountId();
+  return user->GetAccountId();
 }
 
-static void SetUserLastInputMethodPreference(const std::string& username,
-                                             const std::string& input_method,
-                                             PrefService* local_state) {
-  if (!username.empty() && !local_state->ReadOnly()) {
-    bool update_succeed = false;
-    {
-      // Updater may have side-effects, therefore we do not replace
-      // entry while updater exists.
-      DictionaryPrefUpdate updater(local_state, prefs::kUsersLastInputMethod);
-      base::DictionaryValue* const users_last_input_methods = updater.Get();
-      if (users_last_input_methods) {
-        users_last_input_methods->SetKey(username, base::Value(input_method));
-        update_succeed = true;
-      }
-    }
-    if (!update_succeed) {
-      // Somehow key kUsersLastInputMethod has value of invalid type.
-      // Replace and retry.
-      local_state->Set(prefs::kUsersLastInputMethod, base::DictionaryValue());
-
-      DictionaryPrefUpdate updater(local_state, prefs::kUsersLastInputMethod);
-      base::DictionaryValue* const users_last_input_methods = updater.Get();
-      if (users_last_input_methods) {
-        users_last_input_methods->SetKey(username, base::Value(input_method));
-        update_succeed = true;
-      }
-    }
-    if (!update_succeed) {
-      DVLOG(1) << "Failed to replace local_state.kUsersLastInputMethod: '"
-               << prefs::kUsersLastInputMethod << "' for '" << username << "'";
-    }
-  }
+static void SetUserLastInputMethodPreference(const AccountId& account_id,
+                                             const std::string& input_method) {
+  if (!account_id.is_valid())
+    return;
+  user_manager::known_user::SetUserLastInputMethod(account_id, input_method);
 }
 
 // Update user Last keyboard layout for login screen
@@ -88,10 +60,7 @@
   if (profile == NULL)
     return;
 
-  PrefService* const local_state = g_browser_process->local_state();
-
-  SetUserLastInputMethodPreference(GetUserName(profile), input_method,
-                                   local_state);
+  SetUserLastInputMethodPreference(GetUserAccount(profile), input_method);
 }
 
 void PersistUserInputMethod(const std::string& input_method,
@@ -184,10 +153,9 @@
 }
 
 void SetUserLastInputMethodPreferenceForTesting(
-    const std::string& username,
-    const std::string& input_method,
-    PrefService* const local_state) {
-  SetUserLastInputMethodPreference(username, input_method, local_state);
+    const AccountId& account_id,
+    const std::string& input_method) {
+  SetUserLastInputMethodPreference(account_id, input_method);
 }
 
 }  // namespace input_method
diff --git a/chrome/browser/chromeos/input_method/input_method_persistence.h b/chrome/browser/chromeos/input_method/input_method_persistence.h
index 090a7ec..a7ca13f 100644
--- a/chrome/browser/chromeos/input_method/input_method_persistence.h
+++ b/chrome/browser/chromeos/input_method/input_method_persistence.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
 
-class PrefService;
+class AccountId;
 
 namespace chromeos {
 namespace input_method {
@@ -42,9 +42,9 @@
   DISALLOW_COPY_AND_ASSIGN(InputMethodPersistence);
 };
 
-void SetUserLastInputMethodPreferenceForTesting(const std::string& username,
-                                                const std::string& input_method,
-                                                PrefService* local_state);
+void SetUserLastInputMethodPreferenceForTesting(
+    const AccountId& account_id,
+    const std::string& input_method);
 
 }  // namespace input_method
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/lacros/lacros_loader.cc b/chrome/browser/chromeos/lacros/lacros_loader.cc
index 038f0d0..81c04d2 100644
--- a/chrome/browser/chromeos/lacros/lacros_loader.cc
+++ b/chrome/browser/chromeos/lacros/lacros_loader.cc
@@ -114,6 +114,11 @@
     LOG(WARNING) << "lacros component image not yet available";
     return;
   }
+
+  // TODO(erikchen): If Lacros is already running, then we should send a mojo
+  // signal to open a new tab rather than going through the start flow again.
+  bool already_running = IsLacrosRunning();
+
   chrome_path = lacros_path_.MaybeAsASCII() + "/chrome";
   LOG(WARNING) << "Launching lacros-chrome at " << chrome_path;
 
@@ -148,13 +153,28 @@
   bool custom_chrome_path = base::CommandLine::ForCurrentProcess()->HasSwitch(
       chromeos::switches::kLacrosChromePath);
   if (custom_chrome_path) {
+    std::string log_file(kUserDataDir);
+    log_file += "/lacros.log";
+
+    // Only delete the old log file if lacros is not running. If it's already
+    // running, then the subsequent call to base::LaunchProcess opens a new
+    // window, and we do not want to delete the existing log file.
+    // TODO(erikchen): Currently, launching a second instance of chrome deletes
+    // the existing log file, even though the new instance quickly exits.
+    if (!already_running) {
+      base::DeleteFile(base::FilePath(log_file), /*recursive=*/false);
+    }
     argv.push_back("--enable-logging");
-    int64_t seconds = base::Time::Now().ToDeltaSinceWindowsEpoch().InSeconds();
-    argv.push_back(std::string("--log-file=") + kUserDataDir + "/lacros_" +
-                   base::NumberToString(seconds) + ".log");
+    argv.push_back(std::string("--log-file=") + log_file);
   }
 
-  lacros_process_ = base::LaunchProcess(argv, options);
+  // If Lacros is already running, then the new call to launch process spawns a
+  // new window but does not create a lasting process.
+  if (already_running) {
+    base::LaunchProcess(argv, options);
+  } else {
+    lacros_process_ = base::LaunchProcess(argv, options);
+  }
   LOG(WARNING) << "Launched lacros-chrome with pid " << lacros_process_.Pid();
 }
 
@@ -177,3 +197,32 @@
   if (previously_installed)
     cros_component_manager_->Unload(kLacrosComponentName);
 }
+
+bool LacrosLoader::IsLacrosRunning() {
+  // TODO(https://crbug.com/1091863): This logic is not robust against the
+  // situation where Lacros has been killed, but another process was spawned
+  // with the same pid. This logic also relies on I/O, which we'd like to avoid
+  // if possible.
+  if (!lacros_process_.IsValid())
+    return false;
+  // We avoid using WaitForExitWithTimeout() since that can block for up to
+  // 256ms. Instead, we check existence of /proc/<pid>/cmdline and check for a
+  // match against lacros_path_. This logic assumes that lacros_path_ is a fully
+  // qualified path.
+  base::FilePath cmdline_filepath("/proc");
+  cmdline_filepath =
+      cmdline_filepath.Append(base::NumberToString(lacros_process_.Pid()));
+  cmdline_filepath = cmdline_filepath.Append("cmdline");
+  base::File cmdline_file = base::File(
+      cmdline_filepath, base::File::FLAG_OPEN | base::File::FLAG_READ);
+  if (!cmdline_file.IsValid())
+    return false;
+  std::string expected_cmdline = lacros_path_.value();
+  size_t expected_length = expected_cmdline.size();
+  char data[1000];
+  int size_read = cmdline_file.Read(0, data, 1000);
+  if (static_cast<size_t>(size_read) < expected_length)
+    return false;
+  return expected_cmdline.compare(0, expected_length, data, expected_length) ==
+         0;
+}
diff --git a/chrome/browser/chromeos/lacros/lacros_loader.h b/chrome/browser/chromeos/lacros/lacros_loader.h
index 0d811429..e7fdfa8a 100644
--- a/chrome/browser/chromeos/lacros/lacros_loader.h
+++ b/chrome/browser/chromeos/lacros/lacros_loader.h
@@ -45,6 +45,9 @@
   // Removes any state that Lacros left behind.
   void CleanUp(bool previously_installed);
 
+  // Checks whether Lacros is already running.
+  bool IsLacrosRunning();
+
   scoped_refptr<component_updater::CrOSComponentManager>
       cros_component_manager_;
 
@@ -55,6 +58,9 @@
   LoadCompleteCallback load_complete_callback_;
 
   // Process handle for the lacros-chrome process.
+  // TODO(https://crbug.com/1091863): There is currently no notification for
+  // when lacros-chrome is killed, so the underlying pid may be pointing at a
+  // non-existent process, or a new, unrelated process with the same pid.
   base::Process lacros_process_;
 
   base::WeakPtrFactory<LacrosLoader> weak_factory_{this};
diff --git a/chrome/browser/chromeos/login/lock_screen_utils.cc b/chrome/browser/chromeos/login/lock_screen_utils.cc
index 33ad63138..6badb92 100644
--- a/chrome/browser/chromeos/login/lock_screen_utils.cc
+++ b/chrome/browser/chromeos/login/lock_screen_utils.cc
@@ -18,18 +18,47 @@
 namespace chromeos {
 namespace lock_screen_utils {
 
-void SetUserInputMethod(const std::string& username,
+namespace {
+
+bool SetUserInputMethodImpl(
+    const std::string& user_input_method,
+    input_method::InputMethodManager::State* ime_state) {
+  if (!chromeos::input_method::InputMethodManager::Get()->IsLoginKeyboard(
+          user_input_method)) {
+    LOG(WARNING) << "SetUserInputMethod: stored user last input method '"
+                 << user_input_method
+                 << "' is no longer Full Latin Keyboard Language"
+                 << " (entry dropped). Use hardware default instead.";
+    return false;
+  }
+  if (!base::Contains(ime_state->GetActiveInputMethodIds(),
+                      user_input_method)) {
+    if (!ime_state->EnableInputMethod(user_input_method)) {
+      DLOG(ERROR) << "SetUserInputMethod: user input method '"
+                  << user_input_method
+                  << "' is not enabled and enabling failed (ignored!).";
+      return false;
+    }
+  }
+  ime_state->ChangeInputMethod(user_input_method, false /* show_message */);
+
+  return true;
+}
+
+}  // namespace
+
+void SetUserInputMethod(const AccountId& account_id,
                         input_method::InputMethodManager::State* ime_state,
                         bool honor_device_policy) {
   bool succeed = false;
 
-  const std::string input_method = GetUserLastInputMethod(username);
+  const std::string input_method = GetUserLastInputMethod(account_id);
 
   if (honor_device_policy)
     EnforceDevicePolicyInputMethods(input_method);
 
   if (!input_method.empty())
-    succeed = SetUserInputMethodImpl(username, input_method, ime_state);
+    succeed = SetUserInputMethodImpl(input_method, ime_state);
 
   // This is also a case when last layout is set only for a few local users,
   // thus others need to be switched to default locale.
@@ -42,7 +71,14 @@
   }
 }
 
-std::string GetUserLastInputMethod(const std::string& username) {
+std::string GetUserLastInputMethod(const AccountId& account_id) {
+  std::string input_method;
+  if (user_manager::known_user::GetUserLastInputMethod(account_id,
+                                                       &input_method)) {
+    return input_method;
+  }
+
+  // Try to use old values.
   PrefService* const local_state = g_browser_process->local_state();
   const base::DictionaryValue* users_last_input_methods =
       local_state->GetDictionary(prefs::kUsersLastInputMethod);
@@ -52,10 +88,8 @@
     return std::string();
   }
 
-  std::string input_method;
-
-  if (!users_last_input_methods->GetStringWithoutPathExpansion(username,
-                                                               &input_method)) {
+  if (!users_last_input_methods->GetStringWithoutPathExpansion(
+          account_id.GetUserEmail(), &input_method)) {
     DVLOG(0) << "GetUserLastInputMethod: no input method for this user";
     return std::string();
   }
@@ -63,38 +97,6 @@
   return input_method;
 }
 
-bool SetUserInputMethodImpl(
-    const std::string& username,
-    const std::string& user_input_method,
-    input_method::InputMethodManager::State* ime_state) {
-  if (!chromeos::input_method::InputMethodManager::Get()->IsLoginKeyboard(
-          user_input_method)) {
-    LOG(WARNING) << "SetUserInputMethod: stored user last input method '"
-                 << user_input_method
-                 << "' is no longer Full Latin Keyboard Language"
-                 << " (entry dropped). Use hardware default instead.";
-
-    PrefService* const local_state = g_browser_process->local_state();
-    DictionaryPrefUpdate updater(local_state, prefs::kUsersLastInputMethod);
-
-    base::DictionaryValue* const users_last_input_methods = updater.Get();
-    if (users_last_input_methods)
-      users_last_input_methods->SetKey(username, base::Value(""));
-    return false;
-  }
-  if (!base::Contains(ime_state->GetActiveInputMethodIds(),
-                      user_input_method)) {
-    if (!ime_state->EnableInputMethod(user_input_method)) {
-      DLOG(ERROR) << "SetUserInputMethod: user input method '"
-                  << user_input_method
-                  << "' is not enabled and enabling failed (ignored!).";
-    }
-  }
-  ime_state->ChangeInputMethod(user_input_method, false /* show_message */);
-
-  return true;
-}
-
 void EnforceDevicePolicyInputMethods(std::string user_input_method) {
   chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
   const base::ListValue* login_screen_input_methods = nullptr;
diff --git a/chrome/browser/chromeos/login/lock_screen_utils.h b/chrome/browser/chromeos/login/lock_screen_utils.h
index 4b0a2b8..ba175c0 100644
--- a/chrome/browser/chromeos/login/lock_screen_utils.h
+++ b/chrome/browser/chromeos/login/lock_screen_utils.h
@@ -19,17 +19,12 @@
 
 // Update current input method (namely keyboard layout) in the given IME state
 // to last input method used by this user.
-void SetUserInputMethod(const std::string& username,
+void SetUserInputMethod(const AccountId& account_id,
                         input_method::InputMethodManager::State* ime_state,
                         bool honor_device_policy);
 
 // Get user's last input method.
-std::string GetUserLastInputMethod(const std::string& username);
-
-// Update user's input method.
-bool SetUserInputMethodImpl(const std::string& username,
-                            const std::string& user_input_method,
-                            input_method::InputMethodManager::State* ime_state);
+std::string GetUserLastInputMethod(const AccountId& account_id);
 
 // Sets the currently allowed input method, including those that are enforced
 // by device policy.
diff --git a/chrome/browser/chromeos/login/login_ui_keyboard_browsertest.cc b/chrome/browser/chromeos/login/login_ui_keyboard_browsertest.cc
index 6e59415..8e4b4280 100644
--- a/chrome/browser/chromeos/login/login_ui_keyboard_browsertest.cc
+++ b/chrome/browser/chromeos/login/login_ui_keyboard_browsertest.cc
@@ -38,6 +38,7 @@
 namespace {
 
 constexpr char kTestUser1[] = "test-user1@gmail.com";
+constexpr char kTestUser1NonCanonicalDisplayEmail[] = "test-us.e.r1@gmail.com";
 constexpr char kTestUser1GaiaId[] = "1111111111";
 constexpr char kTestUser2[] = "test-user2@gmail.com";
 constexpr char kTestUser2GaiaId[] = "2222222222";
@@ -89,12 +90,10 @@
   // Should be called from PRE_ test so that local_state is saved to disk, and
   // reloaded in the main test.
   void InitUserLastInputMethod() {
-    PrefService* local_state = g_browser_process->local_state();
-
     input_method::SetUserLastInputMethodPreferenceForTesting(
-        kTestUser1, user_input_methods[0], local_state);
+        test_users_[0], user_input_methods[0]);
     input_method::SetUserLastInputMethodPreferenceForTesting(
-        kTestUser2, user_input_methods[1], local_state);
+        test_users_[1], user_input_methods[1]);
   }
 
  protected:
@@ -127,12 +126,11 @@
 }
 
 IN_PROC_BROWSER_TEST_F(LoginUIUserAddingKeyboardTest, CheckPODSwitches) {
-  EXPECT_EQ(
-      lock_screen_utils::GetUserLastInputMethod(test_users_[2].GetUserEmail()),
-      std::string());
+  EXPECT_EQ(lock_screen_utils::GetUserLastInputMethod(test_users_[2]),
+            std::string());
   LoginUser(test_users_[2]);
   const std::string logged_user_input_method =
-      lock_screen_utils::GetUserLastInputMethod(test_users_[2].GetUserEmail());
+      lock_screen_utils::GetUserLastInputMethod(test_users_[2]);
   UserAddingScreen::Get()->Start();
   OobeScreenWaiter(OobeScreen::SCREEN_ACCOUNT_PICKER).Wait();
 
@@ -163,9 +161,8 @@
                                        .id());
 
   // Check that logged in user settings did not change.
-  EXPECT_EQ(
-      lock_screen_utils::GetUserLastInputMethod(test_users_[2].GetUserEmail()),
-      logged_user_input_method);
+  EXPECT_EQ(lock_screen_utils::GetUserLastInputMethod(test_users_[2]),
+            logged_user_input_method);
 }
 
 IN_PROC_BROWSER_TEST_F(LoginUIKeyboardTest, PRE_CheckPODScreenDefault) {
@@ -253,15 +250,17 @@
   // Should be called from PRE_ test so that local_state is saved to disk, and
   // reloaded in the main test.
   void InitUserLastInputMethod() {
+    input_method::SetUserLastInputMethodPreferenceForTesting(
+        AccountId::FromUserEmailGaiaId(kTestUser1, kTestUser1GaiaId),
+        user_input_methods[0]);
+    input_method::SetUserLastInputMethodPreferenceForTesting(
+        AccountId::FromUserEmailGaiaId(kTestUser2, kTestUser2GaiaId),
+        user_input_methods[1]);
+    input_method::SetUserLastInputMethodPreferenceForTesting(
+        AccountId::FromUserEmailGaiaId(kTestUser3, kTestUser3GaiaId),
+        user_input_methods[2]);
+
     PrefService* local_state = g_browser_process->local_state();
-
-    input_method::SetUserLastInputMethodPreferenceForTesting(
-        kTestUser1, user_input_methods[0], local_state);
-    input_method::SetUserLastInputMethodPreferenceForTesting(
-        kTestUser2, user_input_methods[1], local_state);
-    input_method::SetUserLastInputMethodPreferenceForTesting(
-        kTestUser3, user_input_methods[2], local_state);
-
     local_state->SetString(language_prefs::kPreferredKeyboardLayout,
                            user_input_methods[2]);
   }
@@ -445,35 +444,31 @@
 // session unlock.
 IN_PROC_BROWSER_TEST_F(FirstLoginKeyboardTest,
                        UsersLastInputMethodPersistsOnLoginOrUnlock) {
-  EXPECT_TRUE(
-      lock_screen_utils::GetUserLastInputMethod(test_user_.GetUserEmail())
-          .empty());
+  EXPECT_TRUE(lock_screen_utils::GetUserLastInputMethod(test_user_).empty());
+
   WizardController::SkipPostLoginScreensForTesting();
+
+  // Non canonical display email (typed) should not affect input method storage.
+  LoginDisplayHost::default_host()->SetDisplayEmail(
+      kTestUser1NonCanonicalDisplayEmail);
   LoginUser(test_user_);
 
   // Last input method should be stored.
-  EXPECT_FALSE(
-      lock_screen_utils::GetUserLastInputMethod(test_user_.GetUserEmail())
-          .empty());
+  EXPECT_FALSE(lock_screen_utils::GetUserLastInputMethod(test_user_).empty());
 
   ScreenLockerTester locker_tester;
   locker_tester.Lock();
 
   // Clear user input method.
-  PrefService* local_state = g_browser_process->local_state();
-  input_method::SetUserLastInputMethodPreferenceForTesting(
-      test_user_.GetUserEmail(), std::string(), local_state);
-  EXPECT_TRUE(
-      lock_screen_utils::GetUserLastInputMethod(test_user_.GetUserEmail())
-          .empty());
+  input_method::SetUserLastInputMethodPreferenceForTesting(test_user_,
+                                                           std::string());
+  EXPECT_TRUE(lock_screen_utils::GetUserLastInputMethod(test_user_).empty());
 
   locker_tester.UnlockWithPassword(test_user_, "password");
   locker_tester.WaitForUnlock();
 
   // Last input method should be stored.
-  EXPECT_FALSE(
-      lock_screen_utils::GetUserLastInputMethod(test_user_.GetUserEmail())
-          .empty());
+  EXPECT_FALSE(lock_screen_utils::GetUserLastInputMethod(test_user_).empty());
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc b/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc
index a514eda..a0d13ee 100644
--- a/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc
+++ b/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc
@@ -314,9 +314,6 @@
   histogram_tester_.ExpectTotalCount(
       "OOBE.StepCompletionTimeByExitReason.Sync-consent.Next", 1);
   histogram_tester_.ExpectTotalCount("OOBE.StepCompletionTime.Sync-consent", 1);
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.Behavior",
-      SyncConsentScreen::SyncScreenBehavior::kShow, 1);
 }
 
 class SyncConsentTestWithParams
@@ -476,12 +473,6 @@
   histogram_tester_.ExpectTotalCount(
       "OOBE.StepCompletionTimeByExitReason.Sync-consent.Next", 1);
   histogram_tester_.ExpectTotalCount("OOBE.StepCompletionTime.Sync-consent", 1);
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.Behavior",
-      SyncConsentScreen::SyncScreenBehavior::kShow, 1);
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.UserChoice",
-      SyncConsentScreenHandler::UserChoice::kAccepted, 1);
 
   // Dialog is completed.
   EXPECT_TRUE(prefs->GetBoolean(chromeos::prefs::kSyncOobeCompleted));
@@ -522,13 +513,6 @@
   EXPECT_FALSE(settings->IsSyncEverythingEnabled());
   EXPECT_TRUE(settings->GetSelectedTypes().Empty());
 
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.Behavior",
-      SyncConsentScreen::SyncScreenBehavior::kShow, 1);
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.UserChoice",
-      SyncConsentScreenHandler::UserChoice::kDeclined, 1);
-
   // Dialog is completed.
   EXPECT_TRUE(prefs->GetBoolean(chromeos::prefs::kSyncOobeCompleted));
 }
@@ -591,10 +575,6 @@
   // Dialog is completed.
   PrefService* prefs = ProfileManager::GetPrimaryUserProfile()->GetPrefs();
   EXPECT_TRUE(prefs->GetBoolean(chromeos::prefs::kSyncOobeCompleted));
-
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.Behavior",
-      SyncConsentScreen::SyncScreenBehavior::kSkipAndEnableSync, 1);
 }
 
 IN_PROC_BROWSER_TEST_F(SyncConsentSplitSettingsSyncTest,
@@ -616,10 +596,6 @@
   // Dialog is completed.
   PrefService* prefs = ProfileManager::GetPrimaryUserProfile()->GetPrefs();
   EXPECT_TRUE(prefs->GetBoolean(chromeos::prefs::kSyncOobeCompleted));
-
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.Behavior",
-      SyncConsentScreen::SyncScreenBehavior::kSkip, 1);
 }
 
 // Tests for Active Directory accounts, which skip the dialog because they do
@@ -664,9 +640,6 @@
   histogram_tester_.ExpectTotalCount(
       "OOBE.StepCompletionTimeByExitReason.Sync-consent.Next", 0);
   histogram_tester_.ExpectTotalCount("OOBE.StepCompletionTime.Sync-consent", 0);
-  histogram_tester_.ExpectUniqueSample(
-      "OOBE.SyncConsentScreen.Behavior",
-      SyncConsentScreen::SyncScreenBehavior::kSkip, 1);
 }
 
 // Tests that the SyncConsent screen performs a timezone request so that
diff --git a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
index 71229ca2..ad647b01 100644
--- a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
+++ b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
@@ -117,8 +117,6 @@
   DCHECK(profile_);
   // Always set completed, even if the dialog was skipped (e.g. by policy).
   profile_->GetPrefs()->SetBoolean(chromeos::prefs::kSyncOobeCompleted, true);
-  // Record whether the dialog was shown, skipped, etc.
-  base::UmaHistogramEnumeration("OOBE.SyncConsentScreen.Behavior", behavior_);
   exit_callback_.Run(result);
 }
 
@@ -182,18 +180,16 @@
   Finish(Result::NEXT);
 }
 
-void SyncConsentScreen::OnContinue(
+void SyncConsentScreen::OnAcceptAndContinue(
     const std::vector<int>& consent_description,
     int consent_confirmation,
-    SyncConsentScreenHandler::UserChoice choice) {
+    bool enable_sync) {
   DCHECK(chromeos::features::IsSplitSettingsSyncEnabled());
   if (is_hidden())
     return;
-  base::UmaHistogramEnumeration("OOBE.SyncConsentScreen.UserChoice", choice);
   // Record that the user saw the consent text, regardless of which features
   // they chose to enable.
   RecordConsent(CONSENT_GIVEN, consent_description, consent_confirmation);
-  bool enable_sync = choice == SyncConsentScreenHandler::UserChoice::kAccepted;
   UpdateSyncSettings(enable_sync);
   Finish(Result::NEXT);
 }
diff --git a/chrome/browser/chromeos/login/screens/sync_consent_screen.h b/chrome/browser/chromeos/login/screens/sync_consent_screen.h
index da69282..18deaf9 100644
--- a/chrome/browser/chromeos/login/screens/sync_consent_screen.h
+++ b/chrome/browser/chromeos/login/screens/sync_consent_screen.h
@@ -26,17 +26,15 @@
 // sign-in flow.
 class SyncConsentScreen : public BaseScreen,
                           public syncer::SyncServiceObserver {
- public:
-  // These values are persisted to logs. Entries should not be renumbered and
-  // numeric values should never be reused. Public for testing.
+ private:
   enum class SyncScreenBehavior {
-    kUnknown = 0,            // Not yet known.
-    kShow = 1,               // Screen should be shown.
-    kSkip = 2,               // Skip screen, don't change sync state.
-    kSkipAndEnableSync = 3,  // Skip screen and enable sync.
-    kMaxValue = kSkipAndEnableSync
+    kUnknown,            // Not yet known.
+    kShow,               // Screen should be shown.
+    kSkip,               // Skip screen, don't change sync state.
+    kSkipAndEnableSync,  // Skip screen and enable sync.
   };
 
+ public:
   enum ConsentGiven { CONSENT_NOT_GIVEN, CONSENT_GIVEN };
 
   enum class Result { NEXT, NOT_APPLICABLE };
@@ -89,9 +87,9 @@
                               const int consent_confirmation);
 
   // Reacts to "Yes, I'm in" and "No, thanks".
-  void OnContinue(const std::vector<int>& consent_description,
-                  int consent_confirmation,
-                  SyncConsentScreenHandler::UserChoice choice);
+  void OnAcceptAndContinue(const std::vector<int>& consent_description,
+                           int consent_confirmation,
+                           bool enable_sync);
 
   // Configures OS sync and browser sync.
   void UpdateSyncSettings(bool enable_sync);
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc
index f0d9088..912e5ff 100644
--- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc
+++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc
@@ -707,7 +707,7 @@
     return;
   CheckUserStatus(account_id);
   lock_screen_utils::SetUserInputMethod(
-      account_id.GetUserEmail(), ime_state_.get(),
+      account_id, ime_state_.get(),
       display_type_ == OobeUI::kLoginDisplay /* honor_device_policy */);
   lock_screen_utils::SetKeyboardSettings(account_id);
 
@@ -731,8 +731,8 @@
 void UserSelectionScreen::OnAllowedInputMethodsChanged() {
   DCHECK_EQ(display_type_, OobeUI::kLoginDisplay);
   if (focused_pod_account_id_.is_valid()) {
-    std::string user_input_method = lock_screen_utils::GetUserLastInputMethod(
-        focused_pod_account_id_.GetUserEmail());
+    std::string user_input_method =
+        lock_screen_utils::GetUserLastInputMethod(focused_pod_account_id_);
     lock_screen_utils::EnforceDevicePolicyInputMethods(user_input_method);
   } else {
     lock_screen_utils::EnforceDevicePolicyInputMethods(std::string());
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index df242d3b..35de1200 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -124,6 +124,7 @@
 #include "chromeos/settings/cros_settings_names.h"
 #include "components/account_id/account_id.h"
 #include "components/component_updater/component_updater_service.h"
+#include "components/flags_ui/flags_ui_metrics.h"
 #include "components/flags_ui/pref_service_flags_storage.h"
 #include "components/language/core/browser/pref_names.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
@@ -846,7 +847,7 @@
 
   LogCustomSwitches(command_line_difference);
 
-  about_flags::ReportAboutFlagsHistogram(
+  flags_ui::ReportAboutFlagsHistogram(
       "Login.CustomFlags", command_line_difference, std::set<std::string>());
 
   base::CommandLine::StringVector flags;
diff --git a/chrome/browser/chromeos/net/network_pref_state_observer.cc b/chrome/browser/chromeos/net/network_pref_state_observer.cc
index a1fd64d4f..673b580 100644
--- a/chrome/browser/chromeos/net/network_pref_state_observer.cc
+++ b/chrome/browser/chromeos/net/network_pref_state_observer.cc
@@ -12,6 +12,7 @@
 #include "chromeos/components/sync_wifi/wifi_configuration_sync_service.h"
 #include "chromeos/network/network_handler.h"
 #include "chromeos/network/network_metadata_store.h"
+#include "chromeos/tpm/install_attributes.h"
 #include "content/public/browser/notification_service.h"
 
 namespace chromeos {
@@ -41,6 +42,8 @@
   // in. Other profiles are ignored because only the primary user's network
   // configuration is used on Chrome OS.
   if (ProfileHelper::IsPrimaryProfile(profile)) {
+    NetworkHandler::Get()->set_is_enterprise_managed(
+        InstallAttributes::Get()->IsEnterpriseManaged());
     InitializeNetworkPrefServices(profile);
     notification_registrar_.RemoveAll();
 
diff --git a/chrome/browser/chromeos/policy/fuzzer/policy_fuzzer.cc b/chrome/browser/chromeos/policy/fuzzer/policy_fuzzer.cc
index 4fd22e0..a5facbb 100644
--- a/chrome/browser/chromeos/policy/fuzzer/policy_fuzzer.cc
+++ b/chrome/browser/chromeos/policy/fuzzer/policy_fuzzer.cc
@@ -2,14 +2,23 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <string>
+
 #include "base/check_op.h"
 #include "base/command_line.h"
+#include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
+#include "base/path_service.h"
+#include "base/test/task_environment.h"
+#include "chrome/browser/chromeos/dbus/dbus_helper.h"
 #include "chrome/browser/chromeos/policy/device_policy_decoder_chromeos.h"
 #include "chrome/browser/chromeos/policy/fuzzer/policy_fuzzer.pb.h"
+#include "chrome/browser/chromeos/settings/device_settings_provider.h"
+#include "chrome/browser/chromeos/settings/device_settings_service.h"
 #include "chrome/browser/policy/configuration_policy_handler_list_factory.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chrome/common/chrome_paths.h"
+#include "chromeos/tpm/install_attributes.h"
 #include "components/policy/core/browser/configuration_policy_handler_list.h"
 #include "components/policy/core/browser/policy_conversions_client.h"
 #include "components/policy/core/browser/policy_error_map.h"
@@ -30,26 +39,58 @@
   Environment() {
     logging::SetMinLogLevel(logging::LOG_FATAL);
     base::CommandLine::Init(0, nullptr);
-    chromeos::DBusThreadManager::Initialize();
-    policy_handler_list = BuildHandlerList(GetChromeSchema());
+    CHECK(scoped_temp_dir.CreateUniqueTempDir());
+    CHECK(base::PathService::Override(chrome::DIR_USER_DATA,
+                                      scoped_temp_dir.GetPath()));
   }
 
+  base::ScopedTempDir scoped_temp_dir;
+};
+
+struct PerInputEnvironment {
+  PerInputEnvironment() {
+    policy_handler_list = BuildHandlerList(GetChromeSchema());
+    chromeos::InitializeDBus();
+    chromeos::InitializeFeatureListDependentDBus();
+  }
+
+  ~PerInputEnvironment() {
+    chromeos::ShutdownDBus();
+    chromeos::InstallAttributes::Shutdown();
+    chromeos::DeviceSettingsService::Shutdown();
+  }
+
+  base::test::TaskEnvironment task_environment;
   std::unique_ptr<ConfigurationPolicyHandlerList> policy_handler_list;
 };
 
 void CheckPolicyToPrefTranslation(const PolicyMap& policy_map,
-                                  const Environment& environment) {
+                                  const PerInputEnvironment& per_input_env) {
   PrefValueMap prefs;
   PolicyErrorMap errors;
   DeprecatedPoliciesSet deprecated_policies;
-  environment.policy_handler_list->ApplyPolicySettings(
+  per_input_env.policy_handler_list->ApplyPolicySettings(
       policy_map, &prefs, &errors, &deprecated_policies);
 }
 
+void CheckPolicyToCrosSettingsTranslation(
+    const enterprise_management::ChromeDeviceSettingsProto&
+        chrome_device_settings) {
+  PrefValueMap cros_settings_prefs;
+  chromeos::DeviceSettingsProvider::DecodePolicies(chrome_device_settings,
+                                                   &cros_settings_prefs);
+
+  for (const auto& it : cros_settings_prefs) {
+    const std::string& pref_name = it.first;
+    CHECK(chromeos::DeviceSettingsProvider::IsDeviceSetting(pref_name));
+  }
+}
+
 }  // namespace
 
 DEFINE_PROTO_FUZZER(const PolicyFuzzerProto& proto) {
-  static Environment environment;
+  static Environment env;
+  PerInputEnvironment per_input_env;
 
   if (proto.has_chrome_device_settings()) {
     const enterprise_management::ChromeDeviceSettingsProto&
@@ -66,7 +107,8 @@
           << "Policy " << policy_name << " has not machine scope";
     }
 
-    CheckPolicyToPrefTranslation(policy_map, environment);
+    CheckPolicyToPrefTranslation(policy_map, per_input_env);
+    CheckPolicyToCrosSettingsTranslation(chrome_device_settings);
   }
 
   if (proto.has_cloud_policy_settings()) {
@@ -86,7 +128,7 @@
           << "Policy " << policy_name << " has not user scope";
     }
 
-    CheckPolicyToPrefTranslation(policy_map, environment);
+    CheckPolicyToPrefTranslation(policy_map, per_input_env);
   }
 }
 
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
index def23eb8..52abd24 100644
--- a/chrome/browser/chromeos/preferences.cc
+++ b/chrome/browser/chromeos/preferences.cc
@@ -32,6 +32,7 @@
 #include "chrome/browser/chromeos/login/session/user_session_manager.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/browser/chromeos/sync/split_settings_sync_field_trial.h"
 #include "chrome/browser/chromeos/sync/turn_sync_on_helper.h"
 #include "chrome/browser/chromeos/system/input_device_settings.h"
 #include "chrome/browser/chromeos/system/timezone_resolver_manager.h"
@@ -169,6 +170,7 @@
   registry->RegisterStringPref(::prefs::kMinimumAllowedChromeVersion, "");
 
   ash::RegisterLocalStatePrefs(registry);
+  split_settings_sync_field_trial::RegisterLocalStatePrefs(registry);
 }
 
 // static
diff --git a/chrome/browser/chromeos/sync/split_settings_sync_field_trial.cc b/chrome/browser/chromeos/sync/split_settings_sync_field_trial.cc
new file mode 100644
index 0000000..502f962
--- /dev/null
+++ b/chrome/browser/chromeos/sync/split_settings_sync_field_trial.cc
@@ -0,0 +1,120 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/sync/split_settings_sync_field_trial.h"
+
+#include "base/feature_list.h"
+#include "base/metrics/field_trial.h"
+#include "base/strings/string_number_conversions.h"
+#include "chrome/common/channel_info.h"
+#include "chromeos/constants/chromeos_features.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/pref_service.h"
+#include "components/variations/variations_associated_data.h"
+#include "components/version_info/version_info.h"
+
+namespace split_settings_sync_field_trial {
+namespace {
+
+// String local state preference with the name of the assigned trial group.
+// Empty if no group has been assigned yet.
+const char kTrialGroupPrefName[] = "split_settings_sync.trial_group";
+
+// The field trial name.
+const char kTrialName[] = "SplitSettingsSync";
+
+// Group names for the trial.
+const char kEnabledGroup[] = "Enabled";
+const char kDisabledGroup[] = "Disabled";
+const char kDefaultGroup[] = "Default";
+
+// Probabilities for all field trial groups add up to kTotalProbability.
+const base::FieldTrial::Probability kTotalProbability = 100;
+
+// Creates the field trial.
+scoped_refptr<base::FieldTrial> CreateFieldTrial() {
+  return base::FieldTrialList::FactoryGetFieldTrial(
+      kTrialName, kTotalProbability, kDefaultGroup,
+      base::FieldTrial::ONE_TIME_RANDOMIZED,
+      /*default_group_number=*/nullptr);
+}
+
+// Sets the feature state based on the trial group. Defaults to disabled.
+void SetFeatureState(base::FeatureList* feature_list,
+                     base::FieldTrial* trial,
+                     const std::string& group_name) {
+  base::FeatureList::OverrideState feature_state =
+      group_name == kEnabledGroup ? base::FeatureList::OVERRIDE_ENABLE_FEATURE
+                                  : base::FeatureList::OVERRIDE_DISABLE_FEATURE;
+  feature_list->RegisterFieldTrialOverride(
+      chromeos::features::kSplitSettingsSync.name, feature_state, trial);
+}
+
+// Creates a trial for the first run (when there is no variations seed) and
+// enables the feature based on the randomly selected trial group. Returns the
+// group name.
+std::string CreateFirstRunTrial(base::FeatureList* feature_list) {
+  int enabled_percent;
+  int disabled_percent;
+  int default_percent;
+  switch (chrome::GetChannel()) {
+    case version_info::Channel::UNKNOWN:
+    case version_info::Channel::CANARY:
+    case version_info::Channel::DEV:
+    case version_info::Channel::BETA:
+      enabled_percent = 50;
+      disabled_percent = 50;
+      default_percent = 0;
+      break;
+    case version_info::Channel::STABLE:
+      // Disabled on stable pending approval. https://crbug.com/1020731
+      enabled_percent = 0;
+      disabled_percent = 0;
+      default_percent = 100;
+      break;
+  }
+  DCHECK_EQ(kTotalProbability,
+            enabled_percent + disabled_percent + default_percent);
+
+  // Set up the trial and groups.
+  scoped_refptr<base::FieldTrial> trial = CreateFieldTrial();
+  trial->AppendGroup(kEnabledGroup, enabled_percent);
+  trial->AppendGroup(kDisabledGroup, disabled_percent);
+  trial->AppendGroup(kDefaultGroup, default_percent);
+
+  // Finalize the group choice and set the feature state.
+  const std::string& group_name = trial->GetGroupNameWithoutActivation();
+  SetFeatureState(feature_list, trial.get(), group_name);
+  return group_name;
+}
+
+// Creates a trial with a single group and sets the feature flag to the state
+// for that group.
+void CreateSubsequentRunTrial(base::FeatureList* feature_list,
+                              const std::string& group_name) {
+  scoped_refptr<base::FieldTrial> trial = CreateFieldTrial();
+  trial->AppendGroup(group_name, kTotalProbability);
+  SetFeatureState(feature_list, trial.get(), group_name);
+}
+
+}  // namespace
+
+void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
+  registry->RegisterStringPref(kTrialGroupPrefName, std::string());
+}
+
+void Create(base::FeatureList* feature_list, PrefService* local_state) {
+  std::string trial_group = local_state->GetString(kTrialGroupPrefName);
+  if (trial_group.empty()) {
+    // No group assigned, this is the first run.
+    trial_group = CreateFirstRunTrial(feature_list);
+    // Persist the assigned group for subsequent runs.
+    local_state->SetString(kTrialGroupPrefName, trial_group);
+  } else {
+    // Group already assigned.
+    CreateSubsequentRunTrial(feature_list, trial_group);
+  }
+}
+
+}  // namespace split_settings_sync_field_trial
diff --git a/chrome/browser/chromeos/sync/split_settings_sync_field_trial.h b/chrome/browser/chromeos/sync/split_settings_sync_field_trial.h
new file mode 100644
index 0000000..32a4d501f
--- /dev/null
+++ b/chrome/browser/chromeos/sync/split_settings_sync_field_trial.h
@@ -0,0 +1,44 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_SYNC_SPLIT_SETTINGS_SYNC_FIELD_TRIAL_H_
+#define CHROME_BROWSER_CHROMEOS_SYNC_SPLIT_SETTINGS_SYNC_FIELD_TRIAL_H_
+
+class PrefRegistrySimple;
+class PrefService;
+
+namespace base {
+class FeatureList;
+}  // namespace base
+
+namespace split_settings_sync_field_trial {
+
+// Registers preferences.
+void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
+
+// Creates a field trial to control the SplitSettingsSync feature. The trial is
+// client controlled because SplitSettingsSync controls the out-of-box
+// experience (OOBE) sync consent dialog, which shows up before a variations
+// seed is available.
+//
+// The trial group chosen on first run is persisted to local state prefs and
+// reused on subsequent runs. This keeps the in-session sync settings UI stable
+// between runs. Local state prefs can be reset via powerwash, which will result
+// in re-randomization, but this also sends the user through the first-run flow
+// again and they will see the appropriate consent flow.
+//
+// Persisting the group also avoids a subtle corner case: A user could be
+// randomized to SplitSettingsSync, opt-in to sync during OOBE, then turn off OS
+// sync in OS settings but leave "Sync everything" enabled in browser settings.
+// If they were re-randomized to non-SplitSettingsSync on a future login, then
+// the OS sync data types would go back to being controlled by browser sync
+// settings, and those OS types would be re-enabled even though the user had
+// them disabled.
+//
+// Launch bug for the SplitSettingsSync feature: https://crbug.com/1020731
+void Create(base::FeatureList* feature_list, PrefService* local_state);
+
+}  // namespace split_settings_sync_field_trial
+
+#endif  // CHROME_BROWSER_CHROMEOS_SYNC_SPLIT_SETTINGS_SYNC_FIELD_TRIAL_H_
diff --git a/chrome/browser/chromeos/tracing_allocation_failure_tracker.cc b/chrome/browser/chromeos/tracing_allocation_failure_tracker.cc
new file mode 100644
index 0000000..3fddd3e
--- /dev/null
+++ b/chrome/browser/chromeos/tracing_allocation_failure_tracker.cc
@@ -0,0 +1,116 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/tracing_allocation_failure_tracker.h"
+
+#include "base/callback.h"
+#include "base/command_line.h"
+#include "build/branding_buildflags.h"
+#include "chrome/browser/chromeos/external_metrics.h"
+#include "chrome/installer/util/google_update_settings.h"
+#include "chromeos/constants/chromeos_switches.h"
+#include "components/crash/core/app/crashpad.h"
+#include "components/metrics/serialization/metric_sample.h"
+#include "components/metrics/serialization/serialization_utils.h"
+#include "services/tracing/public/cpp/perfetto/perfetto_traced_process.h"
+#include "services/tracing/public/cpp/perfetto/producer_client.h"
+
+namespace chromeos {
+
+namespace {
+
+constexpr char kCrashHandlerMetricName[] =
+    "CrashReport.DumpWithoutCrashingHandler.FromInitSharedMemoryIfNeeded";
+// Crash handler that might handle base::debug::DumpWithoutCrashing.
+// TODO(crbug.com/1074115): Remove once crbug.com/1074115 is resolved.
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class CrashHandler {
+  kCrashpad = 0,
+  kBreakpad = 1,
+  kMaxValue = kBreakpad,
+};
+
+// UMA that records the return value of base::debug::DumpWithoutCrashing.
+// TODO(crbug.com/1074115): Remove once crbug.com/1074115 is resolved.
+constexpr char kDumpWithoutCrashingResultMetricName[] =
+    "CrashReport.DumpWithoutCrashingResult.FromInitSharedMemoryIfNeeded";
+
+// Local wrapper around GetCollectStatsConsent() to make our collection even
+// more restrictive.
+bool ShouldCollectStats() {
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+  return GoogleUpdateSettings::GetCollectStatsConsent() &&
+         !base::CommandLine::ForCurrentProcess()->HasSwitch(
+             chromeos::switches::kGuestSession);
+#else
+  return false;
+#endif
+}
+
+// TracingBufferAllocationFailureCallback and
+// TracingBufferAllocationFailurePostDumpCallback are part of an investigation
+// into why Breakpad doesn't seem to generate reports on some ChromeOS boards.
+// See crbug.com/1074115 for the original bug.
+//
+// They are callbacks to work around issues getting UMA metrics in the failure
+// case we are investigating. The specific issue is that the failing function
+// (ProducerClient::InitSharedMemoryIfNeeded) is called before metrics
+// persistence is set up, and the issue that is causing buffer allocation
+// failures is also preventing us from setting up metrics persistence. In
+// particular, on eve boards, we see multiple dump-without-crashing crashes
+// being reported, but the metrics that were being recorded via
+// UmaHistogramEnumeration before the DumpWithoutCrashing call were never being
+// reported back.
+//
+// These callbacks bypass the normal metrics collection system and instead
+// write to the uma-events file that ChromeOS programs use to communicate with
+// Chrome (see
+// https://chromium.googlesource.com/chromiumos/platform2/+/refs/heads/master/metrics/metrics_library.cc)
+// This is a ChromeOS-specific workaround, which is why this code is inside
+// chrome/browser/chromeos.
+void TracingBufferAllocationFailureCallback() {
+  if (!ShouldCollectStats()) {
+    return;
+  }
+
+  CrashHandler handler = crash_reporter::IsCrashpadEnabled()
+                             ? CrashHandler::kCrashpad
+                             : CrashHandler::kBreakpad;
+  // Note: The parameter in LinearHistogramSample() is called max, but every
+  // single usage I can find in the ChromeOS codebase passes max value + 1,
+  // so following the herd here.
+  const int kNumValues = static_cast<int>(CrashHandler::kMaxValue) + 1;
+  metrics::SerializationUtils::WriteMetricToFile(
+      *metrics::MetricSample::LinearHistogramSample(
+          kCrashHandlerMetricName, static_cast<int>(handler), kNumValues),
+      chromeos::ExternalMetrics::kEventsFilePath);
+}
+
+void TracingBufferAllocationFailurePostDumpCallback(
+    bool dump_without_crashing_result) {
+  if (!ShouldCollectStats()) {
+    return;
+  }
+
+  // Number of possible boolean values. See above about passing in max vs.
+  // number of values.
+  const int kNumValues = 2;
+  metrics::SerializationUtils::WriteMetricToFile(
+      *metrics::MetricSample::LinearHistogramSample(
+          kDumpWithoutCrashingResultMetricName,
+          dump_without_crashing_result ? 1 : 0, kNumValues),
+      chromeos::ExternalMetrics::kEventsFilePath);
+}
+
+}  // namespace
+
+void SetUpTracingAllocatorFailureTracker() {
+  tracing::PerfettoTracedProcess* ptp = tracing::PerfettoTracedProcess::Get();
+  ptp->producer_client()->SetBufferAllocationFailureCallbacks(
+      base::Bind(&TracingBufferAllocationFailureCallback),
+      base::Bind(&TracingBufferAllocationFailurePostDumpCallback));
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/tracing_allocation_failure_tracker.h b/chrome/browser/chromeos/tracing_allocation_failure_tracker.h
new file mode 100644
index 0000000..bdf8d0d
--- /dev/null
+++ b/chrome/browser/chromeos/tracing_allocation_failure_tracker.h
@@ -0,0 +1,19 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_TRACING_ALLOCATION_FAILURE_TRACKER_H_
+#define CHROME_BROWSER_CHROMEOS_TRACING_ALLOCATION_FAILURE_TRACKER_H_
+
+namespace chromeos {
+
+// Sets up additional debugging around
+// ProducerClient::InitSharedMemoryIfNeeded's allocation failures, in order to
+// investigate crbug.com/1074115.
+// TODO(crbug.com/1074115): Remove this function and this file once
+// investigation is complete.
+void SetUpTracingAllocatorFailureTracker();
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_TRACING_ALLOCATION_FAILURE_TRACKER_H_
diff --git a/chrome/browser/download/android/download_dialog_bridge.cc b/chrome/browser/download/android/download_dialog_bridge.cc
index 04c03d8..18cba920 100644
--- a/chrome/browser/download/android/download_dialog_bridge.cc
+++ b/chrome/browser/download/android/download_dialog_bridge.cc
@@ -82,12 +82,23 @@
 void DownloadDialogBridge::OnComplete(
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& obj,
-    const base::android::JavaParamRef<jstring>& returned_path) {
+    const base::android::JavaParamRef<jstring>& returned_path,
+    jboolean on_wifi,
+    jlong start_time) {
   DownloadDialogResult dialog_result;
   dialog_result.location_result = DownloadLocationDialogResult::USER_CONFIRMED;
   dialog_result.file_path = base::FilePath(
       base::android::ConvertJavaStringToUTF8(env, returned_path));
 
+  if (on_wifi) {
+    dialog_result.download_schedule =
+        download::DownloadSchedule(true /*on_wifi*/);
+  }
+  if (start_time > 0) {
+    dialog_result.download_schedule =
+        download::DownloadSchedule(base::Time::FromJavaTime(start_time));
+  }
+
   CompleteSelection(std::move(dialog_result));
   is_dialog_showing_ = false;
 }
diff --git a/chrome/browser/download/android/download_dialog_bridge.h b/chrome/browser/download/android/download_dialog_bridge.h
index 8018e77..9c43c5f6 100644
--- a/chrome/browser/download/android/download_dialog_bridge.h
+++ b/chrome/browser/download/android/download_dialog_bridge.h
@@ -31,6 +31,7 @@
 
 // Used to show a dialog for the user to select download details, such as file
 // location, file name. and download start time.
+// TODO(xingliu): Move logic out of the bridge, and write a test.
 class DownloadDialogBridge {
  public:
   using DialogCallback = base::OnceCallback<void(DownloadDialogResult)>;
@@ -50,7 +51,9 @@
 
   void OnComplete(JNIEnv* env,
                   const base::android::JavaParamRef<jobject>& obj,
-                  const base::android::JavaParamRef<jstring>& returned_path);
+                  const base::android::JavaParamRef<jstring>& returned_path,
+                  jboolean on_wifi,
+                  jlong start_time);
 
   void OnCanceled(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
 
diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadDialogBridge.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadDialogBridge.java
index abdd3507..d688cc1 100644
--- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadDialogBridge.java
+++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadDialogBridge.java
@@ -29,6 +29,7 @@
  * Helper class to handle communication between download location dialog and native.
  */
 public class DownloadDialogBridge implements ModalDialogProperties.Controller {
+    private static final long INVALID_START_TIME = -1;
     private long mNativeDownloadDialogBridge;
     private PropertyModel mDialogModel;
     private DownloadLocationCustomView mCustomView;
@@ -119,8 +120,9 @@
             if (dir.type == DirectoryOption.DownloadLocationDirectoryType.DEFAULT) {
                 assert (!TextUtils.isEmpty(dir.location));
                 setDownloadAndSaveFileDefaultDirectory(dir.location);
-                DownloadDialogBridgeJni.get().onComplete(
-                        mNativeDownloadDialogBridge, DownloadDialogBridge.this, mSuggestedPath);
+                DownloadDialogBridgeJni.get().onComplete(mNativeDownloadDialogBridge,
+                        DownloadDialogBridge.this, mSuggestedPath, false /*onWifi*/,
+                        INVALID_START_TIME);
             }
             return;
         }
@@ -202,8 +204,9 @@
                     DirectoryOption.DownloadLocationDirectoryType.NUM_ENTRIES);
 
             File file = new File(directoryOption.location, fileName);
-            DownloadDialogBridgeJni.get().onComplete(
-                    mNativeDownloadDialogBridge, DownloadDialogBridge.this, file.getAbsolutePath());
+            DownloadDialogBridgeJni.get().onComplete(mNativeDownloadDialogBridge,
+                    DownloadDialogBridge.this, file.getAbsolutePath(), false /*onWifi*/,
+                    INVALID_START_TIME);
         }
 
         // Update preference to show prompt based on whether checkbox is checked only when the user
@@ -253,8 +256,8 @@
 
     @NativeMethods
     interface Natives {
-        void onComplete(
-                long nativeDownloadDialogBridge, DownloadDialogBridge caller, String returnedPath);
+        void onComplete(long nativeDownloadDialogBridge, DownloadDialogBridge caller,
+                String returnedPath, boolean onWifi, long startTime);
         void onCanceled(long nativeDownloadDialogBridge, DownloadDialogBridge caller);
         String getDownloadDefaultDirectory();
         void setDownloadAndSaveFileDefaultDirectory(String directory);
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
index 1a8cccf..c914eb7 100644
--- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -58,6 +58,7 @@
 #include "chrome/test/base/search_test_utils.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "chromeos/login/login_state/scoped_test_public_session_login_state.h"
+#include "components/embedder_support/switches.h"
 #include "components/google/core/common/google_switches.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/mock_configuration_policy_provider.h"
@@ -131,6 +132,11 @@
 
 namespace {
 
+// This is the public key of tools/origin_trials/eftest.key, used to validate
+// origin trial tokens generated by tools/origin_trials/generate_token.py.
+constexpr char kOriginTrialPublicKeyForTesting[] =
+    "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA=";
+
 class CancelLoginDialog : public content::NotificationObserver {
  public:
   CancelLoginDialog() {
@@ -299,6 +305,8 @@
   void SetUpCommandLine(base::CommandLine* command_line) override {
     ExtensionApiTest::SetUpCommandLine(command_line);
     command_line->AppendSwitchASCII(switches::kGaiaUrl, "http://gaia.com");
+    command_line->AppendSwitchASCII(embedder_support::kOriginTrialPublicKey,
+                                    kOriginTrialPublicKeyForTesting);
   }
 
   void RunPermissionTest(
@@ -3084,11 +3092,11 @@
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionWebRequestApiTest, AppCacheRequests) {
-  embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data");
-  ASSERT_TRUE(StartEmbeddedTestServer());
-
-  GURL main_url = embedded_test_server()->GetURL(
-      "/appcache/simple_page_with_manifest.html");
+  std::string origin = "http://127.0.0.1:8080";
+  std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor =
+      content::URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+          "content/test/data", GURL(origin));
+  GURL main_url(origin + "/appcache/simple_page_with_manifest.html");
 
   base::string16 expected_title = base::ASCIIToUTF16("AppCache updated");
 
@@ -3139,11 +3147,16 @@
 // Regression test for http://crbug.com/996940. Requests that redirected to an
 // appcache handled URL could have request ID collisions.
 IN_PROC_BROWSER_TEST_F(ExtensionWebRequestApiTest, RedirectToAppCacheRequest) {
-  embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data");
+  // Use the embedded test server to support server-redirect, but serve
+  // appcache from a fixed port using the url loader interceptor below
+  // so that the appcache origin trial works.
   ASSERT_TRUE(StartEmbeddedTestServer());
 
-  GURL main_url = embedded_test_server()->GetURL(
-      "/appcache/simple_page_with_manifest.html");
+  std::string origin = "http://127.0.0.1:8080";
+  auto interceptor =
+      content::URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+          "content/test/data", GURL(origin));
+  GURL main_url(origin + "/appcache/simple_page_with_manifest.html");
 
   base::string16 expected_title = base::ASCIIToUTF16("AppCache updated");
 
diff --git a/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc b/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc
index 0e139a66..6e0c43e 100644
--- a/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc
+++ b/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc
@@ -34,6 +34,7 @@
 #include "chrome/browser/ui/browser_navigator_params.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/embedder_support/switches.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/mock_configuration_policy_provider.h"
 #include "content/public/browser/browser_context.h"
@@ -48,6 +49,7 @@
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_navigation_observer.h"
+#include "content/public/test/url_loader_interceptor.h"
 #include "extensions/browser/browsertest_util.h"
 #include "extensions/browser/url_loader_factory_manager.h"
 #include "extensions/test/test_extension_dir.h"
@@ -103,6 +105,11 @@
 const char kExpectedHashedExtensionId[] =
     "14B587526D9AC6ADCACAA8A4AAE3DB281CA2AB53";
 
+// This is the public key of tools/origin_trials/eftest.key, used to validate
+// origin trial tokens generated by tools/origin_trials/generate_token.py.
+constexpr char kOriginTrialPublicKeyForTesting[] =
+    "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA=";
+
 }  // namespace
 
 using CORBAction = network::CrossOriginReadBlocking::Action;
@@ -112,6 +119,12 @@
  public:
   CorbAndCorsExtensionTestBase() = default;
 
+  void SetUpDefaultCommandLine(base::CommandLine* command_line) override {
+    InProcessBrowserTest::SetUpDefaultCommandLine(command_line);
+    command_line->AppendSwitchASCII(embedder_support::kOriginTrialPublicKey,
+                                    kOriginTrialPublicKeyForTesting);
+  }
+
   void SetUpOnMainThread() override {
     ExtensionBrowserTest::SetUpOnMainThread();
 
@@ -1917,18 +1930,17 @@
 
   // Set up http server serving files from content/test/data (which conveniently
   // already contains appcache-related test files, unlike chrome/test/data).
-  net::EmbeddedTestServer content_test_data_server;
-  content_test_data_server.AddDefaultHandlers(
-      base::FilePath(FILE_PATH_LITERAL("content/test/data")));
-  ASSERT_TRUE(content_test_data_server.Start());
+  std::string origin = "http://127.0.0.1:8080";
+  std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor =
+      content::URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+          "content/test/data", GURL(origin));
 
   // Load the main page twice. The second navigation should have AppCache
   // initialized for the page.
   //
   // Note that localhost / 127.0.0.1 need to be used, because Application Cache
   // is restricted to secure contexts.
-  GURL main_url = content_test_data_server.GetURL(
-      "127.0.0.1", "/appcache/simple_page_with_manifest.html");
+  GURL main_url(origin + "/appcache/simple_page_with_manifest.html");
   ui_test_utils::NavigateToURL(browser(), main_url);
   base::string16 expected_title = base::ASCIIToUTF16("AppCache updated");
   content::TitleWatcher title_watcher(active_web_contents(), expected_title);
@@ -1944,7 +1956,6 @@
           img.onerror = reject;
       })
   )";
-  ASSERT_TRUE(content_test_data_server.ShutdownAndWaitUntilComplete());
   EXPECT_EQ("IMG LOADED",
             content::EvalJs(active_web_contents(),
                             content::JsReplace(kScriptTemplate, "logo.png")));
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index d203863..9bcbc057 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -648,11 +648,6 @@
     "expiry_milestone": 88
   },
   {
-    "name": "corner-shortcuts",
-    "owners": [ "baileyberro", "cros-peripherals" ],
-    "expiry_milestone": 85
-  },
-  {
     "name": "cors-for-content-scripts",
     "owners": [ "lukasza" ],
     "expiry_milestone": 85
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 86a8146..26072cc6 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3295,10 +3295,6 @@
     "Enables contextual nudges, periodically showing the user a label "
     "explaining how to interact with a particular UI element using gestures.";
 
-const char kCornerShortcutsName[] = "Enable corner shortcuts";
-const char kCornerShortcutsDescription[] =
-    "If enabled, the user can configure actions for corners of the display.";
-
 const char kCrosRegionsModeName[] = "Cros-regions load mode";
 const char kCrosRegionsModeDescription[] =
     "This flag controls cros-regions load mode";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 81e6d1fa..84c3ed3 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1916,9 +1916,6 @@
 extern const char kContextualNudgesName[];
 extern const char kContextualNudgesDescription[];
 
-extern const char kCornerShortcutsName[];
-extern const char kCornerShortcutsDescription[];
-
 extern const char kCrosRegionsModeName[];
 extern const char kCrosRegionsModeDescription[];
 extern const char kCrosRegionsModeDefault[];
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index dadb4fe3..1ba2b4c8 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -330,6 +330,8 @@
     public static final String OMNIBOX_ASSISTANT_VOICE_SEARCH = "OmniboxAssistantVoiceSearch";
     public static final String OMNIBOX_COMPACT_SUGGESTIONS = "OmniboxCompactSuggestions";
     public static final String OMNIBOX_DEFERRED_KEYBOARD_POPUP = "OmniboxDeferredKeyboardPopup";
+    public static final String OMNIBOX_ENABLE_CLIPBOARD_PROVIDER_IMAGE_SUGGESTIONS =
+            "OmniboxEnableClipboardProviderImageSuggestions";
     public static final String OMNIBOX_HIDE_SCHEME_IN_STEADY_STATE =
             "OmniboxUIExperimentHideSteadyStateUrlScheme";
     public static final String OMNIBOX_HIDE_TRIVIAL_SUBDOMAINS_IN_STEADY_STATE =
diff --git a/chrome/browser/lite_video/OWNERS b/chrome/browser/lite_video/OWNERS
new file mode 100644
index 0000000..9bcf864
--- /dev/null
+++ b/chrome/browser/lite_video/OWNERS
@@ -0,0 +1,3 @@
+file://components/data_reduction_proxy/OWNERS
+
+# COMPONENT: Internals>Network>DataUse
diff --git a/chrome/browser/lite_video/lite_video_features.cc b/chrome/browser/lite_video/lite_video_features.cc
new file mode 100644
index 0000000..20a5ccf9
--- /dev/null
+++ b/chrome/browser/lite_video/lite_video_features.cc
@@ -0,0 +1,52 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/lite_video/lite_video_features.h"
+
+#include "base/feature_list.h"
+#include "base/json/json_reader.h"
+#include "base/metrics/field_trial.h"
+#include "base/metrics/field_trial_params.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/optional.h"
+#include "base/values.h"
+#include "chrome/common/chrome_features.h"
+
+namespace lite_video {
+namespace features {
+
+bool IsLiteVideoEnabled() {
+  return base::FeatureList::IsEnabled(::features::kLiteVideo);
+}
+
+base::Optional<base::Value> GetLiteVideoOriginHintsFromFieldTrial() {
+  if (!IsLiteVideoEnabled())
+    return base::nullopt;
+  const std::string lite_video_origin_hints_json =
+      base::GetFieldTrialParamValueByFeature(::features::kLiteVideo,
+                                             "lite_video_origin_hints");
+  if (lite_video_origin_hints_json.empty())
+    return base::nullopt;
+
+  base::Optional<base::Value> lite_video_origin_hints =
+      base::JSONReader::Read(lite_video_origin_hints_json);
+
+  UMA_HISTOGRAM_BOOLEAN(
+      "LiteVideo.OriginHints.ParseResult",
+      lite_video_origin_hints && lite_video_origin_hints->is_dict());
+
+  return lite_video_origin_hints;
+}
+
+int LiteVideoTargetDownlinkRTTLatencyMs() {
+  return GetFieldTrialParamByFeatureAsInt(
+      ::features::kLiteVideo, "target_downlink_rtt_latency_ms", 2500);
+}
+int LiteVideoKilobytesToBufferBeforeThrottle() {
+  return GetFieldTrialParamByFeatureAsInt(
+      ::features::kLiteVideo, "kilobyte_to_buffer_before_throttle", 500);
+}
+
+}  // namespace features
+}  // namespace lite_video
diff --git a/chrome/browser/lite_video/lite_video_features.h b/chrome/browser/lite_video/lite_video_features.h
new file mode 100644
index 0000000..eb8bdfd
--- /dev/null
+++ b/chrome/browser/lite_video/lite_video_features.h
@@ -0,0 +1,37 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_FEATURES_H_
+#define CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_FEATURES_H_
+
+#include "base/feature_list.h"
+#include "base/optional.h"
+
+namespace base {
+class Value;
+}  // namespace base
+
+namespace lite_video {
+namespace features {
+
+// Whether the LiteVideo feature that throttles media requests to reduce
+// adaptive bitrates of media streams is enabled. Currently disabled by default.
+bool IsLiteVideoEnabled();
+
+// Return the origins that are whitelisted for using the LiteVideo optimization
+// and the parameters needed to throttle media requests for that origin.
+base::Optional<base::Value> GetLiteVideoOriginHintsFromFieldTrial();
+
+// The target for of the round-trip time for media requests used when
+// throttling media requests.
+int LiteVideoTargetDownlinkRTTLatencyMs();
+
+// The number of kilobytes to be buffered before starting to throttle media
+// requests.
+int LiteVideoKilobytesToBufferBeforeThrottle();
+
+}  // namespace features
+}  // namespace lite_video
+
+#endif  // CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_FEATURES_H_
diff --git a/chrome/browser/lite_video/lite_video_hint.cc b/chrome/browser/lite_video/lite_video_hint.cc
new file mode 100644
index 0000000..1e059f3
--- /dev/null
+++ b/chrome/browser/lite_video/lite_video_hint.cc
@@ -0,0 +1,17 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/lite_video/lite_video_hint.h"
+
+namespace lite_video {
+
+LiteVideoHint::LiteVideoHint(int target_downlink_bandwidth_kbps,
+                             int target_downlink_rtt_latency_ms,
+                             int kilobytes_to_buffer_before_throttle)
+    : target_downlink_bandwidth_kbps_(target_downlink_bandwidth_kbps),
+      target_downlink_rtt_latency_ms_(target_downlink_rtt_latency_ms),
+      kilobytes_to_buffer_before_throttle_(
+          kilobytes_to_buffer_before_throttle) {}
+
+}  // namespace lite_video
diff --git a/chrome/browser/lite_video/lite_video_hint.h b/chrome/browser/lite_video/lite_video_hint.h
new file mode 100644
index 0000000..2ea80630
--- /dev/null
+++ b/chrome/browser/lite_video/lite_video_hint.h
@@ -0,0 +1,39 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_HINT_H_
+#define CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_HINT_H_
+
+#include <stdint.h>
+
+namespace lite_video {
+
+class LiteVideoHint {
+ public:
+  LiteVideoHint(int target_downlink_bandwidth_kbps,
+                int target_downlink_rtt_latency_ms,
+                int kilobytes_to_buffer_before_throttle);
+  ~LiteVideoHint() = default;
+
+  int target_downlink_bandwidth_kbps() {
+    return target_downlink_bandwidth_kbps_;
+  }
+
+  int target_downlink_rtt_latency_ms() {
+    return target_downlink_rtt_latency_ms_;
+  }
+
+  int kilobytes_to_buffer_before_throttle() {
+    return kilobytes_to_buffer_before_throttle_;
+  }
+
+ private:
+  const int target_downlink_bandwidth_kbps_;
+  const int target_downlink_rtt_latency_ms_;
+  const int kilobytes_to_buffer_before_throttle_;
+};
+
+}  // namespace lite_video
+
+#endif  // CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_HINT_H_
diff --git a/chrome/browser/lite_video/lite_video_hint_cache.cc b/chrome/browser/lite_video/lite_video_hint_cache.cc
new file mode 100644
index 0000000..4d583fe7
--- /dev/null
+++ b/chrome/browser/lite_video/lite_video_hint_cache.cc
@@ -0,0 +1,34 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/lite_video/lite_video_hint_cache.h"
+
+#include "chrome/browser/lite_video/lite_video_features.h"
+#include "chrome/browser/lite_video/lite_video_hint.h"
+
+namespace lite_video {
+
+LiteVideoHintCache::LiteVideoHintCache()
+    : origin_hints_(features::GetLiteVideoOriginHintsFromFieldTrial()) {}
+
+LiteVideoHintCache::~LiteVideoHintCache() = default;
+
+base::Optional<LiteVideoHint> LiteVideoHintCache::GetHintForNavigationURL(
+    const GURL& url) const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (!origin_hints_ || !origin_hints_->is_dict())
+    return base::nullopt;
+
+  base::Optional<int> target_downlink_bandwidth_kbps =
+      origin_hints_->FindIntKey(url.host());
+
+  if (!target_downlink_bandwidth_kbps)
+    return base::nullopt;
+
+  return LiteVideoHint(*target_downlink_bandwidth_kbps,
+                       features::LiteVideoTargetDownlinkRTTLatencyMs(),
+                       features::LiteVideoKilobytesToBufferBeforeThrottle());
+}
+
+}  // namespace lite_video
diff --git a/chrome/browser/lite_video/lite_video_hint_cache.h b/chrome/browser/lite_video/lite_video_hint_cache.h
new file mode 100644
index 0000000..4c7abda
--- /dev/null
+++ b/chrome/browser/lite_video/lite_video_hint_cache.h
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_HINT_CACHE_H_
+#define CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_HINT_CACHE_H_
+
+#include <stdint.h>
+
+#include "base/optional.h"
+#include "base/sequence_checker.h"
+#include "base/values.h"
+#include "url/gurl.h"
+
+namespace lite_video {
+
+class LiteVideoHint;
+
+// The LiteVideoHintCache holds the necessary information, keyed by origin,
+// needed to configure throttling performed by the LiteVideo optimization.
+class LiteVideoHintCache {
+ public:
+  LiteVideoHintCache();
+  virtual ~LiteVideoHintCache();
+
+  // Returns a LiteVideoHint if one exists for the navigation URL.
+  // Virtual for testing.
+  virtual base::Optional<LiteVideoHint> GetHintForNavigationURL(
+      const GURL& url) const;
+
+ private:
+  // The set of hints, keyed by origin, available to the hint cache.
+  const base::Optional<base::Value> origin_hints_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+};
+
+}  // namespace lite_video
+
+#endif  // CHROME_BROWSER_LITE_VIDEO_LITE_VIDEO_HINT_CACHE_H_
diff --git a/chrome/browser/lite_video/lite_video_hint_cache_unittest.cc b/chrome/browser/lite_video/lite_video_hint_cache_unittest.cc
new file mode 100644
index 0000000..ed6c1d9
--- /dev/null
+++ b/chrome/browser/lite_video/lite_video_hint_cache_unittest.cc
@@ -0,0 +1,95 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/lite_video/lite_video_hint_cache.h"
+
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/lite_video/lite_video_features.h"
+#include "chrome/browser/lite_video/lite_video_hint.h"
+#include "chrome/common/chrome_features.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+class LiteVideoHintCacheTest : public testing::Test {
+ public:
+  LiteVideoHintCacheTest() = default;
+  ~LiteVideoHintCacheTest() override = default;
+
+  void SetUp() override { ConfigHintCacheWithParams({}); }
+
+  void ConfigHintCacheWithParams(
+      const std::map<std::string, std::string>& params) {
+    scoped_feature_list_.Reset();
+    scoped_feature_list_.InitAndEnableFeatureWithParameters(
+        features::kLiteVideo, params);
+    hint_cache_ = std::make_unique<lite_video::LiteVideoHintCache>();
+  }
+
+  void DisableLiteVideo() {
+    scoped_feature_list_.Reset();
+    scoped_feature_list_.InitWithFeatures({}, {features::kLiteVideo});
+  }
+
+  lite_video::LiteVideoHintCache* hint_cache() { return hint_cache_.get(); }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+  std::unique_ptr<lite_video::LiteVideoHintCache> hint_cache_;
+};
+
+TEST_F(LiteVideoHintCacheTest, ValidHintAvailable) {
+  base::HistogramTester histogram_tester;
+  GURL url("https://LiteVideo.com");
+  ConfigHintCacheWithParams(
+      {{"lite_video_origin_hints", "{\"litevideo.com\": 123}"}});
+  base::Optional<lite_video::LiteVideoHint> hint =
+      hint_cache()->GetHintForNavigationURL(url);
+  ASSERT_TRUE(hint);
+  EXPECT_EQ(123, hint->target_downlink_bandwidth_kbps());
+  EXPECT_EQ(lite_video::features::LiteVideoKilobytesToBufferBeforeThrottle(),
+            hint->kilobytes_to_buffer_before_throttle());
+  EXPECT_EQ(lite_video::features::LiteVideoTargetDownlinkRTTLatencyMs(),
+            hint->target_downlink_rtt_latency_ms());
+  histogram_tester.ExpectUniqueSample("LiteVideo.OriginHints.ParseResult", true,
+                                      1);
+}
+
+TEST_F(LiteVideoHintCacheTest, NoHintAvailableForURL) {
+  base::HistogramTester histogram_tester;
+  GURL url("https://NoVideo.com");
+  ConfigHintCacheWithParams(
+      {{"lite_video_origin_hints", "{\"litevideo.com\": 123}"}});
+  EXPECT_FALSE(hint_cache()->GetHintForNavigationURL(url));
+  histogram_tester.ExpectUniqueSample("LiteVideo.OriginHints.ParseResult", true,
+                                      1);
+}
+
+TEST_F(LiteVideoHintCacheTest, NoHintInvalidJSON_InvalidTargetBandwidth) {
+  base::HistogramTester histogram_tester;
+  GURL url("https://LiteVideo.com");
+  ConfigHintCacheWithParams(
+      {{"lite_video_origin_hints", "{\"litevideo.com\": 123f}"}});
+  EXPECT_FALSE(hint_cache()->GetHintForNavigationURL(url));
+  histogram_tester.ExpectUniqueSample("LiteVideo.OriginHints.ParseResult",
+                                      false, 1);
+}
+
+TEST_F(LiteVideoHintCacheTest, NoHintInvalidJSON_ParseError) {
+  base::HistogramTester histogram_tester;
+  GURL url("https://LiteVideo.com");
+  ConfigHintCacheWithParams(
+      {{"lite_video_origin_hints", "{\"litevideo.com\" 123f}"}});
+  EXPECT_FALSE(hint_cache()->GetHintForNavigationURL(url));
+  histogram_tester.ExpectUniqueSample("LiteVideo.OriginHints.ParseResult",
+                                      false, 1);
+}
+
+TEST_F(LiteVideoHintCacheTest, LiteVideoDisabled) {
+  base::HistogramTester histogram_tester;
+  DisableLiteVideo();
+  GURL url("https://LiteVideo.com");
+  EXPECT_FALSE(hint_cache()->GetHintForNavigationURL(url));
+  histogram_tester.ExpectTotalCount("LiteVideo.OriginHints.ParseResult", 0);
+}
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
index ae43811..b6bf3b9 100644
--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
+++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
@@ -160,9 +160,7 @@
   const MediaRoute::Id& route_id = route.media_route_id();
   const MediaSinkInternal& sink = params.sink;
 
-  // TODO(crbug.com/904995): In the case of multiple app IDs (e.g. mirroring),
-  // we need to choose an appropriate app ID to launch based on capabilities.
-  std::string app_id = cast_source.GetAppIds()[0];
+  std::string app_id = ChooseAppId(cast_source, params.sink);
 
   DVLOG(2) << "Launching session with route ID = " << route_id
            << ", source ID = " << cast_source.source_id()
@@ -779,6 +777,20 @@
   return base::nullopt;
 }
 
+std::string CastActivityManager::ChooseAppId(
+    const CastMediaSource& source,
+    const MediaSinkInternal& sink) const {
+  const auto sink_capabilities =
+      BitwiseOr<cast_channel::CastDeviceCapability>::FromBits(
+          sink.cast_data().capabilities);
+  for (const auto& info : source.app_infos()) {
+    if (sink_capabilities.HasAll(info.required_capabilities))
+      return info.app_id;
+  }
+  NOTREACHED() << "Can't determine app ID from capabilities.";
+  return source.app_infos()[0].app_id;
+}
+
 CastActivityManager::DoLaunchSessionParams::DoLaunchSessionParams(
     const MediaRoute& route,
     const CastMediaSource& cast_source,
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.h b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
index 24da6fe8..d70324d 100644
--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.h
+++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
@@ -270,6 +270,9 @@
   // If no conversion should occur, returns base::nullopt.
   base::Optional<MediaSinkInternal> ConvertMirrorToCast(int tab_id);
 
+  std::string ChooseAppId(const CastMediaSource& source,
+                          const MediaSinkInternal& sink) const;
+
   static ActivityRecordFactoryForTest* activity_record_factory_;
 
   base::flat_set<MediaSource::Id> route_queries_;
diff --git a/chrome/browser/metrics/perf/perf_events_collector.cc b/chrome/browser/metrics/perf/perf_events_collector.cc
index f75aa23..4449f26f 100644
--- a/chrome/browser/metrics/perf/perf_events_collector.cc
+++ b/chrome/browser/metrics/perf/perf_events_collector.cc
@@ -120,26 +120,26 @@
 
 // TLB miss cycles for IvyBridge, Haswell, Broadwell and SandyBridge.
 const char kPerfITLBMissCyclesCmdIvyBridge[] =
-    "perf record -a -e itlb_misses.walk_duration -c 2003";
+    "perf record -a -e itlb_misses.walk_duration -c 20001";
 
 const char kPerfDTLBMissCyclesCmdIvyBridge[] =
-    "perf record -a -e dtlb_load_misses.walk_duration -c 2003";
+    "perf record -a -e dtlb_load_misses.walk_duration -c 20001";
 
 // TLB miss cycles for Skylake and Kabylake.
 const char kPerfITLBMissCyclesCmdSkylake[] =
-    "perf record -a -e itlb_misses.walk_pending -c 2003";
+    "perf record -a -e itlb_misses.walk_pending -c 20001";
 
 const char kPerfDTLBMissCyclesCmdSkylake[] =
-    "perf record -a -e dtlb_load_misses.walk_pending -c 2003";
+    "perf record -a -e dtlb_load_misses.walk_pending -c 20001";
 
 // TLB miss cycles for Atom, including Silvermont, Airmont and Goldmont.
 const char kPerfITLBMissCyclesCmdAtom[] =
-    "perf record -a -e page_walks.i_side_cycles -c 2003";
+    "perf record -a -e page_walks.i_side_cycles -c 20001";
 
 const char kPerfDTLBMissCyclesCmdAtom[] =
-    "perf record -a -e page_walks.d_side_cycles -c 2003";
+    "perf record -a -e page_walks.d_side_cycles -c 20001";
 
-const char kPerfCacheMissesCmd[] = "perf record -a -e cache-misses -c 10007";
+const char kPerfCacheMissesCmd[] = "perf record -a -e cache-misses -c 12007";
 
 const std::vector<RandomSelector::WeightAndValue> GetDefaultCommands_x86_64(
     const CPUIdentity& cpuid) {
diff --git a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
index 680ec727..eaa37ce0 100644
--- a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
+++ b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
@@ -35,12 +35,12 @@
 const char kPerfLBRCmd[] = "perf record -a -e r20c4 -b -c 200011";
 const char kPerfLBRCmdAtom[] = "perf record -a -e rc4 -b -c 300001";
 const char kPerfITLBMissCyclesCmdIvyBridge[] =
-    "perf record -a -e itlb_misses.walk_duration -c 2003";
+    "perf record -a -e itlb_misses.walk_duration -c 20001";
 const char kPerfITLBMissCyclesCmdSkylake[] =
-    "perf record -a -e itlb_misses.walk_pending -c 2003";
+    "perf record -a -e itlb_misses.walk_pending -c 20001";
 const char kPerfITLBMissCyclesCmdAtom[] =
-    "perf record -a -e page_walks.i_side_cycles -c 2003";
-const char kPerfCacheMissesCmd[] = "perf record -a -e cache-misses -c 10007";
+    "perf record -a -e page_walks.i_side_cycles -c 20001";
+const char kPerfCacheMissesCmd[] = "perf record -a -e cache-misses -c 12007";
 
 // Converts a protobuf to serialized format as a byte vector.
 std::vector<uint8_t> SerializeMessageToVector(
diff --git a/chrome/browser/password_manager/android/save_password_infobar_delegate_android.cc b/chrome/browser/password_manager/android/save_password_infobar_delegate_android.cc
index 9969f2e0..2f69ad7 100644
--- a/chrome/browser/password_manager/android/save_password_infobar_delegate_android.cc
+++ b/chrome/browser/password_manager/android/save_password_infobar_delegate_android.cc
@@ -60,15 +60,13 @@
     : PasswordManagerInfoBarDelegate(),
       form_to_save_(std::move(form_to_save)),
       infobar_response_(password_manager::metrics_util::NO_DIRECT_INTERACTION) {
-  base::string16 message;
   PasswordTitleType type =
       form_to_save_->GetPendingCredentials().federation_origin.opaque()
           ? PasswordTitleType::SAVE_PASSWORD
           : PasswordTitleType::SAVE_ACCOUNT;
-  GetSavePasswordDialogTitleTextAndLinkRange(
+  SetMessage(GetSavePasswordDialogTitleText(
       web_contents->GetVisibleURL(),
-      url::Origin::Create(form_to_save_->GetURL()), type, &message);
-  SetMessage(message);
+      url::Origin::Create(form_to_save_->GetURL()), type));
 
   if (type == PasswordTitleType::SAVE_PASSWORD &&
       is_smartlock_branding_enabled) {
diff --git a/chrome/browser/password_manager/android/update_password_infobar_delegate_android.cc b/chrome/browser/password_manager/android/update_password_infobar_delegate_android.cc
index b3e1b41..b241fffb 100644
--- a/chrome/browser/password_manager/android/update_password_infobar_delegate_android.cc
+++ b/chrome/browser/password_manager/android/update_password_infobar_delegate_android.cc
@@ -106,12 +106,10 @@
     bool is_smartlock_branding_enabled)
     : infobar_response_(password_manager::metrics_util::NO_DIRECT_INTERACTION),
       is_smartlock_branding_enabled_(is_smartlock_branding_enabled) {
-  base::string16 message;
-  GetSavePasswordDialogTitleTextAndLinkRange(
+  SetMessage(GetSavePasswordDialogTitleText(
       web_contents->GetVisibleURL(),
       url::Origin::Create(form_to_update->GetURL()),
-      PasswordTitleType::UPDATE_PASSWORD, &message);
-  SetMessage(message);
+      PasswordTitleType::UPDATE_PASSWORD));
   if (is_smartlock_branding_enabled)
     SetDetailsMessage(l10n_util::GetStringUTF16(IDS_SAVE_PASSWORD_FOOTER));
 
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index cb5cadb..a066ecd9 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -33,7 +33,6 @@
 #include "chrome/browser/safe_browsing/chrome_password_protection_service.h"
 #include "chrome/browser/safe_browsing/user_interaction_observer.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/browser/translate/chrome_translate_client.h"
 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
@@ -72,6 +71,7 @@
 #include "components/sessions/content/content_record_password_state.h"
 #include "components/signin/public/base/signin_metrics.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
+#include "components/site_isolation/site_isolation_policy.h"
 #include "components/sync/driver/sync_service.h"
 #include "components/sync/driver/sync_user_settings.h"
 #include "components/translate/core/browser/translate_manager.h"
@@ -866,7 +866,8 @@
   // TODO(crbug.com/862989): Move the following function (and the feature) to
   // the password component. Then remove IsIsolationForPasswordsSitesEnabled()
   // from the PasswordManagerClient interface.
-  return SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled();
+  return site_isolation::SiteIsolationPolicy::
+      IsIsolationForPasswordSitesEnabled();
 }
 
 bool ChromePasswordManagerClient::IsNewTabPage() const {
diff --git a/chrome/browser/policy/messaging_layer/public/report_client.cc b/chrome/browser/policy/messaging_layer/public/report_client.cc
new file mode 100644
index 0000000..4f0b0a2
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/public/report_client.cc
@@ -0,0 +1,54 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/messaging_layer/public/report_client.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/memory/ptr_util.h"
+#include "base/no_destructor.h"
+#include "chrome/browser/policy/messaging_layer/encryption/encryption_module.h"
+#include "chrome/browser/policy/messaging_layer/public/report_queue.h"
+#include "chrome/browser/policy/messaging_layer/public/report_queue_configuration.h"
+#include "chrome/browser/policy/messaging_layer/storage/storage_module.h"
+#include "chrome/browser/policy/messaging_layer/util/status.h"
+#include "chrome/browser/policy/messaging_layer/util/status_macros.h"
+#include "chrome/browser/policy/messaging_layer/util/statusor.h"
+
+namespace reporting {
+
+using base::MakeRefCounted;
+
+ReportingClient::ReportingClient()
+    : storage_(MakeRefCounted<StorageModule>()),
+      encryption_(MakeRefCounted<EncryptionModule>()) {}
+
+ReportingClient::~ReportingClient() = default;
+
+StatusOr<std::unique_ptr<ReportQueue>> ReportingClient::CreateReportQueue(
+    std::unique_ptr<ReportQueueConfiguration> config) {
+  ASSIGN_OR_RETURN(ReportingClient* instance, GetInstance());
+  return ReportQueue::Create(std::move(config), instance->storage_,
+                             instance->encryption_);
+}
+
+StatusOr<ReportingClient*> ReportingClient::GetInstance() {
+  static base::NoDestructor<StatusOr<std::unique_ptr<ReportingClient>>>
+      instance(Create());
+  if (!instance->ok()) {
+    return instance->status();
+  }
+  return instance->ValueOrDie().get();
+}
+
+// TODO(chromium:1078512) As part of completing the StorageModule and
+// EncryptionModule, this create function will need to be updated to check for
+// successful creation of the StorageModule and EncryptionModule.
+StatusOr<std::unique_ptr<ReportingClient>> ReportingClient::Create() {
+  auto client = base::WrapUnique<ReportingClient>(new ReportingClient);
+  return client;
+}
+
+}  // namespace reporting
diff --git a/chrome/browser/policy/messaging_layer/public/report_client.h b/chrome/browser/policy/messaging_layer/public/report_client.h
new file mode 100644
index 0000000..b7740b2
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/public/report_client.h
@@ -0,0 +1,63 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_POLICY_MESSAGING_LAYER_PUBLIC_REPORT_CLIENT_H_
+#define CHROME_BROWSER_POLICY_MESSAGING_LAYER_PUBLIC_REPORT_CLIENT_H_
+
+#include <memory>
+#include <utility>
+
+#include "chrome/browser/policy/messaging_layer/encryption/encryption_module.h"
+#include "chrome/browser/policy/messaging_layer/public/report_queue.h"
+#include "chrome/browser/policy/messaging_layer/public/report_queue_configuration.h"
+#include "chrome/browser/policy/messaging_layer/storage/storage_module.h"
+#include "chrome/browser/policy/messaging_layer/util/statusor.h"
+
+namespace reporting {
+
+// ReportingClient acts a single point for creating |reporting::ReportQueue|s.
+// It ensures that all ReportQueues are created with the same storage and
+// encryption settings.
+//
+// Example Usage:
+// Status SendMessage(google::protobuf::ImportantMessage important_message,
+//                    base::OnceCallback<void(Status)> callback) {
+//   ASSIGN_OR_RETURN(std::unique_ptr<ReportQueueConfiguration> config,
+//                  ReportQueueConfiguration::Create(...));
+//   ASSIGN_OR_RETURN(std::unique_ptr<ReportQueue> report_queue,
+//                  ReportingClient::CreateReportQueue(config));
+//   return report_queue->Enqueue(important_message, callback);
+// }
+class ReportingClient {
+ public:
+  ~ReportingClient();
+  ReportingClient(const ReportingClient& other) = delete;
+  ReportingClient& operator=(const ReportingClient& other) = delete;
+
+  // Allows a user to synchronously create a |ReportQueue|. Will create an
+  // underlying ReportingClient if it doesn't exists. This call can fail if
+  // |storage_| or |encryption_| cannot be instantiated for any reason.
+  //
+  // TODO(chromium:1078512): Once the StorageModule is ready, update this
+  // comment with concrete failure conditions.
+  // TODO(chromium:1078512): Once the EncryptionModule is ready, update this
+  // comment with concrete failure conditions.
+  static StatusOr<std::unique_ptr<ReportQueue>> CreateReportQueue(
+      std::unique_ptr<ReportQueueConfiguration> config);
+
+ private:
+  ReportingClient();
+
+  static StatusOr<ReportingClient*> GetInstance();
+
+  // ReportingClient is not meant to be used directly.
+  static StatusOr<std::unique_ptr<ReportingClient>> Create();
+
+  scoped_refptr<StorageModule> storage_;
+  scoped_refptr<EncryptionModule> encryption_;
+};
+
+}  // namespace reporting
+
+#endif  // CHROME_BROWSER_POLICY_MESSAGING_LAYER_PUBLIC_REPORT_CLIENT_H_
diff --git a/chrome/browser/policy/messaging_layer/public/report_client_unittest.cc b/chrome/browser/policy/messaging_layer/public/report_client_unittest.cc
new file mode 100644
index 0000000..c5fd1b9
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/public/report_client_unittest.cc
@@ -0,0 +1,68 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/messaging_layer/public/report_client.h"
+
+#include "base/test/task_environment.h"
+#include "chrome/browser/policy/messaging_layer/public/report_queue.h"
+#include "chrome/browser/policy/messaging_layer/public/report_queue_configuration.h"
+#include "chrome/browser/policy/messaging_layer/util/status.h"
+#include "chrome/browser/policy/messaging_layer/util/status_macros.h"
+#include "chrome/browser/policy/messaging_layer/util/statusor.h"
+#include "components/policy/core/common/cloud/dm_token.h"
+#include "components/policy/proto/record_constants.pb.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace reporting {
+namespace {
+
+using policy::DMToken;
+using reporting_messaging_layer::Destination;
+using reporting_messaging_layer::Priority;
+
+class ReportingClientTest : public testing::Test {
+ protected:
+  base::test::TaskEnvironment task_envrionment_;
+
+  const DMToken dm_token_ = DMToken::CreateValidTokenForTesting("TOKEN");
+  const Destination destination_ = Destination::UPLOAD_EVENTS;
+  const Priority priority_ = Priority::IMMEDIATE;
+};
+
+// Tests that a ReportQueue can be created using the ReportingClient.
+TEST_F(ReportingClientTest, CreatesReportQueue) {
+  auto config_result =
+      ReportQueueConfiguration::Create(dm_token_, destination_, priority_);
+  EXPECT_TRUE(config_result.ok());
+
+  auto report_queue_result =
+      ReportingClient::CreateReportQueue(std::move(config_result.ValueOrDie()));
+
+  EXPECT_TRUE(report_queue_result.ok());
+}
+
+// Ensures that created ReportQueues are actually different.
+TEST_F(ReportingClientTest, CreatesTwoDifferentReportQueues) {
+  auto config_result =
+      ReportQueueConfiguration::Create(dm_token_, destination_, priority_);
+  EXPECT_TRUE(config_result.ok());
+
+  auto report_queue_result_1 =
+      ReportingClient::CreateReportQueue(std::move(config_result.ValueOrDie()));
+  EXPECT_TRUE(report_queue_result_1.ok());
+
+  config_result =
+      ReportQueueConfiguration::Create(dm_token_, destination_, priority_);
+  EXPECT_TRUE(config_result.ok());
+
+  auto report_queue_result_2 =
+      ReportingClient::CreateReportQueue(std::move(config_result.ValueOrDie()));
+  EXPECT_TRUE(report_queue_result_2.ok());
+
+  EXPECT_NE(report_queue_result_1.ValueOrDie().get(),
+            report_queue_result_2.ValueOrDie().get());
+}
+
+}  // namespace
+}  // namespace reporting
diff --git a/chrome/browser/policy/messaging_layer/public/report_queue.h b/chrome/browser/policy/messaging_layer/public/report_queue.h
index 86e769c..41782d65 100644
--- a/chrome/browser/policy/messaging_layer/public/report_queue.h
+++ b/chrome/browser/policy/messaging_layer/public/report_queue.h
@@ -31,19 +31,9 @@
 // |ReportQueueConfiguration|. |ReportQueue| handles scheduling encryption,
 // storage, and delivery.
 //
-// TODO(b/156099331): |ReportQueue|s should not be created or managed directly,
-// they should instead be created with the |ReportingClientLibrary| which does
-// not exist at this time.
-//
-// Example Usage:
-// Status SendMessage(google::protobuf::ImportantMessage important_message,
-//                    base::OnceCallback<void(Status)> callback) {
-//   ASSIGN_OR_RETURN(std::unique_ptr<ReportQueueConfiguration> config,
-//                  ReportQueueConfiguration::Create(...));
-//   ASSIGN_OR_RETURN(std::unique_ptr<ReportQueue> report_queue,
-//                  ReportingClientLibrary::CreateReportQueue(config));
-//   return report_queue->Enqueue(important_message, callback);
-// }
+// ReportQueues are not meant to be created directly, instead use the
+// reporting::ReportingClient::CreateReportQueue(...) function. See the comments
+// for reporting::ReportingClient for example usage.
 //
 // Enqueue can also be used with a |base::Value| or |std::string|.
 class ReportQueue {
diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BUILD.gn
index 1a48601..fc0b0dfa 100644
--- a/chrome/browser/preferences/BUILD.gn
+++ b/chrome/browser/preferences/BUILD.gn
@@ -21,7 +21,27 @@
     "//base:jni_java",
   ]
   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
-  srcjar_deps = [ ":java_enums_srcjar" ]
+  srcjar_deps = [ ":java_pref_names_srcjar" ]
+}
+
+# TODO(chouinard,estade): Consider breaking this target up into a different target for each pref file.
+java_cpp_strings("java_pref_names_srcjar") {
+  sources = [
+    "//chrome/common/pref_names.cc",
+    "//components/autofill/core/common/autofill_prefs.cc",
+    "//components/content_settings/core/common/pref_names.cc",
+    "//components/dom_distiller/core/pref_names.cc",
+    "//components/embedder_support/pref_names.cc",
+    "//components/feed/core/shared_prefs/pref_names.cc",
+    "//components/offline_pages/core/prefetch/prefetch_prefs.cc",
+    "//components/password_manager/core/common/password_manager_pref_names.cc",
+    "//components/payments/core/payment_prefs.cc",
+    "//components/safe_browsing/core/common/safe_browsing_prefs.cc",
+    "//components/signin/public/base/signin_pref_names.cc",
+    "//components/translate/core/browser/translate_pref_names.cc",
+  ]
+
+  template = "android/java_templates/Pref.java.tmpl"
 }
 
 generate_jni("jni_headers") {
@@ -31,10 +51,6 @@
   ]
 }
 
-java_cpp_enum("java_enums_srcjar") {
-  sources = [ "//chrome/browser/android/preferences/prefs.h" ]
-}
-
 java_library("preferences_junit_tests") {
   # Skip platform checks since Robolectric depends on requires_android targets.
   bypass_platform_checks = true
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefChangeRegistrar.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefChangeRegistrar.java
index 6b9f8a0..bf3c084 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefChangeRegistrar.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefChangeRegistrar.java
@@ -4,11 +4,13 @@
 
 package org.chromium.chrome.browser.preferences;
 
-import android.util.SparseArray;
+import android.util.ArrayMap;
 
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.NativeMethods;
 
+import java.util.Map;
+
 /**
  * This class is the Java implementation of native PrefChangeRegistrar. It receives notification for
  * changes of one or more preferences from native PrefService.
@@ -21,8 +23,8 @@
      */
     public interface PrefObserver { void onPreferenceChange(); }
 
-    /** Mapping preference index and corresponding observer. **/
-    private final SparseArray<PrefObserver> mObservers = new SparseArray<>();
+    /** Mapping preference key and corresponding observer. **/
+    private final Map<String, PrefObserver> mObservers = new ArrayMap<>();
 
     /** Native pointer for PrefChangeRegistrarAndroid. **/
     private long mNativeRegistrar;
@@ -39,7 +41,7 @@
      * @param preference The preference to be observed.
      * @param observer The observer to be notified.
      */
-    public void addObserver(@Pref int preference, PrefObserver observer) {
+    public void addObserver(String preference, PrefObserver observer) {
         assert mObservers.get(preference)
                 == null : "Only one observer should be added to each preference.";
         mObservers.put(preference, observer);
@@ -50,7 +52,7 @@
      * Remove an observer for the specified preference if it has previously been added.
      * @param preference The specified preference.
      */
-    public void removeObserver(@Pref int preference) {
+    public void removeObserver(String preference) {
         PrefObserver observer = mObservers.get(preference);
         if (observer == null) return;
         mObservers.remove(preference);
@@ -68,7 +70,7 @@
     }
 
     @CalledByNative
-    private void onPreferenceChange(int preference) {
+    private void onPreferenceChange(String preference) {
         assert mObservers.get(preference)
                 != null : "Notification from unregistered preference changes.";
         mObservers.get(preference).onPreferenceChange();
@@ -77,9 +79,10 @@
     @NativeMethods
     interface Natives {
         long init(PrefChangeRegistrar caller);
-        void add(long nativePrefChangeRegistrarAndroid, PrefChangeRegistrar caller, int preference);
-        void remove(
-                long nativePrefChangeRegistrarAndroid, PrefChangeRegistrar caller, int preference);
+        void add(long nativePrefChangeRegistrarAndroid, PrefChangeRegistrar caller,
+                String preference);
+        void remove(long nativePrefChangeRegistrarAndroid, PrefChangeRegistrar caller,
+                String preference);
         void destroy(long nativePrefChangeRegistrarAndroid, PrefChangeRegistrar caller);
     }
 }
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
index 4bfd1ed..260aed0 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
@@ -12,8 +12,7 @@
 import org.chromium.base.annotations.NativeMethods;
 
 /**
- * PrefServiceBridge is a singleton which provides read and write access to native PrefService for
- * preferences enumerated in chrome/browser/android/preferences/prefs.h.
+ * PrefServiceBridge is a singleton which provides read and write access to native PrefService.
  */
 public class PrefServiceBridge {
     // Singleton constructor. Do not call directly unless for testing purpose.
@@ -36,7 +35,7 @@
     /**
      * @param preference The name of the preference.
      */
-    public void clearPref(@Pref int preference) {
+    public void clearPref(@NonNull String preference) {
         PrefServiceBridgeJni.get().clearPref(preference);
     }
 
@@ -44,7 +43,7 @@
      * @param preference The name of the preference.
      * @return Whether the specified preference is enabled.
      */
-    public boolean getBoolean(@Pref int preference) {
+    public boolean getBoolean(@NonNull String preference) {
         return PrefServiceBridgeJni.get().getBoolean(preference);
     }
 
@@ -52,7 +51,7 @@
      * @param preference The name of the preference.
      * @param value The value the specified preference will be set to.
      */
-    public void setBoolean(@Pref int preference, boolean value) {
+    public void setBoolean(@NonNull String preference, boolean value) {
         PrefServiceBridgeJni.get().setBoolean(preference, value);
     }
 
@@ -60,7 +59,7 @@
      * @param preference The name of the preference.
      * @return value The value of the specified preference.
      */
-    public int getInteger(@Pref int preference) {
+    public int getInteger(@NonNull String preference) {
         return PrefServiceBridgeJni.get().getInteger(preference);
     }
 
@@ -68,7 +67,7 @@
      * @param preference The name of the preference.
      * @param value The value the specified preference will be set to.
      */
-    public void setInteger(@Pref int preference, int value) {
+    public void setInteger(@NonNull String preference, int value) {
         PrefServiceBridgeJni.get().setInteger(preference, value);
     }
 
@@ -77,7 +76,7 @@
      * @return value The value of the specified preference.
      */
     @NonNull
-    public String getString(@Pref int preference) {
+    public String getString(@NonNull String preference) {
         return PrefServiceBridgeJni.get().getString(preference);
     }
 
@@ -85,7 +84,7 @@
      * @param preference The name of the preference.
      * @param value The value the specified preference will be set to.
      */
-    public void setString(@Pref int preference, @NonNull String value) {
+    public void setString(@NonNull String preference, @NonNull String value) {
         PrefServiceBridgeJni.get().setString(preference, value);
     }
 
@@ -93,7 +92,7 @@
      * @param preference The name of the preference.
      * @return Whether the specified preference is managed.
      */
-    public boolean isManagedPreference(@Pref int preference) {
+    public boolean isManagedPreference(@NonNull String preference) {
         return PrefServiceBridgeJni.get().isManagedPreference(preference);
     }
 
@@ -104,13 +103,13 @@
 
     @NativeMethods
     interface Natives {
-        void clearPref(int preference);
-        boolean getBoolean(int preference);
-        void setBoolean(int preference, boolean value);
-        int getInteger(int preference);
-        void setInteger(int preference, int value);
-        String getString(int preference);
-        void setString(int preference, String value);
-        boolean isManagedPreference(int preference);
+        void clearPref(String preference);
+        boolean getBoolean(String preference);
+        void setBoolean(String preference, boolean value);
+        int getInteger(String preference);
+        void setInteger(String preference, int value);
+        String getString(String preference);
+        void setString(String preference, String value);
+        boolean isManagedPreference(String preference);
     }
 }
diff --git a/chrome/browser/preferences/android/java_templates/Pref.java.tmpl b/chrome/browser/preferences/android/java_templates/Pref.java.tmpl
new file mode 100644
index 0000000..347fc0e
--- /dev/null
+++ b/chrome/browser/preferences/android/java_templates/Pref.java.tmpl
@@ -0,0 +1,14 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.preferences;
+
+/** Contains pref string constants. */
+public final class Pref {{
+
+{NATIVE_STRINGS}
+
+    // Prevents instantiation.
+    private Pref() {{}}
+}}
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc b/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc
index f41f469..824db5f 100644
--- a/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc
+++ b/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc
@@ -26,6 +26,7 @@
 #include "chrome/browser/prerender/isolated/isolated_prerender_service.h"
 #include "chrome/browser/prerender/isolated/isolated_prerender_service_factory.h"
 #include "chrome/browser/prerender/isolated/isolated_prerender_service_workers_observer.h"
+#include "chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.h"
 #include "chrome/browser/prerender/isolated/isolated_prerender_tab_helper.h"
 #include "chrome/browser/prerender/isolated/isolated_prerender_test_utils.h"
 #include "chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor.h"
@@ -1444,7 +1445,8 @@
   IsolatedPrerenderTabHelper* tab_helper =
       IsolatedPrerenderTabHelper::FromWebContents(GetWebContents());
 
-  GURL eligible_link = GetOriginServerURL("/prerender/prefetch_page.html");
+  GURL eligible_link =
+      GetOriginServerURL("/prerender/isolated/prefetch_page.html");
 
   TestTabHelperObserver tab_helper_observer(tab_helper);
   tab_helper_observer.SetExpectedSuccessfulURLs({eligible_link});
@@ -1476,9 +1478,24 @@
   for (size_t i = origin_requests_before_prerender.size();
        i < origin_requests_after_prerender.size(); ++i) {
     GURL nsp_url = origin_requests_after_prerender[i];
-    found_nsp_javascript |= nsp_url.path() == "/prerender/prefetch.js";
+    found_nsp_javascript |= nsp_url.path() == "/prerender/isolated/prefetch.js";
     found_nsp_mainframe |= nsp_url.path() == eligible_link.path();
   }
   EXPECT_TRUE(found_nsp_javascript);
   EXPECT_FALSE(found_nsp_mainframe);
+
+  // Verify the resource load was reported to the subresource manager.
+  IsolatedPrerenderService* service =
+      IsolatedPrerenderServiceFactory::GetForProfile(browser()->profile());
+  IsolatedPrerenderSubresourceManager* manager =
+      service->GetSubresourceManagerForURL(eligible_link);
+  ASSERT_TRUE(manager);
+
+  std::set<GURL> expected_subresources = {
+      GetOriginServerURL("/prerender/isolated/prefetch.js"),
+      GetOriginServerURL("/prerender/isolated/prefetch-redirect-start.js"),
+      GetOriginServerURL("/prerender/isolated/prefetch-redirect-middle.js"),
+      GetOriginServerURL("/prerender/isolated/prefetch-redirect-end.js"),
+  };
+  EXPECT_EQ(expected_subresources, manager->successfully_loaded_subresources());
 }
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.cc b/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.cc
index c515ac0..aa2ea38 100644
--- a/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.cc
+++ b/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.cc
@@ -10,6 +10,7 @@
 
 IsolatedPrerenderProxyingURLLoaderFactory::InProgressRequest::InProgressRequest(
     IsolatedPrerenderProxyingURLLoaderFactory* factory,
+    ResourceLoadSuccessfulCallback on_resource_load_successful,
     mojo::PendingReceiver<network::mojom::URLLoader> loader_receiver,
     int32_t routing_id,
     int32_t request_id,
@@ -18,8 +19,11 @@
     mojo::PendingRemote<network::mojom::URLLoaderClient> client,
     const net::MutableNetworkTrafficAnnotationTag& traffic_annotation)
     : factory_(factory),
+      on_resource_load_successful_(on_resource_load_successful),
       target_client_(std::move(client)),
       loader_receiver_(this, std::move(loader_receiver)) {
+  redirect_chain_.push_back(request.url);
+
   mojo::PendingRemote<network::mojom::URLLoaderClient> proxy_client =
       client_receiver_.BindNewPipeAndPassRemote();
 
@@ -69,12 +73,16 @@
 
 void IsolatedPrerenderProxyingURLLoaderFactory::InProgressRequest::
     OnReceiveResponse(network::mojom::URLResponseHeadPtr head) {
+  if (head && head->headers) {
+    http_response_code_ = head->headers->response_code();
+  }
   target_client_->OnReceiveResponse(std::move(head));
 }
 
 void IsolatedPrerenderProxyingURLLoaderFactory::InProgressRequest::
     OnReceiveRedirect(const net::RedirectInfo& redirect_info,
                       network::mojom::URLResponseHeadPtr head) {
+  redirect_chain_.push_back(redirect_info.new_url);
   target_client_->OnReceiveRedirect(redirect_info, std::move(head));
 }
 
@@ -103,6 +111,7 @@
 
 void IsolatedPrerenderProxyingURLLoaderFactory::InProgressRequest::OnComplete(
     const network::URLLoaderCompletionStatus& status) {
+  MaybeReportResourceLoadSuccess(status.error_code);
   target_client_->OnComplete(status);
 }
 
@@ -112,13 +121,39 @@
   factory_->RemoveRequest(this);
 }
 
+void IsolatedPrerenderProxyingURLLoaderFactory::InProgressRequest::
+    MaybeReportResourceLoadSuccess(int net_error) {
+  if (net_error != net::OK) {
+    return;
+  }
+
+  if (!http_response_code_) {
+    return;
+  }
+
+  if (*http_response_code_ >= 300) {
+    return;
+  }
+
+  if (*http_response_code_ < 200) {
+    return;
+  }
+
+  DCHECK_GT(redirect_chain_.size(), 0U);
+  for (const GURL& url : redirect_chain_) {
+    on_resource_load_successful_.Run(url);
+  }
+}
+
 IsolatedPrerenderProxyingURLLoaderFactory::
     IsolatedPrerenderProxyingURLLoaderFactory(
         int frame_tree_node_id,
         mojo::PendingReceiver<network::mojom::URLLoaderFactory> loader_receiver,
         mojo::PendingRemote<network::mojom::URLLoaderFactory> target_factory,
-        DisconnectCallback on_disconnect)
-    : on_disconnect_(std::move(on_disconnect)) {
+        DisconnectCallback on_disconnect,
+        ResourceLoadSuccessfulCallback on_resource_load_successful)
+    : on_resource_load_successful_(std::move(on_resource_load_successful)),
+      on_disconnect_(std::move(on_disconnect)) {
   target_factory_.Bind(std::move(target_factory));
   target_factory_.set_disconnect_handler(base::BindOnce(
       &IsolatedPrerenderProxyingURLLoaderFactory::OnTargetFactoryError,
@@ -142,8 +177,9 @@
     mojo::PendingRemote<network::mojom::URLLoaderClient> client,
     const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) {
   requests_.insert(std::make_unique<InProgressRequest>(
-      this, std::move(loader_receiver), routing_id, request_id, options,
-      request, std::move(client), traffic_annotation));
+      this, on_resource_load_successful_, std::move(loader_receiver),
+      routing_id, request_id, options, request, std::move(client),
+      traffic_annotation));
 }
 
 void IsolatedPrerenderProxyingURLLoaderFactory::Clone(
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.h b/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.h
index fb0a7e2..a38b47b 100644
--- a/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.h
+++ b/chrome/browser/prerender/isolated/isolated_prerender_proxying_url_loader_factory.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include <set>
+#include <vector>
 
 #include "base/callback.h"
 #include "base/containers/unique_ptr_adapters.h"
@@ -21,19 +22,24 @@
 // This class is an intermediary URLLoaderFactory between the renderer and
 // network process, AKA proxy which should not be confused with a proxy server.
 //
-// Currently, this class doesn't do anything but forward all messages directly
-// to the normal network process and is only boilerplate for future changes.
+// Currently, this class only monitors when resource loads complete successfully
+// and reports those to the |IsolatedPrerenderSubresourceManager| which owns
+// |this|.
 class IsolatedPrerenderProxyingURLLoaderFactory
     : public network::mojom::URLLoaderFactory {
  public:
   using DisconnectCallback =
       base::OnceCallback<void(IsolatedPrerenderProxyingURLLoaderFactory*)>;
 
+  using ResourceLoadSuccessfulCallback =
+      base::RepeatingCallback<void(const GURL& url)>;
+
   IsolatedPrerenderProxyingURLLoaderFactory(
       int frame_tree_node_id,
       mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver,
       mojo::PendingRemote<network::mojom::URLLoaderFactory> target_factory,
-      DisconnectCallback on_disconnect);
+      DisconnectCallback on_disconnect,
+      ResourceLoadSuccessfulCallback on_resource_load_successful);
   ~IsolatedPrerenderProxyingURLLoaderFactory() override;
 
   // network::mojom::URLLoaderFactory:
@@ -55,6 +61,7 @@
    public:
     InProgressRequest(
         IsolatedPrerenderProxyingURLLoaderFactory* factory,
+        ResourceLoadSuccessfulCallback on_resource_load_successful,
         mojo::PendingReceiver<network::mojom::URLLoader> loader_receiver,
         int32_t routing_id,
         int32_t request_id,
@@ -91,12 +98,27 @@
    private:
     void OnBindingsClosed();
 
+    // Runs |on_resource_load_successful_| for each url in |redirect_chain_| if
+    // the resource was successfully loaded.
+    void MaybeReportResourceLoadSuccess(int net_error);
+
     // Back pointer to the factory which owns this class.
     IsolatedPrerenderProxyingURLLoaderFactory* const factory_;
 
     // This should be run on destruction of |this|.
     base::OnceClosure destruction_callback_;
 
+    // Records the HTTP response code in |OnReceiveResponse|.
+    base::Optional<int> http_response_code_;
+
+    // All urls loaded by |this| in order of redirects. The first element is the
+    // requested url and the last element is the final loaded url. Always has
+    // length of at least 1.
+    std::vector<GURL> redirect_chain_;
+
+    // Used to report successfully loaded urls in the redirect chain.
+    ResourceLoadSuccessfulCallback on_resource_load_successful_;
+
     // There are the mojo pipe endpoints between this proxy and the renderer.
     // Messages received by |client_receiver_| are forwarded to
     // |target_client_|.
@@ -119,6 +141,10 @@
 
   mojo::ReceiverSet<network::mojom::URLLoaderFactory> proxy_receivers_;
 
+  // Passed to each InProgressRequest so they can report successfully loaded
+  // urls in their redirect chain.
+  ResourceLoadSuccessfulCallback on_resource_load_successful_;
+
   // All active network requests handled by this factory.
   std::set<std::unique_ptr<InProgressRequest>, base::UniquePtrComparator>
       requests_;
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.cc b/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.cc
index ad49977..69cb51df 100644
--- a/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.cc
+++ b/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.cc
@@ -101,12 +101,20 @@
       std::move(target_factory_remote),
       base::BindOnce(
           &IsolatedPrerenderSubresourceManager::RemoveProxiedURLLoaderFactory,
+          weak_factory_.GetWeakPtr()),
+      base::BindRepeating(
+          &IsolatedPrerenderSubresourceManager::OnSubresourceLoadSuccessful,
           weak_factory_.GetWeakPtr()));
   proxied_loader_factories_.emplace(std::move(proxy));
 
   return true;
 }
 
+void IsolatedPrerenderSubresourceManager::OnSubresourceLoadSuccessful(
+    const GURL& url) {
+  successfully_loaded_subresources_.emplace(url);
+}
+
 void IsolatedPrerenderSubresourceManager::RemoveProxiedURLLoaderFactory(
     IsolatedPrerenderProxyingURLLoaderFactory* factory) {
   auto it = proxied_loader_factories_.find(factory);
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.h b/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.h
index 871ce31..87ebb40 100644
--- a/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.h
+++ b/chrome/browser/prerender/isolated/isolated_prerender_subresource_manager.h
@@ -44,6 +44,10 @@
 
   bool has_nsp_handle() const { return !!nsp_handle_; }
 
+  const std::set<GURL>& successfully_loaded_subresources() const {
+    return successfully_loaded_subresources_;
+  }
+
   // Takes ownership of |mainframe_response_|.
   std::unique_ptr<PrefetchedMainframeResponseContainer> TakeMainframeResponse();
 
@@ -82,9 +86,19 @@
   void RemoveProxiedURLLoaderFactory(
       IsolatedPrerenderProxyingURLLoaderFactory* factory);
 
+  // Used as
+  // |IsolatedPrerenderProxyingURLLoaderFactory::ResourceLoadSuccessfulCallback|
+  // to report a subresource was successfully loaded during the NSP.
+  void OnSubresourceLoadSuccessful(const GURL& url);
+
   // The page that is being prerendered.
   const GURL url_;
 
+  // All the subresources that have been successfully loaded during the NSP.
+  // Each step in a subresource's redirect chain is also added here so that
+  // those steps can be used from the network cache later as well.
+  std::set<GURL> successfully_loaded_subresources_;
+
   // The mainframe response headers and body.
   std::unique_ptr<PrefetchedMainframeResponseContainer> mainframe_response_;
 
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc
index bf18419..704dc94 100644
--- a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc
+++ b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc
@@ -96,6 +96,21 @@
       IsolatedPrerenderTabHelper::PrefetchingLikelyEventKey());
 }
 
+void OnGotCookieList(
+    const GURL& url,
+    IsolatedPrerenderTabHelper::OnEligibilityResultCallback result_callback,
+    const net::CookieStatusList& cookie_with_status_list,
+    const net::CookieStatusList& excluded_cookies) {
+  if (!cookie_with_status_list.empty()) {
+    std::move(result_callback)
+        .Run(url, false,
+             IsolatedPrerenderTabHelper::PrefetchStatus::
+                 kPrefetchNotEligibleUserHasCookies);
+    return;
+  }
+  std::move(result_callback).Run(url, true, base::nullopt);
+}
+
 }  // namespace
 
 IsolatedPrerenderTabHelper::PrefetchMetrics::PrefetchMetrics() = default;
@@ -436,7 +451,10 @@
 
   // Run the new URL through all the eligibility checks. In the mean time,
   // continue on with other Prefetches.
-  CheckAndMaybePrefetchURL(redirect_info.new_url);
+  CheckEligibilityOfURL(
+      profile_, redirect_info.new_url,
+      base::BindOnce(&IsolatedPrerenderTabHelper::OnGotEligibilityResult,
+                     weak_factory_.GetWeakPtr()));
 
   // Cancels the current request.
   Prefetch();
@@ -617,6 +635,7 @@
 
   page_->number_of_no_state_prefetch_attempts_++;
 }
+
 void IsolatedPrerenderTabHelper::OnPrerenderDone(const GURL& url) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(!page_->urls_to_no_state_prefetch_.empty());
@@ -701,79 +720,92 @@
     size_t url_index = original_prediction_ordering_starting_size + i;
     page_->original_prediction_ordering_.emplace(url, url_index);
 
-    CheckAndMaybePrefetchURL(url);
+    CheckEligibilityOfURL(
+        profile_, url,
+        base::BindOnce(&IsolatedPrerenderTabHelper::OnGotEligibilityResult,
+                       weak_factory_.GetWeakPtr()));
   }
 }
 
-bool IsolatedPrerenderTabHelper::CheckAndMaybePrefetchURL(const GURL& url) {
-  DCHECK(data_reduction_proxy::DataReductionProxySettings::
-             IsDataSaverEnabledByUser(profile_->IsOffTheRecord(),
-                                      profile_->GetPrefs()));
+// static
+void IsolatedPrerenderTabHelper::CheckEligibilityOfURL(
+    Profile* profile,
+    const GURL& url,
+    OnEligibilityResultCallback result_callback) {
+  if (!data_reduction_proxy::DataReductionProxySettings::
+          IsDataSaverEnabledByUser(profile->IsOffTheRecord(),
+                                   profile->GetPrefs())) {
+    std::move(result_callback).Run(url, false, base::nullopt);
+    return;
+  }
 
   if (google_util::IsGoogleAssociatedDomainUrl(url)) {
-    OnPrefetchStatusUpdate(url,
-                           PrefetchStatus::kPrefetchNotEligibleGoogleDomain);
-    return false;
+    std::move(result_callback)
+        .Run(url, false, PrefetchStatus::kPrefetchNotEligibleGoogleDomain);
+    return;
   }
 
   if (url.HostIsIPAddress()) {
-    OnPrefetchStatusUpdate(url,
-                           PrefetchStatus::kPrefetchNotEligibleHostIsIPAddress);
-    return false;
+    std::move(result_callback)
+        .Run(url, false, PrefetchStatus::kPrefetchNotEligibleHostIsIPAddress);
+    return;
   }
 
   if (!url.SchemeIs(url::kHttpsScheme)) {
-    OnPrefetchStatusUpdate(
-        url, PrefetchStatus::kPrefetchNotEligibleSchemeIsNotHttps);
-    return false;
+    std::move(result_callback)
+        .Run(url, false, PrefetchStatus::kPrefetchNotEligibleSchemeIsNotHttps);
+    return;
   }
 
   content::StoragePartition* default_storage_partition =
-      content::BrowserContext::GetDefaultStoragePartition(profile_);
+      content::BrowserContext::GetDefaultStoragePartition(profile);
 
   // Only the default storage partition is supported since that is the only
   // place where service workers are observed by
   // |IsolatedPrerenderServiceWorkersObserver|.
   if (default_storage_partition !=
       content::BrowserContext::GetStoragePartitionForSite(
-          profile_, url, /*can_create=*/false)) {
-    OnPrefetchStatusUpdate(
-        url, PrefetchStatus::kPrefetchNotEligibleNonDefaultStoragePartition);
-    return false;
+          profile, url,
+          /*can_create=*/false)) {
+    std::move(result_callback)
+        .Run(url, false,
+             PrefetchStatus::kPrefetchNotEligibleNonDefaultStoragePartition);
+    return;
   }
 
   IsolatedPrerenderService* isolated_prerender_service =
-      IsolatedPrerenderServiceFactory::GetForProfile(profile_);
+      IsolatedPrerenderServiceFactory::GetForProfile(profile);
   if (!isolated_prerender_service) {
-    return false;
+    std::move(result_callback).Run(url, false, base::nullopt);
+    return;
   }
 
   base::Optional<bool> site_has_service_worker =
       isolated_prerender_service->service_workers_observer()
           ->IsServiceWorkerRegisteredForOrigin(url::Origin::Create(url));
   if (!site_has_service_worker.has_value() || site_has_service_worker.value()) {
-    OnPrefetchStatusUpdate(
-        url, PrefetchStatus::kPrefetchNotEligibleUserHasServiceWorker);
-    return false;
+    std::move(result_callback)
+        .Run(url, false,
+             PrefetchStatus::kPrefetchNotEligibleUserHasServiceWorker);
+    return;
   }
 
   net::CookieOptions options = net::CookieOptions::MakeAllInclusive();
   default_storage_partition->GetCookieManagerForBrowserProcess()->GetCookieList(
       url, options,
-      base::BindOnce(&IsolatedPrerenderTabHelper::OnGotCookieList,
-                     weak_factory_.GetWeakPtr(), url));
-  return true;
+      base::BindOnce(&OnGotCookieList, url, std::move(result_callback)));
 }
 
-void IsolatedPrerenderTabHelper::OnGotCookieList(
+void IsolatedPrerenderTabHelper::OnGotEligibilityResult(
     const GURL& url,
-    const net::CookieStatusList& cookie_with_status_list,
-    const net::CookieStatusList& excluded_cookies) {
+    bool eligible,
+    base::Optional<IsolatedPrerenderTabHelper::PrefetchStatus> status) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (!cookie_with_status_list.empty()) {
-    OnPrefetchStatusUpdate(url,
-                           PrefetchStatus::kPrefetchNotEligibleUserHasCookies);
+  if (!eligible) {
+    if (status) {
+      OnPrefetchStatusUpdate(url, status.value());
+    }
     return;
   }
 
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.h b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.h
index 1f7584f..80c0299 100644
--- a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.h
+++ b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.h
@@ -198,6 +198,17 @@
     base::Optional<base::TimeDelta> probe_latency_;
   };
 
+  // Used to determine if |url| is eligible for isolated prefetching. Also gives
+  // a reason in |status| if one is applicable.
+  using OnEligibilityResultCallback = base::OnceCallback<void(
+      const GURL& url,
+      bool eligible,
+      base::Optional<IsolatedPrerenderTabHelper::PrefetchStatus> status)>;
+  static void CheckEligibilityOfURL(
+      Profile* profile,
+      const GURL& url,
+      OnEligibilityResultCallback result_callback);
+
   const PrefetchMetrics& srp_metrics() const { return *(page_->srp_metrics_); }
 
   // Returns nullopt unless the previous page load was a Google SRP where |this|
@@ -341,16 +352,10 @@
       const base::Optional<NavigationPredictorKeyedService::Prediction>
           prediction) override;
 
-  // Runs |url| through all the eligibility checks and appends it to
-  // |urls_to_prefetch_| if eligible and returns true. If not eligible, returns
-  // false.
-  bool CheckAndMaybePrefetchURL(const GURL& url);
-
-  // Callback for each eligible prediction URL when their cookie list is known.
-  // Only urls with no cookies will be prefetched.
-  void OnGotCookieList(const GURL& url,
-                       const net::CookieStatusList& cookie_with_status_list,
-                       const net::CookieStatusList& excluded_cookies);
+  // Used as a callback for when the eligibility of |url| is determined.
+  void OnGotEligibilityResult(const GURL& url,
+                              bool eligible,
+                              base::Optional<PrefetchStatus> status);
 
   // Creates the isolated network context and url loader factory for this page.
   void CreateIsolatedURLLoaderFactory();
diff --git a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
index 416cf93..6b91379c 100644
--- a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
+++ b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
@@ -31,6 +31,7 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/embedder_support/switches.h"
 #include "content/public/browser/appcache_service.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -42,6 +43,7 @@
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/no_renderer_crashes_assertion.h"
+#include "content/public/test/url_loader_interceptor.h"
 #include "content/public/test/url_loader_monitor.h"
 #include "net/base/escape.h"
 #include "net/base/features.h"
@@ -69,6 +71,11 @@
   return kServerRedirectBase + net::EscapeQueryParamValue(dest_url, false);
 }
 
+// This is the public key of tools/origin_trials/eftest.key, used to validate
+// origin trial tokens generated by tools/origin_trials/generate_token.py.
+static constexpr char kOriginTrialPublicKeyForTesting[] =
+    "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA=";
+
 }  // namespace
 
 namespace prerender {
@@ -109,6 +116,13 @@
  public:
   NoStatePrefetchBrowserTest() {}
 
+  void SetUpDefaultCommandLine(base::CommandLine* command_line) override {
+    test_utils::PrerenderInProcessBrowserTest::SetUpDefaultCommandLine(
+        command_line);
+    command_line->AppendSwitchASCII(embedder_support::kOriginTrialPublicKey,
+                                    kOriginTrialPublicKeyForTesting);
+  }
+
   void SetUpOnMainThread() override {
     test_utils::PrerenderInProcessBrowserTest::SetUpOnMainThread();
     PrerenderManager::SetMode(
@@ -1256,13 +1270,20 @@
   clock_.SetNowTicks(current_time);
   clock_.Advance(base::TimeDelta::FromSeconds(600));
 
-  // Fill manifest with the image url. The main resource will be cached
-  // implicitly.
-  GURL image_url = src_server()->GetURL(kPrefetchPng);
-  GURL manifest_url = GetURLWithReplacement(
-      kPrefetchAppcacheManifest, "REPLACE_WITH_URL", image_url.spec());
-  GURL appcache_page_url = GetURLWithReplacement(
-      kPrefetchAppcache, "REPLACE_WITH_MANIFEST", manifest_url.spec());
+  std::string origin = "http://127.0.0.1:8080";
+  GURL image_url(origin + kPrefetchPng);
+  GURL manifest_url(origin + kPrefetchAppcacheManifest);
+  GURL appcache_page_url(origin + kPrefetchAppcache);
+  GURL script_url(origin + kPrefetchScript);
+
+  base::RunLoop run_loop;
+  std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor =
+      content::URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+          "chrome/test/data", GURL(origin),
+          base::BindRepeating(base::BindLambdaForTesting([&](const GURL& url) {
+            if (url == script_url)
+              run_loop.Quit();
+          })));
 
   // Load the page into the appcache.
   ui_test_utils::NavigateToURL(current_browser(), appcache_page_url);
@@ -1280,7 +1301,7 @@
   // The prefetch should have been canceled before the script in
   // kPrefetchAppcache is loaded (note the script is not mentioned in the
   // manifest).
-  WaitForRequestCount(src_server()->GetURL(kPrefetchScript), 1);
+  run_loop.Run();
 }
 
 // If a page has been cached by another AppCache, the prefetch should be
@@ -1294,14 +1315,28 @@
   clock_.SetNowTicks(current_time);
   clock_.Advance(base::TimeDelta::FromSeconds(600));
 
-  // Fill manifest with kPrefetchPage so that it is cached without explicitly
-  // listing a manifest.
-  GURL prefetch_page_url = src_server()->GetURL(kPrefetchPage);
-  GURL manifest_url = GetURLWithReplacement(
-      kPrefetchAppcacheManifest, "REPLACE_WITH_URL", prefetch_page_url.spec());
+  std::string origin = "http://127.0.0.1:8080";
+  // This manifest lists kPrefetchPage, but does not explicitly
+  // list a manifest itself.
+  GURL manifest_url(origin + kPrefetchAppcacheManifest);
+  GURL appcache_page_url(origin + kPrefetchAppcache);
+  GURL prefetch_page_url(origin + kPrefetchPage);
+  GURL script_url(origin + kPrefetchScript);
 
-  GURL appcache_page_url = GetURLWithReplacement(
-      kPrefetchAppcache, "REPLACE_WITH_MANIFEST", manifest_url.spec());
+  bool seen_page_url = false;
+  bool seen_script_url = false;
+  base::RunLoop run_loop;
+  std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor =
+      content::URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+          "chrome/test/data", GURL(origin),
+          base::BindRepeating(base::BindLambdaForTesting([&](const GURL& url) {
+            if (url == script_url)
+              seen_script_url = true;
+            if (url == prefetch_page_url)
+              seen_page_url = true;
+            if (seen_script_url && seen_page_url)
+              run_loop.Quit();
+          })));
 
   // Load the page into the appcache, and then the prefetch page so it can be
   // cached. After each navigation, wait for the appcache to catch up. This
@@ -1317,8 +1352,9 @@
   clock_.Advance(base::TimeDelta::FromSeconds(6000));
 
   PrefetchFromURL(prefetch_page_url, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
-  // Neither the page nor the script should be prefetched.
-  WaitForRequestCount(src_server()->GetURL(kPrefetchPage), 1);
-  WaitForRequestCount(src_server()->GetURL(kPrefetchScript), 1);
+
+  // Neither the page nor the script should be prefetched, so
+  // wait until we see both.
+  run_loop.Run();
 }
 }  // namespace prerender
diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc
index 013d1f7..a47c8c8d 100644
--- a/chrome/browser/prerender/prerender_unittest.cc
+++ b/chrome/browser/prerender/prerender_unittest.cc
@@ -1537,7 +1537,8 @@
 }
 
 // Flaky on Android, crbug.com/1087876.
-#if defined(OS_ANDROID)
+// Flaky on Mac and Linux, crbug.com/1087735.
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_LINUX)
 #define MAYBE_LinkManagerAddTwiceCancelTwice \
   DISABLED_LinkManagerAddTwiceCancelTwice
 #else
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 4979da9d..a47df10e 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -98,7 +98,6 @@
 #include "chrome/browser/sharing/sharing_service_factory.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/signin_ui_util.h"
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
 #include "chrome/browser/ssl/stateful_ssl_host_state_delegate_factory.h"
 #include "chrome/browser/startup_data.h"
 #include "chrome/browser/storage/storage_notification_service_factory.h"
@@ -141,6 +140,7 @@
 #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
 #include "components/signin/public/base/signin_pref_names.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
+#include "components/site_isolation/site_isolation_policy.h"
 #include "components/sync_preferences/pref_service_syncable.h"
 #include "components/url_formatter/url_fixer.h"
 #include "components/user_prefs/user_prefs.h"
@@ -724,7 +724,7 @@
   signin_ui_util::InitializePrefsForProfile(this);
 #endif
 
-  SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(this);
+  site_isolation::SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(this);
 
   InitializeDataReductionProxy();
 
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
index 9158c6f..0299594 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -1217,8 +1217,6 @@
 
     if (browser && send_tab_to_self::ShouldOfferFeatureForLink(
                        active_web_contents, params_.link_url)) {
-      send_tab_to_self::RecordSendTabToSelfClickResult(
-          send_tab_to_self::kLinkMenu, SendTabToSelfClickResult::kShowItem);
       if (send_tab_to_self::GetValidDeviceCount(GetBrowser()->profile()) == 1) {
 #if defined(OS_MACOSX)
         menu_model_.AddItem(IDC_CONTENT_LINK_SEND_TAB_TO_SELF_SINGLE_TARGET,
@@ -1235,11 +1233,6 @@
                     GetBrowser()->profile())),
             ui::ImageModel::FromVectorIcon(kSendTabToSelfIcon));
 #endif
-        send_tab_to_self::RecordSendTabToSelfClickResult(
-            send_tab_to_self::kLinkMenu,
-            SendTabToSelfClickResult::kShowDeviceList);
-        send_tab_to_self::RecordSendTabToSelfDeviceCount(
-            send_tab_to_self::kLinkMenu, 1);
       } else {
         send_tab_to_self_sub_menu_model_ =
             std::make_unique<send_tab_to_self::SendTabToSelfSubMenuModel>(
@@ -1456,8 +1449,6 @@
   if (GetBrowser() &&
       send_tab_to_self::ShouldOfferFeature(
           GetBrowser()->tab_strip_model()->GetActiveWebContents())) {
-    send_tab_to_self::RecordSendTabToSelfClickResult(
-        send_tab_to_self::kContentMenu, SendTabToSelfClickResult::kShowItem);
     menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
     send_tab_to_self_menu_present = true;
     if (send_tab_to_self::GetValidDeviceCount(GetBrowser()->profile()) == 1) {
@@ -1476,11 +1467,6 @@
                   GetBrowser()->profile())),
           ui::ImageModel::FromVectorIcon(kSendTabToSelfIcon));
 #endif
-      send_tab_to_self::RecordSendTabToSelfClickResult(
-          send_tab_to_self::kContentMenu,
-          SendTabToSelfClickResult::kShowDeviceList);
-      send_tab_to_self::RecordSendTabToSelfDeviceCount(
-          send_tab_to_self::kContentMenu, 1);
     } else {
       send_tab_to_self_sub_menu_model_ =
           std::make_unique<send_tab_to_self::SendTabToSelfSubMenuModel>(
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
index a821bb12..9756a87 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
@@ -252,7 +252,7 @@
 <translation id="2943596527105977722">ઘેરો સોનેરી રૉડ</translation>
 <translation id="2964026537669811554">મથાળા જૂથ</translation>
 <translation id="2968634799764242930">દરિયાઈ લીલો</translation>
-<translation id="296951647852255825">{COUNT,plural, =1{ટેબ}one{# ટેબ્સ}other{# ટેબ્સ}}</translation>
+<translation id="296951647852255825">{COUNT,plural, =1{ટેબ}one{# ટેબ}other{# ટેબ}}</translation>
 <translation id="2972205263822847197">સાધન ટિપ</translation>
 <translation id="297825089465017871">બે આંગળી ડાબી બાજુ સ્વાઇપ કરો</translation>
 <translation id="2998131015536248178">પાછલો અક્ષર</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
index ddaf763..7862beb 100644
--- a/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
@@ -361,6 +361,7 @@
     "$externs_path/automation.js",
     "$externs_path/command_line_private.js",
     "$externs_path/metrics_private.js",
+    "$externs_path/virtual_keyboard_private.js",
   ]
 }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js
index c6ff313..0ab93e2 100644
--- a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js
@@ -10,6 +10,8 @@
 class SwitchAccess {
   static initialize() {
     window.switchAccess = new SwitchAccess();
+    chrome.virtualKeyboardPrivate.setKeyboardState(
+        chrome.virtualKeyboardPrivate.KeyboardState.ENABLED);
 
     chrome.automation.getDesktop((desktop) => {
       // These two must be initialized before the others.
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access_e2e_test_base.js b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access_e2e_test_base.js
index f54bb00..0c2796e 100644
--- a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access_e2e_test_base.js
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access_e2e_test_base.js
@@ -48,8 +48,6 @@
   /** @override */
   testGenPreamble() {
     GEN(`
-  //keyboard::SetRequestedKeyboardState(keyboard::KEYBOARD_STATE_ENABLED);
-  //ash::Shell::Get()->CreateKeyboard();
   base::Closure load_cb =
       base::Bind(&chromeos::AccessibilityManager::SetSwitchAccessEnabled,
           base::Unretained(chromeos::AccessibilityManager::Get()),
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2
index b3642b1..6dfe2037 100644
--- a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2
@@ -48,7 +48,8 @@
     "commandLinePrivate",
     "metricsPrivate",
     "settingsPrivate",
-    "tabs"
+    "tabs",
+    "virtualKeyboardPrivate"
   ],
   "automation": {
     "desktop": true
diff --git a/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/BUILD.gn b/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/BUILD.gn
index e2786b3..4e0ae7af 100644
--- a/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/BUILD.gn
+++ b/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/BUILD.gn
@@ -26,10 +26,10 @@
     "//ui/webui/resources/js:cr",
     "//ui/webui/resources/js:i18n_behavior",
   ]
-  externs_list = [
-    "$externs_path/bluetooth.js",
-    "$externs_path/bluetooth_private.js",
-  ]
+  externs_list = chrome_extension_public_externs + [
+                   "$externs_path/bluetooth.js",
+                   "$externs_path/bluetooth_private.js",
+                 ]
   extra_sources = [
     "$interfaces_path/bluetooth_interface.js",
     "$interfaces_path/bluetooth_private_interface.js",
diff --git a/chrome/browser/resources/chromeos/internet_config_dialog/BUILD.gn b/chrome/browser/resources/chromeos/internet_config_dialog/BUILD.gn
index f899962..af80c45 100644
--- a/chrome/browser/resources/chromeos/internet_config_dialog/BUILD.gn
+++ b/chrome/browser/resources/chromeos/internet_config_dialog/BUILD.gn
@@ -29,9 +29,9 @@
     "//ui/webui/resources/js:assert",
     "//ui/webui/resources/js:i18n_behavior",
   ]
-  externs_list = [
-    "$externs_path/chrome_send.js",
-    "$externs_path/networking_private.js",
-  ]
+  externs_list = chrome_extension_public_externs + [
+                   "$externs_path/chrome_send.js",
+                   "$externs_path/networking_private.js",
+                 ]
   extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
 }
diff --git a/chrome/browser/resources/chromeos/network_ui/BUILD.gn b/chrome/browser/resources/chromeos/network_ui/BUILD.gn
index 8d7e61f..a3f3dec4 100644
--- a/chrome/browser/resources/chromeos/network_ui/BUILD.gn
+++ b/chrome/browser/resources/chromeos/network_ui/BUILD.gn
@@ -19,5 +19,6 @@
     "//ui/webui/resources/js:load_time_data",
     "//ui/webui/resources/js:util",
   ]
-  externs_list = [ "$externs_path/networking_private.js" ]
+  externs_list = chrome_extension_public_externs +
+                 [ "$externs_path/networking_private.js" ]
 }
diff --git a/chrome/browser/resources/components/components.js b/chrome/browser/resources/components/components.js
index f50d4b3..e761310 100644
--- a/chrome/browser/resources/components/components.js
+++ b/chrome/browser/resources/components/components.js
@@ -26,7 +26,7 @@
   // This is the javascript code that processes the template:
   const input = new JsEvalContext(componentsData);
   const output = $('component-template').cloneNode(true);
-  $('component-placeholder').innerHTML = '';
+  $('component-placeholder').innerHTML = trustedTypes.emptyHTML;
   $('component-placeholder').appendChild(output);
   jstProcess(input, output);
   output.removeAttribute('hidden');
diff --git a/chrome/browser/resources/conflicts/about_conflicts.html b/chrome/browser/resources/conflicts/about_conflicts.html
index 83c277a..855f25c6 100644
--- a/chrome/browser/resources/conflicts/about_conflicts.html
+++ b/chrome/browser/resources/conflicts/about_conflicts.html
@@ -208,7 +208,7 @@
             jsselect="moduleList" class="module">
             <td valign="top" class="datacell">
               <span dir="ltr"
-                    jsvalues=".innerHTML:description"
+                    jsvalues=".textContent:description"
                     class="clearing nowrap"></span>
             </td>
             <td valign="top" class="datacell">
diff --git a/chrome/browser/resources/extensions/BUILD.gn b/chrome/browser/resources/extensions/BUILD.gn
index 6ad3d26..53ed19c 100644
--- a/chrome/browser/resources/extensions/BUILD.gn
+++ b/chrome/browser/resources/extensions/BUILD.gn
@@ -378,12 +378,12 @@
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:cr.m",
   ]
-  externs_list = [
-    "$externs_path/activity_log_private.js",
-    "$externs_path/developer_private.js",
-    "$externs_path/management.js",
-    "$externs_path/metrics_private.js",
-  ]
+  externs_list = chrome_extension_public_externs + [
+                   "$externs_path/activity_log_private.js",
+                   "$externs_path/developer_private.js",
+                   "$externs_path/management.js",
+                   "$externs_path/metrics_private.js",
+                 ]
 }
 
 js_library("shortcut_input") {
diff --git a/chrome/browser/resources/pdf/elements/viewer-page-selector.html b/chrome/browser/resources/pdf/elements/viewer-page-selector.html
index 93ba363..180d0e2 100644
--- a/chrome/browser/resources/pdf/elements/viewer-page-selector.html
+++ b/chrome/browser/resources/pdf/elements/viewer-page-selector.html
@@ -30,7 +30,6 @@
       #pageselector::part(input) {
         background: rgba(0, 0, 0, 0.5);
         caret-color: var(--cr-input-color);
-        text-align: end;
       }
     </style>
     <cr-input id="pageselector" value="[[pageNo]]" on-mouseup="select"
diff --git a/chrome/browser/resources/print_preview/ui/destination_dropdown_cros.html b/chrome/browser/resources/print_preview/ui/destination_dropdown_cros.html
index 4b7f700..497d5ddd 100644
--- a/chrome/browser/resources/print_preview/ui/destination_dropdown_cros.html
+++ b/chrome/browser/resources/print_preview/ui/destination_dropdown_cros.html
@@ -71,7 +71,6 @@
     background: none;
     border: none;
     box-sizing: border-box;
-    color: var(--google-grey-600);
     font: inherit;
     min-height: 32px;
     padding: 0 8px;
@@ -80,13 +79,7 @@
   }
 
   .list-item[selected_] {
-    background-color: rgba(0, 0, 0, .04);
-    outline: none;
-  }
-
-  .list-item:active {
-    background-color: rgba(0, 0, 0, .12);
-    outline: none;
+    background-color: var(--google-blue-refresh-100);
   }
 
   .dot {
diff --git a/chrome/browser/resources/settings/autofill_page/BUILD.gn b/chrome/browser/resources/settings/autofill_page/BUILD.gn
index 7f50009..26b9d15 100644
--- a/chrome/browser/resources/settings/autofill_page/BUILD.gn
+++ b/chrome/browser/resources/settings/autofill_page/BUILD.gn
@@ -28,6 +28,7 @@
     ":password_list_item",
     ":password_manager_proxy",
     ":password_remove_confirmation_dialog",
+    ":passwords_device_section",
     ":passwords_export_dialog",
     ":passwords_list_handler",
     ":passwords_section",
@@ -217,7 +218,8 @@
 
 js_library("password_manager_proxy") {
   deps = [ "//ui/webui/resources/js:cr.m" ]
-  externs_list = [ "$externs_path/passwords_private.js" ]
+  externs_list =
+      chrome_extension_public_externs + [ "$externs_path/passwords_private.js" ]
 }
 
 js_library("passwords_export_dialog") {
@@ -254,6 +256,20 @@
   ]
 }
 
+js_library("passwords_device_section") {
+  deps = [
+    ":merge_passwords_store_copies_behavior",
+    ":multi_store_password_ui_entry",
+    ":password_list_item",
+    ":password_manager_proxy",
+    ":passwords_list_handler",
+    "..:route",
+    "//third_party/polymer/v3_0/components-chromium/iron-a11y-keys-behavior:iron-a11y-keys-behavior",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+    "//ui/webui/resources/js:util.m",
+  ]
+}
+
 js_library("payments_list") {
   deps = [
     ":credit_card_list_entry",
@@ -329,6 +345,7 @@
     "password_remove_confirmation_dialog.js",
     "passwords_export_dialog.js",
     "passwords_section.js",
+    "passwords_device_section.js",
     "passwords_shared_css.js",
     "payments_list.js",
     "payments_section.js",
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_page.html b/chrome/browser/resources/settings/autofill_page/autofill_page.html
index ac04ebcfe..89369e9 100644
--- a/chrome/browser/resources/settings/autofill_page/autofill_page.html
+++ b/chrome/browser/resources/settings/autofill_page/autofill_page.html
@@ -44,6 +44,9 @@
             page-title="$i18n{passwordsDevice}"
             search-label="$i18n{searchPasswords}"
             search-term="{{passwordFilter_}}">
+          <passwords-device-section id="passwordDeviceSection"
+              filter="[[passwordFilter_]]">
+          </passwords-device-section>
         </settings-subpage>
       </template>
       <template is="dom-if" route-path="/passwords/check"
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_device_section.html b/chrome/browser/resources/settings/autofill_page/passwords_device_section.html
new file mode 100644
index 0000000..81bf645
--- /dev/null
+++ b/chrome/browser/resources/settings/autofill_page/passwords_device_section.html
@@ -0,0 +1,52 @@
+<style include="cr-shared-style settings-shared iron-flex passwords-shared">
+</style>
+<div class="cr-row first">
+  <h2 id="savedPasswordsHeading" class="flex">
+    $i18n{savedPasswordsHeading}
+  </h2>
+</div>
+<passwords-list-handler id="passwordsListHandler"
+    should-show-storage-details="true">
+  <div slot="body" class="list-frame">
+    <div id="onDeviceOnlyHeader" class="list-item column-header"
+        aria-hidden="true">
+        $i18n{deviceOnlyPasswordsHeading}
+    </div>
+    <iron-list id="deviceOnlyPasswordList" preserve-focus
+        items="[[getFilteredPasswords_(deviceOnlyPasswords_,filter)]]"
+        class="cr-separators list-with-header"
+        scroll-target="[[subpageScrollTarget]]" risk-selection>
+      <template>
+        <password-list-item entry="[[item]]"
+            tabindex$="[[tabIndex]]" focus-row-index="[[index]]"
+            first$="[[!index]]" iron-list-tab-index="[[tabIndex]]"
+            last-focused="{{lastFocused_}}" list-blurred="{{listBlurred_}}">
+        </password-list-item>
+      </template>
+    </iron-list>
+    <div id="noDeviceOnlyPasswordsLabel" class="list-item"
+        hidden$="[[hasDeviceOnlyPasswords_]]">
+        $i18n{devicePasswordsEmptySubsectionText}
+    </div>
+    <div id="onDeviceAndAccountHeader" class="list-item column-header"
+        aria-hidden="true">
+        $i18n{deviceAndAccountPasswordsHeading}
+    </div>
+    <iron-list id="deviceAndAccountPasswordList" preserve-focus
+        items="[[getFilteredPasswords_(deviceAndAccountPasswords_,filter)]]"
+        class="cr-separators list-with-header"
+        scroll-target="[[subpageScrollTarget]]" risk-selection>
+      <template>
+        <password-list-item entry="[[item]]"
+            tabindex$="[[tabIndex]]" focus-row-index="[[index]]"
+            first$="[[!index]]" iron-list-tab-index="[[tabIndex]]"
+            last-focused="{{lastFocused_}}" list-blurred="{{listBlurred_}}">
+        </password-list-item>
+      </template>
+    </iron-list>
+    <div id="noDeviceAndAccountPasswordsLabel" class="list-item"
+        hidden$="[[hasDeviceAndAccountPasswords_]]">
+      $i18n{devicePasswordsEmptySubsectionText}
+    </div>
+  </div>
+</passwords-list-handler>
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_device_section.js b/chrome/browser/resources/settings/autofill_page/passwords_device_section.js
new file mode 100644
index 0000000..93f33a6
--- /dev/null
+++ b/chrome/browser/resources/settings/autofill_page/passwords_device_section.js
@@ -0,0 +1,203 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview 'passwords-device-section' represents the page containing
+ * the list of passwords and exceptions (websites where passwords are never
+ * saved) which have at least one copy on the user device.
+ *
+ * This page is *not* displayed on ChromeOS.
+ */
+
+import './passwords_list_handler.js';
+import 'chrome://resources/cr_elements/shared_style_css.m.js';
+import '../settings_shared_css.m.js';
+import './passwords_shared_css.js';
+import './password_list_item.js';
+import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
+import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
+
+import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {IronA11yKeysBehavior} from 'chrome://resources/polymer/v3_0/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';
+import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {GlobalScrollTargetBehavior} from '../global_scroll_target_behavior.m.js';
+import {routes} from '../route.js';
+
+import {MergePasswordsStoreCopiesBehavior} from './merge_passwords_store_copies_behavior.js';
+import {MultiStorePasswordUiEntry} from './multi_store_password_ui_entry.js';
+import {PasswordManagerImpl} from './password_manager_proxy.js';
+
+/**
+ * Checks if an HTML element is an editable. An editable element is either a
+ * text input or a text area.
+ * @param {!Element} element
+ * @return {boolean}
+ */
+function isEditable(element) {
+  const nodeName = element.nodeName.toLowerCase();
+  return element.nodeType === Node.ELEMENT_NODE &&
+      (nodeName === 'textarea' ||
+       (nodeName === 'input' &&
+        /^(?:text|search|email|number|tel|url|password)$/i.test(element.type)));
+}
+
+Polymer({
+  is: 'passwords-device-section',
+
+  _template: html`{__html_template__}`,
+
+  behaviors: [
+    MergePasswordsStoreCopiesBehavior,
+    I18nBehavior,
+    IronA11yKeysBehavior,
+    GlobalScrollTargetBehavior,
+  ],
+
+  properties: {
+    /** @override */
+    subpageRoute: {
+      type: Object,
+      value: routes.DEVICE_PASSWORDS,
+    },
+
+    /** Filter on the saved passwords and exceptions. */
+    filter: {
+      type: String,
+      value: '',
+    },
+
+    /**
+     * The target of the key bindings defined below.
+     * @type {EventTarget}
+     */
+    keyEventTarget: {
+      type: Object,
+      value: () => document,
+    },
+
+    /**
+     * Passwords displayed in the device-only subsection.
+     * @type {!Array<!MultiStorePasswordUiEntry>}
+     * @private
+     */
+    deviceOnlyPasswords_: {
+      type: Array,
+      value: () => [],
+      computed:
+          'computeDeviceOnlyPasswords_(savedPasswords, savedPasswords.splices)',
+    },
+
+    /**
+     * Determines whether to show fallback text in the device-only subsection.
+     * @private
+     */
+    hasDeviceOnlyPasswords_: {
+      type: Boolean,
+      value: false,
+      computed: 'isNonEmpty_(deviceOnlyPasswords_)'
+    },
+
+    /**
+     * Passwords displayed in the 'device and account' subsection.
+     * @type {!Array<!MultiStorePasswordUiEntry>}
+     * @private
+     */
+    deviceAndAccountPasswords_: {
+      type: Array,
+      value: () => [],
+      computed: 'computeDeviceAndAccountPasswords_(savedPasswords, ' +
+          'savedPasswords.splices)',
+    },
+
+    /**
+     * Determines whether to show fallback text in the 'device and account'
+     * subsection.
+     * @private
+     */
+    hasDeviceAndAccountPasswords_: {
+      type: Boolean,
+      value: false,
+      computed: 'isNonEmpty_(deviceAndAccountPasswords_)'
+    },
+
+    /** @private {!MultiStorePasswordUiEntry} */
+    lastFocused_: Object,
+
+    /** @private */
+    listBlurred_: Boolean,
+
+  },
+
+  /**
+   * @param {!Array<!MultiStorePasswordUiEntry>} passwords
+   * @return {boolean}
+   * @private
+   */
+  isNonEmpty_(passwords) {
+    return passwords.length > 0;
+  },
+
+  keyBindings: {
+    // <if expr="is_macosx">
+    'meta+z': 'onUndoKeyBinding_',
+    // </if>
+    // <if expr="not is_macosx">
+    'ctrl+z': 'onUndoKeyBinding_',
+    // </if>
+  },
+
+  /**
+   * @return {!Array<!MultiStorePasswordUiEntry>}
+   * @private
+   */
+  computeDeviceOnlyPasswords_() {
+    return this.savedPasswords.filter(
+        p => p.isPresentOnDevice() && !p.isPresentInAccount());
+  },
+
+  /**
+   * @return {!Array<!MultiStorePasswordUiEntry>}
+   * @private
+   */
+  computeDeviceAndAccountPasswords_() {
+    return this.savedPasswords.filter(
+        p => p.isPresentOnDevice() && p.isPresentInAccount());
+  },
+
+  /**
+   * @param {!Array<!MultiStorePasswordUiEntry>} passwords
+   * @param {string} filter
+   * @return {!Array<!MultiStorePasswordUiEntry>}
+   * @private
+   */
+  getFilteredPasswords_(passwords, filter) {
+    if (!filter) {
+      return passwords.slice();
+    }
+
+    return passwords.filter(
+        p => [p.urls.shown, p.username].some(
+            term => term.toLowerCase().includes(filter.toLowerCase())));
+  },
+
+  /**
+   * Handle the undo shortcut.
+   * @param {!Event} event
+   * @private
+   */
+  // TODO(crbug.com/1049141): Consider grouping the ctrl-z related code into
+  // a dedicated behavior.
+  onUndoKeyBinding_(event) {
+    const activeElement = getDeepActiveElement();
+    if (!activeElement || !isEditable(activeElement)) {
+      PasswordManagerImpl.getInstance().undoRemoveSavedPasswordOrException();
+      this.$.passwordsListHandler.onSavedPasswordOrExceptionRemoved();
+      // Preventing the default is necessary to not conflict with a possible
+      // search action.
+      event.preventDefault();
+    }
+  },
+});
diff --git a/chrome/browser/resources/settings/chromeos/bluetooth_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/bluetooth_page/BUILD.gn
index f91b671..325f8af 100644
--- a/chrome/browser/resources/settings/chromeos/bluetooth_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/bluetooth_page/BUILD.gn
@@ -44,10 +44,10 @@
     "//ui/webui/resources/js:i18n_behavior",
     "//ui/webui/resources/js:list_property_update_behavior",
   ]
-  externs_list = [
-    "$externs_path/bluetooth.js",
-    "$externs_path/bluetooth_private.js",
-  ]
+  externs_list = chrome_extension_public_externs + [
+                   "$externs_path/bluetooth.js",
+                   "$externs_path/bluetooth_private.js",
+                 ]
   extra_sources = [
     "$interfaces_path/bluetooth_interface.js",
     "$interfaces_path/bluetooth_private_interface.js",
diff --git a/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn
index a9273bb04..56c8f9e 100644
--- a/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn
@@ -82,10 +82,10 @@
     "//ui/webui/resources/js:i18n_behavior",
     "//ui/webui/resources/js/cr/ui:focus_without_ink",
   ]
-  externs_list = [
-    "$externs_path/settings_private.js",
-    "$externs_path/system_display.js",
-  ]
+  externs_list = chrome_extension_public_externs + [
+                   "$externs_path/settings_private.js",
+                   "$externs_path/system_display.js",
+                 ]
   extra_sources = [ "$interfaces_path/system_display_interface.js" ]
 }
 
diff --git a/chrome/browser/resources/settings/controls/BUILD.gn b/chrome/browser/resources/settings/controls/BUILD.gn
index 69216da..506ca163 100644
--- a/chrome/browser/resources/settings/controls/BUILD.gn
+++ b/chrome/browser/resources/settings/controls/BUILD.gn
@@ -57,7 +57,8 @@
     "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog",
     "//ui/webui/resources/cr_elements/cr_input:cr_input",
   ]
-  externs_list = [ "$externs_path/quick_unlock_private.js" ]
+  externs_list = chrome_extension_public_externs +
+                 [ "$externs_path/quick_unlock_private.js" ]
   extra_sources = [ "$interfaces_path/quick_unlock_private_interface.js" ]
 }
 
@@ -183,7 +184,8 @@
     "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog.m",
     "//ui/webui/resources/cr_elements/cr_input:cr_input.m",
   ]
-  externs_list = [ "$externs_path/quick_unlock_private.js" ]
+  externs_list = chrome_extension_public_externs +
+                 [ "$externs_path/quick_unlock_private.js" ]
   extra_deps = [ ":password_prompt_dialog_module" ]
 }
 
diff --git a/chrome/browser/resources/settings/lazy_load.js b/chrome/browser/resources/settings/lazy_load.js
index ff6aaad..36796d9 100644
--- a/chrome/browser/resources/settings/lazy_load.js
+++ b/chrome/browser/resources/settings/lazy_load.js
@@ -6,6 +6,7 @@
 import './appearance_page/appearance_fonts_page.js';
 import './autofill_page/password_check.js';
 import './autofill_page/passwords_section.js';
+import './autofill_page/passwords_device_section.js';
 import './autofill_page/payments_section.js';
 import './clear_browsing_data_dialog/clear_browsing_data_dialog.js';
 import './search_engines_page/search_engines_page.js';
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html
index 503a407..024329e 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -161,7 +161,8 @@
       <template is="dom-if" route-path="/content/all" no-search>
         <settings-subpage page-title="$i18n{siteSettingsAllSites}"
             search-label="$i18n{siteSettingsAllSitesSearch}"
-            search-term="{{searchFilter_}}">
+            search-term="{{searchFilter_}}"
+            preserve-search-term>
           <all-sites filter="[[searchFilter_]]"></all-sites>
         </settings-subpage>
       </template>
@@ -263,7 +264,8 @@
       <template is="dom-if" route-path="/siteData" no-search>
         <settings-subpage page-title="$i18n{siteSettingsCookieHeader}"
             search-label="$i18n{siteSettingsCookieSearch}"
-            search-term="{{siteDataFilter_}}">
+            search-term="{{siteDataFilter_}}"
+            preserve-search-term>
           <site-data filter="[[siteDataFilter_]]"
               focus-config="[[focusConfig_]]">
           </site-data>
diff --git a/chrome/browser/resources/settings/settings_page/BUILD.gn b/chrome/browser/resources/settings/settings_page/BUILD.gn
index eddb377..c7432bf 100644
--- a/chrome/browser/resources/settings/settings_page/BUILD.gn
+++ b/chrome/browser/resources/settings/settings_page/BUILD.gn
@@ -48,6 +48,7 @@
     "//ui/webui/resources/js:find_shortcut_behavior",
     "//ui/webui/resources/js:i18n_behavior",
     "//ui/webui/resources/js:load_time_data",
+    "//ui/webui/resources/js:util",
     "//ui/webui/resources/js/cr/ui:focus_without_ink",
   ]
 }
@@ -105,6 +106,7 @@
     "//ui/webui/resources/js:find_shortcut_behavior.m",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
+    "//ui/webui/resources/js:util.m",
     "//ui/webui/resources/js/cr/ui:focus_without_ink.m",
   ]
   extra_deps = [ ":settings_subpage_module" ]
@@ -152,6 +154,7 @@
                    "third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/iron-resizable-behavior.html|IronResizableBehavior",
                    "ui/webui/resources/html/assert.html|assert",
                    "ui/webui/resources/html/polymer.html|html, Polymer, afterNextRender",
+                   "ui/webui/resources/html/util.html|listenOnce",
                  ]
   namespace_rewrites = settings_namespace_rewrites +
                        [ "Polymer.IronResizableBehavior|IronResizableBehavior" ]
diff --git a/chrome/browser/resources/settings/settings_page/settings_subpage.html b/chrome/browser/resources/settings/settings_page/settings_subpage.html
index fab8f40..593e5d2c 100644
--- a/chrome/browser/resources/settings/settings_page/settings_subpage.html
+++ b/chrome/browser/resources/settings/settings_page/settings_subpage.html
@@ -5,8 +5,10 @@
 <link rel="import" href="chrome://resources/cr_elements/cr_search_field/cr_search_field.html">
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="chrome://resources/cr_elements/shared_style_css.html">
+<link rel="import" href="chrome://resources/html/assert.html">
 <link rel="import" href="chrome://resources/html/find_shortcut_behavior.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
+<link rel="import" href="chrome://resources/html/util.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-resizable-behavior/iron-resizable-behavior.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-ripple/paper-ripple.html">
diff --git a/chrome/browser/resources/settings/settings_page/settings_subpage.js b/chrome/browser/resources/settings/settings_page/settings_subpage.js
index 4a0b40b..8dd3c39 100644
--- a/chrome/browser/resources/settings/settings_page/settings_subpage.js
+++ b/chrome/browser/resources/settings/settings_page/settings_subpage.js
@@ -68,6 +68,14 @@
       value: null,
     },
 
+    /**
+     * Whether the subpage search term should be preserved across navigations.
+     */
+    preserveSearchTerm: {
+      type: Boolean,
+      value: false,
+    },
+
     /** @private */
     active_: {
       type: Boolean,
@@ -98,6 +106,53 @@
     }
   },
 
+  /**
+   * @return {!Promise<!CrSearchFieldElement>}
+   * @private
+   */
+  getSearchField_() {
+    let searchField = this.$$('cr-search-field');
+    if (searchField) {
+      return Promise.resolve(searchField);
+    }
+
+    return new Promise(resolve => {
+      listenOnce(this, 'dom-change', () => {
+        searchField = this.$$('cr-search-field');
+        resolve(assert(searchField));
+      });
+    });
+  },
+
+  /**
+   * Restore search field value from URL search param
+   * @private
+   */
+  restoreSearchInput_() {
+    const searchField = this.$$('cr-search-field');
+    if (assert(searchField)) {
+      const urlSearchQuery =
+          settings.Router.getInstance().getQueryParameters().get(
+              'searchSubpage') ||
+          '';
+      this.searchTerm = urlSearchQuery;
+      searchField.setValue(urlSearchQuery);
+    }
+  },
+
+  /**
+   * Preserve search field value to URL search param
+   * @private
+   */
+  preserveSearchInput_() {
+    const query = this.searchTerm;
+    const searchParams = query.length > 0 ?
+        new URLSearchParams('searchSubpage=' + encodeURIComponent(query)) :
+        undefined;
+    const currentRoute = settings.Router.getInstance().getCurrentRoute();
+    settings.Router.getInstance().navigateTo(currentRoute, searchParams);
+  },
+
   /** Focuses the back button when page is loaded. */
   initialFocus() {
     if (this.hideCloseButton) {
@@ -110,6 +165,9 @@
   /** @protected */
   currentRouteChanged(route) {
     this.active_ = this.getAttribute('route-path') == route.path;
+    if (this.active_ && this.searchLabel && this.preserveSearchTerm) {
+      this.getSearchField_().then(() => this.restoreSearchInput_());
+    }
   },
 
   /** @private */
@@ -156,7 +214,14 @@
 
   /** @private */
   onSearchChanged_(e) {
+    if (this.searchTerm === e.detail) {
+      return;
+    }
+
     this.searchTerm = e.detail;
+    if (this.preserveSearchTerm && this.active_) {
+      this.preserveSearchInput_();
+    }
   },
 
   /** @private */
diff --git a/chrome/browser/resources/settings/settings_resources_v3.grdp b/chrome/browser/resources/settings/settings_resources_v3.grdp
index a64b281..3ad6fbff 100644
--- a/chrome/browser/resources/settings/settings_resources_v3.grdp
+++ b/chrome/browser/resources/settings/settings_resources_v3.grdp
@@ -141,6 +141,11 @@
            use_base_dir="false"
            compress="false" type="BINDATA"
            preprocess="true" />
+  <include name="IDR_SETTINGS_AUTOFILL_PAGE_PASSWORDS_DEVICE_SECTION_JS"
+           file="${root_gen_dir}/chrome/browser/resources/settings/autofill_page/passwords_device_section.js"
+           use_base_dir="false"
+           compress="false" type="BINDATA"
+           preprocess="true" />
   <include name="IDR_SETTINGS_AUTOFILL_PAGE_PASSWORD_EDIT_DIALOG_JS"
            file="${root_gen_dir}/chrome/browser/resources/settings/autofill_page/password_edit_dialog.js"
            use_base_dir="false"
diff --git a/chrome/browser/resources/tab_strip/drag_manager.js b/chrome/browser/resources/tab_strip/drag_manager.js
index 97294cd8..e39900f1 100644
--- a/chrome/browser/resources/tab_strip/drag_manager.js
+++ b/chrome/browser/resources/tab_strip/drag_manager.js
@@ -388,8 +388,9 @@
     const dragOverTabElement =
         /** @type {?TabElement} */ (composedPath.find(isTabElement));
     if (dragOverTabElement &&
-        dragOverTabElement.tab.pinned !== tabElement.tab.pinned) {
-      // Can only drag between the same pinned states.
+        (dragOverTabElement.tab.pinned !== tabElement.tab.pinned ||
+         !dragOverTabElement.isValidDragOverTarget)) {
+      // Can only drag between the same pinned states and valid TabElements.
       return;
     }
 
diff --git a/chrome/browser/resources/tab_strip/tab.js b/chrome/browser/resources/tab_strip/tab.js
index 32a2baba..61da08df 100644
--- a/chrome/browser/resources/tab_strip/tab.js
+++ b/chrome/browser/resources/tab_strip/tab.js
@@ -92,6 +92,14 @@
     /** @private {!HTMLElement} */
     this.titleTextEl_ = /** @type {!HTMLElement} */ (this.$('#titleText'));
 
+    /**
+     * Flag indicating if this TabElement can accept dragover events. This
+     * is used to pause dragover events while animating as animating causes
+     * the elements below the pointer to shift.
+     * @private {boolean}
+     */
+    this.isValidDragOverTarget_ = true;
+
     this.tabEl_.addEventListener('click', () => this.onClick_());
     this.tabEl_.addEventListener('contextmenu', e => this.onContextMenu_(e));
     this.tabEl_.addEventListener(
@@ -169,6 +177,16 @@
     this.tab_ = Object.freeze(tab);
   }
 
+  /** @return {boolean} */
+  get isValidDragOverTarget() {
+    return !this.hasAttribute('dragging_') && this.isValidDragOverTarget_;
+  }
+
+  /** @param {boolean} isValid */
+  set isValidDragOverTarget(isValid) {
+    this.isValidDragOverTarget_ = isValid;
+  }
+
   /** @param {!Function} callback */
   set onTabActivating(callback) {
     this.onTabActivating_ = callback;
diff --git a/chrome/browser/resources/tab_strip/tab_list.js b/chrome/browser/resources/tab_strip/tab_list.js
index 3417d6b..a1524c0b 100644
--- a/chrome/browser/resources/tab_strip/tab_list.js
+++ b/chrome/browser/resources/tab_strip/tab_list.js
@@ -47,6 +47,56 @@
   TAB_WIDTH: '--tabstrip-tab-thumbnail-width',
 };
 
+/**
+ * Animates a series of elements to indicate that tabs have moved position.
+ * @param {!Element} movedElement
+ * @param {?Element} elementsToAnimateStart
+ * @param {?Element} elementsToAnimateEnd
+ * @param {number} direction, +1 if moving right, -1 if moving left
+ */
+function animateTabElementMoved(
+    movedElement, elementsToAnimateStart, elementsToAnimateEnd, direction) {
+  let elementToAnimate = elementsToAnimateStart;
+  let numOfTabs = 0;
+
+  // Loop through every element from elementsToAnimateStart to
+  // elementsToAnimateEnd and animate each of them.
+  while (elementToAnimate && elementsToAnimateEnd &&
+         elementToAnimate !== elementsToAnimateEnd.nextElementSibling) {
+    slideElement(elementToAnimate, direction);
+    elementToAnimate = elementToAnimate.nextElementSibling;
+    numOfTabs++;
+  }
+
+  // Animate the moved TabElement itself the total number of tabs that it
+  // has been moved across.
+  slideElement(movedElement, -1 * direction * numOfTabs);
+}
+
+/**
+ * Animates the horizontal slide of an element across the tab strip.
+ * @param {!Element} element
+ * @param {number} scale
+ */
+function slideElement(element, scale) {
+  element.isValidDragOverTarget = false;
+  const animation = element.animate(
+      [
+        {
+          transform: 'translateX(calc(' + scale + ' ' +
+              '* (var(--tabstrip-tab-width) + var(--tabstrip-tab-spacing))))',
+        },
+        {transform: 'translateX(0)'},
+      ],
+      {
+        duration: 120,
+        easing: 'ease-out',
+      });
+  animation.onfinish = () => {
+    element.isValidDragOverTarget = true;
+  };
+}
+
 /** @implements {DragManagerDelegate} */
 class TabListElement extends CustomElement {
   static get template() {
@@ -638,49 +688,33 @@
   placeTabElement(element, index, pinned, groupId) {
     const isInserting = !element.isConnected;
 
-    // Remove the element if it already exists in the DOM.
-    element.remove();
+    // TODO(johntlee): Animate pinned tabs and grouped tabs.
+    const shouldAnimate = !pinned && !groupId && !isInserting;
 
-    if (pinned) {
-      this.pinnedTabsElement_.insertBefore(
-          element, this.pinnedTabsElement_.childNodes[index]);
-    } else {
-      let elementToInsert = element;
-      let elementAtIndex = this.$all('tabstrip-tab').item(index);
-      let parentElement = this.unpinnedTabsElement_;
+    // Cache the previous and next element siblings as these will be needed
+    // after the placement to determine which tabs to animate.
+    let initialDomPrevSibling = null, initialDomNextSibling = null;
+    if (!isInserting) {
+      initialDomPrevSibling = element.previousElementSibling;
+      initialDomNextSibling = element.nextElementSibling;
+    }
 
-      if (groupId) {
-        let tabGroupElement = this.findTabGroupElement_(groupId);
-        if (tabGroupElement) {
-          // If a TabGroupElement already exists, add the TabElement to it.
-          parentElement = tabGroupElement;
-        } else {
-          // If a TabGroupElement does not exist, create one and add the
-          // TabGroupElement into the DOM.
-          tabGroupElement = document.createElement('tabstrip-tab-group');
-          tabGroupElement.setAttribute('data-group-id', groupId);
-          tabGroupElement.appendChild(element);
-          elementToInsert = tabGroupElement;
-        }
-      }
+    this.updateTabElementDomPosition_(element, index, pinned, groupId);
 
-      if (elementAtIndex && elementAtIndex.parentElement &&
-          isTabGroupElement(elementAtIndex.parentElement) &&
-          (elementAtIndex.previousElementSibling === null &&
-           elementAtIndex.tab.groupId !== groupId)) {
-        // If the element at the model index is in a group, and the group is
-        // different from the new tab's group, and is the first element in its
-        // group, insert the new element before its TabGroupElement. If a
-        // TabElement is being sandwiched between two TabElements in a group, it
-        // can be assumed that the tab will eventually be inserted into the
-        // group as well.
-        elementAtIndex = elementAtIndex.parentElement;
-      }
-
-      if (elementAtIndex && elementAtIndex.parentElement === parentElement) {
-        parentElement.insertBefore(elementToInsert, elementAtIndex);
-      } else {
-        parentElement.appendChild(elementToInsert);
+    if (shouldAnimate) {
+      if (initialDomNextSibling &&
+          element.compareDocumentPosition(initialDomNextSibling) &
+              Node.DOCUMENT_POSITION_PRECEDING) {
+        // Element has moved right.
+        animateTabElementMoved(
+            element, initialDomNextSibling, element.previousElementSibling, 1);
+      } else if (
+          initialDomPrevSibling &&
+          element.compareDocumentPosition(initialDomPrevSibling) &
+              Node.DOCUMENT_POSITION_FOLLOWING) {
+        // Element has moved left.
+        animateTabElementMoved(
+            element, element.nextElementSibling, initialDomPrevSibling, -1);
       }
     }
 
@@ -775,6 +809,63 @@
   }
 
   /**
+   * @param {!TabElement} element
+   * @param {number} index
+   * @param {boolean} pinned
+   * @param {string=} groupId
+   * @private
+   */
+  updateTabElementDomPosition_(element, index, pinned, groupId) {
+    // Remove the element if it already exists in the DOM. This simplifies
+    // the way indices work as it does not have to count its old index in
+    // the initial layout of the DOM.
+    element.remove();
+
+    if (pinned) {
+      this.pinnedTabsElement_.insertBefore(
+          element, this.pinnedTabsElement_.childNodes[index]);
+    } else {
+      let elementToInsert = element;
+      let elementAtIndex = this.$all('tabstrip-tab').item(index);
+      let parentElement = this.unpinnedTabsElement_;
+
+      if (groupId) {
+        let tabGroupElement = this.findTabGroupElement_(groupId);
+        if (tabGroupElement) {
+          // If a TabGroupElement already exists, add the TabElement to it.
+          parentElement = tabGroupElement;
+        } else {
+          // If a TabGroupElement does not exist, create one and add the
+          // TabGroupElement into the DOM.
+          tabGroupElement = document.createElement('tabstrip-tab-group');
+          tabGroupElement.setAttribute('data-group-id', groupId);
+          tabGroupElement.appendChild(element);
+          elementToInsert = tabGroupElement;
+        }
+      }
+
+      if (elementAtIndex && elementAtIndex.parentElement &&
+          isTabGroupElement(elementAtIndex.parentElement) &&
+          (elementAtIndex.previousElementSibling === null &&
+           elementAtIndex.tab.groupId !== groupId)) {
+        // If the element at the model index is in a group, and the group is
+        // different from the new tab's group, and is the first element in its
+        // group, insert the new element before its TabGroupElement. If a
+        // TabElement is being sandwiched between two TabElements in a group, it
+        // can be assumed that the tab will eventually be inserted into the
+        // group as well.
+        elementAtIndex = elementAtIndex.parentElement;
+      }
+
+      if (elementAtIndex && elementAtIndex.parentElement === parentElement) {
+        parentElement.insertBefore(elementToInsert, elementAtIndex);
+      } else {
+        parentElement.appendChild(elementToInsert);
+      }
+    }
+  }
+
+  /**
    * @param {!TabElement} tabElement
    * @private
    */
diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chrome/browser/safe_browsing/client_side_detection_service.cc
index 8e5c62d3..072c981 100644
--- a/chrome/browser/safe_browsing/client_side_detection_service.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_service.cc
@@ -74,8 +74,8 @@
                                          : nullptr) {
   profile_ = profile;
 
-  // profile_ can be null in unit tests
-  if (!profile_)
+  // |profile_| and |url_loader_factory_| can be null in unit tests
+  if (!profile_ || !url_loader_factory_)
     return;
 
   pref_change_registrar_.Init(profile_->GetPrefs());
@@ -83,6 +83,9 @@
       prefs::kSafeBrowsingEnabled,
       base::Bind(&ClientSideDetectionService::OnPrefsUpdated,
                  base::Unretained(this)));
+
+  // Do an initial check of the prefs.
+  OnPrefsUpdated();
 }
 
 ClientSideDetectionService::ClientSideDetectionService(
diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
index d82ccfd..a9435c1 100644
--- a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
+++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
@@ -53,12 +53,16 @@
 void MaybeOverrideDlpScanResult(DownloadCheckResultReason reason,
                                 CheckDownloadRepeatingCallback callback,
                                 DownloadCheckResult deep_scan_result) {
-  if (reason == REASON_DOWNLOAD_DANGEROUS) {
+  if (reason == REASON_DOWNLOAD_DANGEROUS ||
+      reason == REASON_DOWNLOAD_DANGEROUS_HOST) {
     switch (deep_scan_result) {
       case DownloadCheckResult::UNKNOWN:
       case DownloadCheckResult::SENSITIVE_CONTENT_WARNING:
       case DownloadCheckResult::DEEP_SCANNED_SAFE:
-        callback.Run(DownloadCheckResult::DANGEROUS);
+        if (reason == REASON_DOWNLOAD_DANGEROUS)
+          callback.Run(DownloadCheckResult::DANGEROUS);
+        else
+          callback.Run(DownloadCheckResult::DANGEROUS_HOST);
         return;
 
       case DownloadCheckResult::ASYNC_SCANNING:
@@ -272,7 +276,9 @@
 void CheckClientDownloadRequest::UploadBinary(
     DownloadCheckResultReason reason,
     enterprise_connectors::AnalysisSettings settings) {
-  if (reason == REASON_DOWNLOAD_DANGEROUS || reason == REASON_WHITELISTED_URL) {
+  if (reason == REASON_DOWNLOAD_DANGEROUS ||
+      reason == REASON_DOWNLOAD_DANGEROUS_HOST ||
+      reason == REASON_WHITELISTED_URL) {
     settings.tags.erase("malware");
     service()->UploadForDeepScanning(
         item_,
diff --git a/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc b/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc
index 9f6eb7d9..6568fc4 100644
--- a/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc
+++ b/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc
@@ -450,6 +450,36 @@
   EXPECT_EQ(item->GetState(), download::DownloadItem::INTERRUPTED);
 }
 
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest,
+                       DangerousHostNotMalwareScanned) {
+  // The file is SAFE according to the metadata check
+  ClientDownloadResponse metadata_response;
+  metadata_response.set_verdict(ClientDownloadResponse::DANGEROUS_HOST);
+  ExpectMetadataResponse(metadata_response);
+
+  // The DLP scan still runs, but finds nothing
+  DeepScanningClientResponse sync_response;
+  sync_response.mutable_dlp_scan_verdict()->set_status(
+      DlpDeepScanningVerdict::SUCCESS);
+  ExpectDeepScanSynchronousResponse(/*is_advanced_protection=*/false,
+                                    sync_response);
+
+  GURL url = embedded_test_server()->GetURL(
+      "/safe_browsing/download_protection/signed.exe");
+  ui_test_utils::NavigateToURLWithDisposition(
+      browser(), url, WindowOpenDisposition::CURRENT_TAB,
+      ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP);
+
+  WaitForDownloadToFinish();
+
+  // The file should be blocked.
+  ASSERT_EQ(download_items().size(), 1u);
+  download::DownloadItem* item = *download_items().begin();
+  EXPECT_EQ(item->GetDangerType(),
+            download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST);
+  EXPECT_EQ(item->GetState(), download::DownloadItem::IN_PROGRESS);
+}
+
 class WhitelistedUrlDeepScanningBrowserTest
     : public DownloadDeepScanningBrowserTest {
  public:
diff --git a/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc b/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc
index 3e800224..fd083b5 100644
--- a/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc
+++ b/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc
@@ -94,12 +94,6 @@
                                 state);
 }
 
-void RecordSendTabToSelfDeviceCount(const std::string& entry_point,
-                                    const int& device_count) {
-  base::UmaHistogramCounts100("SendTabToSelf." + entry_point + ".DeviceCount",
-                              device_count);
-}
-
 size_t GetValidDeviceCount(Profile* profile) {
   SendTabToSelfSyncService* service =
       SendTabToSelfSyncServiceFactory::GetForProfile(profile);
diff --git a/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.h b/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.h
index eae0d048..b3588c3 100644
--- a/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.h
+++ b/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.h
@@ -55,10 +55,6 @@
 void RecordSendTabToSelfClickResult(const std::string& entry_point,
                                     SendTabToSelfClickResult state);
 
-// Records the count of valid devices when user sees the device list.
-void RecordSendTabToSelfDeviceCount(const std::string& entry_point,
-                                    const int& device_count);
-
 // Gets the count of valid device number.
 size_t GetValidDeviceCount(Profile* profile);
 
diff --git a/chrome/browser/serial/serial_chooser_context.cc b/chrome/browser/serial/serial_chooser_context.cc
index 429b8d4..165f28b 100644
--- a/chrome/browser/serial/serial_chooser_context.cc
+++ b/chrome/browser/serial/serial_chooser_context.cc
@@ -17,6 +17,7 @@
 namespace {
 
 constexpr char kPortNameKey[] = "name";
+constexpr char kPersistentIdKey[] = "persistent_id";
 constexpr char kTokenKey[] = "token";
 
 std::string EncodeToken(const base::UnguessableToken& token) {
@@ -40,13 +41,20 @@
   return base::UnguessableToken::Deserialize(data[0], data[1]);
 }
 
+bool CanStorePersistentEntry(const device::mojom::SerialPortInfo& port) {
+  return port.persistent_id && !port.persistent_id->empty();
+}
+
 base::Value PortInfoToValue(const device::mojom::SerialPortInfo& port) {
   base::Value value(base::Value::Type::DICTIONARY);
   if (port.display_name)
     value.SetStringKey(kPortNameKey, *port.display_name);
   else
     value.SetStringKey(kPortNameKey, port.path.LossyDisplayName());
-  value.SetStringKey(kTokenKey, EncodeToken(port.token));
+  if (CanStorePersistentEntry(port))
+    value.SetStringKey(kPersistentIdKey, port.persistent_id.value());
+  else
+    value.SetStringKey(kTokenKey, EncodeToken(port.token));
   return value;
 }
 
@@ -63,7 +71,9 @@
 bool SerialChooserContext::IsValidObject(const base::Value& object) {
   const std::string* token = object.FindStringKey(kTokenKey);
   return object.is_dict() && object.DictSize() == 2 &&
-         object.FindStringKey(kPortNameKey) && token && DecodeToken(*token);
+         object.FindStringKey(kPortNameKey) &&
+         ((token && DecodeToken(*token)) ||
+          object.FindStringKey(kPersistentIdKey));
 }
 
 base::string16 SerialChooserContext::GetObjectDisplayName(
@@ -76,24 +86,26 @@
 std::vector<std::unique_ptr<permissions::ChooserContextBase::Object>>
 SerialChooserContext::GetGrantedObjects(const url::Origin& requesting_origin,
                                         const url::Origin& embedding_origin) {
-  if (!CanRequestObjectPermission(requesting_origin, embedding_origin))
-    return {};
+  std::vector<std::unique_ptr<Object>> objects =
+      ChooserContextBase::GetGrantedObjects(requesting_origin,
+                                            embedding_origin);
 
-  auto origin_it = ephemeral_ports_.find(
-      std::make_pair(requesting_origin, embedding_origin));
-  if (origin_it == ephemeral_ports_.end())
-    return {};
-  const std::set<base::UnguessableToken> ports = origin_it->second;
+  if (CanRequestObjectPermission(requesting_origin, embedding_origin)) {
+    auto it = ephemeral_ports_.find({requesting_origin, embedding_origin});
+    if (it != ephemeral_ports_.end()) {
+      const std::set<base::UnguessableToken>& ports = it->second;
+      for (const auto& token : ports) {
+        auto port_it = port_info_.find(token);
+        if (port_it == port_info_.end())
+          continue;
 
-  std::vector<std::unique_ptr<Object>> objects;
-  for (const auto& token : ports) {
-    auto it = port_info_.find(token);
-    if (it == port_info_.end())
-      continue;
-
-    objects.push_back(std::make_unique<Object>(
-        requesting_origin, embedding_origin, it->second.Clone(),
-        content_settings::SettingSource::SETTING_SOURCE_USER, is_incognito_));
+        const base::Value& port = port_it->second;
+        objects.push_back(std::make_unique<Object>(
+            requesting_origin, embedding_origin, port.Clone(),
+            content_settings::SettingSource::SETTING_SOURCE_USER,
+            is_incognito_));
+      }
+    }
   }
 
   return objects;
@@ -101,7 +113,8 @@
 
 std::vector<std::unique_ptr<permissions::ChooserContextBase::Object>>
 SerialChooserContext::GetAllGrantedObjects() {
-  std::vector<std::unique_ptr<Object>> objects;
+  std::vector<std::unique_ptr<Object>> objects =
+      ChooserContextBase::GetAllGrantedObjects();
   for (const auto& map_entry : ephemeral_ports_) {
     const url::Origin& requesting_origin = map_entry.first.first;
     const url::Origin& embedding_origin = map_entry.first.second;
@@ -127,14 +140,20 @@
     const url::Origin& requesting_origin,
     const url::Origin& embedding_origin,
     const base::Value& object) {
-  auto origin_it = ephemeral_ports_.find(
-      std::make_pair(requesting_origin, embedding_origin));
-  if (origin_it == ephemeral_ports_.end())
+  const std::string* token = object.FindStringKey(kTokenKey);
+  if (!token) {
+    ChooserContextBase::RevokeObjectPermission(requesting_origin,
+                                               embedding_origin, object);
     return;
-  std::set<base::UnguessableToken>& ports = origin_it->second;
+  }
+
+  auto it = ephemeral_ports_.find({requesting_origin, embedding_origin});
+  if (it == ephemeral_ports_.end())
+    return;
+  std::set<base::UnguessableToken>& ports = it->second;
 
   DCHECK(IsValidObject(object));
-  ports.erase(DecodeToken(*object.FindStringKey(kTokenKey)));
+  ports.erase(DecodeToken(*token));
   NotifyPermissionRevoked(requesting_origin, embedding_origin);
 }
 
@@ -142,11 +161,16 @@
     const url::Origin& requesting_origin,
     const url::Origin& embedding_origin,
     const device::mojom::SerialPortInfo& port) {
-  // TODO(crbug.com/908836): If |port| can be remembered persistently call into
-  // ChooserContextBase to store it in user preferences.
-  ephemeral_ports_[std::make_pair(requesting_origin, embedding_origin)].insert(
-      port.token);
-  port_info_[port.token] = PortInfoToValue(port);
+  base::Value value = PortInfoToValue(port);
+  port_info_.insert({port.token, value.Clone()});
+
+  if (CanStorePersistentEntry(port)) {
+    GrantObjectPermission(requesting_origin, embedding_origin,
+                          std::move(value));
+    return;
+  }
+
+  ephemeral_ports_[{requesting_origin, embedding_origin}].insert(port.token);
   NotifyPermissionChanged();
 }
 
@@ -158,16 +182,24 @@
     return false;
   }
 
-  auto origin_it = ephemeral_ports_.find(
-      std::make_pair(requesting_origin, embedding_origin));
-  if (origin_it == ephemeral_ports_.end())
-    return false;
-  const std::set<base::UnguessableToken> ports = origin_it->second;
+  auto it = ephemeral_ports_.find({requesting_origin, embedding_origin});
+  if (it != ephemeral_ports_.end()) {
+    const std::set<base::UnguessableToken> ports = it->second;
+    if (base::Contains(ports, port.token))
+      return true;
+  }
 
-  // TODO(crbug.com/908836): Call into ChooserContextBase to check persistent
-  // permissions.
-  auto port_it = ports.find(port.token);
-  return port_it != ports.end();
+  std::vector<std::unique_ptr<permissions::ChooserContextBase::Object>>
+      object_list = GetGrantedObjects(requesting_origin, embedding_origin);
+  for (const auto& object : object_list) {
+    const base::Value& device = object->value;
+    DCHECK(IsValidObject(device));
+
+    const std::string* persistent_id = device.FindStringKey(kPersistentIdKey);
+    if (port.persistent_id == *persistent_id)
+      return true;
+  }
+  return false;
 }
 
 device::mojom::SerialPortManager* SerialChooserContext::GetPortManager() {
@@ -216,8 +248,10 @@
   port_info_.erase(port->token);
 
   for (auto& observer : permission_observer_list_) {
-    observer.OnChooserObjectPermissionChanged(guard_content_settings_type_,
-                                              data_content_settings_type_);
+    if (!revoked_url_pairs.empty()) {
+      observer.OnChooserObjectPermissionChanged(guard_content_settings_type_,
+                                                data_content_settings_type_);
+    }
     for (const auto& url_pair : revoked_url_pairs)
       observer.OnPermissionRevoked(url_pair.first, url_pair.second);
   }
diff --git a/chrome/browser/serial/serial_chooser_context_unittest.cc b/chrome/browser/serial/serial_chooser_context_unittest.cc
index d083c3cc..b62a064 100644
--- a/chrome/browser/serial/serial_chooser_context_unittest.cc
+++ b/chrome/browser/serial/serial_chooser_context_unittest.cc
@@ -123,6 +123,51 @@
   EXPECT_EQ(0u, objects.size());
 }
 
+TEST_F(SerialChooserContextTest, GrantAndRevokePersistentPermission) {
+  const auto origin = url::Origin::Create(GURL("https://google.com"));
+
+  auto port = device::mojom::SerialPortInfo::New();
+  port->token = base::UnguessableToken::Create();
+  port->persistent_id = "ABC123";
+
+  EXPECT_FALSE(context()->HasPortPermission(origin, origin, *port));
+
+  EXPECT_CALL(permission_observer(),
+              OnChooserObjectPermissionChanged(
+                  ContentSettingsType::SERIAL_GUARD,
+                  ContentSettingsType::SERIAL_CHOOSER_DATA));
+
+  context()->GrantPortPermission(origin, origin, *port);
+  EXPECT_TRUE(context()->HasPortPermission(origin, origin, *port));
+
+  std::vector<std::unique_ptr<permissions::ChooserContextBase::Object>>
+      origin_objects = context()->GetGrantedObjects(origin, origin);
+  ASSERT_EQ(1u, origin_objects.size());
+
+  std::vector<std::unique_ptr<permissions::ChooserContextBase::Object>>
+      objects = context()->GetAllGrantedObjects();
+  ASSERT_EQ(1u, objects.size());
+  EXPECT_EQ(origin.GetURL(), objects[0]->requesting_origin);
+  EXPECT_EQ(origin.GetURL(), objects[0]->embedding_origin);
+  EXPECT_EQ(origin_objects[0]->value, objects[0]->value);
+  EXPECT_EQ(content_settings::SettingSource::SETTING_SOURCE_USER,
+            objects[0]->source);
+  EXPECT_FALSE(objects[0]->incognito);
+
+  EXPECT_CALL(permission_observer(),
+              OnChooserObjectPermissionChanged(
+                  ContentSettingsType::SERIAL_GUARD,
+                  ContentSettingsType::SERIAL_CHOOSER_DATA));
+  EXPECT_CALL(permission_observer(), OnPermissionRevoked(origin, origin));
+
+  context()->RevokeObjectPermission(origin, origin, objects[0]->value);
+  EXPECT_FALSE(context()->HasPortPermission(origin, origin, *port));
+  origin_objects = context()->GetGrantedObjects(origin, origin);
+  EXPECT_EQ(0u, origin_objects.size());
+  objects = context()->GetAllGrantedObjects();
+  EXPECT_EQ(0u, objects.size());
+}
+
 TEST_F(SerialChooserContextTest, EphemeralPermissionRevokedOnDisconnect) {
   const auto origin = url::Origin::Create(GURL("https://google.com"));
 
@@ -158,6 +203,55 @@
   EXPECT_EQ(0u, objects.size());
 }
 
+TEST_F(SerialChooserContextTest, PersistentPermissionNotRevokedOnDisconnect) {
+  const auto origin = url::Origin::Create(GURL("https://google.com"));
+  const char persistent_id[] = "ABC123";
+
+  auto port = device::mojom::SerialPortInfo::New();
+  port->token = base::UnguessableToken::Create();
+  port->persistent_id = persistent_id;
+  port_manager().AddPort(port.Clone());
+
+  context()->GrantPortPermission(origin, origin, *port);
+  EXPECT_TRUE(context()->HasPortPermission(origin, origin, *port));
+
+  EXPECT_CALL(permission_observer(),
+              OnChooserObjectPermissionChanged(
+                  ContentSettingsType::SERIAL_GUARD,
+                  ContentSettingsType::SERIAL_CHOOSER_DATA))
+      .Times(0);
+  EXPECT_CALL(permission_observer(), OnPermissionRevoked(origin, origin))
+      .Times(0);
+
+  port_manager().RemovePort(port->token);
+  {
+    base::RunLoop run_loop;
+    EXPECT_CALL(port_observer(), OnPortRemoved(testing::_))
+        .WillOnce(
+            testing::Invoke([&](const device::mojom::SerialPortInfo& info) {
+              EXPECT_EQ(port->token, info.token);
+              EXPECT_TRUE(context()->HasPortPermission(origin, origin, info));
+              run_loop.Quit();
+            }));
+    run_loop.Run();
+  }
+
+  EXPECT_TRUE(context()->HasPortPermission(origin, origin, *port));
+  auto origin_objects = context()->GetGrantedObjects(origin, origin);
+  EXPECT_EQ(1u, origin_objects.size());
+  auto objects = context()->GetAllGrantedObjects();
+  EXPECT_EQ(1u, objects.size());
+
+  // Simulate reconnection of the port. It gets a new token but the same
+  // persistent ID. This SerialPortInfo should still match the old permission.
+  port = device::mojom::SerialPortInfo::New();
+  port->token = base::UnguessableToken::Create();
+  port->persistent_id = persistent_id;
+  port_manager().AddPort(port.Clone());
+
+  EXPECT_TRUE(context()->HasPortPermission(origin, origin, *port));
+}
+
 TEST_F(SerialChooserContextTest, GuardPermission) {
   const auto origin = url::Origin::Create(GURL("https://google.com"));
 
diff --git a/chrome/browser/sharing/sharing_metrics.cc b/chrome/browser/sharing/sharing_metrics.cc
index 92d93be..f4d9ef67 100644
--- a/chrome/browser/sharing/sharing_metrics.cc
+++ b/chrome/browser/sharing/sharing_metrics.cc
@@ -176,10 +176,6 @@
   base::UmaHistogramEnumeration("Sharing.DeviceUnregistrationResult", result);
 }
 
-void LogSharingVapidKeyCreationResult(SharingVapidKeyCreationResult result) {
-  base::UmaHistogramEnumeration("Sharing.VapidKeyCreationResult", result);
-}
-
 void LogSharingDevicesToShow(SharingFeatureName feature,
                              const char* histogram_suffix,
                              int count) {
diff --git a/chrome/browser/sharing/sharing_metrics.h b/chrome/browser/sharing/sharing_metrics.h
index 29ae15c..322ab95 100644
--- a/chrome/browser/sharing/sharing_metrics.h
+++ b/chrome/browser/sharing/sharing_metrics.h
@@ -13,17 +13,6 @@
 
 enum class SharingDeviceRegistrationResult;
 
-// Result of VAPID key creation during Sharing registration.
-// These values are logged to UMA. Entries should not be renumbered and numeric
-// values should never be reused. Please keep in sync with
-// "SharingVapidKeyCreationResult" in src/tools/metrics/histograms/enums.xml.
-enum class SharingVapidKeyCreationResult {
-  kSuccess = 0,
-  kGenerateECKeyFailed = 1,
-  kExportPrivateKeyFailed = 2,
-  kMaxValue = kExportPrivateKeyFailed,
-};
-
 // The types of dialogs that can be shown for sharing features.
 // These values are logged to UMA. Entries should not be renumbered and numeric
 // values should never be reused. Please keep in sync with
@@ -71,10 +60,6 @@
 // Sharing.
 void LogSharingUnegistrationResult(SharingDeviceRegistrationResult result);
 
-// Logs the |result| to UMA. This should be called after attempting to create
-// VAPID keys.
-void LogSharingVapidKeyCreationResult(SharingVapidKeyCreationResult result);
-
 // Logs the number of available devices that are about to be shown in a UI for
 // picking a device to start a sharing functionality. The |histogram_suffix|
 // indicates in which UI this event happened and must match one from
diff --git a/chrome/browser/sharing/vapid_key_manager.cc b/chrome/browser/sharing/vapid_key_manager.cc
index 8fecc50..10c83ff 100644
--- a/chrome/browser/sharing/vapid_key_manager.cc
+++ b/chrome/browser/sharing/vapid_key_manager.cc
@@ -6,7 +6,6 @@
 
 #include "base/feature_list.h"
 #include "chrome/browser/sharing/features.h"
-#include "chrome/browser/sharing/sharing_metrics.h"
 #include "chrome/browser/sharing/sharing_sync_preference.h"
 #include "components/sync/driver/sync_service.h"
 #include "crypto/ec_private_key.h"
@@ -37,11 +36,8 @@
     return false;
 
   auto generated_key = crypto::ECPrivateKey::Create();
-  if (!generated_key) {
-    LogSharingVapidKeyCreationResult(
-        SharingVapidKeyCreationResult::kGenerateECKeyFailed);
+  if (!generated_key)
     return false;
-  }
 
   return UpdateCachedKey(std::move(generated_key));
 }
@@ -49,11 +45,8 @@
 bool VapidKeyManager::UpdateCachedKey(
     std::unique_ptr<crypto::ECPrivateKey> new_key) {
   std::vector<uint8_t> new_key_info;
-  if (!new_key->ExportPrivateKey(&new_key_info)) {
-    LogSharingVapidKeyCreationResult(
-        SharingVapidKeyCreationResult::kExportPrivateKeyFailed);
+  if (!new_key->ExportPrivateKey(&new_key_info))
     return false;
-  }
 
   if (vapid_key_info_ == new_key_info)
     return false;
@@ -61,7 +54,6 @@
   vapid_key_ = std::move(new_key);
   vapid_key_info_ = std::move(new_key_info);
   sharing_sync_preference_->SetVapidKey(vapid_key_info_);
-  LogSharingVapidKeyCreationResult(SharingVapidKeyCreationResult::kSuccess);
   return true;
 }
 
diff --git a/chrome/browser/site_isolation/chrome_site_isolation_policy_unittest.cc b/chrome/browser/site_isolation/chrome_site_isolation_policy_unittest.cc
new file mode 100644
index 0000000..d509c8f
--- /dev/null
+++ b/chrome/browser/site_isolation/chrome_site_isolation_policy_unittest.cc
@@ -0,0 +1,120 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/site_isolation/site_isolation_policy.h"
+
+#include "base/base_switches.h"
+#include "base/system/sys_info.h"
+#include "base/test/scoped_feature_list.h"
+#include "build/build_config.h"
+#include "chrome/common/chrome_features.h"
+#include "components/site_isolation/features.h"
+#include "components/site_isolation/preloaded_isolated_origins.h"
+#include "content/public/browser/child_process_security_policy.h"
+#include "content/public/browser/site_isolation_policy.h"
+#include "content/public/common/content_features.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/test/browser_task_environment.h"
+#include "content/public/test/test_utils.h"
+#include "google_apis/gaia/gaia_urls.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+#include "extensions/common/extension_urls.h"
+#endif
+
+namespace {
+
+// Some command-line switches override field trials - the tests need to be
+// skipped in this case.
+bool ShouldSkipBecauseOfConflictingCommandLineSwitches() {
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kSitePerProcess))
+    return true;
+
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kDisableSiteIsolation))
+    return true;
+
+  return false;
+}
+
+}  // namespace
+
+class ChromeSiteIsolationPolicyTest : public testing::Test {
+ public:
+  ChromeSiteIsolationPolicyTest() = default;
+
+  void SetUp() override {
+    // This way the test always sees the same amount of physical memory
+    // (kLowMemoryDeviceThresholdMB = 512MB), regardless of how much memory is
+    // available in the testing environment.
+    base::CommandLine::ForCurrentProcess()->AppendSwitch(
+        switches::kEnableLowEndDeviceMode);
+    EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB());
+
+    mode_feature_.InitAndEnableFeature(features::kSitePerProcess);
+  }
+
+  void SetMemoryThreshold(const std::string& threshold) {
+    threshold_feature_.InitAndEnableFeatureWithParameters(
+        site_isolation::features::kSitePerProcessOnlyForHighMemoryClients,
+        {{site_isolation::features::
+              kSitePerProcessOnlyForHighMemoryClientsParamName,
+          threshold}});
+  }
+
+ private:
+  content::BrowserTaskEnvironment task_environment_;
+  base::test::ScopedFeatureList mode_feature_;
+  base::test::ScopedFeatureList threshold_feature_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChromeSiteIsolationPolicyTest);
+};
+
+TEST_F(ChromeSiteIsolationPolicyTest, NoIsolationBelowMemoryThreshold) {
+  if (ShouldSkipBecauseOfConflictingCommandLineSwitches())
+    return;
+
+  SetMemoryThreshold("768");
+  EXPECT_FALSE(
+      content::SiteIsolationPolicy::UseDedicatedProcessesForAllSites());
+}
+
+TEST_F(ChromeSiteIsolationPolicyTest, IsolationAboveMemoryThreshold) {
+  if (ShouldSkipBecauseOfConflictingCommandLineSwitches())
+    return;
+
+  SetMemoryThreshold("128");
+  EXPECT_TRUE(content::SiteIsolationPolicy::UseDedicatedProcessesForAllSites());
+}
+
+TEST_F(ChromeSiteIsolationPolicyTest, IsolatedOriginsContainChromeOrigins) {
+  if (ShouldSkipBecauseOfConflictingCommandLineSwitches())
+    return;
+
+  content::SiteIsolationPolicy::ApplyGlobalIsolatedOrigins();
+
+  // On Android official builds, we expect to isolate an additional set of
+  // built-in origins.
+  std::vector<url::Origin> expected_embedder_origins =
+      site_isolation::GetBrowserSpecificBuiltInIsolatedOrigins();
+#if !defined(OS_ANDROID)
+  expected_embedder_origins.push_back(
+      url::Origin::Create(GaiaUrls::GetInstance()->gaia_url()));
+#endif
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+  expected_embedder_origins.push_back(
+      url::Origin::Create(extension_urls::GetWebstoreLaunchURL()));
+#endif
+  auto* cpsp = content::ChildProcessSecurityPolicy::GetInstance();
+  std::vector<url::Origin> isolated_origins = cpsp->GetIsolatedOrigins();
+  EXPECT_EQ(expected_embedder_origins.size(), isolated_origins.size());
+
+  // Verify that the expected embedder origins are present even though site
+  // isolation has been disabled and the trial origins should not be present.
+  EXPECT_THAT(expected_embedder_origins,
+              ::testing::UnorderedElementsAreArray(isolated_origins));
+}
diff --git a/chrome/browser/site_isolation/prefs_observer.cc b/chrome/browser/site_isolation/prefs_observer.cc
index 58bf8a6..bffd247 100644
--- a/chrome/browser/site_isolation/prefs_observer.cc
+++ b/chrome/browser/site_isolation/prefs_observer.cc
@@ -8,9 +8,9 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/pref_service.h"
+#include "components/site_isolation/site_isolation_policy.h"
 #include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/site_isolation_policy.h"
 
@@ -37,7 +37,7 @@
   // Don't do anything if the policy was removed or shouldn't apply.
   if (!pref_change_registrar_.prefs()->HasPrefPath(prefs::kIsolateOrigins))
     return;
-  if (!SiteIsolationPolicy::IsEnterprisePolicyApplicable())
+  if (!site_isolation::SiteIsolationPolicy::IsEnterprisePolicyApplicable())
     return;
 
   // Add isolated origins based on the policy.  Note that the policy may only
diff --git a/chrome/browser/tabmodel/BUILD.gn b/chrome/browser/tabmodel/BUILD.gn
index 8ecab44..be2e6cd0 100644
--- a/chrome/browser/tabmodel/BUILD.gn
+++ b/chrome/browser/tabmodel/BUILD.gn
@@ -6,9 +6,11 @@
 
 android_library("java") {
   sources = [
+    "android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java",
     "android/java/src/org/chromium/chrome/browser/tabmodel/TabList.java",
     "android/java/src/org/chromium/chrome/browser/tabmodel/TabModel.java",
     "android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java",
+    "android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java",
   ]
   deps = [
     "//base:base_java",
diff --git a/chrome/browser/tabmodel/DEPS b/chrome/browser/tabmodel/DEPS
new file mode 100644
index 0000000..f14f5d9
--- /dev/null
+++ b/chrome/browser/tabmodel/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+  "+content/public/android/java/src/org/chromium/content_public",
+]
+
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java
similarity index 98%
rename from chrome/android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java
rename to chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java
index 9b5625a..c187f26 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java
+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/EmptyTabModel.java
@@ -62,12 +62,10 @@
     public void closeMultipleTabs(List<Tab> tabs, boolean canUndo) {}
 
     @Override
-    public void closeAllTabs() {
-    }
+    public void closeAllTabs() {}
 
     @Override
-    public void closeAllTabs(boolean allowDelegation, boolean uponExit) {
-    }
+    public void closeAllTabs(boolean allowDelegation, boolean uponExit) {}
 
     @Override
     public int getCount() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java
similarity index 99%
rename from chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java
rename to chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java
index aa031c4..89876268 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java
+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelUtils.java
@@ -15,7 +15,7 @@
  * A set of convenience methods used for interacting with {@link TabList}s and {@link TabModel}s.
  */
 public class TabModelUtils {
-    private TabModelUtils() { }
+    private TabModelUtils() {}
 
     /**
      * @param model The {@link TabModel} to act on.
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
index 7858b1f..bae29e9a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Sien gewilde webwerwe deur op die "Topwerwe"-knoppie te tik</translation>
 <translation id="1173894706177603556">Hernoem</translation>
 <translation id="1178581264944972037">Laat wag</translation>
-<translation id="1188239144602654184">Gaan by AR in</translation>
 <translation id="1197267115302279827">Skuif boekmerke</translation>
 <translation id="1201402288615127009">Volgende</translation>
 <translation id="1204037785786432551">Laai skakel af</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">teks</translation>
 <translation id="2082238445998314030">Resultaat <ph name="RESULT_NUMBER" /> van <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sinkroniseer en personaliseer oor toestelle heen</translation>
-<translation id="2099625543891475722">jou fisieke kenmerke, soos lengte</translation>
 <translation id="2100273922101894616">Outomatiese aanmelding</translation>
 <translation id="2100314319871056947">Probeer die teks in kleiner stukkies deel</translation>
 <translation id="2109711654079915747">Kom meer te wete oor onderwerpe op webwerwe sonder om die bladsy te verlaat. Raak om te Soek stuur 'n woord en sy omringende konteks na Google Search toe en wys definisies, prente, soekresultate en ander besonderhede.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Bestuur</translation>
 <translation id="381841723434055211">Foonnommers</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> aflaaie is uitgevee</translation>
-<translation id="3849365399446680203">Terwyl jy in AR is, kan hierdie werf dalk:
-• 'n 3D-kaart van jou omgewing skep
-• kamerabeweging naspoor
-
-Net jy kan sien waarna jou kamera kyk. Hierdie werf kan nie jou kamera se prente sien nie.</translation>
 <translation id="3859306556332390985">Soek vorentoe</translation>
 <translation id="388596076286380598">Kry artikels, video's en ander inhoud vanaf werwe waarvan jy hou, selfs as jy vanlyn is of as jou verbinding swak is.</translation>
 <translation id="3894427358181296146">Voeg vouer by</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Geen internetverbinding nie</translation>
 <translation id="4321739720395210191">Kan nie jou kamera oopmaak nie. Herbegin jou toestel en probeer weer.</translation>
 <translation id="4351244548802238354">Maak dialoog toe</translation>
-<translation id="4353114845960720315">Terwyl jy in VR is, sal hierdie werf dalk meer te wete kom oor:</translation>
 <translation id="4378154925671717803">Foon</translation>
 <translation id="4384468725000734951">Gebruik Sogou om te soek</translation>
 <translation id="4404568932422911380">Geen boekmerke nie</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Geen verbinding nie</translation>
 <translation id="4565377596337484307">Versteek wagwoord</translation>
 <translation id="4572422548854449519">Meld by 'n bestuurde rekening aan</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minuut gelede}other{# minute gelede}}</translation>
 <translation id="4587589328781138893">Werwe</translation>
 <translation id="4594952190837476234">Hierdie vanlyn bladsy is van <ph name="CREATION_TIME" /> af en kan van die aanlyn weergawe verskil.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Maak <ph name="WEBAPK_NAME" /> oop</translation>
 <translation id="4634124774493850572">Gebruik wagwoord</translation>
 <translation id="4650364565596261010">Stelsel se verstek</translation>
-<translation id="4660838440047236328">die uitleg van jou vertrek</translation>
 <translation id="4662373422909645029">Laat syfers uit bynaam</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> boekmerke is uitgevee</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> is by jou tuisskerm gevoeg</translation>
@@ -459,7 +449,6 @@
 
 <ph name="BEGIN_LINK" />Stel sinkronisering terug<ph name="END_LINK" /> om hierdie instelling te verander</translation>
 <translation id="4807098396393229769">Naam op kaart</translation>
-<translation id="4808319664292298116">Gaan by VR in vanaf <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Kanselleer sinkronisering?</translation>
 <translation id="4835385943915508971">Chrome het nie toegang tot die hulpbron wat versoek is nie.</translation>
 <translation id="4837753911714442426">Maak opsies oop om bladsy te druk</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Gaan by volskerm uit</translation>
 <translation id="6404511346730675251">Wysig boekmerk</translation>
 <translation id="6406506848690869874">Sinkronisering</translation>
-<translation id="6410973561433500075">Voer AR van <ph name="DOMAIN" /> af in?</translation>
 <translation id="641643625718530986">Druk tans uit …</translation>
 <translation id="6427112570124116297">Vertaal die Web</translation>
 <translation id="6433501201775827830">Kies jou soekenjin</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
index 6efcde7..688d650 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">የ«ከፍተኛ ጣቢያዎች» አዝራሩን መታ በማድረግ ታዋቂ ድር ጣቢያዎችን ይመልከቱ</translation>
 <translation id="1173894706177603556">ዳግም ሰይም</translation>
 <translation id="1178581264944972037">ለአፍታ አቁም</translation>
-<translation id="1188239144602654184">AR ያስገቡ</translation>
 <translation id="1197267115302279827">ዕልባቶችን ውሰድ</translation>
 <translation id="1201402288615127009">ቀጣይ</translation>
 <translation id="1204037785786432551">የማውረጃ አገናኝ</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ጽሑፍ</translation>
 <translation id="2082238445998314030">ውጤት <ph name="RESULT_NUMBER" /> ከ<ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">በመላ መሣሪያዎች ላይ ያመሳስሉ እና ግላዊነት ያላብሱ</translation>
-<translation id="2099625543891475722">እንደ ቁመት ያሉ የእርስዎ አካላዊ ባህሪያት</translation>
 <translation id="2100273922101894616">በራስ-ግባ</translation>
 <translation id="2100314319871056947">በትናንሽ ክፍሎች ጽሑፉን ለማጋራት ይሞክሩ</translation>
 <translation id="2109711654079915747">ከገጹ ሳይወጡ በድር ጣቢያዎች ላይ ስላሉ ርዕሶች ይወቁ። «ለመፈለግ ይንኩ» አንድ ቃል እና በዙሪያው ያለውን አውድ ወደ Google ፍለጋ ይልክና ትርጓሜዎችን፣ ስዕሎችን፣ የፍለጋ ውጤቶችን እና ሌሎች ዝርዝሮችን ይመልሳል።
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">አቀናብር</translation>
 <translation id="381841723434055211">ስልክ ቁጥሮች</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> የሚወርዱ ተሰርዘዋል</translation>
-<translation id="3849365399446680203">እርስዎ በኤአር ውስጥ ሳሉ ይህ ጣቢያ የሚከተሉትን ማድረግ ይችላል፦
-• የአካባቢዎ የ3ል ካርታ መፍጠር
-• የካሜራን እንቅስቃሴን መከታተል
-
-እርስዎ ብቻ ነዎት ካሜራዎ ምን እየተመለከተ እንደሆነ ማየት የሚችሉት። ጣቢያው የካሜራዎን ምስሎች ማየት አይችልም።</translation>
 <translation id="3859306556332390985">ወደፊት ፈልግ</translation>
 <translation id="388596076286380598">ምንም እንኳ እርስዎ ከመስመር ውጭ ቢሆኑም ወይም የእርስዎ ግንኙነት ደካማ ቢሆንም እርስዎ ከሚወዷቸው ጣቢያዎች ጽሑፎችን፣ ቪዲዮዎችን፣ እና ሌላ ይዘት ያግኙ።</translation>
 <translation id="3894427358181296146">አቃፊ ያክሉ</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ምንም የበይነመረብ ግንኙነት የለም</translation>
 <translation id="4321739720395210191">የእርስዎን ካሜራ መክፈት አይቻልም። የእርስዎን መሣሪያ ዳግም ያስጀምሩት እና እንደገና ይሞክሩ።</translation>
 <translation id="4351244548802238354">መገናኛ ዝጋ</translation>
-<translation id="4353114845960720315">እርስዎ በቪአር ውስጥ ሳሉ ይህ ጣቢያ ስለእነዚህ ሊያውቅ ይችላል፦</translation>
 <translation id="4378154925671717803">ስልክ</translation>
 <translation id="4384468725000734951">ለፍለጋ Sogouን መጠቀም</translation>
 <translation id="4404568932422911380">ምንም ዕልባቶች የሉም</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">ግንኙነት የለም</translation>
 <translation id="4565377596337484307">የይለፍ ቃል ደብቅ</translation>
 <translation id="4572422548854449519">ወደ የሚተዳደር መለያ ይግቡ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{ከ# ደቂቃ በፊት}one{ከ# ደቂቃዎች በፊት}other{ከ# ደቂቃዎች በፊት}}</translation>
 <translation id="4587589328781138893">ጣቢያዎች</translation>
 <translation id="4594952190837476234">ይህ የ<ph name="CREATION_TIME" />  የመስመር ውጭ ገጽ ከመስመር ላይ ስሪቱ የተለየ ሊሆን ይችላል።</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ን ይክፈቱ</translation>
 <translation id="4634124774493850572">የይለፍ ቃል ይጠቀሙ</translation>
 <translation id="4650364565596261010">የሥርዓት ነባሪ</translation>
-<translation id="4660838440047236328">የክፍልዎ አቀማመጥ</translation>
 <translation id="4662373422909645029">ቅጥያ ስም ቁጥሮችን ማካተት አይችልም</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> ዕልባቶች ተሰርዘዋል</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ወደ እርስዎ መነሻ ገፅ ታክሏል</translation>
@@ -459,7 +449,6 @@
 
 ይህን ቅንብር ለመቀየር <ph name="BEGIN_LINK" />ስምረትን ዳግም ያስጀምሩ<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">በካርድ ላይ ያለ ስም</translation>
-<translation id="4808319664292298116">ከ<ph name="DOMAIN" /> ሆነው ወደ ቪአር ይግቡ?</translation>
 <translation id="4824958205181053313">ስምረት ይሰረዝ?</translation>
 <translation id="4835385943915508971">Chrome የተጠየቀው ግብዓት መዳረሻ የለውም።</translation>
 <translation id="4837753911714442426">ገጽን ለማተም አማራጮችን ክፈት</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">ከሙሉ ማሳያ መስኮት ይውጡ</translation>
 <translation id="6404511346730675251">ዕልባት አርትዕ</translation>
 <translation id="6406506848690869874">አመሳስል</translation>
-<translation id="6410973561433500075">ኤአር ከ<ph name="DOMAIN" /> ይግባ?</translation>
 <translation id="641643625718530986">አትም…</translation>
 <translation id="6427112570124116297">ድሩን ያስተርጉሙ</translation>
 <translation id="6433501201775827830">የእርስዎን የፍለጋ ፕሮግራም ይምረጡ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
index 3fe7952..9f5a01c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">عرض مواقع الويب الشائعة من خلال النقر على الزر "أهم المواقع"</translation>
 <translation id="1173894706177603556">إعادة تسمية</translation>
 <translation id="1178581264944972037">الإيقاف مؤقتًا</translation>
-<translation id="1188239144602654184">إطلاق الواقع المعزّز</translation>
 <translation id="1197267115302279827">نقل الإشارات المرجعية</translation>
 <translation id="1201402288615127009">التالي</translation>
 <translation id="1204037785786432551">تنزيل الرابط</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">نص</translation>
 <translation id="2082238445998314030">النتيجة <ph name="RESULT_NUMBER" /> من <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">المزامنة والتخصيص على الأجهزة</translation>
-<translation id="2099625543891475722">سماتك البدنية، مثل الطول</translation>
 <translation id="2100273922101894616">تسجيل الدخول تلقائيًا</translation>
 <translation id="2100314319871056947">يُرجى تجربة مشاركة النص في مجموعات أصغر.</translation>
 <translation id="2109711654079915747">‏تعرّف على مواضيع على مواقع إلكترونية بدون مغادرة الصفحة. تعمل ميزة "المس للبحث" على إرسال الكلمة والسياق المتعلق بها إلى "بحث Google"، وذلك للحصول على تعريفات وصور ونتائج بحث وتفاصيل أخرى ذات صلة بها.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">إدارة محرّكات البحث</translation>
 <translation id="381841723434055211">أرقام الهواتف</translation>
 <translation id="3819178904835489326">تم إلغاء <ph name="NUMBER_OF_DOWNLOADS" /> من عمليات التنزيل</translation>
-<translation id="3849365399446680203">أثناء استخدامك لتقنية "الواقع المعزّز"، قد يتمكن هذا الموقع الإلكتروني من:
-• إنشاء خريطة ثلاثية الأبعاد للبيئة المحيطة بك
-• تتبّع حركة الكاميرا
-
-لا يمكن لأحدٍ غيرك الاطّلاع على ما تُصوره الكاميرا. لا يمكن للموقع الإلكتروني الاطّلاع على الصور المُلتقَطة بالكاميرا.</translation>
 <translation id="3859306556332390985">الانتقال للأمام</translation>
 <translation id="388596076286380598">يمكنك الاطّلاع على المقالات والفيديوهات وغيرها من أنواع المحتوى في المواقع الإلكترونية التي تعجبك، حتى إذا كنت غير متصّل بالإنترنت أو كان اتصالك ضعيفًا.</translation>
 <translation id="3894427358181296146">إضافة مجلد</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">لا يتوفر اتصال بالإنترنت</translation>
 <translation id="4321739720395210191">تعذّر فتح الكاميرا. يمكنك إعادة تشغيل الجهاز والمحاولة مجددًا.</translation>
 <translation id="4351244548802238354">إغلاق مربع الحوار</translation>
-<translation id="4353114845960720315">أثناء استخدامك وضع "الواقع الافتراضي"، يمكن لهذا الموقع الإلكتروني التعرُّف على ما يلي:</translation>
 <translation id="4378154925671717803">هاتف</translation>
 <translation id="4384468725000734951">‏استخدام محرك Sogou للبحث</translation>
 <translation id="4404568932422911380">ليست هناك إشارات مرجعية</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">لا يتوفّر اتصال بالإنترنت</translation>
 <translation id="4565377596337484307">إخفاء كلمة المرور</translation>
 <translation id="4572422548854449519">تسجيل الدخول إلى الحساب المدار</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{قبل دقيقة واحدة (#)}zero{قبل # دقيقة}two{قبل دقيقتين (#)}few{قبل # دقائق}many{قبل # دقيقة}other{قبل # دقيقة}}</translation>
 <translation id="4587589328781138893">المواقع</translation>
 <translation id="4594952190837476234">تم إنشاء هذه الصفحة المتوفّرة بلا اتصال بالإنترنت في <ph name="CREATION_TIME" />، وقد تختلف عن النسخة المتوفِّرة على الإنترنت.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">فتح <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">استخدام كلمة المرور</translation>
 <translation id="4650364565596261010">الإعداد التلقائي للنظام</translation>
-<translation id="4660838440047236328">شكل غرفتك</translation>
 <translation id="4662373422909645029">يجب ألا يضم اللقب أرقامًا</translation>
 <translation id="4663756553811254707">تم حذف <ph name="NUMBER_OF_BOOKMARKS" /> من الإشارات المرجعية</translation>
 <translation id="4665282149850138822">تمت إضافة <ph name="NAME" /> إلى صفحتك الرئيسية</translation>
@@ -459,7 +449,6 @@
 
 لتغيير هذا الإعداد، يُرجى <ph name="BEGIN_LINK" />إعادة ضبط المزامنة<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">الاسم كما على البطاقة</translation>
-<translation id="4808319664292298116">هل تريد الدخول إلى وضع "الواقع الافتراضي" من <ph name="DOMAIN" />؟</translation>
 <translation id="4824958205181053313">هل تريد إلغاء المزامنة؟</translation>
 <translation id="4835385943915508971">‏لا تتوفر لمتصفح Chrome إمكانية الوصول إلى المورد المطلوب.</translation>
 <translation id="4837753911714442426">فتح الخيارات لطباعة الصفحة</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">إنهاء وضع ملء الشاشة</translation>
 <translation id="6404511346730675251">تعديل الإشارة المرجعية</translation>
 <translation id="6406506848690869874">المزامنة</translation>
-<translation id="6410973561433500075">هل تريد إطلاق "الواقع المعزّز" من <ph name="DOMAIN" />؟</translation>
 <translation id="641643625718530986">طباعة…</translation>
 <translation id="6427112570124116297">ترجمة موقع الويب</translation>
 <translation id="6433501201775827830">اختيار محرك البحث</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
index 83a3ef9..4e632f0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"শীর্ষ ছাইটসমূহ" বুটামটো টিপি জনপ্ৰিয় ৱেবছাইটসমূহ চাওক</translation>
 <translation id="1173894706177603556">নতুন নাম দিয়ক</translation>
 <translation id="1178581264944972037">পজ কৰক</translation>
-<translation id="1188239144602654184">AR আৰম্ভ কৰক</translation>
 <translation id="1197267115302279827">বুকমার্কসমূহ আঁতৰাওক</translation>
 <translation id="1201402288615127009">পৰৱৰ্তী</translation>
 <translation id="1204037785786432551">ডাউনল‘ড লিংক</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">পাঠ</translation>
 <translation id="2082238445998314030">ফলাফল <ph name="TOTAL_RESULTS" />ৰ ভিতৰত <ph name="RESULT_NUMBER" /></translation>
 <translation id="2096012225669085171">সকলো ডিভাইচতে ছিংক আৰু ব্যক্তিগতকৰণ কৰক</translation>
-<translation id="2099625543891475722">আপোনাৰ শাৰীৰিক বৈশিষ্ট্যসমূহ, যেনে উচ্চতা</translation>
 <translation id="2100273922101894616">স্বয়ংক্ৰিয়ভাৱে ছাইন ইন কৰক</translation>
 <translation id="2100314319871056947">পাঠখিনি সৰু সৰুকৈ ভাগ কৰি শ্বেয়াৰ কৰিবলৈ চেষ্টা কৰক</translation>
 <translation id="2109711654079915747">পৃষ্ঠাখন এৰি নোযোৱাকৈ ৱেবছাইটত থকা বিষয়বস্তুসমূহৰ বিষয়ে জানক। সন্ধান কৰিবলৈ স্পৰ্শ কৰক সুবিধাটোৱে এটা শব্দ আৰু ইয়াৰ প্ৰসংগ Google Searchলৈ পঠিয়ায় আৰু সংজ্ঞা, চিত্ৰ, সন্ধানৰ ফলাফলসমূহ আৰু অন্য সবিশেষ উভতাই দিয়ে।
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">পৰিচালনা কৰক</translation>
 <translation id="381841723434055211">ফ’ন নম্বৰসমূহ</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" />টা ডাউনল'ড মচা হ'ল</translation>
-<translation id="3849365399446680203">আপুনি ARত থাকোঁতে এই ছাইটটোৱে এইবোৰ কার্য কৰিবলৈ সক্ষম হ'ব পাৰে:
-• আপোনাৰ পৰিৱেশৰ বাবে এখন 3D মেপ সৃষ্টি কৰা
-• কেমেৰাৰ ম’শ্বন ট্রেক কৰা
-
-আপোনাৰ কেমেৰাটোৱে কিহৰ প্ৰতি দৃষ্টি দি আছে সেয়া কেৱল আপুনি দেখা পায়। ছাইটটোৱে আপোনাৰ কেমেৰাৰ প্ৰতিচ্ছবিসমূহ চাব নোৱাৰে।</translation>
 <translation id="3859306556332390985">আগলৈ যাওক</translation>
 <translation id="388596076286380598">আপুনি অফলাইন হৈ থাকিলে অথবা আপোনাৰ সংযোগটো বেয়া হৈ থাকিলেও আপুনি পচন্দ কৰা ছাইটসমূহৰ পৰা প্ৰবন্ধ, ভিডিঅ’ আৰু অন্য সমল পাওক।</translation>
 <translation id="3894427358181296146">ফ’ল্ডাৰ যোগ কৰক</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ইণ্টাৰনেট সংযোগ নাই</translation>
 <translation id="4321739720395210191">আপোনাৰ কেমেৰাটো খুলিব নোৱাৰি। আপোনাৰ ডিভাইচটো ৰিষ্টাৰ্ট কৰক আৰু পুনৰ চেষ্টা কৰক।</translation>
 <translation id="4351244548802238354">ডায়ল'গ বন্ধ কৰক</translation>
-<translation id="4353114845960720315">আপুনি VRত থাকোঁতে এই ছাইটটোৱে এইবোৰৰ বিষয়ে জানিবলৈ সক্ষম হ'ব পাৰে:</translation>
 <translation id="4378154925671717803">ফ'ন</translation>
 <translation id="4384468725000734951">সন্ধান কৰিবলৈ Sogou ব্যৱহাৰ কৰি থকা হৈছে</translation>
 <translation id="4404568932422911380">কোনো বুকমাৰ্ক নাই</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">ইণ্টাৰনেট নাই</translation>
 <translation id="4565377596337484307">পাছৱৰ্ড লুকুৱাওক</translation>
 <translation id="4572422548854449519">পৰিচালিত একাউণ্টত ছাইন ইন কৰক</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# মিনিট পূর্বে}one{# মিনিট পূর্বে}other{# মিনিট পূর্বে}}</translation>
 <translation id="4587589328781138893">ছাইটবোৰ</translation>
 <translation id="4594952190837476234">এই অফলাইন পৃষ্ঠাটো <ph name="CREATION_TIME" />ৰ আৰু এই পৃষ্ঠাটো অনলাইন সংস্কৰণতকৈ বেলেগ হ’ব পাৰে।</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> খোলক</translation>
 <translation id="4634124774493850572">পাছৱৰ্ড দিয়ক</translation>
 <translation id="4650364565596261010">ছিষ্টেম ডিফ’ল্ট</translation>
-<translation id="4660838440047236328">আপোনাৰ কোঠাটোৰ লে’আউট</translation>
 <translation id="4662373422909645029">উপনামত সংখ্যা থাকিব নোৱাৰে</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" />টা বুকমাৰ্ক মচা হ’ল</translation>
 <translation id="4665282149850138822">আপোনাৰ গৃহ স্ক্ৰীণত <ph name="NAME" />ক যোগ দিয়া হৈছে</translation>
@@ -459,7 +449,6 @@
 
 এই ছেটিংটো সলনি কৰিবলৈ <ph name="BEGIN_LINK" />ছিংক ৰিছেট কৰক<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">কার্ডত থকা নাম</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />ৰ পৰা VR আৰম্ভ কৰিবনে?</translation>
 <translation id="4824958205181053313">ছিংক বাতিল কৰিবনে?</translation>
 <translation id="4835385943915508971">অনুৰোধ জনোৱা সমললৈ Chromeৰ এক্সেছ নাই।</translation>
 <translation id="4837753911714442426">পৃষ্ঠা প্ৰিণ্ট কৰিবলৈ বিকল্প খোলক</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">সম্পূর্ণ স্ক্ৰীণ ম’ডৰ পৰা বাহিৰ হওক</translation>
 <translation id="6404511346730675251">বুকমার্ক সম্পাদনা কৰক</translation>
 <translation id="6406506848690869874">ছিংক কৰক</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" />ৰ পৰা ARত প্ৰৱেশ কৰিবনে?</translation>
 <translation id="641643625718530986">প্ৰিণ্ট কৰক…</translation>
 <translation id="6427112570124116297">ৱেবটো অনুবাদ কৰক</translation>
 <translation id="6433501201775827830">আপোনাৰ সন্ধানৰ ইঞ্জিন বাছনি কৰক</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
index f46e5b7..23eb11b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"Popluyar saytlar" seçiminə klikləyin və məşhur saytlara baxın</translation>
 <translation id="1173894706177603556">Adını dəyişin</translation>
 <translation id="1178581264944972037">Durdurun</translation>
-<translation id="1188239144602654184">AR-ə başlayın</translation>
 <translation id="1197267115302279827">Əlfəcinləri köçürün</translation>
 <translation id="1201402288615127009">Növbəti</translation>
 <translation id="1204037785786432551">Linki endirin</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">mətn</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> nəticədən <ph name="RESULT_NUMBER" /></translation>
 <translation id="2096012225669085171">Cihazlarda sinxronizaisya edin və fərdiləşdirin</translation>
-<translation id="2099625543891475722">boy kimi fiziki göstəriciləriniz</translation>
 <translation id="2100273922101894616">Hesaba avtomatik giriş</translation>
 <translation id="2100314319871056947">Mətni kiçik hissələrlə paylaşın</translation>
 <translation id="2109711654079915747">Səhifədən çıxmadan vebsaytlardakı mövzular haqqında öyrənin. "Axtarmaq üçün toxunun" funksiyası sözü və onun işləndiyi konteksti Google Axtarışa göndərir və izahlar, şəkillər, axtarış nəticələri və digər detalları göstərir.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">İdarə edin</translation>
 <translation id="381841723434055211">Telefon nömrələri</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> endirmə silindi</translation>
-<translation id="3849365399446680203">AR rejimində bu sayt aşağıdakıları edə bilər:
-• olduğunuz mühitin 3D xəritəsini yaratmaq
-• kamera hərəkətini izləmək
-
-Kamerada görünəni ancaq siz görə bilərsiniz. Sayt kameranızdakı şəkilləri görmür.</translation>
 <translation id="3859306556332390985">İrəli axtarın</translation>
 <translation id="388596076286380598">Oflayn və ya bağlantınız zəif olduqda belə, bəyəndiyiniz saytlardan məqalələr, videolar və digər məzmunu əldə edin.</translation>
 <translation id="3894427358181296146">Qovluq əlavə edin</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">İnternet bağlantısı yoxdur</translation>
 <translation id="4321739720395210191">Kameranı açmaq olmur. Cihazı yenidən başladıb təkrar cəhd edin.</translation>
 <translation id="4351244548802238354">Dialoqu qapadın</translation>
-<translation id="4353114845960720315">VR-da olarkən bu sayt aşağıdakı məlumatları əldə edə bilər:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Axtarış üçün Sogou istifadə edilir</translation>
 <translation id="4404568932422911380">Əlfəcin yoxdur</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Bağlantı yoxdur</translation>
 <translation id="4565377596337484307">Parolu gizlədin</translation>
 <translation id="4572422548854449519">İdarə olunan hesablara daxil olun</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# dəqiqə öncə}other{# dəqiqə öncə}}</translation>
 <translation id="4587589328781138893">Saytlar</translation>
 <translation id="4594952190837476234">Bu səhifə <ph name="CREATION_TIME" /> tarixində yaradılıb və onlayn versiyadan fərqli ola bilər.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Açın: <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Parol istifadə edin</translation>
 <translation id="4650364565596261010">Sistem defoltu</translation>
-<translation id="4660838440047236328">otağınızın tərtibatı</translation>
 <translation id="4662373422909645029">Ləqəbdə rəqəm olmamalıdır</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> əlfəcin silindi</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> əsas ekranınıza əlavə edildi</translation>
@@ -459,7 +449,6 @@
 
 Ayarı dəyişmək üçün <ph name="BEGIN_LINK" />sinxronizasiyanı sıfırlayın<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Kart Adı</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> domenindən VR daxil edilsin?</translation>
 <translation id="4824958205181053313">Sinxronizasiya ləğv edilsin?</translation>
 <translation id="4835385943915508971">Chrome'un sorğulanan mənbəyə girişi yoxdur.</translation>
 <translation id="4837753911714442426">Səhifəni çap etmək üçün seçimləri açın</translation>
@@ -657,7 +646,6 @@
 <translation id="6398765197997659313">Tam ekrandan çıxın</translation>
 <translation id="6404511346730675251">Əlfəcinə düzəliş edin</translation>
 <translation id="6406506848690869874">Sinx</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> saytından AR rejiminə daxil olunsun?</translation>
 <translation id="641643625718530986">Çap edin...</translation>
 <translation id="6427112570124116297">Vebi tərcümə edin</translation>
 <translation id="6433501201775827830">Axtarış sistemini seçin</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
index 5370af5..94255f6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Праглядайце папулярныя вэб-сайты, націснуўшы кнопку "Топ сайтаў"</translation>
 <translation id="1173894706177603556">Перайменаваць</translation>
 <translation id="1178581264944972037">Прыпыніць</translation>
-<translation id="1188239144602654184">Пачаць сеанс AR</translation>
 <translation id="1197267115302279827">Перамясціць закладкі</translation>
 <translation id="1201402288615127009">Далей</translation>
 <translation id="1204037785786432551">Спампаваць па спасылцы</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">тэкст</translation>
 <translation id="2082238445998314030">Вынік <ph name="RESULT_NUMBER" /> з <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Сінхранізацыя і персаналізацыя на ўсіх прыладах</translation>
-<translation id="2099625543891475722">вашы фізічныя характарыстыкі, такія як рост</translation>
 <translation id="2100273922101894616">Аўтаматычны ўваход</translation>
 <translation id="2100314319871056947">Паспрабуйце абагуліць тэкст меншымі кавалкамі</translation>
 <translation id="2109711654079915747">Даведайцеся больш пра тэмы на вэб-сайтах, не пакідаючы старонку. Функцыя "Пошук дотыкам" адпраўляе слова і яго кантэкст у Google Пошук і паказвае вынікі пошуку па запыце: азначэнні, фота і іншыя звесткі.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Кіраваць</translation>
 <translation id="381841723434055211">Нумары тэлефонаў</translation>
 <translation id="3819178904835489326">Выдалена спамповак: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Пакуль вы знаходзіцеся ў дапоўненай рэальнасці, гэты сайт можа:
-• ствараць 3D-карту вашага асяроддзя;
-• адсочваць рухі камеры.
-
-Толькі вы можаце бачыць тое, на што накіравана камера. Сайт не атрымлівае візуальную інфармацыю з камеры.</translation>
 <translation id="3859306556332390985">Перайсці ўперад</translation>
 <translation id="388596076286380598">Чытайце артыкулы, глядзіце відэа і іншае змесціва на любімых сайтах, нават калі вы не падключаны да інтэрнэту або якасць падключэння дрэнная.</translation>
 <translation id="3894427358181296146">Дадаць папку</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Няма падключэння да інтэрнэту</translation>
 <translation id="4321739720395210191">Не ўдалося адкрыць камеру. Перазапусціце прыладу і паўтарыце спробу.</translation>
 <translation id="4351244548802238354">Закрыць дыялогавае акно</translation>
-<translation id="4353114845960720315">Пакуль вы знаходзіцеся ў VR, гэты сайт можа атрымліваць звесткі пра:</translation>
 <translation id="4378154925671717803">Тэлефон</translation>
 <translation id="4384468725000734951">Выкарыстоўваецца пошукавая сістэма Sogou</translation>
 <translation id="4404568932422911380">Няма закладак</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Няма падключэння</translation>
 <translation id="4565377596337484307">Схаваць пароль</translation>
 <translation id="4572422548854449519">Увайдзіце ва ўліковы запіс пад кіраваннем</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{1 хвіліну таму}one{# хвіліну таму}few{# хвіліны таму}many{# хвілін таму}other{# хвіліны таму}}</translation>
 <translation id="4587589328781138893">Сайты</translation>
 <translation id="4594952190837476234">Гэта пазасеткавая старонка створана <ph name="CREATION_TIME" /> і можа адрознівацца ад сваёй інтэрнэт-версіі.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Адкрыць <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Выкарыстаць пароль</translation>
 <translation id="4650364565596261010">Стандартная сістэмная</translation>
-<translation id="4660838440047236328">планіроўку вашага пакоя</translation>
 <translation id="4662373422909645029">Псеўданім не можа ўключаць лічбы</translation>
 <translation id="4663756553811254707">Закладкі (<ph name="NUMBER_OF_BOOKMARKS" />) выдалены</translation>
 <translation id="4665282149850138822">Карыстальнік <ph name="NAME" /> дададзены на галоўны экран</translation>
@@ -459,7 +449,6 @@
 
 Каб змяніць гэту наладу, <ph name="BEGIN_LINK" />скіньце налады сінхранізацыі<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Імя на картцы</translation>
-<translation id="4808319664292298116">Увайсці ў VR з сайта <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Скасаваць сінхранізацыю?</translation>
 <translation id="4835385943915508971">Chrome не мае доступу да запытанай крыніцы.</translation>
 <translation id="4837753911714442426">Адкрыць параметры друку старонкі</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Выключыць поўнаэкранны рэжым</translation>
 <translation id="6404511346730675251">Змяніце закладку</translation>
 <translation id="6406506848690869874">Сінхранізаваць</translation>
-<translation id="6410973561433500075">Увайсці ў дапоўненую рэальнасць з сайта <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Друк…</translation>
 <translation id="6427112570124116297">Пераклад вэб-старонак</translation>
 <translation id="6433501201775827830">Выберыце пошукавую сістэму</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
index 978c643..4fbeecf4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Вижте популярните уебсайтове, като докоснете бутона „Водещи сайтове“</translation>
 <translation id="1173894706177603556">Преименуване</translation>
 <translation id="1178581264944972037">Пауза</translation>
-<translation id="1188239144602654184">Стартиране на AR</translation>
 <translation id="1197267115302279827">Преместване на отметки</translation>
 <translation id="1201402288615127009">Напред</translation>
 <translation id="1204037785786432551">Изтегляне на връзката</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">текст</translation>
 <translation id="2082238445998314030">Резултат <ph name="RESULT_NUMBER" /> от <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Синхронизиране и персонализиране на всички устройства</translation>
-<translation id="2099625543891475722">физическите ви черти, като ръст;</translation>
 <translation id="2100273922101894616">Автоматичен вход</translation>
 <translation id="2100314319871056947">Опитайте да споделите текста на по-малки части</translation>
 <translation id="2109711654079915747">Научавайте за теми от уебсайтовете, без да излизате от страницата. Функцията за търсене чрез докосване изпраща до Google Търсене дума и заобикалящия я текст, след което извежда определения, снимки, резултати и други подробности.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Управление</translation>
 <translation id="381841723434055211">Телефонни номера</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> изтегляния бяха изтрити</translation>
-<translation id="3849365399446680203">Докато сте в AR, този сайт може да е в състояние:
-• да създаде триизмерна карта на заобикалящата ви среда;
-• да проследява движенията на камерата.
-
-Само вие можете да виждате към какво гледа камерата ви. Сайтът не може да види изображенията от камерата ви.</translation>
 <translation id="3859306556332390985">Придвижване напред</translation>
 <translation id="388596076286380598">Получавайте статии, видеоклипове и друго съдържание от сайтовете, които харесвате, дори ако сте офлайн или връзката е лоша.</translation>
 <translation id="3894427358181296146">Добавяне на папка</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Няма връзка с интернет</translation>
 <translation id="4321739720395210191">Камерата не може да се отвори. Рестартирайте устройството си и опитайте отново.</translation>
 <translation id="4351244548802238354">Затваряне на диалоговия прозорец</translation>
-<translation id="4353114845960720315">Когато стартирате VR, този сайт може да научи за:</translation>
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">За търсене ще се използва Sogou</translation>
 <translation id="4404568932422911380">Няма отметки</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Няма връзка</translation>
 <translation id="4565377596337484307">Скриване на паролата</translation>
 <translation id="4572422548854449519">Вход в управляван профил</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{преди # минута}other{преди # минути}}</translation>
 <translation id="4587589328781138893">Сайтове</translation>
 <translation id="4594952190837476234">Тази офлайн страница е от <ph name="CREATION_TIME" /> и може да се различава от онлайн версията.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Отваряне на <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Използване на паролата</translation>
 <translation id="4650364565596261010">Стандартно за системата</translation>
-<translation id="4660838440047236328">плана на стаята ви.</translation>
 <translation id="4662373422909645029">Не може да съдържа цифри</translation>
 <translation id="4663756553811254707">Изтрихте <ph name="NUMBER_OF_BOOKMARKS" /> отметки</translation>
 <translation id="4665282149850138822">Добавихте <ph name="NAME" /> към началния екран</translation>
@@ -459,7 +449,6 @@
 
 За да промените тази настройка, <ph name="BEGIN_LINK" />нулирайте синхронизирането<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Име върху картата</translation>
-<translation id="4808319664292298116">Да се стартира ли VR от <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Да се анулира ли синхронизирането?</translation>
 <translation id="4835385943915508971">Chrome няма достъп до заявения ресурс.</translation>
 <translation id="4837753911714442426">Отваряне на опциите за отпечатване на страницата</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Изход от цял екран</translation>
 <translation id="6404511346730675251">Редактиране на отметката</translation>
 <translation id="6406506848690869874">Синхронизиранe</translation>
-<translation id="6410973561433500075">Да се стартира ли AR от <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Печат…</translation>
 <translation id="6427112570124116297">Превод на всичко в мрежата</translation>
 <translation id="6433501201775827830">Изберете машина за търсене</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
index 6f245ef..2b5fc46 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"সেরা সাইট" বোতামে ট্যাপ করে জনপ্রিয় ওয়েবসাইটগুলি দেখুন</translation>
 <translation id="1173894706177603556">পুনঃনামকরণ</translation>
 <translation id="1178581264944972037">বিরতি</translation>
-<translation id="1188239144602654184">এ আর সেশন শুরু করুন</translation>
 <translation id="1197267115302279827">বুকমার্কগুলি সরান</translation>
 <translation id="1201402288615127009">পরবর্তী</translation>
 <translation id="1204037785786432551">লিঙ্ক ডাউনলোড করুন</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">টেক্সট</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> এর মধ্যে <ph name="RESULT_NUMBER" /> টি ফলাফল</translation>
 <translation id="2096012225669085171">বিভিন্ন ডিভাইস জুড়ে সিঙ্ক এবং ব্যক্তিগতকৃত করুন</translation>
-<translation id="2099625543891475722">আপনার শারীরিক বৈশিষ্ট্য, যেমন উচ্চতা</translation>
 <translation id="2100273922101894616">অটো সাইন-ইন</translation>
 <translation id="2100314319871056947">টেক্সটটি ছোট ছোট ভাগে ভাগ করে পাঠানোর চেষ্টা করুন</translation>
 <translation id="2109711654079915747">পৃষ্ঠা থেকে না বেরিয়েই ওয়েবসাইটের বিষয়গুলির ব্যাপারে জানুন। 'টাচ করে সার্চ করুন' ফিচারটি Google Search-এ একটি শব্দ ও তার আনুষঙ্গিক প্রসঙ্গ পাঠায়, যার উত্তরে Google Search বিভিন্ন সংজ্ঞা, ছবি, সার্চের ফলাফল ও অন্যান্য বিবরণ দেখায়।
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">পরিচালনা</translation>
 <translation id="381841723434055211">ফোন নম্বর</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" />টি ডাউনলোড মোছা হয়েছে</translation>
-<translation id="3849365399446680203">আপনার ডিভাইস এআর (AR) মোডে থাকলে এই সাইট এগুলি করতে পারবে:
-• আপনার চারপাশের পরিবেশের একটি 3D ম্যাপ তৈরি করতে পারবে
-• ক্যামেরা মোশন ট্র্যাক করবে
-
-আপনি শুধুমাত্র সেটাই দেখাতে পাবেন যেটা আপনার ক্যামেরাতে ফোকাস হয়। ক্যামেরাতে যে ছবিগুলি দেখা যাচ্ছে, সাইট সেগুলি দেখতে পায় না।</translation>
 <translation id="3859306556332390985">সামনে এগোন</translation>
 <translation id="388596076286380598">আপনি অফলাইনে থাকার সময়ে বা কানেকশন খারাপ থাকলেও আপনার পছন্দের সাইট থেকে আর্টিকেল, ভিডিও এবং অন্যান্য কন্টেন্ট দেখতে পাবেন।</translation>
 <translation id="3894427358181296146">ফোল্ডার যোগ করুন</translation>
@@ -401,7 +394,6 @@
 <translation id="4320177379694898372">কোনো ইন্টারনেট সংযোগ নেই</translation>
 <translation id="4321739720395210191">ক্যামেরা চালু করা যাচ্ছে না। ডিভাইস রিস্টার্ট করে আবার চেষ্টা করুন।</translation>
 <translation id="4351244548802238354">ডায়ালগ বন্ধ করুন</translation>
-<translation id="4353114845960720315">আপনি ভিআর (VR) মোডে থাকলে এই সাইট যে বিষয় সম্পর্কে জানতে পারে তা হল:</translation>
 <translation id="4378154925671717803">ফোন</translation>
 <translation id="4384468725000734951">সার্চের জন্য Sogou কে ব্যবহার করছে</translation>
 <translation id="4404568932422911380">কোনও বুকমার্ক নেই</translation>
@@ -429,7 +421,6 @@
 <translation id="4561979708150884304">কোনও কানেকশন নেই</translation>
 <translation id="4565377596337484307">পাসওয়ার্ড লুকান</translation>
 <translation id="4572422548854449519">ম্যানেজ করা অ্যাকাউন্টে সাইন-ইন করুন</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# মিনিট আগে}one{# মিনিট আগে}other{# মিনিট আগে}}</translation>
 <translation id="4587589328781138893">সাইটগুলি</translation>
 <translation id="4594952190837476234">এই অফলাইন পৃষ্ঠাটি <ph name="CREATION_TIME" />-এ তৈরি করা হয়েছিল এবং এটি অনলাইন ভার্সনের থেকে আলাদা হতে পারে।</translation>
@@ -437,7 +428,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> খুলুন</translation>
 <translation id="4634124774493850572">পাসওয়ার্ড ব্যবহার করুন</translation>
 <translation id="4650364565596261010">সিস্টেম ডিফল্ট</translation>
-<translation id="4660838440047236328">আপনার রুমের লে-আউট</translation>
 <translation id="4662373422909645029">ডাকনামে সংখ্যা থাকবে না</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" />টি বুকমার্ক মোছা হয়েছে</translation>
 <translation id="4665282149850138822">আপনার হোম স্ক্রীনে <ph name="NAME" /> কে যোগ করা হয়েছে</translation>
@@ -461,7 +451,6 @@
 
 <ph name="BEGIN_LINK" />রিসেট সিঙ্ক<ph name="END_LINK" /> থেকে এই সেটিং পরিবর্তন করুন</translation>
 <translation id="4807098396393229769">কার্ডে থাকা নাম</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> থেকে ভিআর (VR) প্রেজেন্টেশন চালু করতে চান?</translation>
 <translation id="4824958205181053313">সিঙ্ক বাতিল করতে চান?</translation>
 <translation id="4835385943915508971">অনুরোধকৃত সম্পদে Chrome এর অ্যাক্সেস নেই।</translation>
 <translation id="4837753911714442426">‘পৃষ্ঠা প্রিন্ট করুন’-এর বিকল্পগুলি খুলুন</translation>
@@ -661,7 +650,6 @@
 <translation id="6398765197997659313">পূর্ণ স্ক্রীণ বন্ধ করুন</translation>
 <translation id="6404511346730675251">বুকমার্ক সম্পাদনা করুন</translation>
 <translation id="6406506848690869874">সিঙ্ক</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> থেকে এআর (AR) মোডে যাবেন?</translation>
 <translation id="641643625718530986">প্রিন্ট...</translation>
 <translation id="6427112570124116297">ওয়েবের কন্টেন্ট অনুবাদ করুন</translation>
 <translation id="6433501201775827830">আপনার সার্চ ইঞ্জিন বেছে নিন</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index d18a683f..85554c0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Dodirnite dugme "Popularno" i pristupite popularnim web lokacijama</translation>
 <translation id="1173894706177603556">Promijeni naziv</translation>
 <translation id="1178581264944972037">Pauziraj</translation>
-<translation id="1188239144602654184">Pristupi AR-u</translation>
 <translation id="1197267115302279827">Premjesti oznake</translation>
 <translation id="1201402288615127009">Naprijed</translation>
 <translation id="1204037785786432551">Link za preuzimanje</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">tekst</translation>
 <translation id="2082238445998314030">Rezultat <ph name="RESULT_NUMBER" /> od <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sinhronizirajte i personalizirajte na svim uređajima</translation>
-<translation id="2099625543891475722">vaše fizičke osobine, kao što je visina</translation>
 <translation id="2100273922101894616">Automatsko prijavljivanje</translation>
 <translation id="2100314319871056947">Pokušajte dijeliti tekst u manjim segmentima</translation>
 <translation id="2109711654079915747">Saznajte više o temama na web lokacijama bez napuštanja stranice. Kada dodirnete Pretraživanje, poslat ćete riječ i njen kontekst u Google Pretraživanje, a dobit ćete definicije, slike, rezultate pretraživanja i druge detalje.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Upravljaj</translation>
 <translation id="381841723434055211">Brojevi telefona</translation>
 <translation id="3819178904835489326">Broj izbrisanih preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Dok ste u AR-u, ova web lokacija može:
-• kreirati 3D mapu vašeg okruženja
-• pratiti kretanje kamere
-
-Samo vi možete vidjeti prikaz kamere. Web lokacija ne može vidjeti slike kamere.</translation>
 <translation id="3859306556332390985">Pomakni naprijed</translation>
 <translation id="388596076286380598">Preuzmite članke, videozapise i drugi sadržaj s web lokacija koje vam se sviđaju, čak i kada ste van mreže ili kada vam je veza slaba.</translation>
 <translation id="3894427358181296146">Dodaj folder</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nema internetske veze</translation>
 <translation id="4321739720395210191">Nije moguće otvoriti kameru. Ponovo pokrenite uređaj i pokušajte ponovo.</translation>
 <translation id="4351244548802238354">Zatvori dijalog</translation>
-<translation id="4353114845960720315">Dok ste u VR-u, ova web lokacija može saznati sljedeće:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Za pretraživanje se koristi Sogou</translation>
 <translation id="4404568932422911380">Nema oznaka</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Niste povezani na mrežu</translation>
 <translation id="4565377596337484307">Sakrij lozinku</translation>
 <translation id="4572422548854449519">Prijava na upravljani račun</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{prije # minute}one{prije # minute}few{prije # minute}other{prije # minuta}}</translation>
 <translation id="4587589328781138893">Web lokacije</translation>
 <translation id="4594952190837476234">Stranica van mreže je od <ph name="CREATION_TIME" /> i može se razlikovati od verzije koja je na mreži.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Koristi lozinku</translation>
 <translation id="4650364565596261010">Zadana postavka sustava</translation>
-<translation id="4660838440047236328">raspored stvari u vašoj sobi</translation>
 <translation id="4662373422909645029">Nadimak ne može imati brojeve</translation>
 <translation id="4663756553811254707">Broj izbrisanih oznaka: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Web lokacija <ph name="NAME" /> je dodana na vaš Početni ekran</translation>
@@ -459,7 +449,6 @@
 
 Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Ime i prezime na kartici</translation>
-<translation id="4808319664292298116">Pristupiti VR-u s domene <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Otkazati sinhroniziranje?</translation>
 <translation id="4835385943915508971">Chrome nema pristup traženom resursu.</translation>
 <translation id="4837753911714442426">Otvorite opcije za štampanje stranice</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Napusti prikaz preko cijelog ekrana</translation>
 <translation id="6404511346730675251">Uredite oznaku</translation>
 <translation id="6406506848690869874">Sinhronizacija</translation>
-<translation id="6410973561433500075">Pokrenuti AR s domene <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Štampaj…</translation>
 <translation id="6427112570124116297">Prevedite web</translation>
 <translation id="6433501201775827830">Odaberite pretraživač</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
index 1b673bd9..743dd080 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Toca el botó Llocs populars per veure les tendències en llocs web</translation>
 <translation id="1173894706177603556">Canvia el nom</translation>
 <translation id="1178581264944972037">Posa en pausa</translation>
-<translation id="1188239144602654184">Entra a la realitat augmentada</translation>
 <translation id="1197267115302279827">Mou les adreces d'interès</translation>
 <translation id="1201402288615127009">Següent</translation>
 <translation id="1204037785786432551">Baixa l'enllaç</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">text</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincronitza i personalitza el contingut en tots els dispositius</translation>
-<translation id="2099625543891475722">els teus trets físics, com ara l'alçada</translation>
 <translation id="2100273922101894616">Inici de sessió automàtic</translation>
 <translation id="2100314319871056947">Prova de compartir el text en fragments més petits</translation>
 <translation id="2109711654079915747">Obtén informació sobre temes dels llocs web sense sortir de la pàgina. La funció Toca per cercar envia una paraula i el context que l'envolta a la Cerca de Google i torna definicions, imatges, resultats de la cerca i altres detalls.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gestiona</translation>
 <translation id="381841723434055211">Números de telèfon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> baixades suprimides</translation>
-<translation id="3849365399446680203">Mentre estiguis en el mode RA, pot ser que aquest lloc web pugui fer el següent:
-• Crear un mapa en 3D del teu entorn.
-• Fer un seguiment del moviment de la càmera.
-
-Només tu pots veure allò que la càmera veu. El lloc web no pot veure les imatges de la càmera.</translation>
 <translation id="3859306556332390985">Avança</translation>
 <translation id="388596076286380598">Accedeix a articles, vídeos i altres continguts dels llocs web que t'agraden encara que no tinguis connexió o que la connexió sigui deficient.</translation>
 <translation id="3894427358181296146">Afegeix una carpeta</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">No hi ha connexió a Internet</translation>
 <translation id="4321739720395210191">No es pot obrir la càmera. Reinicia el dispositiu i torna-ho a provar.</translation>
 <translation id="4351244548802238354">Tanca el quadre de diàleg</translation>
-<translation id="4353114845960720315">Mentre estiguis en el mode RV, pot ser que aquest lloc web obtingui la informació següent:</translation>
 <translation id="4378154925671717803">Telèfon</translation>
 <translation id="4384468725000734951">S'utilitza Sogou per a la cerca</translation>
 <translation id="4404568932422911380">Cap adreça d'interès</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">No hi ha connexió</translation>
 <translation id="4565377596337484307">Oculta la contrasenya</translation>
 <translation id="4572422548854449519">Inicia la sessió al compte gestionat</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{fa # minut}other{fa # minuts}}</translation>
 <translation id="4587589328781138893">Llocs web</translation>
 <translation id="4594952190837476234">Aquesta pàgina sense connexió és del dia <ph name="CREATION_TIME" /> i pot ser diferent de la versió en línia.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Obre <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Fes servir la contrasenya</translation>
 <translation id="4650364565596261010">Opció predeterminada del sistema</translation>
-<translation id="4660838440047236328">la distribució de la teva habitació</translation>
 <translation id="4662373422909645029">L'àlies no pot incloure nombres</translation>
 <translation id="4663756553811254707">S'han suprimit <ph name="NUMBER_OF_BOOKMARKS" /> adreces d'interès</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> s'ha afegit a la pantalla d'inici</translation>
@@ -459,7 +449,6 @@
 
 Per canviar aquesta opció, <ph name="BEGIN_LINK" />restableix la sincronització<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Titular de la targeta</translation>
-<translation id="4808319664292298116">Vols entrar al mode RV des del domini <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Vols cancel·lar la sincronització?</translation>
 <translation id="4835385943915508971">Chrome no té accés al recurs sol·licitat.</translation>
 <translation id="4837753911714442426">Obre les opcions per imprimir la pàgina</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Surt del mode de pantalla completa</translation>
 <translation id="6404511346730675251">Edita l'adreça d'interès</translation>
 <translation id="6406506848690869874">Sincronització</translation>
-<translation id="6410973561433500075">Vols entrar al mode RA des del domini <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Imprimeix…</translation>
 <translation id="6427112570124116297">Tradueix el web</translation>
 <translation id="6433501201775827830">Tria el motor de cerca</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
index 6ca870e0..be4b48b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Populární weby zobrazíte klepnutím na tlačítko Top weby</translation>
 <translation id="1173894706177603556">Přejmenovat</translation>
 <translation id="1178581264944972037">Pozastavit</translation>
-<translation id="1188239144602654184">Spustit rozšířenou realitu</translation>
 <translation id="1197267115302279827">Přesunutí záložek</translation>
 <translation id="1201402288615127009">Další</translation>
 <translation id="1204037785786432551">Stáhnout odkaz</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">text</translation>
 <translation id="2082238445998314030">Výsledek <ph name="RESULT_NUMBER" /> z <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synchronizovat a přizpůsobit na různých zařízeních</translation>
-<translation id="2099625543891475722">vaše fyzické vlastnosti, například výšku,</translation>
 <translation id="2100273922101894616">Přihlásit se automaticky</translation>
 <translation id="2100314319871056947">Zkuste text sdílet po menších částech</translation>
 <translation id="2109711654079915747">Vyhledávejte informace o tématech zmíněných na stránce, aniž byste stránku museli opustit. Klepnutím na Vyhledat odešlete slovo a okolní kontext do Vyhledávání Google, které vrátí definice, obrázky, výsledky vyhledávání a další podrobnosti.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Spravovat</translation>
 <translation id="381841723434055211">Telefonní čísla</translation>
 <translation id="3819178904835489326">Počet smazaných stažených souborů: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">V režimu rozšířené reality bude tento web moci:
-• vytvořit 3D mapu vašeho okolí,
-• sledovat pohyb kamery.
-
-Pouze vy uvidíte, na co se kamera zaměřuje. Web snímky z kamery neuvidí.</translation>
 <translation id="3859306556332390985">Přetočit dopředu</translation>
 <translation id="388596076286380598">Články, videa a další obsah z webů, které se vám líbí, může sledovat i v režimu offline nebo při nekvalitním připojení.</translation>
 <translation id="3894427358181296146">Přidat složku</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Žádné připojení k internetu</translation>
 <translation id="4321739720395210191">Kameru nelze otevřít. Restartujte zařízení a zkuste to znovu.</translation>
 <translation id="4351244548802238354">Zavřít dialogové okno</translation>
-<translation id="4353114845960720315">V režimu virtuální reality tento web může získat následující informace:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">K vyhledávání se používá služba Sogou</translation>
 <translation id="4404568932422911380">Žádné záložky</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Žádné připojení</translation>
 <translation id="4565377596337484307">Skrýt heslo</translation>
 <translation id="4572422548854449519">Přihlaste se ke spravovanému účtu</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{před # minutou}few{před # minutami}many{před # minuty}other{před # minutami}}</translation>
 <translation id="4587589328781138893">Weby</translation>
 <translation id="4594952190837476234">Tato offline stránka je z <ph name="CREATION_TIME" /> a může se od online verze lišit.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Do aplikace <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Použít heslo</translation>
 <translation id="4650364565596261010">Výchozí nastavení systému</translation>
-<translation id="4660838440047236328">rozvržení vaší místnosti.</translation>
 <translation id="4662373422909645029">Přezdívka nesmí obsahovat čísla</translation>
 <translation id="4663756553811254707">Smazané záložky: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Na plochu byl přidán web <ph name="NAME" /></translation>
@@ -459,7 +449,6 @@
 
 Chcete-toto nastavení změnit, <ph name="BEGIN_LINK" />resetujte synchronizaci<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Jméno na kartě</translation>
-<translation id="4808319664292298116">Spustit virtuální realitu z webu <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Zrušit synchronizaci?</translation>
 <translation id="4835385943915508971">Chrome k požadovanému zdroji nemá přístup.</translation>
 <translation id="4837753911714442426">Otevřít možnosti tisku stránky</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Ukončit režim celé obrazovky</translation>
 <translation id="6404511346730675251">Upravit záložku</translation>
 <translation id="6406506848690869874">Synchronizace</translation>
-<translation id="6410973561433500075">Spustit rozšířenou realitu z webu <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Tisk…</translation>
 <translation id="6427112570124116297">Přeložte si web</translation>
 <translation id="6433501201775827830">Vyberte vyhledávač</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
index 39b006c6..6504581 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Se populære websites ved at trykke på knappen "Topwebsites"</translation>
 <translation id="1173894706177603556">Omdøb</translation>
 <translation id="1178581264944972037">Pause</translation>
-<translation id="1188239144602654184">Start AR</translation>
 <translation id="1197267115302279827">Flyt bogmærker</translation>
 <translation id="1201402288615127009">Næste</translation>
 <translation id="1204037785786432551">Download link</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">tekst</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> af <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synkroniser og tilpas på flere enheder</translation>
-<translation id="2099625543891475722">Dine fysiske træk som f.eks. højde</translation>
 <translation id="2100273922101894616">Automatisk login</translation>
 <translation id="2100314319871056947">Prøv at opdele teksten i mindre stykker</translation>
 <translation id="2109711654079915747">Læs om emner på websites uden at forlade siden. Funktionen Tryk for at søge sender et ord og ordets kontekst til Google Søgning og giver dig definitioner, billeder, søgeresultater og andre oplysninger.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Valgmuligheder</translation>
 <translation id="381841723434055211">Telefonnumre</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads blev slettet</translation>
-<translation id="3849365399446680203">Når du bruger AR, kan dette website muligvis:
-• oprette et 3D-kort over dine omgivelser
-• spore kamerabevægelser
-
-Det er kun dig, der kan se, hvad kameraet ser. Websitet kan ikke se kameraets billeder.</translation>
 <translation id="3859306556332390985">Spol fremad</translation>
 <translation id="388596076286380598">Få adgang til artikler, videoer og andet indhold fra de websites, du kan lide, selvom du er offline eller har en dårlig forbindelse.</translation>
 <translation id="3894427358181296146">Tilføj mappe</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Ingen internetforbindelse</translation>
 <translation id="4321739720395210191">Dit kamera kan ikke åbnes. Genstart din enhed, og prøv igen.</translation>
 <translation id="4351244548802238354">Luk dialogboksen</translation>
-<translation id="4353114845960720315">Mens du bruger VR-tilstand, kan dette website muligvis få oplysninger om:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Søgning via Sogou</translation>
 <translation id="4404568932422911380">Der er ingen bogmærker</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Der er ingen forbindelse</translation>
 <translation id="4565377596337484307">Skjul adgangskode</translation>
 <translation id="4572422548854449519">Log ind på managerstyret konto</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{For # minut siden}one{For # minut siden}other{For # minutter siden}}</translation>
 <translation id="4587589328781138893">Websites</translation>
 <translation id="4594952190837476234">Denne offlineside er fra <ph name="CREATION_TIME" /> og kan afvige fra onlineversionen.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Åbn <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Brug adgangskode</translation>
 <translation id="4650364565596261010">Systemstandard</translation>
-<translation id="4660838440047236328">Layoutet af dit rum</translation>
 <translation id="4662373422909645029">Kaldenavnet må ikke indeholde tal</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bogmærker blev slettet</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> blev føjet til din startskærm</translation>
@@ -459,7 +449,6 @@
 
 Hvis du vil ændre denne indstilling, skal du <ph name="BEGIN_LINK" />nulstille synkronisering<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Navn på kort</translation>
-<translation id="4808319664292298116">Vil du starte VR fra <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Vil du annullere synkroniseringen?</translation>
 <translation id="4835385943915508971">Chrome har ikke adgang til den ressource, du anmoder om.</translation>
 <translation id="4837753911714442426">Åbn valgmuligheder for udskrivning af siden</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Afslut fuld skærm</translation>
 <translation id="6404511346730675251">Rediger bogmærke</translation>
 <translation id="6406506848690869874">Synkronisering</translation>
-<translation id="6410973561433500075">Vil du starte AR fra <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Udskriv…</translation>
 <translation id="6427112570124116297">Oversæt på nettet</translation>
 <translation id="6433501201775827830">Vælg en søgemaskine</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
index 2224fe9..9acdc2b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Tippen Sie auf die Schaltfläche "Top-Websites", um beliebte Websites zu sehen</translation>
 <translation id="1173894706177603556">Umbenennen</translation>
 <translation id="1178581264944972037">Anhalten</translation>
-<translation id="1188239144602654184">AR-Sitzung starten</translation>
 <translation id="1197267115302279827">Lesezeichen verschieben</translation>
 <translation id="1201402288615127009">Weiter</translation>
 <translation id="1204037785786432551">Link herunterladen</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">Text</translation>
 <translation id="2082238445998314030">Ergebnis <ph name="RESULT_NUMBER" /> von <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Geräteübergreifend synchronisieren und personalisieren</translation>
-<translation id="2099625543891475722">physische Merkmale wie Ihre Größe</translation>
 <translation id="2100273922101894616">Automatisch anmelden</translation>
 <translation id="2100314319871056947">Teilen Sie den Text am besten in mehreren Abschnitten</translation>
 <translation id="2109711654079915747">Erfahren Sie mehr über Website-Themen, ohne die Seite zu verlassen. Mit der Option "Zum Suchen tippen" werden ein Wort sowie dessen Kontext an die Google-Suche gesendet. Daraufhin erhalten Sie Definitionen, Bilder, Suchergebnisse und andere Details.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Verwalten</translation>
 <translation id="381841723434055211">Telefonnummern</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> Downloads gelöscht</translation>
-<translation id="3849365399446680203">Während Sie im AR-Modus sind, kann die Website möglicherweise:
-• eine dreidimensionale Karte Ihrer Umgebung erstellen
-• die Bewegung der Kamera verfolgen
-
-Nur Sie können sehen, auf was Ihre Kamera gerichtet ist. Die Website kann die Bilder Ihrer Kamera nicht sehen.</translation>
 <translation id="3859306556332390985">Nach vorne navigieren</translation>
 <translation id="388596076286380598">Erhalten Sie Artikel, Videos und weitere Inhalte von Websites, die Ihnen gefallen – auch offline oder bei schlechter Internetverbindung.</translation>
 <translation id="3894427358181296146">Ordner hinzufügen</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Keine Internetverbindung</translation>
 <translation id="4321739720395210191">Die Kamera kann nicht geöffnet werden. Starten Sie das Gerät neu und versuchen Sie es noch einmal.</translation>
 <translation id="4351244548802238354">Dialogfeld schließen</translation>
-<translation id="4353114845960720315">Während Sie im VR-Modus sind, erhält die Website möglicherweise bestimmte Informationen über Sie. Dazu gehören:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Suche erfolgt mit Sogou</translation>
 <translation id="4404568932422911380">Keine Lesezeichen</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Keine Verbindung</translation>
 <translation id="4565377596337484307">Passwort ausblenden</translation>
 <translation id="4572422548854449519">In verwaltetem Konto anmelden</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{vor # Minute}other{vor # Minuten}}</translation>
 <translation id="4587589328781138893">Websites</translation>
 <translation id="4594952190837476234">Diese Offlineseite ist vom <ph name="CREATION_TIME" /> und unterscheidet sich gegebenenfalls von der Onlineversion.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> öffnen</translation>
 <translation id="4634124774493850572">Passwort verwenden</translation>
 <translation id="4650364565596261010">Systemstandardeinstellung</translation>
-<translation id="4660838440047236328">der Grundriss Ihres Zimmers</translation>
 <translation id="4662373422909645029">Der Alias darf keine Zahlen enthalten</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> Lesezeichen gelöscht</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> wurde Ihrem Startbildschirm hinzugefügt.</translation>
@@ -459,7 +449,6 @@
 
 Wenn Sie diese Einstellung ändern möchten, <ph name="BEGIN_LINK" />setzen Sie die Synchronisierung zurück<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Name auf Karte</translation>
-<translation id="4808319664292298116">VR von <ph name="DOMAIN" /> aus aktivieren?</translation>
 <translation id="4824958205181053313">Synchronisierung abbrechen?</translation>
 <translation id="4835385943915508971">Chrome hat keinen Zugriff auf die angeforderte Ressource.</translation>
 <translation id="4837753911714442426">Optionen zum Drucken einer Seite öffnen</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Vollbildmodus beenden</translation>
 <translation id="6404511346730675251">Lesezeichen bearbeiten</translation>
 <translation id="6406506848690869874">Synchronisierung</translation>
-<translation id="6410973561433500075">AR-Modus über <ph name="DOMAIN" /> aktivieren?</translation>
 <translation id="641643625718530986">Drucken...</translation>
 <translation id="6427112570124116297">Das Web übersetzen</translation>
 <translation id="6433501201775827830">Suchmaschine auswählen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
index d76a3284..dcb42bb1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Δείτε δημοφιλείς ιστοτόπους πατώντας το κουμπί "Κορυφαίοι ιστότοποι"</translation>
 <translation id="1173894706177603556">Μετονομασία</translation>
 <translation id="1178581264944972037">Παύση</translation>
-<translation id="1188239144602654184">Έναρξη AR</translation>
 <translation id="1197267115302279827">Μετακίνηση σελιδοδεικτών</translation>
 <translation id="1201402288615127009">Επόμενο</translation>
 <translation id="1204037785786432551">Λήψη συνδέσμου</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">κείμενο</translation>
 <translation id="2082238445998314030">Αποτέλεσμα <ph name="RESULT_NUMBER" /> από <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Συγχρονισμός και εξατομίκευση σε όλες τις συσκευές</translation>
-<translation id="2099625543891475722">τα φυσικά χαρακτηριστικά σας, όπως το ύψος σας</translation>
 <translation id="2100273922101894616">Αυτόματη σύνδεση</translation>
 <translation id="2100314319871056947">Δοκιμάστε να κοινοποιήσετε το κείμενο σε μικρότερα τμήματα.</translation>
 <translation id="2109711654079915747">Μάθετε περισσότερα για θέματα σε ιστοτόπους, χωρίς να απομακρυνθείτε από τη σελίδα. Η λειτουργία Αγγίξτε για αναζήτηση στέλνει μια λέξη και το συγκείμενό της στην Αναζήτηση Google και εμφανίζει ορισμούς, εικόνες, αποτελέσματα αναζήτησης και άλλες λεπτομέρειες.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Διαχείριση</translation>
 <translation id="381841723434055211">Αριθμοί τηλεφώνου</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> λήψεις διαγράφηκαν</translation>
-<translation id="3849365399446680203">Όταν είστε σε λειτουργία AR, αυτό ο ιστότοπος μπορεί να:
-• δημιουργήσει έναν τρισδιάστατο χάρτη του περιβάλλοντός σας
-• παρακολουθήσει την κίνηση της κάμερας.
-
-Μόνο εσείς μπορείτε να δείτε τι βλέπει η κάμερά σας. Ο ιστότοπος δεν μπορεί να δει τις εικόνες της κάμεράς σας.</translation>
 <translation id="3859306556332390985">Αναζήτηση προς τα εμπρός</translation>
 <translation id="388596076286380598">Λάβετε άρθρα, βίντεο και άλλο περιεχόμενο από τους ιστοτόπους που σας αρέσουν, ακόμη και όταν είστε εκτός σύνδεσης ή η σύνδεσή σας δεν είναι καλή.</translation>
 <translation id="3894427358181296146">Προσθήκη φακέλου…</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Χωρίς σύνδεση στο διαδίκτυο</translation>
 <translation id="4321739720395210191">Δεν είναι δυνατό το άνοιγμα της κάμερας. Επανεκκινήστε τη συσκευή και δοκιμάστε ξανά.</translation>
 <translation id="4351244548802238354">Κλείσιμο παραθύρου διαλόγου</translation>
-<translation id="4353114845960720315">Ενώ βρίσκεστε σε λειτουργία VR, αυτός ο ιστότοπος ενδέχεται να είναι σε θέση να μάθει πληροφορίες σχετικά με:</translation>
 <translation id="4378154925671717803">Τηλέφωνο</translation>
 <translation id="4384468725000734951">Χρήση του Sogou για αναζήτηση</translation>
 <translation id="4404568932422911380">Δεν υπάρχουν σελιδοδείκτες</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Δεν υπάρχει σύνδεση</translation>
 <translation id="4565377596337484307">Απόκρυψη κωδικού πρόσβασης</translation>
 <translation id="4572422548854449519">Συνδεθείτε στον διαχειριζόμενο λογαριασμό</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Πριν από # λεπτό}other{Πριν από # λεπτά}}</translation>
 <translation id="4587589328781138893">Ιστότοποι</translation>
 <translation id="4594952190837476234">Αυτή η σελίδα εκτός σύνδεσης δημιουργήθηκε στις <ph name="CREATION_TIME" /> και μπορεί να διαφέρει από την έκδοση στο διαδίκτυο.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Ανοίξτε <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Χρήση κωδικού πρόσβασης</translation>
 <translation id="4650364565596261010">Προεπιλογή συστήματος</translation>
-<translation id="4660838440047236328">τη διάταξη του δωματίου σας</translation>
 <translation id="4662373422909645029">Το ψευδών. δεν μπορεί να έχει αριθμούς</translation>
 <translation id="4663756553811254707">Διαγράφηκαν <ph name="NUMBER_OF_BOOKMARKS" /> σελιδοδείκτες</translation>
 <translation id="4665282149850138822">Ο ιστότοπος <ph name="NAME" /> προστέθηκε στην αρχική οθόνη σας</translation>
@@ -459,7 +449,6 @@
 
 Για να αλλάξετε αυτήν τη ρύθμιση, <ph name="BEGIN_LINK" />επαναφέρετε τον συγχρονισμό<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Όνομα στην κάρτα</translation>
-<translation id="4808319664292298116">Ενεργοποίηση VR από <ph name="DOMAIN" />;</translation>
 <translation id="4824958205181053313">Ακύρωση συγχρονισμού;</translation>
 <translation id="4835385943915508971">Το Chrome δεν έχει πρόσβαση στον πόρο που ζητήθηκε</translation>
 <translation id="4837753911714442426">Άνοιγμα επιλογών για την εκτύπωση της σελίδας</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Έξοδος από πλήρη οθόνη</translation>
 <translation id="6404511346730675251">Επεξεργασία σελιδοδείκτη</translation>
 <translation id="6406506848690869874">Συγχρονισμός</translation>
-<translation id="6410973561433500075">Εισαγωγή σε λειτουργία AR από τον τομέα <ph name="DOMAIN" />;</translation>
 <translation id="641643625718530986">Εκτύπωση…</translation>
 <translation id="6427112570124116297">Μετάφραση ιστού</translation>
 <translation id="6433501201775827830">Επιλέξτε τη μηχανή αναζήτησής σας</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
index 3ff950f..b3ec0e7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">See popular websites by tapping the 'Top sites' button</translation>
 <translation id="1173894706177603556">Rename</translation>
 <translation id="1178581264944972037">Pause</translation>
-<translation id="1188239144602654184">Enter AR</translation>
 <translation id="1197267115302279827">Move bookmarks</translation>
 <translation id="1201402288615127009">Next</translation>
 <translation id="1204037785786432551">Download link</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">text</translation>
 <translation id="2082238445998314030">Result <ph name="RESULT_NUMBER" /> of <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sync and personalise across devices</translation>
-<translation id="2099625543891475722">your physical features, such as height</translation>
 <translation id="2100273922101894616">Auto Sign-in</translation>
 <translation id="2100314319871056947">Try sharing the text in smaller chunks</translation>
 <translation id="2109711654079915747">Learn about topics on websites without leaving the page. Touch to search sends a word and its surrounding context to Google Search, returning definitions, pictures, search results and other details.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Manage</translation>
 <translation id="381841723434055211">Phone numbers</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads deleted</translation>
-<translation id="3849365399446680203">While you're in AR, this site may be able to:
-• create a 3D map of your environment
-• track camera motion
-
-Only you can see what your camera is looking at. The site can't see your camera's images.</translation>
 <translation id="3859306556332390985">Seek forward</translation>
 <translation id="388596076286380598">Get articles, videos and other content from sites that you like, even if you’re offline or your connection is poor.</translation>
 <translation id="3894427358181296146">Add folder</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">No internet connection</translation>
 <translation id="4321739720395210191">Can't open your camera. Restart your device and try again.</translation>
 <translation id="4351244548802238354">Close dialogue</translation>
-<translation id="4353114845960720315">While you're in VR, this site may be able to learn about:</translation>
 <translation id="4378154925671717803">Phone</translation>
 <translation id="4384468725000734951">Using Sogou for search</translation>
 <translation id="4404568932422911380">No bookmarks</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">No connection</translation>
 <translation id="4565377596337484307">Hide password</translation>
 <translation id="4572422548854449519">Sign in to managed account</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minute ago}other{# minutes ago}}</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">This offline page is from <ph name="CREATION_TIME" /> and may differ from the online version.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Open <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Use password</translation>
 <translation id="4650364565596261010">System default</translation>
-<translation id="4660838440047236328">the layout of your room</translation>
 <translation id="4662373422909645029">Nickname can’t include numbers</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bookmarks deleted</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> was added to your Home screen</translation>
@@ -459,7 +449,6 @@
 
 To change this setting, <ph name="BEGIN_LINK" />reset sync<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Name on card</translation>
-<translation id="4808319664292298116">Enter VR from <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Cancel sync?</translation>
 <translation id="4835385943915508971">Chrome does not have access to the requested resource.</translation>
 <translation id="4837753911714442426">Open options to print page</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Exit full screen</translation>
 <translation id="6404511346730675251">Edit bookmark</translation>
 <translation id="6406506848690869874">Sync</translation>
-<translation id="6410973561433500075">Enter AR from <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Print…</translation>
 <translation id="6427112570124116297">Translate the Web</translation>
 <translation id="6433501201775827830">Choose your search engine</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index f0682d1..297b5b99 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Presiona el botón "Populares" para ver los sitios web más conocidos</translation>
 <translation id="1173894706177603556">Cambiar nombre</translation>
 <translation id="1178581264944972037">Detener</translation>
-<translation id="1188239144602654184">Ingresar a la RA</translation>
 <translation id="1197267115302279827">Mover favoritos</translation>
 <translation id="1201402288615127009">Siguiente</translation>
 <translation id="1204037785786432551">Descargar vínculo</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texto</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincroniza y personaliza contenido en diferentes dispositivos</translation>
-<translation id="2099625543891475722">tus rasgos físicos, como la estatura</translation>
 <translation id="2100273922101894616">Acceso automático</translation>
 <translation id="2100314319871056947">Intenta compartir el texto en fragmentos más pequeños</translation>
 <translation id="2109711654079915747">Obtén información sobre los temas en sitios web sin salir de la página. La función Tocar para buscar envía una palabra y el contexto en el que se encuentra a la Búsqueda de Google, y muestra definiciones, fotos, resultados de la búsqueda y otros detalles.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Administrar</translation>
 <translation id="381841723434055211">Números de teléfono</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descargas borradas</translation>
-<translation id="3849365399446680203">Cuando uses el modo de RA, es posible que este sitio haga lo siguiente:
-• cree un mapa 3D de tu entorno
-• haga un seguimiento del movimiento de la cámara
-
-Solo tú podrás ver lo que captura la cámara. El sitio no tiene acceso a las imágenes de la cámara.</translation>
 <translation id="3859306556332390985">Buscar más adelante</translation>
 <translation id="388596076286380598">Recibe artículos, videos y otro contenido de sitios que te gustan, incluso si tu conexión es poca o nula.</translation>
 <translation id="3894427358181296146">Agregar carpeta</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Sin conexión a Internet</translation>
 <translation id="4321739720395210191">No se puede abrir la cámara. Reinicia el dispositivo y vuelve a intentarlo.</translation>
 <translation id="4351244548802238354">Cerrar cuadro de diálogo</translation>
-<translation id="4353114845960720315">Mientras usas el modo RV, es posible que este sitio obtenga la siguiente información:</translation>
 <translation id="4378154925671717803">Teléfono</translation>
 <translation id="4384468725000734951">Se usa Sogou para la búsqueda</translation>
 <translation id="4404568932422911380">No hay favoritos</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Sin conexión</translation>
 <translation id="4565377596337484307">Ocultar contraseña</translation>
 <translation id="4572422548854449519">Acceder a una cuenta administrada</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Hace # minuto}other{Hace # minutos}}</translation>
 <translation id="4587589328781138893">Sitios</translation>
 <translation id="4594952190837476234">Esta página sin conexión se creó el <ph name="CREATION_TIME" /> y es posible que sea diferente con respecto a la versión en línea.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar contraseña</translation>
 <translation id="4650364565596261010">Predeterminado del sistema</translation>
-<translation id="4660838440047236328">la disposición de tu habitación</translation>
 <translation id="4662373422909645029">El sobrenombre no admite números</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoritos eliminados</translation>
 <translation id="4665282149850138822">Se agregó <ph name="NAME" /> a la pantalla principal</translation>
@@ -459,7 +449,6 @@
 
 Para cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Nombre en la tarjeta</translation>
-<translation id="4808319664292298116">¿Quieres ingresar a RV desde <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">¿Quieres cancelar la sincronización?</translation>
 <translation id="4835385943915508971">Chrome no tiene acceso al recurso solicitado.</translation>
 <translation id="4837753911714442426">Abrir opciones para imprimir la página</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Salir de pantalla completa</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
 <translation id="6406506848690869874">Sincronización</translation>
-<translation id="6410973561433500075">¿Quieres ingresar al modo de RA desde <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Imprimir…</translation>
 <translation id="6427112570124116297">Traduce la Web</translation>
 <translation id="6433501201775827830">Selecciona el motor de búsqueda</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index 1b4c63e..0082bf6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Toca el botón Populares para ver los sitios web más populares</translation>
 <translation id="1173894706177603556">Cambiar nombre</translation>
 <translation id="1178581264944972037">Pausar</translation>
-<translation id="1188239144602654184">Acceder a RA</translation>
 <translation id="1197267115302279827">Mover marcadores</translation>
 <translation id="1201402288615127009">Siguiente</translation>
 <translation id="1204037785786432551">Descargar enlace</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texto</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincroniza y personaliza todos tus dispositivos</translation>
-<translation id="2099625543891475722">tus rasgos físicos, como tu altura</translation>
 <translation id="2100273922101894616">Iniciar sesión automáticamente</translation>
 <translation id="2100314319871056947">Prueba a compartir el texto dividiéndolo en partes más pequeñas</translation>
 <translation id="2109711654079915747">Aprende sobre diferentes temas sin salir de una página web. La función Tocar para buscar envía una palabra y su contexto a la Búsqueda de Google y te muestra definiciones, imágenes, resultados de búsqueda y otros datos.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gestionar</translation>
 <translation id="381841723434055211">Números de teléfono</translation>
 <translation id="3819178904835489326">Descargas eliminadas: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Mientras estés en el modo de realidad aumentada, este sitio web podría hacer lo siguiente:
-• Crear un mapa 3D de tu entorno
-• Seguir el movimiento de la cámara
-
-Solo tú podrás ver lo que está viendo tu cámara. El sitio web no podrá verlo.</translation>
 <translation id="3859306556332390985">Buscar hacia delante</translation>
 <translation id="388596076286380598">Consulta artículos, vídeos y otros contenidos de los sitios web que te gusten incluso sin conexión a Internet o con una conexión inestable.</translation>
 <translation id="3894427358181296146">Añadir carpeta</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">No hay conexión a Internet</translation>
 <translation id="4321739720395210191">No se ha podido abrir la cámara. Reinicia el dispositivo y vuelve a intentarlo.</translation>
 <translation id="4351244548802238354">Cerrar cuadro de diálogo</translation>
-<translation id="4353114845960720315">Mientras estés en RV, este sitio web puede saber:</translation>
 <translation id="4378154925671717803">Teléfono</translation>
 <translation id="4384468725000734951">Sogou se ha establecido como motor de búsqueda predeterminado</translation>
 <translation id="4404568932422911380">Sin marcadores</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">No hay conexión</translation>
 <translation id="4565377596337484307">Ocultar contraseña</translation>
 <translation id="4572422548854449519">Inicia sesión en la cuenta gestionada</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Hace # minuto}other{Hace # minutos}}</translation>
 <translation id="4587589328781138893">Sitios web</translation>
 <translation id="4594952190837476234">Esta página sin conexión se creó el <ph name="CREATION_TIME" /> y puede ser distinta de la versión online.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizar contraseña</translation>
 <translation id="4650364565596261010">Predeterminado del sistema</translation>
-<translation id="4660838440047236328">la distribución de tu habitación</translation>
 <translation id="4662373422909645029">El apodo no puede incluir números</translation>
 <translation id="4663756553811254707">Se han eliminado <ph name="NUMBER_OF_BOOKMARKS" /> marcadores</translation>
 <translation id="4665282149850138822">Se ha añadido <ph name="NAME" /> a la pantalla de inicio</translation>
@@ -459,7 +449,6 @@
 
 Para cambiar esta opción, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Titular de la tarjeta</translation>
-<translation id="4808319664292298116">¿Iniciar RV desde <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">¿Quieres cancelar la sincronización?</translation>
 <translation id="4835385943915508971">Chrome no tiene acceso al recurso solicitado.</translation>
 <translation id="4837753911714442426">Abre las opciones para imprimir la página</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Salir del modo de pantalla completa</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
 <translation id="6406506848690869874">Sincronización</translation>
-<translation id="6410973561433500075">¿Quieres acceder al modo de realidad aumentada desde <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Imprimir…</translation>
 <translation id="6427112570124116297">Traduce la Web</translation>
 <translation id="6433501201775827830">Elegir tu motor de búsqueda</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
index 1075731..37c1aaa 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Vaadake populaarseid veebisaite, puudutades nuppu „Popid saidid”</translation>
 <translation id="1173894706177603556">Muuda nime</translation>
 <translation id="1178581264944972037">Peata</translation>
-<translation id="1188239144602654184">Sisene AR-i</translation>
 <translation id="1197267115302279827">Teisalda järjehoidjad</translation>
 <translation id="1201402288615127009">Edasi</translation>
 <translation id="1204037785786432551">Allalaadimislink</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">tekst</translation>
 <translation id="2082238445998314030">Tulemus <ph name="RESULT_NUMBER" />/<ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Seadmete vahel sünkroonimine ja isikupärastamine</translation>
-<translation id="2099625543891475722">teie füüsilised omadused, nt pikkus</translation>
 <translation id="2100273922101894616">Automaatne sisselogimine</translation>
 <translation id="2100314319871056947">Proovige teksti jagada väiksemate lõikudena</translation>
 <translation id="2109711654079915747">Vaadake lisateavet veebisaitide teemade kohta ilma lehelt lahkumata. Funktsioon Puuduta otsimiseks saadab sõna ja seda ümbritseva konteksti Google'i otsingule, saates tagasi definitsioonid, pildid, otsingutulemused ja muud üksikasjad.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Halda</translation>
 <translation id="381841723434055211">Telefoninumbrid</translation>
 <translation id="3819178904835489326">Tuvastati <ph name="NUMBER_OF_DOWNLOADS" /> allalaadimist</translation>
-<translation id="3849365399446680203">Kui kasutate AR-i, võib sellel saidil olla võimalik:
-• luua teie keskkonnast 3D-kaart;
-• jälgida kaamera liikumist.
-
-Ainult teie näete, mida kaamera vaatab. See sait ei näe teie kaamera pilti.</translation>
 <translation id="3859306556332390985">Keri edasi</translation>
 <translation id="388596076286380598">Hankige artikleid, videoid ja muud sisu teile meeldivatelt saitidelt – isegi kui võrguühendus on halb või puudub.</translation>
 <translation id="3894427358181296146">Kausta lisamine</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Interneti-ühendus puudub</translation>
 <translation id="4321739720395210191">Kaamerat ei saa avada. Taaskäivitage seade ja proovige uuesti.</translation>
 <translation id="4351244548802238354">Sule dialoog</translation>
-<translation id="4353114845960720315">Kui olete VR-režiimis, võib see sait hankida järgmist teavet:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Otsimiseks kasutatakse teenust Sogou</translation>
 <translation id="4404568932422911380">Järjehoidjaid pole</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Ühendus puudub</translation>
 <translation id="4565377596337484307">Peida parool</translation>
 <translation id="4572422548854449519">Logige hallatud kontole sisse</translation>
-<translation id="4574741712540401491">• <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minut tagasi}other{# minutit tagasi}}</translation>
 <translation id="4587589328781138893">Saidid</translation>
 <translation id="4594952190837476234">Võrguühenduseta leht loodi <ph name="CREATION_TIME" /> ja see võib veebiversioonist erineda.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Ava <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Kasuta parooli</translation>
 <translation id="4650364565596261010">Süsteemi vaikeseade</translation>
-<translation id="4660838440047236328">teie ruumi paigutus</translation>
 <translation id="4662373422909645029">Hüüdnimes ei tohi olla numbreid</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> järjehoidjat kustutati</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> lisati teie avaekraanile</translation>
@@ -459,7 +449,6 @@
 
 Seade muutmiseks <ph name="BEGIN_LINK" />lähtestage sünkroonimine<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Kaardil olev nimi</translation>
-<translation id="4808319664292298116">Kas aktiveerida VR saidilt <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Kas tühistada sünkroonimine?</translation>
 <translation id="4835385943915508971">Chrome'il pole soovitud allikale juurdepääsu.</translation>
 <translation id="4837753911714442426">Valikute avamine lehe printimiseks</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Välju täisekraanilt</translation>
 <translation id="6404511346730675251">Muuda järjehoidjat</translation>
 <translation id="6406506848690869874">Sünkroonimine</translation>
-<translation id="6410973561433500075">Kas siseneda domeenil <ph name="DOMAIN" /> AR-i?</translation>
 <translation id="641643625718530986">Printimine ...</translation>
 <translation id="6427112570124116297">Veebi tõlkimine</translation>
 <translation id="6433501201775827830">Valige oma otsingumootor</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
index 4ae333c..6c351cb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Sakatu "Webgune nagusiak" botoia webgune ezagunak ikusteko</translation>
 <translation id="1173894706177603556">Aldatu izena</translation>
 <translation id="1178581264944972037">Pausatu</translation>
-<translation id="1188239144602654184">Sartu errealitate areagotuan</translation>
 <translation id="1197267115302279827">Mugitu laster-markak</translation>
 <translation id="1201402288615127009">Hurrengoa</translation>
 <translation id="1204037785786432551">Deskargatu estekako edukia</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">testua</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />/<ph name="TOTAL_RESULTS" /> emaitza</translation>
 <translation id="2096012225669085171">Sinkronizatu eta pertsonalizatu gailu guztiak</translation>
-<translation id="2099625543891475722">zure ezaugarri fisikoak (esaterako, altuera)</translation>
 <translation id="2100273922101894616">Saio-hasiera automatikoa</translation>
 <translation id="2100314319871056947">Saiatu testua zati txikiagotan partekatzen</translation>
 <translation id="2109711654079915747">Lortu informazio gehiago beste webgune batzuetan, uneko orritik irten gabe. "Sakatu bilatzeko" eginbideak hitz bat eta haren testuingurua Google Bilaketa zerbitzura bidaltzen ditu, eta definizioak, irudiak, bilaketa-emaitzak eta beste zenbait xehetasun eskaintzen.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Kudeatu</translation>
 <translation id="381841723434055211">Telefono-zenbakiak</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> deskarga ezabatu dira</translation>
-<translation id="3849365399446680203">Errealitate areagotuan erabiltzen ari zarenean, baliteke webgune hau honako hauek egiteko gai izatea:
-• Zure ingurunearen hiru dimentsioko mapa eraiki.
-• Kameraren mugimenduen jarraipena egin.
-
-Zuk bakarrik ikus dezakezu kamera zeri begira dagoen. Webgune honek ezin ditu ikusi zure kamerako irudiak.</translation>
 <translation id="3859306556332390985">Aurreratu</translation>
 <translation id="388596076286380598">Eskuratu gustuko dituzun webguneetako artikuluak, bideoak edo bestelako edukia, baita konexiorik ez baduzu edo konexioa txarra baldin bada ere.</translation>
 <translation id="3894427358181296146">Gehitu karpeta</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Ez zaude konektatuta Internetera</translation>
 <translation id="4321739720395210191">Ezin da ireki kamera. Berrabiarazi gailua eta saiatu berriro.</translation>
 <translation id="4351244548802238354">Itxi leihoa</translation>
-<translation id="4353114845960720315">Errealitate birtualean zauden bitartean, baliteke webgune honek hauei buruzko informazioa lortzea:</translation>
 <translation id="4378154925671717803">Telefonoa</translation>
 <translation id="4384468725000734951">Sogou erabiliko da bilatzaile gisa</translation>
 <translation id="4404568932422911380">Ez dago laster-markarik</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Ez zaude konektatuta Internetera</translation>
 <translation id="4565377596337484307">Ezkutatu pasahitza</translation>
 <translation id="4572422548854449519">Hasi saioa kontu kudeatuan</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Duela # minutu}other{Duela # minutu}}</translation>
 <translation id="4587589328781138893">Webguneak</translation>
 <translation id="4594952190837476234">Konexiorik gabe erabiltzeko orri hau <ph name="CREATION_TIME" /> datan sortu zen. Ondorioz, baliteke sareko bertsioarekin bat ez etortzea.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Ireki <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Erabili pasahitza</translation>
 <translation id="4650364565596261010">Sistemaren balio lehenetsia</translation>
-<translation id="4660838440047236328">gelaren diseinua</translation>
 <translation id="4662373422909645029">Goitizenak ezin du eduki zenbakirik</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> laster-marka ezabatu dira</translation>
 <translation id="4665282149850138822">Hasierako pantailan gehitu da <ph name="NAME" /></translation>
@@ -459,7 +449,6 @@
 
 Ezarpena aldatzeko, <ph name="BEGIN_LINK" />berrezarri sinkronizazioa<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Txartelean ageri den izena</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> domeinutik atzitu nahi duzu errealitate areagotuko aurkezpena?</translation>
 <translation id="4824958205181053313">Sinkronizazioa bertan behera utzi nahi duzu?</translation>
 <translation id="4835385943915508971">Chrome-k ez du eskatutako baliabiderako sarbiderik.</translation>
 <translation id="4837753911714442426">Ireki orria inprimatzeko aukerak</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Irten pantaila osotik</translation>
 <translation id="6404511346730675251">Editatu laster-marka</translation>
 <translation id="6406506848690869874">Sinkronizazioa</translation>
-<translation id="6410973561433500075">Errealitate areagotuan sartu nahi duzu <ph name="DOMAIN" /> webgunearen bidez?</translation>
 <translation id="641643625718530986">Inprimatu…</translation>
 <translation id="6427112570124116297">Itzuli web-orria</translation>
 <translation id="6433501201775827830">Aukeratu bilatzailea</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
index 438a459..ed55bc0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">با ضربه زدن روی دکمه «سایت‌های برتر»، وب‌سایت‌های پرطرفدار را ببینید</translation>
 <translation id="1173894706177603556">تغییر نام</translation>
 <translation id="1178581264944972037">مکث</translation>
-<translation id="1188239144602654184">‏وارد شدن به AR</translation>
 <translation id="1197267115302279827">انتقال نشانک‌ها</translation>
 <translation id="1201402288615127009">بعدی</translation>
 <translation id="1204037785786432551">بارگیری پیوند</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">نوشتار</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" /> نتیجه از <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">همگام‌سازی و شخصی‌سازی در همه دستگاه‌ها</translation>
-<translation id="2099625543891475722">ویژگی‌های ظاهری شما، مانند قد</translation>
 <translation id="2100273922101894616">ورود به سیستم خودکار</translation>
 <translation id="2100314319871056947">بخش‌های کوچک‌تری از نوشتار را به اشتراک بگذارید</translation>
 <translation id="2109711654079915747">‏بدون اینکه صفحه را ترک کنید، درباره موضوعات در وب‌سایت‌ها اطلاعاتی کسب کنید. «لمس برای جستجو» کلمه و بافت پیرامون آن را برای «جستجوی Google» ارسال می‌کند و معانی، تصاویر، نتایج جستجو و سایر جزئیات را بازمی‌گرداند.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">مدیریت</translation>
 <translation id="381841723434055211">شماره‌های تلفن</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> بارگیری حذف شد</translation>
-<translation id="3849365399446680203">‏وقتی در حالت AR هستید، این سایت می‌تواند:
-• نقشه‌ای سه‌بعدی از محیط شما ایجاد کند
-• حرکت دوربین را ردیابی کند
-
-فقط شما می‌توانید تصویر دوربین را ببینید. این سایت نمی‌تواند تصویر دوربین شما را ببینید.</translation>
 <translation id="3859306556332390985">جستجو به جلو</translation>
 <translation id="388596076286380598">حتی وقتی آفلاین هستید یا ارتباط ضعیفی دارید، مقاله، ویدیو، و محتواهای دیگر را از سایت‌های موردعلاقه دریافت کنید.</translation>
 <translation id="3894427358181296146">افزودن پوشه</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">اتصال اینترنتی ندارید</translation>
 <translation id="4321739720395210191">نمی‌توان دوربین را باز کرد. دستگاه را بازراه‌اندازی و دوباره امتحان کنید.</translation>
 <translation id="4351244548802238354">بستن کادر گفتگو</translation>
-<translation id="4353114845960720315">‏وقتی در حالت VR هستید، این سایت می‌تواند به این موارد پی ببرد:</translation>
 <translation id="4378154925671717803">تلفن</translation>
 <translation id="4384468725000734951">‏استفاده از Sogou برای جستجو</translation>
 <translation id="4404568932422911380">هیچ نشانکی موجود نیست</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">اتصال برقرار نیست</translation>
 <translation id="4565377596337484307">عدم نمایش گذرواژه</translation>
 <translation id="4572422548854449519">به حساب مدیریت‌شده وارد شوید</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# دقیقه قبل}one{# دقیقه قبل}other{# دقیقه قبل}}</translation>
 <translation id="4587589328781138893">سایت‌ها</translation>
 <translation id="4594952190837476234">این صفحه آفلاین مربوط به تاریخ <ph name="CREATION_TIME" /> است و ممکن است با نسخه آنلاین متفاوت باشد.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">باز کردن <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">استفاده از گذرواژه</translation>
 <translation id="4650364565596261010">پیش‌فرض سیستم</translation>
-<translation id="4660838440047236328">چیدمان اتاق شما</translation>
 <translation id="4662373422909645029">نام مستعار نباید حاوی عدد باشد</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> نشانک حذف شد</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> به صفحه اصلی شما اضافه شد</translation>
@@ -459,7 +449,6 @@
 
 برای تغییر این تنظیم، <ph name="BEGIN_LINK" />همگام‌سازی را بازنشانی کنید<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">نام روی کارت</translation>
-<translation id="4808319664292298116">‏VR از <ph name="DOMAIN" /> وارد شود؟</translation>
 <translation id="4824958205181053313">همگام‌سازی لغو شود؟</translation>
 <translation id="4835385943915508971">‏Chrome به منبع درخواستی دسترسی ندارد.</translation>
 <translation id="4837753911714442426">باز کردن گزینه‌های چاپ صفحه</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">خروج از حالت تمام صفحه</translation>
 <translation id="6404511346730675251">ویرایش نشانک</translation>
 <translation id="6406506848690869874">همگام‌سازی</translation>
-<translation id="6410973561433500075">‏از <ph name="DOMAIN" /> وارد حالت AR می‌شوید؟</translation>
 <translation id="641643625718530986">چاپ...</translation>
 <translation id="6427112570124116297">وب را ترجمه کنید</translation>
 <translation id="6433501201775827830">انتخاب موتور جستجو</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
index 514d9895..f1b18c7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Katso suositut sivustot napauttamalla Suosituimmat sivustot ‑painiketta</translation>
 <translation id="1173894706177603556">Muuta nimeä</translation>
 <translation id="1178581264944972037">Tauko</translation>
-<translation id="1188239144602654184">Lisää AR</translation>
 <translation id="1197267115302279827">Siirrä kirjanmerkkejä</translation>
 <translation id="1201402288615127009">Seuraava</translation>
 <translation id="1204037785786432551">Lataa linkin kohde</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">tekstiviesti</translation>
 <translation id="2082238445998314030">Tulos <ph name="RESULT_NUMBER" />/<ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synkronoi ja yksilöi kaikilla laitteilla</translation>
-<translation id="2099625543891475722">fyysiset piirteesi, kuten pituutesi</translation>
 <translation id="2100273922101894616">Automaattinen kirjautuminen</translation>
 <translation id="2100314319871056947">Kokeile jakaa teksti pienempinä pätkinä</translation>
 <translation id="2109711654079915747">Tutustu verkkosivuston aiheisiin poistumatta sivulta. Koskettamalla hakeminen lähettää sanan ja sen asiayhteyden Google Hakuun ja palauttaa määritelmiä, kuvia, hakutuloksia ja muita tietoja.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Hallinnoi</translation>
 <translation id="381841723434055211">Puhelinnumerot</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> latausta poistettiin.</translation>
-<translation id="3849365399446680203">Kun olet AR-tilassa, sivusto voi
-• luoda 3D-kartan ympäristöstäsi
-• seurata kameran liikettä
-
-Vain sinä voit nähdä, mitä kamera kuvaa. Sivusto ei voi nähdä kamerasi kuvia.</translation>
 <translation id="3859306556332390985">Kelaa eteenpäin</translation>
 <translation id="388596076286380598">Selaa suosikkisivustojesi artikkeleja, videoita ja muuta sisältöä, vaikka olet offline-tilassa tai yhteys on heikko.</translation>
 <translation id="3894427358181296146">Lisää kansio</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Ei internetyhteyttä</translation>
 <translation id="4321739720395210191">Kameraa ei voi avata. Käynnistä laite uudelleen ja yritä sitten.</translation>
 <translation id="4351244548802238354">Sulje ikkuna</translation>
-<translation id="4353114845960720315">Kun olet VR-tilassa, sivusto voi saada tietää</translation>
 <translation id="4378154925671717803">Puhelin</translation>
 <translation id="4384468725000734951">Hakukoneena käytetään Sogouta.</translation>
 <translation id="4404568932422911380">Ei kirjanmerkkejä</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Ei yhteyttä</translation>
 <translation id="4565377596337484307">Piilota salasana</translation>
 <translation id="4572422548854449519">Kirjaudu hallinnoidulle tilille</translation>
-<translation id="4574741712540401491">• <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minuutti sitten}other{# minuuttia sitten}}</translation>
 <translation id="4587589328781138893">Sivustot</translation>
 <translation id="4594952190837476234">Offline-sivu vastaa tilannetta <ph name="CREATION_TIME" /> ja saattaa poiketa nykyisestä verkkoversiosta.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Avaa <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Käytä salasanaa</translation>
 <translation id="4650364565596261010">Järjestelmän oletusarvo</translation>
-<translation id="4660838440047236328">huoneesi asettelun</translation>
 <translation id="4662373422909645029">Ei saa sisältää numeroita</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> kirjanmerkkiä poistettiin</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> lisättiin aloitusnäytölle.</translation>
@@ -459,7 +449,6 @@
 
 Jos haluat muokata asetusta, <ph name="BEGIN_LINK" />nollaa synkronointi<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Kortissa oleva nimi</translation>
-<translation id="4808319664292298116">Siirrytäänkö VR-tilaan (<ph name="DOMAIN" />)?</translation>
 <translation id="4824958205181053313">Peruutetaanko synkronointi?</translation>
 <translation id="4835385943915508971">Chromella ei ole pyydetyn resurssin käyttöoikeutta.</translation>
 <translation id="4837753911714442426">Avaa sivun tulostusvaihtoehdot</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Poistu koko näytön tilasta</translation>
 <translation id="6404511346730675251">Muokkaa kirjanmerkkiä</translation>
 <translation id="6406506848690869874">Synkronointi</translation>
-<translation id="6410973561433500075">Siirrytäänkö AR-tilaan (<ph name="DOMAIN" />)?</translation>
 <translation id="641643625718530986">Tulosta…</translation>
 <translation id="6427112570124116297">Käännä verkon sisältö</translation>
 <translation id="6433501201775827830">Valitse hakukone</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
index 6a16111..699b0df 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Tingnan ang mga sikat na website sa pamamagitan ng pag-tap sa button na "Mga nangungunang site"</translation>
 <translation id="1173894706177603556">Pangalanang muli</translation>
 <translation id="1178581264944972037">I-pause</translation>
-<translation id="1188239144602654184">Pumasok sa AR</translation>
 <translation id="1197267115302279827">Ilipat ang mga bookmark</translation>
 <translation id="1201402288615127009">Susunod</translation>
 <translation id="1204037785786432551">Link sa pag-download</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">text</translation>
 <translation id="2082238445998314030">Resulta <ph name="RESULT_NUMBER" /> sa <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Mag-sync at mag-personalize sa lahat ng device</translation>
-<translation id="2099625543891475722">iyong mga pisikal na katangian, tulad ng tangkad</translation>
 <translation id="2100273922101894616">Awtomatikong Mag-sign in</translation>
 <translation id="2100314319871056947">Subukang ibahagi ang text sa mas maliliit na bahagi</translation>
 <translation id="2109711654079915747">Alamin ang tungkol sa mga paksa sa mga website nang hindi umaalis sa page. Nagpapadala ang Touch to Search ng salita at ng konteksto nito sa Google Search, at magbibigay ito ng mga pagpapakahulugan, larawan, resulta ng paghahanap, at iba pang detalye.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Mamahala</translation>
 <translation id="381841723434055211">Mga numero ng telepono</translation>
 <translation id="3819178904835489326">Na-delete ang <ph name="NUMBER_OF_DOWNLOADS" /> (na) pag-download</translation>
-<translation id="3849365399446680203">Habang nasa AR ka, posibleng magawa ng site na ito ang mga sumusunod:
-• gumawa ng 3D na mapa ng iyong kapaligiran
-• subaybayan ang paggalaw ng camera
-
-Ikaw lang ang makakakita kung ano ang tinitingnan ng iyong camera. Hindi makikita ng site ang mga larawan ng iyong camera.</translation>
 <translation id="3859306556332390985">Maghanap nang pasulong</translation>
 <translation id="388596076286380598">Kumuha ng mga artikulo, video, at iba pang content sa mga site na gusto mo, kahit na offline ka o mahina ang iyong koneksyon.</translation>
 <translation id="3894427358181296146">Magdagdag ng folder</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Walang koneksyon sa internet</translation>
 <translation id="4321739720395210191">Hindi mabuksan ang iyong camera. I-restart ang iyong device at subukan ulit.</translation>
 <translation id="4351244548802238354">Isara ang dialog</translation>
-<translation id="4353114845960720315">Habang nasa VR ka, posibleng malaman ng site na ito ang tungkol sa:</translation>
 <translation id="4378154925671717803">Telepono</translation>
 <translation id="4384468725000734951">Ginagamit ang Sogou para sa paghahanap</translation>
 <translation id="4404568932422911380">Walang bookmark</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Walang koneksyon</translation>
 <translation id="4565377596337484307">Itago ang password</translation>
 <translation id="4572422548854449519">Mag-sign in sa pinamamahalaang account</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minuto ang nakalipas}one{# minuto ang nakalipas}other{# na minuto ang nakalipas}}</translation>
 <translation id="4587589328781138893">Mga Site</translation>
 <translation id="4594952190837476234">Naka-offline ang page na ito mula noong <ph name="CREATION_TIME" /> at maaaring iba ito sa online na bersyon.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Buksan ang <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gamitin ang password</translation>
 <translation id="4650364565596261010">Default ng system</translation>
-<translation id="4660838440047236328">ang layout ng iyong kwarto</translation>
 <translation id="4662373422909645029">Bawal numero sa nickname</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> (na) bookmark ang na-delete</translation>
 <translation id="4665282149850138822">Idinagdag ang <ph name="NAME" /> sa iyong Home screen</translation>
@@ -459,7 +449,6 @@
 
 Para baguhin ang setting na ito, <ph name="BEGIN_LINK" />i-reset ang pag-sync<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Pangalang makikita sa card</translation>
-<translation id="4808319664292298116">Ilagay ang VR mula sa <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Kanselahin ang pag-sync?</translation>
 <translation id="4835385943915508971">Walang access ang Chrome sa hiniling na mapagkukunan.</translation>
 <translation id="4837753911714442426">Buksan ang mga opsyon sa pag-print ng page</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Lumabas sa buong screen</translation>
 <translation id="6404511346730675251">I-edit ang bookmark</translation>
 <translation id="6406506848690869874">Pag-sync</translation>
-<translation id="6410973561433500075">Pumasok sa AR mula sa <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">I-print…</translation>
 <translation id="6427112570124116297">I-translate ang Web</translation>
 <translation id="6433501201775827830">Pumili ng iyong search engine</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
index 15eed7e..e6ce84d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Affichez des sites Web populaires en touchant le bouton « Sites populaires »</translation>
 <translation id="1173894706177603556">Renommer</translation>
 <translation id="1178581264944972037">Interrompre</translation>
-<translation id="1188239144602654184">Démarrer la RA</translation>
 <translation id="1197267115302279827">Déplacer les favoris</translation>
 <translation id="1201402288615127009">Suivant</translation>
 <translation id="1204037785786432551">Télécharger le lien</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texte</translation>
 <translation id="2082238445998314030">Résultat <ph name="RESULT_NUMBER" /> sur <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Profitez de la synchronisation et d'une expérience personnalisée sur tous vos appareils</translation>
-<translation id="2099625543891475722">vos caractéristiques physiques, comme votre taille;</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
 <translation id="2100314319871056947">Essayez de partager le texte en plusieurs parties plus petites</translation>
 <translation id="2109711654079915747">Apprenez-en davantage sur des sujets mentionnés sur des sites Web sans quitter la page. La fonctionnalité Toucher pour rechercher envoie un mot et son contexte à la recherche Google, qui vous renvoie des définitions, des photos, des résultats de recherche et d'autres renseignements.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gérer</translation>
 <translation id="381841723434055211">Numéros de téléphone</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> téléchargements supprimés</translation>
-<translation id="3849365399446680203">Lorsque vous êtes en mode RA, ce site pourrait effectuer les actions suivantes :
-• Créer une carte 3D de votre environnement
-• Faire le suivi du mouvement de l'appareil photo
-
-Vous seul voyez les images de l'appareil photo. Le site n'y a pas accès.</translation>
 <translation id="3859306556332390985">Rechercher vers l'avant</translation>
 <translation id="388596076286380598">Consultez des articles, des vidéos et d'autres contenus sur les sites qui vous intéressent, même si vous êtes hors ligne ou si votre connexion est mauvaise.</translation>
 <translation id="3894427358181296146">Ajouter un dossier</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Pas de connexion Internet</translation>
 <translation id="4321739720395210191">Impossible d'ouvrir votre appareil photo. Redémarrez votre appareil et réessayez.</translation>
 <translation id="4351244548802238354">Fermer la boîte de dialogue</translation>
-<translation id="4353114845960720315">Lorsque vous êtes en mode RV, ce site pourrait en apprendre davantage sur :</translation>
 <translation id="4378154925671717803">Numéro de téléphone</translation>
 <translation id="4384468725000734951">Sogou est utilisé pour la recherche</translation>
 <translation id="4404568932422911380">Aucun favori</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Aucune connexion</translation>
 <translation id="4565377596337484307">Masquer le mot de passe</translation>
 <translation id="4572422548854449519">Connectez-vous à un compte géré</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Il y a # minute}one{Il y a # minute}other{Il y a # minutes}}</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Cette page hors connexion a été créée le <ph name="CREATION_TIME" /> et peut différer de la version en ligne.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Ouvrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utiliser le mot de passe</translation>
 <translation id="4650364565596261010">Paramètres par défaut</translation>
-<translation id="4660838440047236328">la disposition de votre pièce.</translation>
 <translation id="4662373422909645029">Aucun chiffre dans le pseudo</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoris supprimés</translation>
 <translation id="4665282149850138822">Le site <ph name="NAME" /> a été ajouté à votre écran d'accueil</translation>
@@ -459,7 +449,6 @@
 
 Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Nom du titulaire de la carte</translation>
-<translation id="4808319664292298116">Démarrer la RV à partir de <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Annuler la synchronisation?</translation>
 <translation id="4835385943915508971">Chrome n'a pas accès à la ressource demandée.</translation>
 <translation id="4837753911714442426">Ouvrir les options d'impression de la page</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Quitter le mode plein écran</translation>
 <translation id="6404511346730675251">Modifier le favori</translation>
 <translation id="6406506848690869874">Synchronisation</translation>
-<translation id="6410973561433500075">Démarrer la RA à partir de <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Imprimer...</translation>
 <translation id="6427112570124116297">Traduisez le Web</translation>
 <translation id="6433501201775827830">Choisissez votre moteur de recherche</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
index 2eb518e..0283320 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Appuyez sur le bouton "Sites populaires" pour afficher les sites Web les plus visités</translation>
 <translation id="1173894706177603556">Renommer</translation>
 <translation id="1178581264944972037">Suspendre</translation>
-<translation id="1188239144602654184">Lancer</translation>
 <translation id="1197267115302279827">Déplacer les favoris</translation>
 <translation id="1201402288615127009">Suivant</translation>
 <translation id="1204037785786432551">Télécharger le lien</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texte</translation>
 <translation id="2082238445998314030">Résultat <ph name="RESULT_NUMBER" /> sur <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synchroniser et personnaliser les données sur tous les appareils</translation>
-<translation id="2099625543891475722">vos caractéristiques physiques, telles que votre taille ;</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
 <translation id="2100314319871056947">Essayez de scinder le texte pour le partager en plusieurs fois</translation>
 <translation id="2109711654079915747">Découvrez les thèmes abordés sur la page Web que vous consultez sans devoir quitter cette page. La fonctionnalité Appuyer pour rechercher transmet un mot et son contexte à la recherche Google, qui renvoie à son tour des définitions, des images, des résultats de recherche et d'autres informations.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gérer</translation>
 <translation id="381841723434055211">Numéros de téléphone</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> téléchargements supprimés</translation>
-<translation id="3849365399446680203">En mode RA, le site pourrait effectuer les actions suivantes :
-• Créer un plan 3D de votre environnement
-• Suivre les mouvements de la caméra
-
-Vous seul voyez les images de votre caméra. Le site n'y a pas accès.</translation>
 <translation id="3859306556332390985">Avance rapide</translation>
 <translation id="388596076286380598">Consultez des articles, des vidéos et d'autres contenus sur les sites qui vous intéressent, même si vous êtes hors connexion ou si votre connexion est mauvaise.</translation>
 <translation id="3894427358181296146">Ajouter un dossier</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Aucune connexion Internet.</translation>
 <translation id="4321739720395210191">Impossible d'ouvrir l'appareil photo. Redémarrez votre appareil et réessayez.</translation>
 <translation id="4351244548802238354">Fermer la boîte de dialogue</translation>
-<translation id="4353114845960720315">En mode RV, le site pourrait accéder aux informations suivantes :</translation>
 <translation id="4378154925671717803">Téléphone</translation>
 <translation id="4384468725000734951">Utilisation de Sogou pour les recherches</translation>
 <translation id="4404568932422911380">Aucun favori</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Aucune connexion</translation>
 <translation id="4565377596337484307">Masquer le mot de passe</translation>
 <translation id="4572422548854449519">Se connecter à un compte géré</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Il y a # minute}one{Il y a # minute}other{Il y a # minutes}}</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Cette page hors connexion date du <ph name="CREATION_TIME" /> et peut différer de la version en ligne.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Ouvrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utiliser le mot de passe</translation>
 <translation id="4650364565596261010">Paramètre par défaut du système</translation>
-<translation id="4660838440047236328">la disposition de la pièce.</translation>
 <translation id="4662373422909645029">Le pseudo ne doit pas contenir de chiffres</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoris ont été supprimés.</translation>
 <translation id="4665282149850138822">Le site "<ph name="NAME" />" a bien été ajouté à votre écran d'accueil.</translation>
@@ -459,7 +449,6 @@
 
 Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Titulaire de la carte</translation>
-<translation id="4808319664292298116">Activer la RV à partir du site <ph name="DOMAIN" /> ?</translation>
 <translation id="4824958205181053313">Annuler la synchronisation ?</translation>
 <translation id="4835385943915508971">Chrome n'a pas accès à la ressource demandée.</translation>
 <translation id="4837753911714442426">Afficher les options d'impression de la page</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Quitter le mode plein écran</translation>
 <translation id="6404511346730675251">Modifier le favori</translation>
 <translation id="6406506848690869874">Synchronisation</translation>
-<translation id="6410973561433500075">Activer la RA à partir du site <ph name="DOMAIN" /> ?</translation>
 <translation id="641643625718530986">Imprimer…</translation>
 <translation id="6427112570124116297">Traduire le Web</translation>
 <translation id="6433501201775827830">Sélectionner votre moteur de recherche</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
index 93fea690..a021de3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Para descubrir sitios web populares, toca o botón Populares</translation>
 <translation id="1173894706177603556">Cambiar o nome</translation>
 <translation id="1178581264944972037">Pausar</translation>
-<translation id="1188239144602654184">Iniciar realidade aumentada</translation>
 <translation id="1197267115302279827">Mover marcadores</translation>
 <translation id="1201402288615127009">Seguinte</translation>
 <translation id="1204037785786432551">Descargar ligazón</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texto</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincroniza e personaliza o contido en todos os dispositivos</translation>
-<translation id="2099625543891475722">as túas características físicas, como a altura</translation>
 <translation id="2100273922101894616">Inicio de sesión automático</translation>
 <translation id="2100314319871056947">Proba a compartir o texto dividíndoo en fragmentos máis pequenos</translation>
 <translation id="2109711654079915747">Obtén información sobre os temas en sitios web sen saír da páxina. A función Tocar para buscar envía unha palabra e o contexto que a rodea á Busca de Google, o cal permite obter definicións, imaxes, resultados de busca e outros detalles.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Xestionar</translation>
 <translation id="381841723434055211">Números de teléfono</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descargas eliminadas</translation>
-<translation id="3849365399446680203">Mentres esteas na realidade aumentada, este sitio poderá:
-• Crear un mapa 3D do espazo que te rodea.
-• Realizar un seguimento dos movementos da cámara.
-
-Só ti podes ver a que apunta a túa cámara. O sitio non pode ver as imaxes da cámara.</translation>
 <translation id="3859306556332390985">Buscar cara adiante</translation>
 <translation id="388596076286380598">Accede a artigos, vídeos e outros contidos dos sitios que che gustan, aínda que esteas sen conexión ou esta sexa de mala calidade.</translation>
 <translation id="3894427358181296146">Engadir cartafol</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Non hai conexión a Internet</translation>
 <translation id="4321739720395210191">Non se puido abrir a cámara. Reinicia o dispositivo e téntao de novo.</translation>
 <translation id="4351244548802238354">Pechar cadro de diálogo</translation>
-<translation id="4353114845960720315">Mentres esteas utilizando o modo de RV, este sitio pode obter a seguinte información:</translation>
 <translation id="4378154925671717803">Teléfono</translation>
 <translation id="4384468725000734951">Uso de Sogou para a busca</translation>
 <translation id="4404568932422911380">Non hai marcadores</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Sen conexión</translation>
 <translation id="4565377596337484307">Ocultar contrasinal</translation>
 <translation id="4572422548854449519">Inicia sesión nunha conta xestionada</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Hai # minuto}other{Hai # minutos}}</translation>
 <translation id="4587589328781138893">Sitios</translation>
 <translation id="4594952190837476234">Esta páxina sen conexión creouse o <ph name="CREATION_TIME" /> e pode ser diferente da versión en liña.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar contrasinal</translation>
 <translation id="4650364565596261010">Opción predeterminada do sistema</translation>
-<translation id="4660838440047236328">a distribución do teu cuarto</translation>
 <translation id="4662373422909645029">O alcume non pode ter números</translation>
 <translation id="4663756553811254707">Elimináronse <ph name="NUMBER_OF_BOOKMARKS" /> marcadores</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> engadiuse á túa pantalla de inicio</translation>
@@ -459,7 +449,6 @@
 
 Para cambiar esta opción de configuración, deberás <ph name="BEGIN_LINK" />restablecer a sincronización<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Nome que aparece na tarxeta</translation>
-<translation id="4808319664292298116">Queres iniciar o modo de RV en <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Queres cancelar a sincronización?</translation>
 <translation id="4835385943915508971">Chrome non ten acceso ao recurso solicitado.</translation>
 <translation id="4837753911714442426">Abrir opcións para imprimir a páxina</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Saír do modo de pantalla completa</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
 <translation id="6406506848690869874">Sincronización</translation>
-<translation id="6410973561433500075">Queres acceder á realidade aumentada desde <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Imprimir...</translation>
 <translation id="6427112570124116297">Traduce a Web</translation>
 <translation id="6433501201775827830">Selecciona o motor de busca</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
index 1c0c4c4e..27dc1f9 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"લોકપ્રિય સાઇટ" બટન પર ટૅપ કરીને લોકપ્રિય વેબસાઇટ જુઓ</translation>
 <translation id="1173894706177603556">નામ બદલો</translation>
 <translation id="1178581264944972037">થોભો</translation>
-<translation id="1188239144602654184">AR દાખલ કરો</translation>
 <translation id="1197267115302279827">બુકમાર્ક્સ ખસેડો</translation>
 <translation id="1201402288615127009">આગલું</translation>
 <translation id="1204037785786432551">ડાઉનલોડ કરવાની લિંક</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ટેક્સ્ટ</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> માંથી <ph name="RESULT_NUMBER" /> પરિણામ</translation>
 <translation id="2096012225669085171">સમગ્ર ઉપકરણો પર સિંક કરો અને વ્યક્તિગત બનાવો</translation>
-<translation id="2099625543891475722">તમારા શારીરિક લક્ષણો, જેમ કે ઊંચાઈ</translation>
 <translation id="2100273922101894616">સ્વતઃ સાઇન-ઇન</translation>
 <translation id="2100314319871056947">ટેક્સ્ટને નાના-નાના ટૂકડામાં શેર કરી જુઓ</translation>
 <translation id="2109711654079915747">પેજને છોડ્યા વિના વેબસાઇટ પરના વિષયો વિશે જાણો. 'શોધો'ને સ્પર્શ કરવાથી કોઈ શબ્દ અને તેની આસપાસના સંદર્ભને Google શોધને મોકલવામાં આવે છે, જે વ્યાખ્યાઓ, ચિત્રો, શોધ પરિણામો અને અન્ય વિગતો પરત કરે છે.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">મેનેજ કરો</translation>
 <translation id="381841723434055211">ફોન નંબર</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ડાઉનલોડ કાઢી નાખ્યાં</translation>
-<translation id="3849365399446680203">તમે AR મોડમાં હો, ત્યારે આ સાઇટ:
-• તમારી આસપાસનો 3D નકશો બનાવી શકે છે
-• કૅમેરા મોશનને ટ્રૅક કરી શકે છે
-
-તમારો કૅમેરા શું જોઈ રહ્યો છે તે માત્ર તમે જ જોઈ શકો છો. સાઇટ તમારા કૅમેરાની છબીઓને જોઈ શકતી નથી.</translation>
 <translation id="3859306556332390985">આગળ કરો</translation>
 <translation id="388596076286380598">તમારું ઇન્ટરનેટ કનેક્શન ઉપલબ્ધ ન હોય અથવા ધીમું હોય ત્યારે પણ તમને ગમતી સાઇટ તરફથી લેખ, વીડિયો અને અન્ય કન્ટેન્ટ મેળવો.</translation>
 <translation id="3894427358181296146">ફોલ્ડર ઉમેરો</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">કોઈ ઇન્ટરનેટ કનેક્શન નથી</translation>
 <translation id="4321739720395210191">તમારો કૅમેરા ખોલી શકતાં નથી. તમારું ડિવાઇસ ફરી શરૂ કરો અને ફરી પ્રયાસ કરો.</translation>
 <translation id="4351244548802238354">સંવાદ બંધ કરો</translation>
-<translation id="4353114845960720315">જ્યારે તમે VRમાં હો, ત્યારે આ સાઇટ આના વિશે જાણી શકે છે:</translation>
 <translation id="4378154925671717803">ફોન</translation>
 <translation id="4384468725000734951">શોધ માટે Sogou નો ઉપયોગ કરી રહ્યાં છે</translation>
 <translation id="4404568932422911380">કોઈ બુકમાર્ક નથી</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">કોઈ કનેક્શન નથી</translation>
 <translation id="4565377596337484307">પાસવર્ડ છુપાવો</translation>
 <translation id="4572422548854449519">મેનેજ એકાઉન્ટમાં સાઇન ઇન કરો</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# મિનિટ પહેલાં}one{# મિનિટ પહેલાં}other{# મિનિટ પહેલાં}}</translation>
 <translation id="4587589328781138893">સાઇટ</translation>
 <translation id="4594952190837476234">આ ઑફલાઇન પેજ <ph name="CREATION_TIME" /> ના રોજનું છે અને તે ઑનલાઇન વર્ઝનથી અલગ હોઈ શકે છે.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ખોલો</translation>
 <translation id="4634124774493850572">પાસવર્ડનો ઉપયોગ કરો</translation>
 <translation id="4650364565596261010">સિસ્ટમ ડિફૉલ્ટ</translation>
-<translation id="4660838440047236328">તમારા રૂમનો લેઆઉટ</translation>
 <translation id="4662373422909645029">ઉપનામમાં સંખ્યા ન હોઈ શકે</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> બુકમાર્ક્સ કાઢી નાખ્યાં</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ને તમારા હોમ સ્ક્રીન પર ઉમેરવામાં આવ્યું હતું</translation>
@@ -459,7 +449,6 @@
 
 આ સેટિંગ બદલવા માટે, <ph name="BEGIN_LINK" />સિંકને રીસેટ કરો<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">કાર્ડ પરનું નામ</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />માંથી VRમાં દાખલ થવું છે?</translation>
 <translation id="4824958205181053313">સિંક કરવાનું રદ કરીએ?</translation>
 <translation id="4835385943915508971">Chrome ને વિનંતી કરેલ સંસાધનની ઍક્સેસ નથી.</translation>
 <translation id="4837753911714442426">પેજને પ્રિન્ટ કરવાના વિકલ્પો ખોલો</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">પૂર્ણ સ્ક્રીનથી બહાર નીકળો</translation>
 <translation id="6404511346730675251">બુકમાર્કમાં ફેરફાર કરો</translation>
 <translation id="6406506848690869874">સમન્વયન</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" />માંથી ARમાં દાખલ થવું છે?</translation>
 <translation id="641643625718530986">પ્રિન્ટ…</translation>
 <translation id="6427112570124116297">વેબનો અનુવાદ કરો</translation>
 <translation id="6433501201775827830">તમારું શોધ એંજિન પસંદ કરો</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
index a8d17f4f..6b2de28b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"मुख्य साइटें" बटन पर टैप करके लोकप्रिय साइटें देखें</translation>
 <translation id="1173894706177603556">नाम बदलें</translation>
 <translation id="1178581264944972037">रोकें</translation>
-<translation id="1188239144602654184">ऑगमेंटेड रिएलिटी (AR) सत्र शुरू करें</translation>
 <translation id="1197267115302279827">बुकमार्क ले जाएं</translation>
 <translation id="1201402288615127009">अगला</translation>
 <translation id="1204037785786432551">डाउनलोड करने का लिंक</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">टेक्स्ट</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> में से <ph name="RESULT_NUMBER" /> परिणाम</translation>
 <translation id="2096012225669085171">सभी डिवाइस में सिंक करना और मनमुताबिक बनाना</translation>
-<translation id="2099625543891475722">आपकी शारीरिक विशेषता, जैसे कि लंबाई</translation>
 <translation id="2100273922101894616">अपने आप साइन इन करने की सुविधा</translation>
 <translation id="2100314319871056947">टेक्स्ट को छोटे-छोटे हिस्सों में शेयर करने की कोशिश करें</translation>
 <translation id="2109711654079915747">पेज को बंद किए बिना, वेबसाइटों पर दिए गए विषयों के बारे में जानें. 'खोजने के लिए टैप करें' सुविधा, 'Google सर्च' को शब्द और उससे जुड़ी जानकारी भेजती है. इसके बाद, 'सर्च' पर आपको उस शब्द की परिभाषाएं, फ़ोटो, खोज के नतीजे वगैरह दिखते हैं.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">प्रबंधित करें</translation>
 <translation id="381841723434055211">फ़ोन नंबर</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोड हटाए गए</translation>
-<translation id="3849365399446680203">जब आप एआर (ऑगमेंटेड रिएलिटी) इस्तेमाल कर रहे होते हैं, तो यह साइट:
-• आपके आस-पास के माहौल का 3D मैप बना सकती है
-• कैमरे के मोशन पर नज़र रख सकती है
-
-सिर्फ़ आप देख सकते हैं कि आपके कैमरे में क्या दिख रहा है. यह साइट, आपके कैमरे से ली गई इमेज को नहीं देख सकती.</translation>
 <translation id="3859306556332390985">आगे जाएं</translation>
 <translation id="388596076286380598">ऑफ़लाइन होने या खराब कनेक्शन होने पर भी, अपनी पसंद की साइटों से लेख, वीडियो, और दूसरी सामग्री पाएं.</translation>
 <translation id="3894427358181296146">फ़ोल्डर जोड़ें</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">कोई इंटरनेट कनेक्‍शन नहीं</translation>
 <translation id="4321739720395210191">कैमरा खाेला नहीं जा सकता. अपने डिवाइस को रीस्टार्ट करके, फिर से कोशिश करें.</translation>
 <translation id="4351244548802238354">संवाद बंद करें</translation>
-<translation id="4353114845960720315">जब आप वीआर इस्तेमाल करते हैं, तो साइट ये बातें जान सकती है:</translation>
 <translation id="4378154925671717803">फ़ोन</translation>
 <translation id="4384468725000734951">खोज के लिए Sogou का इस्तेमाल कर रहे हैं</translation>
 <translation id="4404568932422911380">कोई बुकमार्क नहीं</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">कोई कनेक्शन नहीं</translation>
 <translation id="4565377596337484307">पासवर्ड छिपाएं</translation>
 <translation id="4572422548854449519">प्रबंधित खाते में साइन इन करें</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# मिनट पहले}one{# मिनट पहले}other{# मिनट पहले}}</translation>
 <translation id="4587589328781138893">साइटें</translation>
 <translation id="4594952190837476234">यह पेज <ph name="CREATION_TIME" /> का है और यह ऑनलाइन वर्शन से अलग हो सकता है.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> को खोलें</translation>
 <translation id="4634124774493850572">पासवर्ड का इस्तेमाल करें</translation>
 <translation id="4650364565596261010">सिस्टम डिफ़ॉल्ट</translation>
-<translation id="4660838440047236328">आपके कमरे का लेआउट</translation>
 <translation id="4662373422909645029">प्रचलित नाम में अंक शामिल नहीं कर सकते</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> बुकमार्क का पता लगा</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> को आपकी होम स्क्रीन में जोड़ा गया था</translation>
@@ -459,7 +449,6 @@
 
 यह सेटिंग बदलने के लिए, <ph name="BEGIN_LINK" />सिंक रीसेट करें<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">कार्ड पर नाम</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> से वीआर डालें?</translation>
 <translation id="4824958205181053313">सिंक करना रद्द करें?</translation>
 <translation id="4835385943915508971">Chrome के पास अनुरोध किए गए संसाधन का एक्सेस नहीं है.</translation>
 <translation id="4837753911714442426">पेज प्रिंट करने के विकल्प खोलें</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">फ़ुल स्क्रीन से बाहर निकलें</translation>
 <translation id="6404511346730675251">बुकमार्क में बदलाव करें</translation>
 <translation id="6406506848690869874">सिंक</translation>
-<translation id="6410973561433500075">क्या आप <ph name="DOMAIN" /> से एआर (ऑगमेंटेड रिएलिटी) में जाना चाहते हैं?</translation>
 <translation id="641643625718530986">प्रिंट करें…</translation>
 <translation id="6427112570124116297">वेब का अनुवाद करें</translation>
 <translation id="6433501201775827830">अपना सर्च इंजन चुनें</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
index ea6fa3d..f1300c8e7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Dodirom na gumb "Najpopularnije web-lokacije" pogledajte popularne web-lokacije</translation>
 <translation id="1173894706177603556">Preimenuj</translation>
 <translation id="1178581264944972037">Pauziraj</translation>
-<translation id="1188239144602654184">Pokreni AR</translation>
 <translation id="1197267115302279827">Premjesti oznake</translation>
 <translation id="1201402288615127009">Dalje</translation>
 <translation id="1204037785786432551">Preuzmi vezu</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">SMS</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" /> od <ph name="TOTAL_RESULTS" /> rezultata</translation>
 <translation id="2096012225669085171">Sinkronizacija i prilagodba na svim uređajima</translation>
-<translation id="2099625543891475722">vaše fizičke značajke, primjerice visinu</translation>
 <translation id="2100273922101894616">Automatska prijava</translation>
 <translation id="2100314319871056947">Pokušajte podijeliti tekst u manjim dijelovima</translation>
 <translation id="2109711654079915747">Ne morate napustiti stranicu da biste saznali koje su teme web-lokacija. Značajka Dodirnite za pretraživanje šalje Google pretraživanju riječ i njezin kontekst, a vraća definicije, slike, rezultate pretraživanja i druge pojedinosti.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Upravljaj</translation>
 <translation id="381841723434055211">Telefonski brojevi</translation>
 <translation id="3819178904835489326">Izbrisano preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Dok ste u AR-u, ova web-lokacija može:
-• izraditi 3D kartu vašeg okruženja
-• pratiti kretanje fotoaparata.
-
-Samo vi možete vidjeti što kamera snima. Web-lokacija ne može vidjeti slike s kamere.</translation>
 <translation id="3859306556332390985">Traži unaprijed</translation>
 <translation id="388596076286380598">Primajte članke, videozapise i druge sadržaje s web-lokacija koje vam se sviđaju, čak i izvanmrežno ili ako vam je veza loša.</translation>
 <translation id="3894427358181296146">Dodavanje mape</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nema internetske veze</translation>
 <translation id="4321739720395210191">Kamera se ne može otvoriti. Ponovno pokrenite uređaj i pokušajte opet.</translation>
 <translation id="4351244548802238354">Zatvori dijaloški okvir</translation>
-<translation id="4353114845960720315">Ova web-lokacija možda može saznati nešto o vama dok ste u VR-u, na primjer:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Za pretraživanje se upotrebljava Sogou</translation>
 <translation id="4404568932422911380">Bez oznaka</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Niste povezani</translation>
 <translation id="4565377596337484307">Sakrij zaporku</translation>
 <translation id="4572422548854449519">Prijava na upravljani račun</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{prije # minute}one{prije # minute}few{prije # minute}other{prije # minuta}}</translation>
 <translation id="4587589328781138893">Web-lokacije</translation>
 <translation id="4594952190837476234">Ova offline stranica nastala je <ph name="CREATION_TIME" /> i možda se razlikuje od online verzije.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Upotrijebi zaporku</translation>
 <translation id="4650364565596261010">Zadana postavka sustava</translation>
-<translation id="4660838440047236328">izgled vaše sobe</translation>
 <translation id="4662373422909645029">Nadimak ne smije sadržavati brojeve</translation>
 <translation id="4663756553811254707">Oznake su izbrisane (<ph name="NUMBER_OF_BOOKMARKS" />)</translation>
 <translation id="4665282149850138822">Web-lokacija <ph name="NAME" /> dodana je na početni zaslon</translation>
@@ -459,7 +449,6 @@
 
 Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Ime na kartici</translation>
-<translation id="4808319664292298116">Želite li pokrenuti VR s web-lokacije <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Otkazati sinkronizaciju?</translation>
 <translation id="4835385943915508971">Chrome nema pristup zatraženom resursu.</translation>
 <translation id="4837753911714442426">Otvaranje opcija za ispis stranice</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Izađi iz cijelog zaslona</translation>
 <translation id="6404511346730675251">Uredi oznaku</translation>
 <translation id="6406506848690869874">Sinkronizacija</translation>
-<translation id="6410973561433500075">Želite li pokrenuti AR s web-lokacije <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Ispis…</translation>
 <translation id="6427112570124116297">Prijevod weba</translation>
 <translation id="6433501201775827830">Odaberite tražilicu</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index 88221445..cd7298b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">A „Népszerűek” gombra koppintva megtekintheti a népszerű webhelyeket</translation>
 <translation id="1173894706177603556">Átnevezés</translation>
 <translation id="1178581264944972037">Szünet</translation>
-<translation id="1188239144602654184">AR indítása</translation>
 <translation id="1197267115302279827">Könyvjelzők áthelyezése</translation>
 <translation id="1201402288615127009">Tovább</translation>
 <translation id="1204037785786432551">Link letöltése</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">szöveg</translation>
 <translation id="2082238445998314030">Eredmény: <ph name="RESULT_NUMBER" />/<ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Szinkronizálás és személyre szabás az eszközök között</translation>
-<translation id="2099625543891475722">az Ön fizikai jellemzőiről, például a magasságáról;</translation>
 <translation id="2100273922101894616">Automatikus bejelentkezés</translation>
 <translation id="2100314319871056947">Próbálja meg kisebb részletekben megosztani a szöveget</translation>
 <translation id="2109711654079915747">Többet is megtudhat a webhelyeken lévő egyes témákról anélkül, hogy elhagyná az adott oldalt. Az Érintéssel keresés funkció elküldi az adott szót és annak kontextusát a Google Kereső számára, majd meghatározásokat, képeket, keresési találatokat és egyéb részleteket jelenít meg.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Szerkesztés</translation>
 <translation id="381841723434055211">Telefonszámok</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> letöltés törölve</translation>
-<translation id="3849365399446680203">Amíg AR-módban van, a webhely:
-• 3D-s térképet készíthet az Ön környezetéről;
-• követheti a kamera mozgását.
-
-Csak Ön láthatja, hogy mi van a kamera látóterében. A webhely nem látja a kamera képeit.</translation>
 <translation id="3859306556332390985">Ugrás előre</translation>
 <translation id="388596076286380598">Hozzájuthat cikkekhez, videókhoz és más tartalmakhoz a kedvenc webhelyeiről – még akkor is, ha offline állapotban van, vagy ha a kapcsolat rossz minőségű.</translation>
 <translation id="3894427358181296146">Mappa hozzáadása</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nincs internetkapcsolat</translation>
 <translation id="4321739720395210191">Nem lehet megnyitni a kamerát. Indítsa újra az eszközt, és próbálkozzon újra.</translation>
 <translation id="4351244548802238354">Párbeszédablak bezárása</translation>
-<translation id="4353114845960720315">Amíg VR-módban van, a webhely információkhoz juthat bizonyos dolgokról:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">A Sogou használata a kereséshez</translation>
 <translation id="4404568932422911380">Nincsenek könyvjelzők</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Nincs kapcsolat</translation>
 <translation id="4565377596337484307">Jelszó elrejtése</translation>
 <translation id="4572422548854449519">Bejelentkezés a kezelt fiókba</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# perce}other{# perce}}</translation>
 <translation id="4587589328781138893">Webhelyek</translation>
 <translation id="4594952190837476234">Az offline oldal létrehozási ideje: <ph name="CREATION_TIME" />. Az oldal eltérhet az online változattól.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> megnyitása</translation>
 <translation id="4634124774493850572">Jelszó használata</translation>
 <translation id="4650364565596261010">Alapértelmezett</translation>
-<translation id="4660838440047236328">a szoba elrendezéséről.</translation>
 <translation id="4662373422909645029">A névben nem lehet szám</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> könyvjelző törölve</translation>
 <translation id="4665282149850138822">A(z) <ph name="NAME" /> felkerült a kezdőképernyőre</translation>
@@ -459,7 +449,6 @@
 
 A beállítás módosításához <ph name="BEGIN_LINK" />állítsa vissza a szinkronizálást<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">A kártyán feltüntetett név</translation>
-<translation id="4808319664292298116">Belép a(z) <ph name="DOMAIN" /> által biztosított virtuális valóságba?</translation>
 <translation id="4824958205181053313">Megszakítja a szinkronizálást?</translation>
 <translation id="4835385943915508971">A Chrome nem fér hozzá a kért forráshoz.</translation>
 <translation id="4837753911714442426">Oldalnyomtatási lehetőségek megnyitása</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Kilépés a teljes képernyős módból</translation>
 <translation id="6404511346730675251">Könyvjelző szerkesztése</translation>
 <translation id="6406506848690869874">Szinkronizálás</translation>
-<translation id="6410973561433500075">Biztosan AR-módba szeretne lépni innen: <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Nyomtatás…</translation>
 <translation id="6427112570124116297">Lefordíthatja az internetet</translation>
 <translation id="6433501201775827830">Keresőmotor kiválasztása</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
index a8f5caae..acbd8cc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Սեղմեք «Կայքերի ընտրանի» կոճակը և դիտեք թոփ կայքերը</translation>
 <translation id="1173894706177603556">Վերանվանել</translation>
 <translation id="1178581264944972037">Դադար</translation>
-<translation id="1188239144602654184">Սկսել AR աշխատաշրջանը</translation>
 <translation id="1197267115302279827">Տեղափոխել էջանիշները</translation>
 <translation id="1201402288615127009">Հաջորդը</translation>
 <translation id="1204037785786432551">Ներբեռնել հղումը</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">տեքստ</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />-ից <ph name="TOTAL_RESULTS" /> արդյունք</translation>
 <translation id="2096012225669085171">Համաժամացում և անհատականացում բոլոր սարքերում</translation>
-<translation id="2099625543891475722">ձեր ֆիզիկական բնութագրերը, օրինակ՝ հասակը</translation>
 <translation id="2100273922101894616">Ավտոմատ մուտք</translation>
 <translation id="2100314319871056947">Փորձեք ուղարկել տեքստը մաս-մաս</translation>
 <translation id="2109711654079915747">Իմացեք ավելին կայքի բովանդակության մասին՝ առանց էջից դուրս գալու։ Հպեք անհրաժեշտ բառին․ Google Որոնումը կփնտրի այն իր համատեքստով և կցուցադրի սահմանումներ, նկարներ, որոնման արդյունքներ և այլ տվյալներ։
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Կառավարել</translation>
 <translation id="381841723434055211">Հեռախոսահամարներ</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ներբեռնում ջնջվեց</translation>
-<translation id="3849365399446680203">Լրացված իրականության ռեժիմում այս կայքը կարող է՝
-• ստեղծել ձեր միջավայրի 3D քարտեզը,
-• հետևել տեսախցիկի շարժմանը:
-
-Միայն դուք կարող եք տեսնել, թե որ կողմ է նայում տեսախցիկը։ Կայքը չի կարող տեսնել տեսախցիկի պատկերները։</translation>
 <translation id="3859306556332390985">Որոնել դեպի առաջ</translation>
 <translation id="388596076286380598">Դուք կարող եք կարդալ հոդվածներ, դիտել տեսանյութեր և այլ բովանդակություն ձեր սիրած կայքերից նույնիսկ, երբ կապը թույլ է կամ բացակայում է։</translation>
 <translation id="3894427358181296146">Պանակի ավելացում</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Համացանցի կապակցում չկա</translation>
 <translation id="4321739720395210191">Չհաջողվեց բացել տեսախցիկը։ Վերագործարկեք սարքը և նորից փորձեք։</translation>
 <translation id="4351244548802238354">Փակել երկխոսությունը</translation>
-<translation id="4353114845960720315">VR ռեժիմում կայքին կարող են հասանելի լինել՝</translation>
 <translation id="4378154925671717803">Հեռախոս</translation>
 <translation id="4384468725000734951">Օգտագործվում է Sogou որոնման համակարգը</translation>
 <translation id="4404568932422911380">Էջանիշներ չկան</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Կապ չկա</translation>
 <translation id="4565377596337484307">Թաքցնել գաղտնաբառը</translation>
 <translation id="4572422548854449519">Մուտք գործեք կառավարվող հաշիվ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# րոպե առաջ}one{# minutes ago}other{# րոպե առաջ}}</translation>
 <translation id="4587589328781138893">Կայքեր</translation>
 <translation id="4594952190837476234">Այս էջը պահվել է <ph name="CREATION_TIME" />-ին, և կարող է տարբերվել առցանց տարբերակից։</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Բացել <ph name="WEBAPK_NAME" /> հավելվածը</translation>
 <translation id="4634124774493850572">Օգտագործել գաղտնաբառը</translation>
 <translation id="4650364565596261010">Կանխադրված</translation>
-<translation id="4660838440047236328">ձեր սենյակի դասավորությունը</translation>
 <translation id="4662373422909645029">Չի կարող թվեր պարունակել</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> էջանիշ ջնջվեց</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> կայքն ավելացվեց ձեր հիմնական էկրանին</translation>
@@ -459,7 +449,6 @@
 
 Այս կարգավորումը փոփոխելու համար <ph name="BEGIN_LINK" />վերակայեք համաժամացումը<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Քարտապանի անունը</translation>
-<translation id="4808319664292298116">Մտնե՞լ VR <ph name="DOMAIN" /> կայքից</translation>
 <translation id="4824958205181053313">Չեղարկե՞լ համաժամացումը</translation>
 <translation id="4835385943915508971">Հարցված ռեսուրսը հասանելի չէ Chrome-ին:</translation>
 <translation id="4837753911714442426">Բացել էջը տպելու տարբերակները</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Ելնել լիաէկրան ռեժիմից</translation>
 <translation id="6404511346730675251">Փոփոխել էջանիշը</translation>
 <translation id="6406506848690869874">Համաժամացում</translation>
-<translation id="6410973561433500075">Մտնե՞լ լրացված իրականության ռեժիմ <ph name="DOMAIN" /> կայքից</translation>
 <translation id="641643625718530986">Տպել…</translation>
 <translation id="6427112570124116297">Թարգմանեք կայքերը</translation>
 <translation id="6433501201775827830">Ընտրեք որոնիչը</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index add9d04..38a2444 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Lihat situs populer dengan mengetuk tombol "Situs populer"</translation>
 <translation id="1173894706177603556">Ganti nama</translation>
 <translation id="1178581264944972037">Jeda</translation>
-<translation id="1188239144602654184">Mulai AR</translation>
 <translation id="1197267115302279827">Pindahkan bookmark</translation>
 <translation id="1201402288615127009">Berikutnya</translation>
 <translation id="1204037785786432551">Download link</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">teks</translation>
 <translation id="2082238445998314030">Hasil <ph name="RESULT_NUMBER" /> dari <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sinkronkan dan personalisasi di berbagai perangkat</translation>
-<translation id="2099625543891475722">ciri fisik Anda, seperti tinggi badan</translation>
 <translation id="2100273922101894616">Login Otomatis</translation>
 <translation id="2100314319871056947">Coba bagikan teks dalam potongan yang lebih kecil</translation>
 <translation id="2109711654079915747">Pelajari topik di situs tanpa meninggalkan halaman. Fitur Sentuh untuk Menelusuri mengirimkan kata dan konteks di sekitarnya ke Google Penelusuran, yang kemudian menampilkan definisi, gambar, hasil penelusuran, dan detail lainnya.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Kelola</translation>
 <translation id="381841723434055211">Nomor telepon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> download dihapus</translation>
-<translation id="3849365399446680203">Ketika Anda berada di dalam sesi Augmented Reality (AR), situs ini dapat:
-• membuat peta 3D lingkungan Anda
-• melacak gerakan kamera
-
-Hanya Anda yang dapat melihat hal-hal yang dilihat kamera Anda. Situs ini tidak dapat melihat gambar dari kamera Anda.</translation>
 <translation id="3859306556332390985">Cari maju</translation>
 <translation id="388596076286380598">Dapatkan artikel, video, dan konten lain dari situs yang Anda sukai, meskipun Anda sedang offline atau koneksi Anda buruk.</translation>
 <translation id="3894427358181296146">Tambah folder</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Tidak ada koneksi internet</translation>
 <translation id="4321739720395210191">Tidak dapat membuka kamera Anda. Mulai ulang perangkat Anda dan coba lagi.</translation>
 <translation id="4351244548802238354">Tutup dialog</translation>
-<translation id="4353114845960720315">Ketika Anda berada dalam VR, situs ini mungkin dapat mempelajari:</translation>
 <translation id="4378154925671717803">Ponsel</translation>
 <translation id="4384468725000734951">Menggunakan Sogou untuk penelusuran</translation>
 <translation id="4404568932422911380">Tidak ada bookmark</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Tidak ada koneksi</translation>
 <translation id="4565377596337484307">Sembunyikan sandi</translation>
 <translation id="4572422548854449519">Login ke akun terkelola</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# menit yang lalu}other{# menit yang lalu}}</translation>
 <translation id="4587589328781138893">Situs</translation>
 <translation id="4594952190837476234">Halaman offline ini dibuat pada <ph name="CREATION_TIME" /> dan mungkin berbeda dengan versi onlinenya.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Buka <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gunakan sandi</translation>
 <translation id="4650364565596261010">Default sistem</translation>
-<translation id="4660838440047236328">tata letak ruangan Anda</translation>
 <translation id="4662373422909645029">Nama panggilan tidak boleh berisi angka</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bookmark dihapus</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> telah ditambahkan ke layar Utama</translation>
@@ -459,7 +449,6 @@
 
 Untuk mengubah setelan ini, <ph name="BEGIN_LINK" />setel ulang sinkronisasi<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Nama di kartu</translation>
-<translation id="4808319664292298116">Masukkan VR dari <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Batalkan sinkronisasi?</translation>
 <translation id="4835385943915508971">Chrome tidak memiliki akses ke sumber daya yang diminta.</translation>
 <translation id="4837753911714442426">Membuka opsi untuk mencetak halaman</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Keluar dari tampilan layar penuh</translation>
 <translation id="6404511346730675251">Edit bookmark</translation>
 <translation id="6406506848690869874">Sinkronisasi</translation>
-<translation id="6410973561433500075">Masuk ke sesi AR dari <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Cetak...</translation>
 <translation id="6427112570124116297">Terjemahkan Web</translation>
 <translation id="6433501201775827830">Pilih mesin telusur Anda</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
index c57d22a..8136ad6d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Sjáðu vinsæl vefsvæði með því að ýta á hnappinn „Vinsælast“</translation>
 <translation id="1173894706177603556">Endurnefna</translation>
 <translation id="1178581264944972037">Gera hlé</translation>
-<translation id="1188239144602654184">Fara inn í AR</translation>
 <translation id="1197267115302279827">Færa bókamerki</translation>
 <translation id="1201402288615127009">Áfram</translation>
 <translation id="1204037785786432551">Hlaða niður tengli</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texti</translation>
 <translation id="2082238445998314030">Niðurstaða <ph name="RESULT_NUMBER" /> af <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Samstilltu á milli tækja og gerðu að þínu</translation>
-<translation id="2099625543891475722">líkamleg einkenni þín, eins og hæð</translation>
 <translation id="2100273922101894616">Sjálfvirk innskráning</translation>
 <translation id="2100314319871056947">Prófaðu að deila textanum í smærri hluta</translation>
 <translation id="2109711654079915747">Fáðu frekari upplýsingar um efnisatriði á vefsvæðum án þess að yfirgefa síðuna. Snertileit sendir orð og samhengi þess til Google leitar og birtir skilgreiningar, myndir, leitarniðurstöður og aðrar upplýsingar.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Stjórna</translation>
 <translation id="381841723434055211">Símanúmer</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> niðurhölum eytt</translation>
-<translation id="3849365399446680203">Þegar þú ert í AR gæti þetta vefsvæði:
-• Búið til þrívíddarkort af umhverfi þínu
-• Fylgst með hreyfingu myndavélar
-
-Aðeins þú getur séð að hverju myndavélin beinist. Vefsvæðið getur ekki séð myndir sem myndavélin tekur.</translation>
 <translation id="3859306556332390985">Leita áfram</translation>
 <translation id="388596076286380598">Fáðu greinar, myndskeið og annað efni frá vefsvæðum sem þú kannt að meta, jafnvel án nettengingar eða þegar tengingin er léleg.</translation>
 <translation id="3894427358181296146">Bæta möppu við</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Engin nettenging</translation>
 <translation id="4321739720395210191">Ekki tókst að opna myndavélina. Endurræstu tækið og reyndu aftur.</translation>
 <translation id="4351244548802238354">Loka glugga</translation>
-<translation id="4353114845960720315">Þegar þú ert í sýndarveruleika kann þetta vefsvæði að fá upplýsingar um:</translation>
 <translation id="4378154925671717803">Sími</translation>
 <translation id="4384468725000734951">Notar Sogou fyrir leit</translation>
 <translation id="4404568932422911380">Engin bókamerki</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Engin tenging</translation>
 <translation id="4565377596337484307">Fela aðgangsorð</translation>
 <translation id="4572422548854449519">Innskráning á stýrðan reikning</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Fyrir # mínútu}one{Fyrir # mínútu}other{Fyrir # mínútum}}</translation>
 <translation id="4587589328781138893">Svæði</translation>
 <translation id="4594952190837476234">Þessi síða án nettengingar er frá <ph name="CREATION_TIME" /> og hún gæti verið frábrugðin útgáfunni sem er á netinu.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Opna <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Nota aðgangsorð</translation>
 <translation id="4650364565596261010">Sjálfgildi kerfis</translation>
-<translation id="4660838440047236328">útlit herbergisins sem þú ert í</translation>
 <translation id="4662373422909645029">Gælunöfn mega ekki hafa númer</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bókamerkjum eytt</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> var bætt við heimaskjáinn þinn</translation>
@@ -459,7 +449,6 @@
 
 Til að breyta þessari stillingu skaltu <ph name="BEGIN_LINK" />endurstilla samstillingu<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Nafn á korti</translation>
-<translation id="4808319664292298116">Viltu fara í sýndarveruleika af <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Hætta við samstillingu?</translation>
 <translation id="4835385943915508971">Chrome hefur ekki aðgang að umbeðnu tilfangi.</translation>
 <translation id="4837753911714442426">Opna valkosti fyrir prentun síðunnar</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Hætta að nota allan skjáinn</translation>
 <translation id="6404511346730675251">Breyta bókamerki</translation>
 <translation id="6406506848690869874">Samstilling</translation>
-<translation id="6410973561433500075">Fara í AR úr <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Prenta...</translation>
 <translation id="6427112570124116297">Þýða vefinn</translation>
 <translation id="6433501201775827830">Veldu leitarvélina þína</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
index 503086c..2fc8c56c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Scopri i siti web più visitati toccando il pulsante "Siti principali"</translation>
 <translation id="1173894706177603556">Rinomina</translation>
 <translation id="1178581264944972037">Pausa</translation>
-<translation id="1188239144602654184">Entra in AR</translation>
 <translation id="1197267115302279827">Sposta i Preferiti</translation>
 <translation id="1201402288615127009">Avanti</translation>
 <translation id="1204037785786432551">Link di download</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">testo</translation>
 <translation id="2082238445998314030">Risultato <ph name="RESULT_NUMBER" /> di <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincronizza e personalizza su tutti i dispositivi</translation>
-<translation id="2099625543891475722">Dati sulle tue caratteristiche fisiche, come l'altezza</translation>
 <translation id="2100273922101894616">Accesso automatico</translation>
 <translation id="2100314319871056947">Prova a condividere il testo in parti più piccole</translation>
 <translation id="2109711654079915747">Scopri di più sugli argomenti dei siti web senza lasciare la pagina. La funzionalità Tocca per cercare consente di inviare una parola e il relativo contesto alla Ricerca Google; vengono restituiti risultati di ricerca, immagini, definizioni e altri dettagli.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gestisci</translation>
 <translation id="381841723434055211">Numeri di telefono</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> download eliminati</translation>
-<translation id="3849365399446680203">Mentre sei in AR, questo sito potrebbe essere in grado di:
-• Creare una mappa 3D del tuo ambiente.
-• Monitorare il movimento della videocamera.
-
-Soltanto tu puoi vedere cosa sta inquadrando la videocamera. Il sito non può vedere le immagini della videocamera.</translation>
 <translation id="3859306556332390985">Posiziona avanti</translation>
 <translation id="388596076286380598">Accedi ad articoli, video e altri contenuti dai siti che ti piacciono anche quando sei offline o se la connessione è insufficiente.</translation>
 <translation id="3894427358181296146">Aggiungi cartella</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nessuna connessione Internet</translation>
 <translation id="4321739720395210191">Impossibile aprire la fotocamera. Riavvia il dispositivo e riprova.</translation>
 <translation id="4351244548802238354">Chiudi finestra di dialogo</translation>
-<translation id="4353114845960720315">Mentre ti trovi nella VR, il sito potrebbe riuscire ad acquisire:</translation>
 <translation id="4378154925671717803">Telefono</translation>
 <translation id="4384468725000734951">Sogou in uso per la ricerca</translation>
 <translation id="4404568932422911380">Nessun segnalibro</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Nessuna connessione</translation>
 <translation id="4565377596337484307">Nascondi password</translation>
 <translation id="4572422548854449519">Accedi all'account gestito</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minuto fa}other{# minuti fa}}</translation>
 <translation id="4587589328781138893">Siti</translation>
 <translation id="4594952190837476234">Questa pagina offline risale al giorno <ph name="CREATION_TIME" /> e potrebbe essere diversa dalla versione online.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Apri <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizza password</translation>
 <translation id="4650364565596261010">Predefinito</translation>
-<translation id="4660838440047236328">Dati sulla struttura della tua stanza</translation>
 <translation id="4662373422909645029">Il nickname non può includere numeri</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> Preferiti eliminati</translation>
 <translation id="4665282149850138822">Il sito <ph name="NAME" /> è stato aggiunto alla schermata Home</translation>
@@ -459,7 +449,6 @@
 
 Per cambiare questa impostazione, <ph name="BEGIN_LINK" />reimposta la sincronizzazione<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Nome sulla carta di credito</translation>
-<translation id="4808319664292298116">Entrare nella VR da <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Vuoi annullare la sincronizzazione?</translation>
 <translation id="4835385943915508971">Chrome non ha accesso alla risorsa richiesta.</translation>
 <translation id="4837753911714442426">Apri la pagina delle opzioni di stampa</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Esci da schermo intero</translation>
 <translation id="6404511346730675251">Modifica preferito</translation>
 <translation id="6406506848690869874">Sincronizzazione</translation>
-<translation id="6410973561433500075">Vuoi entrare nella AR da <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Stampa…</translation>
 <translation id="6427112570124116297">Traduci il Web</translation>
 <translation id="6433501201775827830">Scegli il motore di ricerca</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index 01a646d..71247272 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">הקשה על הלחצן "אתרים נבחרים" תציג אתרים פופולריים</translation>
 <translation id="1173894706177603556">שנה שם</translation>
 <translation id="1178581264944972037">השהה</translation>
-<translation id="1188239144602654184">‏כניסה ל-AR</translation>
 <translation id="1197267115302279827">העבר סימניות</translation>
 <translation id="1201402288615127009">הבא</translation>
 <translation id="1204037785786432551">הורדת קישור</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">טקסט</translation>
 <translation id="2082238445998314030">תוצאה <ph name="RESULT_NUMBER" /> מתוך <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">סנכרון והתאמה אישית במכשירים שונים</translation>
-<translation id="2099625543891475722">התכונות הפיזיות שלך, כמו גובה.</translation>
 <translation id="2100273922101894616">כניסה אוטומטית</translation>
 <translation id="2100314319871056947">כדאי לשתף את הטקסט במקטעים קטנים יותר</translation>
 <translation id="2109711654079915747">‏ניתן לקבל מידע על נושאים שמוזכרים באתרים מבלי לצאת מהדף. התכונה 'חיפוש בנגיעה' מאפשרת לשלוח מילה ביחד עם ההקשר שלה אל חיפוש Google, כדי לקבל הגדרות, תמונות, תוצאות חיפוש ופרטים אחרים.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">נהל</translation>
 <translation id="381841723434055211">מספרי טלפון</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> הורדות נמחקו</translation>
-<translation id="3849365399446680203">‏בזמן השימוש ב-AR, ייתכן שהאתר הזה יוכל:
-• ליצור מפת תלת-ממד של הסביבה שלך
-• לעקוב אחרי תנועת המצלמה
-
-רק לך יש גישה למה שהמצלמה קולטת. לאתר אין גישה לתמונות מהמצלמה שלך.</translation>
 <translation id="3859306556332390985">הרץ קדימה</translation>
 <translation id="388596076286380598">גם כשאין חיבור לאינטרנט וגם כשהחיבור חלש, עדיין אפשר לגשת למאמרים, לסרטונים ולתוכן אחר מאתרים שמעניינים אותך.</translation>
 <translation id="3894427358181296146">הוספת תיקייה</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">אין חיבור לאינטרנט</translation>
 <translation id="4321739720395210191">לא ניתן לפתוח את המצלמה. כדאי להפעיל מחדש את המכשיר ולנסות שוב.</translation>
 <translation id="4351244548802238354">סגור את תיבת הדו-שיח</translation>
-<translation id="4353114845960720315">‏במצב VR, האתר הזה עשוי לקבל מידע על:</translation>
 <translation id="4378154925671717803">טלפון</translation>
 <translation id="4384468725000734951">‏שימוש ב-Sogou לחיפוש</translation>
 <translation id="4404568932422911380">ללא סימניות</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">אין חיבור</translation>
 <translation id="4565377596337484307">הסתר סיסמה</translation>
 <translation id="4572422548854449519">כניסה אל חשבון מנוהל</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{לפני דקה}two{לפני # דקות}many{לפני # דקות}other{לפני # דקות}}</translation>
 <translation id="4587589328781138893">אתרים</translation>
 <translation id="4594952190837476234">הדף הלא מקוון הזה נוצר ב-<ph name="CREATION_TIME" /> ויכול להיות שהגירסה המקוונת שלו שונה.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">פתיחה של <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">שימוש בסיסמה</translation>
 <translation id="4650364565596261010">ברירת מחדל של המערכת</translation>
-<translation id="4660838440047236328">מבנה החדר שלך.</translation>
 <translation id="4662373422909645029">אין לכלול מספרים בכינוי</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> סימניות נמחקו</translation>
 <translation id="4665282149850138822">האתר <ph name="NAME" /> נוסף למסך דף הבית שלך</translation>
@@ -459,7 +449,6 @@
 
 כדי לשנות את ההגדרה הזו צריך <ph name="BEGIN_LINK" />לאפס את הסנכרון<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">שם על הכרטיס</translation>
-<translation id="4808319664292298116">‏לעבור למצב VR מ-<ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">לבטל את הסנכרון?</translation>
 <translation id="4835385943915508971">‏ל-Chrome אין גישה למשאב המבוקש.</translation>
 <translation id="4837753911714442426">פתח אפשרויות להדפסת דפים</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">צא ממסך מלא</translation>
 <translation id="6404511346730675251">ערוך סימניה</translation>
 <translation id="6406506848690869874">סנכרון</translation>
-<translation id="6410973561433500075">‏האם לעבור ל-AR מהדומיין <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">הדפסה…</translation>
 <translation id="6427112570124116297">תרגום התוכן באינטרנט</translation>
 <translation id="6433501201775827830">בחירת מנוע החיפוש</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
index cd30931e..8729f1e8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">人気のウェブサイトを表示するには、[上位のサイト] ボタンをタップします</translation>
 <translation id="1173894706177603556">名前を変更</translation>
 <translation id="1178581264944972037">一時停止</translation>
-<translation id="1188239144602654184">AR を開始</translation>
 <translation id="1197267115302279827">ブックマークを移動</translation>
 <translation id="1201402288615127009">次へ</translation>
 <translation id="1204037785786432551">リンクをダウンロード</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">テキスト</translation>
 <translation id="2082238445998314030">結果 <ph name="TOTAL_RESULTS" /> 件中 <ph name="RESULT_NUMBER" /> 件目</translation>
 <translation id="2096012225669085171">デバイス間の同期とカスタマイズ</translation>
-<translation id="2099625543891475722">あなたの身体的特徴(身長など)</translation>
 <translation id="2100273922101894616">自動ログイン</translation>
 <translation id="2100314319871056947">共有するテキスト ブロックを小さくしてください</translation>
 <translation id="2109711654079915747">ウェブサイト上のトピックについて、ページを移動せずに調べることができます。「タップして検索」では、単語とその周囲のコンテキストが Google 検索に送信され、定義、画像、検索結果などの情報が返されます。
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">管理</translation>
 <translation id="381841723434055211">電話番号</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> 件のダウンロードを削除しました</translation>
-<translation id="3849365399446680203">AR の使用中、このサイトで次の処理が行われる場合があります。
-• 環境の 3D マップを作成する
-• カメラの動きを追跡する
-
-カメラが写している内容は自分にしか見えません。サイト側ではカメラの画像は見えません。</translation>
 <translation id="3859306556332390985">前方にシーク再生</translation>
 <translation id="388596076286380598">オフラインの場合や接続が不安定な場合でも、お気に入りのサイトの記事や動画などのコンテンツを閲覧できます。</translation>
 <translation id="3894427358181296146">フォルダの追加</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">インターネットに接続されていません</translation>
 <translation id="4321739720395210191">カメラを開けません。デバイスを再起動してもう一度お試しください。</translation>
 <translation id="4351244548802238354">ダイアログを閉じる</translation>
-<translation id="4353114845960720315">VR の使用中、このサイトで次の情報が把握される場合があります。</translation>
 <translation id="4378154925671717803">電話</translation>
 <translation id="4384468725000734951">検索に Sogou を使用します</translation>
 <translation id="4404568932422911380">ブックマークがありません</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">接続されていません</translation>
 <translation id="4565377596337484307">パスワードを表示しない</translation>
 <translation id="4572422548854449519">管理対象アカウントにログイン</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# 分前}other{# 分前}}</translation>
 <translation id="4587589328781138893">サイト</translation>
 <translation id="4594952190837476234">このオフライン ページは <ph name="CREATION_TIME" /> 時点のものであり、オンライン版とは異なる可能性があります。</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> を起動</translation>
 <translation id="4634124774493850572">パスワードを使用</translation>
 <translation id="4650364565596261010">システムのデフォルト</translation>
-<translation id="4660838440047236328">あなたの部屋のレイアウト</translation>
 <translation id="4662373422909645029">ニックネームに数字を含めることはできません</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> 件のブックマークを削除しました</translation>
 <translation id="4665282149850138822">「<ph name="NAME" />」がホーム画面に追加されました</translation>
@@ -459,7 +449,6 @@
 
 この設定を変更する場合は<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />してください</translation>
 <translation id="4807098396393229769">カード名義人(半角英文字)</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> で VR を使用しますか?</translation>
 <translation id="4824958205181053313">同期をキャンセルしますか?</translation>
 <translation id="4835385943915508971">Chrome はリクエストされたリソースにアクセスできません。</translation>
 <translation id="4837753911714442426">ページの印刷オプションを開く</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">全画面表示を終了</translation>
 <translation id="6404511346730675251">ブックマークを編集</translation>
 <translation id="6406506848690869874">同期</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> で AR を使用しますか?</translation>
 <translation id="641643625718530986">印刷...</translation>
 <translation id="6427112570124116297">ウェブの翻訳</translation>
 <translation id="6433501201775827830">検索エンジンを選択</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
index da5ded6..73cece4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">იხილეთ პოპულარული ვებსაიტები „ტოპ-საიტების“ ღილაკზე შეხებით</translation>
 <translation id="1173894706177603556">სახელის შეცვლა</translation>
 <translation id="1178581264944972037">პაუზა</translation>
-<translation id="1188239144602654184">AR-ში შესვლა</translation>
 <translation id="1197267115302279827">სანიშნეების გადატანა</translation>
 <translation id="1201402288615127009">შემდეგი</translation>
 <translation id="1204037785786432551">ბმულის ჩამოტვირთვა</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ტექსტი</translation>
 <translation id="2082238445998314030">შედეგი <ph name="RESULT_NUMBER" /> / <ph name="TOTAL_RESULTS" />-დან</translation>
 <translation id="2096012225669085171">სინქრონიზაცია და პერსონალიზება სხვადასხვა მოწყობილობას შორის</translation>
-<translation id="2099625543891475722">თქვენი ფიზიკური მონაცემები, როგორიცაა სიმაღლე</translation>
 <translation id="2100273922101894616">ავტომატური შესვლა</translation>
 <translation id="2100314319871056947">ცადეთ ტექსტის გაზიარება უფრო მცირე ფრაგმენტებად</translation>
 <translation id="2109711654079915747">გაეცანით ვებსაიტებზე მოცემულ თემებს გვერდიდან გაუსვლელად. „შეეხეთ ძიებისთვის“ Google Search-ს უგზავნის სიტყვას და შესაბამის კონტექსტს. შედეგად კი მიიღებთ განმარტებებს, სურათებს, ძიების შედეგებსა და სხვა კონტენტს.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">მართვა</translation>
 <translation id="381841723434055211">ტელეფონის ნომრები</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ჩამოტვირთული ფაილი წაიშალა</translation>
-<translation id="3849365399446680203">აუგმენტური რეალობის რეჟიმში ამ საიტს შეეძლება:
-• თქვენი გარემოს 3-განზომილებიანი რუკის შექმნა
-• კამერის მოძრაობისთვის თვალის მიდევნება
-
-კამერის მიერ გადაღებულ კადრებს მხოლოდ თქვენ ხედავთ. ამ საიტს არ ექნება წვდომა კამერის გამოსახულებებზე.</translation>
 <translation id="3859306556332390985">წინ ძიება</translation>
 <translation id="388596076286380598">მიიღეთ სტატიები, ვიდეოები და სხვა კონტენტი საიტებიდან, რომლებიც მოგწონთ, მაშინაც კი თუ ხაზგარეშე რეჟიმში ხართ ან ცუდი კავშირი გაქვთ.</translation>
 <translation id="3894427358181296146">საქაღალდის დამატება</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ინტერნეტთან კავშირი არ არის</translation>
 <translation id="4321739720395210191">კამერის გახსნა ვერ მოხერხდა. გადატვირთეთ მოწყობილობა და ცადეთ ხელახლა.</translation>
 <translation id="4351244548802238354">დიალოგის დახურვა</translation>
-<translation id="4353114845960720315">VR რეჟიმში ყოფნისას ამ საიტს შეუძლია ინფორმაციის მიღება შემდეგის შესახებ:</translation>
 <translation id="4378154925671717803">ტელეფონი</translation>
 <translation id="4384468725000734951">ძიებისთვის Sogou გამოიყენება</translation>
 <translation id="4404568932422911380">სანიშნეები არ არის</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">კავშირი არ არის</translation>
 <translation id="4565377596337484307">პაროლის დამალვა</translation>
 <translation id="4572422548854449519">მართულ ანგარიშში შესვლა</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# წუთის წინ}other{# წუთის წინ}}</translation>
 <translation id="4587589328781138893">საიტები</translation>
 <translation id="4594952190837476234">ეს ხაზგარეშე გვერდი თარიღდება <ph name="CREATION_TIME" />-ით და შეიძლება განსხვავდებოდეს ონლაინ-ვერსიისგან.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />-ის გახსნა</translation>
 <translation id="4634124774493850572">პაროლის გამოყენება</translation>
 <translation id="4650364565596261010">სისტემის ნაგულისხმევი</translation>
-<translation id="4660838440047236328">თქვენი ოთახის განლაგება</translation>
 <translation id="4662373422909645029">მეტსახელი არ უნდა შეიცავდეს ციფრებს</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> სანიშნე წაიშალა</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> დაემატა მთავარ ეკრანს</translation>
@@ -459,7 +449,6 @@
 
 ამ პარამეტრის შესაცვლელად საჭიროა <ph name="BEGIN_LINK" />სინქრონიზაციის გადაყენება<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">სახელი ბარათზე</translation>
-<translation id="4808319664292298116">გსურთ VR-ში შესვლა <ph name="DOMAIN" />-დან?</translation>
 <translation id="4824958205181053313">გსურთ სინქრონიზაციის გაუქმება?</translation>
 <translation id="4835385943915508971">Chrome-ს მოთხოვნილ რესურსზე წვდომა არ აქვს.</translation>
 <translation id="4837753911714442426">გვერდის ბეჭდვის ვარიანტების გახსნა</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">სრულეკრანიანი რეჟიმიდან გამოსვლა</translation>
 <translation id="6404511346730675251">სანიშნის რედაქტირება</translation>
 <translation id="6406506848690869874">სინქრონიზაცია</translation>
-<translation id="6410973561433500075">გსურთ აუგმენტური რეალობის რეჟიმზე გადასვლა <ph name="DOMAIN" />-დან?</translation>
 <translation id="641643625718530986">ბეჭდვა…</translation>
 <translation id="6427112570124116297">თარგმნეთ ვებ-კონტენტი</translation>
 <translation id="6433501201775827830">აირჩიეთ საძიებო სისტემა</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
index 16ece74..6749a3c25 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"Танымал сайт" түймесін түрту арқылы танымал веб-сайттарды көріңіз.</translation>
 <translation id="1173894706177603556">Атын өзгерту</translation>
 <translation id="1178581264944972037">Кідірту</translation>
-<translation id="1188239144602654184">AR режиміне кіру</translation>
 <translation id="1197267115302279827">Бетбелгілерді жылжыту</translation>
 <translation id="1201402288615127009">Келесі</translation>
 <translation id="1204037785786432551">Сілтемедегі деректі жүктеп алу</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">мәтін</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> ішінен <ph name="RESULT_NUMBER" /> нәтиже</translation>
 <translation id="2096012225669085171">Барлық құрылғыларда синхрондау және жекелендіру</translation>
-<translation id="2099625543891475722">бойыңыз сияқты физикалық сипаттар</translation>
 <translation id="2100273922101894616">Автоматты кіру</translation>
 <translation id="2100314319871056947">Мәтін тым үлкен, аз-аздан бөлісіп көріңіз.</translation>
 <translation id="2109711654079915747">Беттен шықпай, веб-сайттардағы тақырыптар туралы мәлімет алуға болады. "Түртіп іздеу" функциясы сөзді оның айналасындағы мәнмәтінімен бірге Google Search қызметіне жіберіп, оның анықтамаларын, қатысты суреттерді, іздеу нәтижелерін және басқа мәліметтерді қайтарады.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Басқару</translation>
 <translation id="381841723434055211">Телефон нөмірлері</translation>
 <translation id="3819178904835489326">Жүктелген <ph name="NUMBER_OF_DOWNLOADS" /> файл жойылды</translation>
-<translation id="3849365399446680203">Сіз VR режимінде болғанда, бұл сайт келесілерді жасай алады:
-• айналаңыздың 3D картасын жасау;
-• камера қозғалысын бақылау.
-
-Камерадағы суреттерді тек сіз көре аласыз. Бұл сайт камераның суреттерін көре алмайды.</translation>
 <translation id="3859306556332390985">Алға</translation>
 <translation id="388596076286380598">Интернетке қосылмасаңыз да немесе байланыс нашар болса да, өзіңізге ұнайтын сайттардағы мақалаларды, бейнелерді және басқа мазмұнды көріңіз.</translation>
 <translation id="3894427358181296146">Қалта қосу</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Интернет байланысы жоқ</translation>
 <translation id="4321739720395210191">Камера ашылмайды. Құрылғыны қайта қосып, әрекетті қайталаңыз.</translation>
 <translation id="4351244548802238354">Диалогтік терезені жабу</translation>
-<translation id="4353114845960720315">Сіз VR режимінде болғанда, бұл сайт келесілер туралы ақпарат жинайды:</translation>
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Sogou іздеу жүйесін пайдаланып іздеу</translation>
 <translation id="4404568932422911380">Бетбелгілер жоқ</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Байланыс жоқ</translation>
 <translation id="4565377596337484307">Құпия сөзді жасыру</translation>
 <translation id="4572422548854449519">Басқарылатын есептік жазбаға кіру</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# минут бұрын}other{# минут бұрын}}</translation>
 <translation id="4587589328781138893">Сайттар</translation>
 <translation id="4594952190837476234">Бұл офлайн бет <ph name="CREATION_TIME" /> күні жасалған, сондықтан онлайн нұсқасынан өзгеше болуы мүмкін.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> қолданбасын ашу</translation>
 <translation id="4634124774493850572">Құпия сөзді пайдалану</translation>
 <translation id="4650364565596261010">Жүйенің әдепкі параметрі</translation>
-<translation id="4660838440047236328">бөлменің жобасы</translation>
 <translation id="4662373422909645029">Лақап атта сан болмауы керек</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> бетбелгі жойылды</translation>
 <translation id="4665282149850138822">Негізгі экранға <ph name="NAME" /> қосылды</translation>
@@ -459,7 +449,6 @@
 
 Бұл параметрді өзгерту үшін <ph name="BEGIN_LINK" />синхрондауды бастапқы күйіне қайтарыңыз<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Картадағы ат</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> сайтынан VR режиміне өтесіз бе?</translation>
 <translation id="4824958205181053313">Синхрондауды тоқтату қажет пе?</translation>
 <translation id="4835385943915508971">Chrome браузері сұралған ресурсқа кіре алмайды.</translation>
 <translation id="4837753911714442426">Бетті басып шығару үшін опцияларды ашу</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Толық экраннан шығу</translation>
 <translation id="6404511346730675251">Бетбелгіні өзгерту</translation>
 <translation id="6406506848690869874">Синхрондау</translation>
-<translation id="6410973561433500075">AR <ph name="DOMAIN" /> сайтынан енгізілсін бе?</translation>
 <translation id="641643625718530986">Басып шығару…</translation>
 <translation id="6427112570124116297">Веб-беттерді басқа тілге аудару</translation>
 <translation id="6433501201775827830">Іздеу жүйесін таңдаңыз</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
index b0d423b..e2834628 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">មើល​គេហទំព័រ​ពេញនិយម ដោយ​ចុច​ប៊ូតុង "គេហទំព័រ​ពេញនិយម"</translation>
 <translation id="1173894706177603556">ប្តូរឈ្មោះ</translation>
 <translation id="1178581264944972037">ផ្អាក</translation>
-<translation id="1188239144602654184">ចូល AR</translation>
 <translation id="1197267115302279827">ផ្លាស់ទីចំណាំ</translation>
 <translation id="1201402288615127009">បន្ទាប់</translation>
 <translation id="1204037785786432551">ទាញយកតំណ</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">អត្ថបទ</translation>
 <translation id="2082238445998314030">លទ្ធផល <ph name="RESULT_NUMBER" /> នៃ <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">ធ្វើសមកាលកម្ម និង​កំណត់​ផ្ទាល់​ខ្លួន​នៅលើ​ឧបករណ៍​ផ្សេងៗ</translation>
-<translation id="2099625543891475722">លក្ខណសម្បត្តិនៃរាងកាយ​របស់អ្នក ដូចជា​កម្ពស់​ជាដើម</translation>
 <translation id="2100273922101894616">ចូលស្វ័យប្រវត្តិ</translation>
 <translation id="2100314319871056947">សាកល្បង​ចែករំលែកអត្ថបទ​ជាផ្នែកតូចៗជាងនេះ</translation>
 <translation id="2109711654079915747">ស្វែងយល់​អំពី​ប្រធានបទ​នៅលើ​គេហទំព័រ​ដោយមិន​ចាំបាច់​ចាកចេញ​ពីទំព័រ។ មុខងារប៉ះដើម្បីស្វែងរកផ្ញើពាក្យ និងបរិបទនៅជុំវិញ​ពាក្យនោះទៅ​កម្មវិធីស្វែងរកនៅលើ Google ដែលបញ្ជូន​ត្រឡប់មកវិញនូវ​និយមន័យ រូបភាព លទ្ធផល​ស្វែងរក និងព័ត៌មាន​លម្អិតផ្សេងទៀត។
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">គ្រប់គ្រង</translation>
 <translation id="381841723434055211">លេខទូរសព្ទ</translation>
 <translation id="3819178904835489326">បានលុបការទាញយក <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">នៅពេលអ្នកកំពុងប្រើ AR គេហទំព័រនេះប្រហែលជាអាច៖
-• បង្កើតផែនទី 3D នៃមជ្ឈដ្ឋានរបស់អ្នក
-• តាមដាន​ចលនារបស់កាមេរ៉ា
-
-មានតែអ្នកប៉ុណ្ណោះដែលអាចមើលឃើញថាកាមេរ៉ារបស់អ្នកកំពុងមើលអ្វី។ គេហទំព័រនេះ​មិន​អាចមើលឃើញរូបភាពរបស់កាមេរ៉ាអ្នកទេ។</translation>
 <translation id="3859306556332390985">ស្វែងរក​ទៅ​មុខ</translation>
 <translation id="388596076286380598">ទទួលបាន​អត្ថបទ វីដេអូ និង​ខ្លឹមសារ​ផ្សេងទៀតពី​គេហទំព័រ​ដែលអ្នក​ចូលចិត្ត ទោះបីជា​អ្នកគ្មានអ៊ីនធឺណិត ឬការតភ្ជាប់​របស់អ្នក​ខ្សោយក៏ដោយ។</translation>
 <translation id="3894427358181296146">បន្ថែមថតឯកសារ</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">គ្មានការភ្ជាប់អ៊ីនធឺណិតទេ</translation>
 <translation id="4321739720395210191">មិនអាចបើក​កាមេរ៉ា​របស់អ្នក​បានទេ។ សូម​ចាប់ផ្ដើម​ឧបករណ៍​របស់អ្នក​ឡើងវិញ រួច​ព្យាយាម​ម្ដងទៀត។</translation>
 <translation id="4351244548802238354">បិទប្រអប់</translation>
-<translation id="4353114845960720315">នៅពេល​អ្នកនៅក្នុង VR គេហទំព័រនេះ​ប្រហែលជាអាច​ដឹងអំពី៖</translation>
 <translation id="4378154925671717803">ទូរស័ព្ទ</translation>
 <translation id="4384468725000734951">ប្រើ Sogou ដើម្បីធ្វើការស្វែងរក</translation>
 <translation id="4404568932422911380">មិនមាន​ចំណាំ​ទេ</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">មិន​មាន​ការ​តភ្ជាប់</translation>
 <translation id="4565377596337484307">លាក់​ពាក្យ​សម្ងាត់</translation>
 <translation id="4572422548854449519">ចូលទៅគណនីដែលបានគ្រប់គ្រង</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# នាទីមុន}other{# នាទីមុន}}</translation>
 <translation id="4587589328781138893">ទំព័រ</translation>
 <translation id="4594952190837476234">ទំព័រ​សម្រាប់​ប្រើពេលគ្មានអ៊ីនធឺណិតនេះ​បង្កើតឡើងនៅថ្ងៃទី <ph name="CREATION_TIME" /> ហើយ​វាអាច​ខុស​ពី​កំណែ​សម្រាប់​ប្រើពេលមានអ៊ីនធឺណិត។</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">បើក <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ប្រើពាក្យសម្ងាត់​</translation>
 <translation id="4650364565596261010">លំនាំដើម​របស់ប្រព័ន្ធ</translation>
-<translation id="4660838440047236328">ប្លង់​បន្ទប់​របស់អ្នក</translation>
 <translation id="4662373422909645029">ឈ្មោះហៅក្រៅមិនអាចមានលេខបានទេ</translation>
 <translation id="4663756553811254707">បានលុបចំណាំ <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ត្រូវបានបន្ថែមទៅអេក្រង់ដើមរបស់អ្នក</translation>
@@ -459,7 +449,6 @@
 
 ដើម្បី​ផ្លាស់ប្ដូរ​ការកំណត់នេះ <ph name="BEGIN_LINK" />សូមកំណត់​សមកាលកម្មឡើងវិញ<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">ឈ្មោះនៅលើកាត</translation>
-<translation id="4808319664292298116">ចូលក្នុង VR ពី <ph name="DOMAIN" /> ដែរទេ?</translation>
 <translation id="4824958205181053313">បោះបង់​ការ​ធ្វើ​សម​កាលកម្ម?</translation>
 <translation id="4835385943915508971">Chrome មិន​អាច​ចូល​ប្រើ​ធនធាន​ដែល​បាន​ស្នើ​នេះ​ទេ​។​</translation>
 <translation id="4837753911714442426">បើកជម្រើសដើម្បីបោះពុម្ពទំព័រ</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">ចាកចេញពីអេក្រង់ពេញ</translation>
 <translation id="6404511346730675251">កែប្រែចំណាំ</translation>
 <translation id="6406506848690869874">សមកាលកម្ម</translation>
-<translation id="6410973561433500075">ចូល AR ពី <ph name="DOMAIN" /> ឬ?</translation>
 <translation id="641643625718530986">បោះពុម្ព…</translation>
 <translation id="6427112570124116297">បកប្រែ​គេហទំព័រ</translation>
 <translation id="6433501201775827830">ជ្រើសរើស​ម៉ាស៊ីន​ស្វែងរករបស់អ្នក</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
index 1d4f1836..b03f198d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"ಉನ್ನತ ಸೈಟ್‌ಗಳು" ಬಟನ್ ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ ಜನಪ್ರಿಯ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ನೋಡಿ</translation>
 <translation id="1173894706177603556">ಮರುಹೆಸರಿಸು</translation>
 <translation id="1178581264944972037">ವಿರಾಮ</translation>
-<translation id="1188239144602654184">AR ಅನ್ನು ನಮೂದಿಸಿ</translation>
 <translation id="1197267115302279827">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಚಲಿಸಿ</translation>
 <translation id="1201402288615127009">ಮುಂದೆ</translation>
 <translation id="1204037785786432551">ಲಿಂಕ್ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ</translation>
@@ -133,7 +132,6 @@
 <translation id="2067805253194386918">ಪಠ್ಯ</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> ರಲ್ಲಿ <ph name="RESULT_NUMBER" /> ಫಲಿತಾಂಶಗಳು</translation>
 <translation id="2096012225669085171">ಸಾಧನಗಳಾದ್ಯಂತ ಸಿಂಕ್ ಮಾಡಿ ಮತ್ತು ವೈಯಕ್ತೀಕರಿಸಿ</translation>
-<translation id="2099625543891475722">ನಿಮ್ಮ ಭೌತಿಕ ಗುಣಲಕ್ಷಣಗಳು, ಉದಾ. ಎತ್ತರ ಇತ್ಯಾದಿ</translation>
 <translation id="2100273922101894616">ಸ್ವಯಂ ಸೈನ್-ಇನ್</translation>
 <translation id="2100314319871056947">ಪಠ್ಯವನ್ನು ಸಣ್ಣ ಭಾಗಗಳಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="2109711654079915747">ಪುಟದಿಂದ ಹೊರಹೋಗದೆಯೇ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿನ ವಿಷಯಗಳ ಕುರಿತು ತಿಳಿದುಕೊಳ್ಳಿ. 'ಹುಡುಕಾಟ' ಸ್ಪರ್ಶಿಸಿದರೆ ಅದು, ಪದ ಮತ್ತು ಪದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಸಾಂದರ್ಭಿಕ ವಿವರಣೆಗಳನ್ನು Google ಹುಡುಕಾಟಕ್ಕೆ ರವಾನಿಸುತ್ತದೆ. ಆ ಮೂಲಕ ವಿವರಗಳು, ಚಿತ್ರಗಳು ಮತ್ತು ಇತರ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.
@@ -342,11 +340,6 @@
 <translation id="3810973564298564668">ನಿರ್ವಹಿಸು</translation>
 <translation id="381841723434055211">ಫೋನ್ ಸಂಖ್ಯೆಗಳು</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation>
-<translation id="3849365399446680203">ನೀವು AR ನಲ್ಲಿರುವಾಗ, ಈ ಸೈಟ್‌ಗೆ ಇವುಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ:
-• ನಿಮ್ಮ ಸುತ್ತಮುತ್ತಲಿನ ಪರಿಸರದ 3D ನಕ್ಷೆಯನ್ನು ರಚಿಸುವುದು
-• ಕ್ಯಾಮರಾ ಚಲನೆಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದು
-
-ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಯಾವ ಕಡೆಗೆ ನೋಡುತ್ತಿದೆ ಎಂಬುದನ್ನು ನೀವು ಮಾತ್ರ ನೋಡಬಹುದು. ಸೈಟ್‌ಗೆ ನಿಮ್ಮ ಕ್ಯಾಮರಾದ ಚಿತ್ರಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="3859306556332390985">ಮುಂದಕ್ಕೆ ಸೀಕ್ ಮಾಡಿ</translation>
 <translation id="388596076286380598">ನೀವು ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿದ್ದರೂ ಅಥವಾ ನಿಮ್ಮ ಕನೆಕ್ಷನ್ ಕಳಪೆ ಆಗಿದ್ದರೂ ಸಹ ನಿಮಗೆ ಇಷ್ಟವಾಗುವ ಸೈಟ್‌ನಲ್ಲಿರುವ ಲೇಖನಗಳು, ವೀಡಿಯೊಗಳು ಮತ್ತು ಇತರ ವಿಷಯವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ.</translation>
 <translation id="3894427358181296146">ಫೋಲ್ಡರ್ ಸೇರಿಸು</translation>
@@ -400,7 +393,6 @@
 <translation id="4320177379694898372">ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವಿಲ್ಲ</translation>
 <translation id="4321739720395210191">ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="4351244548802238354">ಸಂವಾದವನ್ನು ಮುಚ್ಚಿ</translation>
-<translation id="4353114845960720315">ನೀವು VR ನಲ್ಲಿರುವಾಗ, ಈ ಸೈಟ್ ಕುರಿತು ತಿಳಿಯಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ:</translation>
 <translation id="4378154925671717803">ಫೋನ್</translation>
 <translation id="4384468725000734951">ಹುಡುಕಲು Sogou ಬಳಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="4404568932422911380">ಯಾವುದೇ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">ಯಾವುದೇ ಸಂಪರ್ಕವಿಲ್ಲ</translation>
 <translation id="4565377596337484307">ಪಾಸ್‌ವರ್ಡ್ ಮರೆಮಾಡಿ</translation>
 <translation id="4572422548854449519">ನಿರ್ವಹಿಸಲ್ಪಟ್ಟ ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# ನಿಮಿಷದ ಹಿಂದೆ}one{# ನಿಮಿಷಗಳ ಹಿಂದೆ}other{# ನಿಮಿಷಗಳ ಹಿಂದೆ}}</translation>
 <translation id="4587589328781138893">ಸೈಟ್‌ಗಳು</translation>
 <translation id="4594952190837476234">ಈ ಆಫ್‍ಲೈನ್ ಪುಟವನ್ನು <ph name="CREATION_TIME" /> ರಂದು ರಚಿಸಲಾಗಿದೆ ಮತ್ತು ಇದು ಆನ್‌ಲೈನ್ ಆವೃತ್ತಿಗಿಂತ ಭಿನ್ನವಾಗಿರಬಹುದು.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ತೆರೆಯಿರಿ</translation>
 <translation id="4634124774493850572">ಪಾಸ್‌ವರ್ಡ್ ಬಳಸಿ</translation>
 <translation id="4650364565596261010">ಸಿಸ್ಟಂ ಡಿಫಾಲ್ಟ್</translation>
-<translation id="4660838440047236328">ನಿಮ್ಮ ರೂಮ್‌ನ ವಿನ್ಯಾಸ</translation>
 <translation id="4662373422909645029">ಅಡ್ಡಹೆಸರಿಗೆ ಸಂಖ್ಯೆ ಇಲ್ಲ</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ಅನ್ನು ನಿಮ್ಮ ಹೋಮ್ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ</translation>
@@ -459,7 +449,6 @@
 
 ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು, <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಅನ್ನು ಮರುಹೊಂದಿಸಿ<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">ಕಾರ್ಡ್‌ನಲ್ಲಿರುವ ಹೆಸರು</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> ನಿಂದ VR ಅನ್ನು ನಮೂದಿಸುವುದೇ?</translation>
 <translation id="4824958205181053313">ಸಿಂಕ್ ರದ್ದುಗೊಳಿಸುವುದೇ?</translation>
 <translation id="4835385943915508971">ವಿನಂತಿಸಿದ ಸಂಪನ್ಮೂಲದಲ್ಲಿ Chrome ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ.</translation>
 <translation id="4837753911714442426">ಪುಟವನ್ನು ಮುದ್ರಿಸಲು ಆಯ್ಕೆಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">ಪೂರ್ಣಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
 <translation id="6404511346730675251">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಿ</translation>
 <translation id="6406506848690869874">ಸಿಂಕ್</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> ನಿಂದ AR ಅನ್ನು ಪ್ರವೇಶಿಸಬೇಕೇ?</translation>
 <translation id="641643625718530986">ಮುದ್ರಿಸು...</translation>
 <translation id="6427112570124116297">ವೆಬ್ ಅನ್ನು ಅನುವಾದಿಸಿ</translation>
 <translation id="6433501201775827830">ನಿಮ್ಮ ಹುಡುಕಾಟದ ಇಂಜಿನ್ ಆಯ್ಕೆಮಾಡಿ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index 2165592..c562baf2 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">'인기 사이트' 버튼을 탭하여 인기 웹사이트를 확인하세요.</translation>
 <translation id="1173894706177603556">이름 바꾸기</translation>
 <translation id="1178581264944972037">일시중지</translation>
-<translation id="1188239144602654184">AR 입력</translation>
 <translation id="1197267115302279827">북마크 이동</translation>
 <translation id="1201402288615127009">다음</translation>
 <translation id="1204037785786432551">링크 다운로드</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">텍스트</translation>
 <translation id="2082238445998314030">전체 결과 <ph name="TOTAL_RESULTS" />개 중 <ph name="RESULT_NUMBER" />개</translation>
 <translation id="2096012225669085171">모든 기기 동기화 및 맞춤설정</translation>
-<translation id="2099625543891475722">키와 같은 신체적 특징</translation>
 <translation id="2100273922101894616">자동 로그인</translation>
 <translation id="2100314319871056947">좀 더 짧은 길이로 텍스트를 줄인 다음 공유해 보세요.</translation>
 <translation id="2109711654079915747">페이지에서 나가지 않고도 웹사이트의 주제에 관해 알아봅니다. 터치하여 검색 기능은 단어와 관련 맥락을 Google 검색으로 전송하여 정의, 사진, 검색결과 등의 세부정보를 제공합니다.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">관리</translation>
 <translation id="381841723434055211">전화번호</translation>
 <translation id="3819178904835489326">다운로드 <ph name="NUMBER_OF_DOWNLOADS" />개 삭제됨</translation>
-<translation id="3849365399446680203">AR을 사용 중일 때 사이트에서 다음을 할 수 있습니다.
-• 사용자 환경을 3D 지도로 작성
-• 카메라 움직임 추적
-
-카메라 영상은 사용자 본인만 확인 가능합니다. 사이트에는 카메라 이미지가 공유되지 않습니다.</translation>
 <translation id="3859306556332390985">앞으로 탐색</translation>
 <translation id="388596076286380598">오프라인 상태이거나 연결 상태가 좋지 못할 때도 좋아하는 사이트의 기사, 동영상 및 기타 콘텐츠를 볼 수 있습니다.</translation>
 <translation id="3894427358181296146">폴더 추가</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">인터넷에 연결되지 않음</translation>
 <translation id="4321739720395210191">카메라를 열 수 없습니다. 기기를 다시 시작한 후 시도해 보세요.</translation>
 <translation id="4351244548802238354">대화상자 닫기</translation>
-<translation id="4353114845960720315">VR 사용 중 이 사이트가 다음 정보를 학습할 수 있습니다.</translation>
 <translation id="4378154925671717803">전화기</translation>
 <translation id="4384468725000734951">검색할 때 Sogou 사용</translation>
 <translation id="4404568932422911380">북마크 없음</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">연결되지 않음</translation>
 <translation id="4565377596337484307">비밀번호 숨김</translation>
 <translation id="4572422548854449519">관리 계정에 로그인</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{#분 전}other{#분 전}}</translation>
 <translation id="4587589328781138893">사이트</translation>
 <translation id="4594952190837476234">이 오프라인 페이지는 <ph name="CREATION_TIME" />에 생성되었으며 온라인 버전과 다를 수 있습니다.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> 열기</translation>
 <translation id="4634124774493850572">비밀번호 사용</translation>
 <translation id="4650364565596261010">시스템 기본값</translation>
-<translation id="4660838440047236328">방의 구조</translation>
 <translation id="4662373422909645029">닉네임에 숫자를 포함할 수 없음</translation>
 <translation id="4663756553811254707">북마크 <ph name="NUMBER_OF_BOOKMARKS" />개 삭제됨</translation>
 <translation id="4665282149850138822"><ph name="NAME" />이(가) 홈 화면에 추가됨</translation>
@@ -459,7 +449,6 @@
 
 이 설정을 변경하려면 <ph name="BEGIN_LINK" />동기화를 재설정<ph name="END_LINK" />하세요.</translation>
 <translation id="4807098396393229769">카드 명의</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />에서 VR을 시작하시겠습니까?</translation>
 <translation id="4824958205181053313">동기화를 취소하시겠습니까?</translation>
 <translation id="4835385943915508971">Chrome에서 요청된 리소스에 액세스할 권한이 없습니다.</translation>
 <translation id="4837753911714442426">옵션을 열어 페이지 인쇄</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">전체화면 닫기</translation>
 <translation id="6404511346730675251">북마크 수정</translation>
 <translation id="6406506848690869874">동기화</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" />에서 AR을 시작하시겠습니까?</translation>
 <translation id="641643625718530986">인쇄…</translation>
 <translation id="6427112570124116297">웹 번역</translation>
 <translation id="6433501201775827830">검색엔진 선택</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
index 038f7e9..9e81915 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"Мыкты шаарлар" баскычын басып, таанымал вебсайттарды көрүңүз</translation>
 <translation id="1173894706177603556">Атын өзгөртүү</translation>
 <translation id="1178581264944972037">Бир азга токтотуу</translation>
-<translation id="1188239144602654184">AR режимине кирүү</translation>
 <translation id="1197267115302279827">Кыстармаларды жылдыруу</translation>
 <translation id="1201402288615127009">Кийинки</translation>
 <translation id="1204037785786432551">Жүктөп алуу шилтемеси</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">текст</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> ичинен <ph name="RESULT_NUMBER" /> натыйжа</translation>
 <translation id="2096012225669085171">Бардык түзмөктөрдө шайкештирүү жана жекечелештирүү</translation>
-<translation id="2099625543891475722">боюңуз сыяктуу физикалык мүнөздөмөлөрүңүз</translation>
 <translation id="2100273922101894616">Авто кирүү</translation>
 <translation id="2100314319871056947">Текстти бир нече бөлүккө бөлүп анан бөлүшүп көрүңүз</translation>
 <translation id="2109711654079915747">Ачылып турган баракчадан кетпестен, сүрөттөрдү, аныктамаларды жана башка маалыматты тапканга жардам берет. Жөн гана бир сөз тандасаңыз, ал контексти менен кошо Google Издөөгө жөнөтүлөт.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Башкаруу</translation>
 <translation id="381841723434055211">Телефон номерлери</translation>
 <translation id="3819178904835489326">Жүктөлүп алынган <ph name="NUMBER_OF_DOWNLOADS" /> нерсе өчүрүлдү</translation>
-<translation id="3849365399446680203">AR режимин колдонуп жатканыңызда бул сайт төмөнкүлөрдү аткара алат:
-• айланаңыздын 3D картасын түзөт
-• камеранын кыймылына көз салат
-
-Камераңыз кайда карап турганын сиз гана көрөсүз. Сайт камерадагы сүрөттөрдү көрбөйт.</translation>
 <translation id="3859306556332390985">Алдыга түрдүрүү</translation>
 <translation id="388596076286380598">Интернет байланышы болбосо же начар болсо да, сүйүктүү сайттарыңыздагы макалаларды, видеолорду жана башка мазмунду көрүп туруңуз.</translation>
 <translation id="3894427358181296146">Куржун кошуу</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Интернет жок</translation>
 <translation id="4321739720395210191">Камераңыз ачылбай жатат. Түзмөктү өчүрүп күйгүзүп, кайталап көрүңүз.</translation>
 <translation id="4351244548802238354">Диалогду жабуу</translation>
-<translation id="4353114845960720315">VR режиминде бул сайт төмөнкүнү көрүшү мүмкүн:</translation>
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Издөө үчүн Sogou колдонулууда</translation>
 <translation id="4404568932422911380">Кыстармалар жок</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Интернет жок</translation>
 <translation id="4565377596337484307">Сырсөздү жашыруу</translation>
 <translation id="4572422548854449519">Башкарылган аккаунтка кириңиз</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# мүнөт мурун}other{# мүнөт мурун}}</translation>
 <translation id="4587589328781138893">Сайттар</translation>
 <translation id="4594952190837476234">Бул оффлайн режиминдеги баракча <ph name="CREATION_TIME" /> сакталган жана онлайн версиясынан айырмаланышы мүмкүн.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> колдонмосун ачуу</translation>
 <translation id="4634124774493850572">Сырсөздү колдонуу</translation>
 <translation id="4650364565596261010">Демейки тутум</translation>
-<translation id="4660838440047236328">бөлмөңүздүн көрүнүшү</translation>
 <translation id="4662373422909645029">Ылакап атта сан болбошу керек</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> кыстарма өчүрүлдү</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> Башкы экраныңызга кошулду</translation>
@@ -459,7 +449,6 @@
 
 Бул жөндөөнү өзгөртүү үчүн <ph name="BEGIN_LINK" />шайкештирүүнү баштапкы абалга келтириңиз<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Картадагы ысым</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> сайтынын VR режимине өтөсүзбү?</translation>
 <translation id="4824958205181053313">Шайкештештирүү жокко чыгарылсынбы?</translation>
 <translation id="4835385943915508971">Суралган булакка Chrome’дун кирүү мүмкүнчүлүгү жок.</translation>
 <translation id="4837753911714442426">Баракты басып чыгаруу параметрлерин ачуу</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Толук экран режиминен чыгуу</translation>
 <translation id="6404511346730675251">Кыстарманы түзөтүү</translation>
 <translation id="6406506848690869874">Шайкештирүү</translation>
-<translation id="6410973561433500075">AR режимине <ph name="DOMAIN" /> доменинен киресизби?</translation>
 <translation id="641643625718530986">Басып чыгаруу…</translation>
 <translation id="6427112570124116297">Вебди которуу</translation>
 <translation id="6433501201775827830">Издөө каражатыңызды тандаңыз</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
index 6c52c53..145759e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">ເບິ່ງເວັບໄຊຍອດນິຍົມໂດຍການແຕະປຸ່ມ "ເວັບໄຊຍອດນິຍົມ"</translation>
 <translation id="1173894706177603556">ໃສ່ຊື່ໃໝ່</translation>
 <translation id="1178581264944972037">ຢຸດຊົ່ວຄາວ</translation>
-<translation id="1188239144602654184">ເຂົ້າຫາ AR</translation>
 <translation id="1197267115302279827">ຍ້າຍ​ບຸກ​ມາກ​ສ໌</translation>
 <translation id="1201402288615127009">ຕໍ່ໄປ</translation>
 <translation id="1204037785786432551">ດາວໂຫຼດລິ້ງ</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ຂໍ້ຄວາມ</translation>
 <translation id="2082238445998314030">ຜົນຮັບ <ph name="RESULT_NUMBER" /> ຈາກ <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">ຊິ້ງຂໍ້ມູນ ແລະ ປັບແຕ່ງໃຫ້ເປັນແບບສ່ວນຕົວໃນທົ່ວອຸປະກອນ</translation>
-<translation id="2099625543891475722">ລັກສະນະຮ່າງກາຍຂອງທ່ານ ເຊັ່ນ: ລວງສູງ</translation>
 <translation id="2100273922101894616">ເຂົ້າສູ່​ລະບົບ​ອັດຕະໂນມັດ</translation>
 <translation id="2100314319871056947">ລອງແບ່ງປັນຂໍ້ຄວາມໃນຈຳນວນທີ່ໜ້ອຍກວ່າ</translation>
 <translation id="2109711654079915747">ຮຽນຮູ້ກ່ຽວກັບຫົວຂໍ້ຢູ່ໃນເວັບໄຊໂດຍບໍ່ຕ້ອງອອກໄປຈາກໜ້າ. ແຕະເພື່ອຊອກຫາ ສົ່ງຄຳສັບ ແລະ ບໍລິບົດທີ່ກ່ຽວຂ້ອງຂອງມັນໄປໃຫ້ Google ຊອກຫາ ເຊິ່ງຈະສົ່ງຄຳນິຍາມ, ຮູບ, ຜົນການຊອກຫາ ແລະ ລາຍລະອຽດອື່ນໆຄືນມາ.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">ຈັດການ</translation>
 <translation id="381841723434055211">ເບີໂທລະສັບ</translation>
 <translation id="3819178904835489326">ລຶບ <ph name="NUMBER_OF_DOWNLOADS" /> ການດາວໂຫຼດແລ້ວ</translation>
-<translation id="3849365399446680203">ໃນຂະນະທີ່ທ່ານຢູ່ໃນໂໝດ AR, ເວັບໄຊນີ້ອາດຈະສາມາດ:
-• ສ້າງແຜນທີ່ 3 ມິຕິກ່ຽວກັບສະພາບແວດລ້ອມຂອງທ່ານ
-• ຕິດຕາມການເຄື່ອນໄຫວຂອງກ້ອງ
-
-ມີແຕ່ທ່ານເທົ່ານັ້ນສາມາດເຫັນສິ່ງທີ່ກ້ອງຂອງທ່ານເບິ່ງຢູ່. ເວັບໄຊບໍ່ສາມາດເຫັນພາບຂອງກ້ອງໄດ້.</translation>
 <translation id="3859306556332390985">ເລື່ອນໄປໜ້າ</translation>
 <translation id="388596076286380598">ຮັບບົດຄວາມ, ວິດີໂອ ແລະ ເນື້ອຫາອື່ນໆຈາກເວັບໄຊທີ່ທ່ານມັກ, ເຖິງແມ່ນວ່າທ່ານອອບລາຍ ຫຼື ສັນຍານເຊື່ອມຕໍ່ຂອງທ່ານບໍ່ດີກໍຕາມ.</translation>
 <translation id="3894427358181296146">ເພີ່ມໂຟລເດີ</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ບໍ່​ມີການ​ເຊື່ອມ​ຕໍ່​ອິນ​ເຕີ​ເນັດ​</translation>
 <translation id="4321739720395210191">ບໍ່ສາມາດເປີດກ້ອງຂອງທ່ານໄດ້. ຣິສະຕາດອຸປະກອນຂອງທ່ານ ແລ້ວລອງໃໝ່.</translation>
 <translation id="4351244548802238354">ປິດ​ໜ້າ​ຕ່າງ</translation>
-<translation id="4353114845960720315">ໃນຂະນະທີ່ທ່ານຢູ່ໃນ VR, ເວັບໄຊນີ້ອາດຈະສາມາດຮຽນຮູ້ກ່ຽວກັບ:</translation>
 <translation id="4378154925671717803">ໂທລະ​ສັບ</translation>
 <translation id="4384468725000734951">ກຳລັງໃຊ້ Sogou ສຳລັບການຊອກຫາ</translation>
 <translation id="4404568932422911380">ບໍ່ມີບຸກມາກ</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">ບໍ່ມີການເຊື່ອມຕໍ່</translation>
 <translation id="4565377596337484307">ເຊື່ອງລະຫັດຜ່ານ</translation>
 <translation id="4572422548854449519">ເຂົ້າສູ່ລະບົບບັນຊີທີ່ມີການຈັດການ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# ນາທີກ່ອນນີ້}other{# ນາທີກ່ອນນີ້}}</translation>
 <translation id="4587589328781138893">ເວັບໄຊ</translation>
 <translation id="4594952190837476234">ໜ້າອອບລາຍນີ້ມາຈາກ <ph name="CREATION_TIME" /> ແລະ ອາດຈະແຕກຕ່າງຈາກເວີຊັນອອນລາຍ.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">ເປີດ <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ໃຊ້ລະຫັດຜ່ານ</translation>
 <translation id="4650364565596261010">ຄ່າເລີ່ມຕົ້ນຂອງລະບົບ</translation>
-<translation id="4660838440047236328">ແຜນຜັງຫ້ອງຂອງທ່ານ</translation>
 <translation id="4662373422909645029">ຊື່ຫຼິ້ນບໍ່ສາມາດຮວມມີຕົວເລກໄດ້</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> ບຸກ​ມາກ​ຖືກ​ລຶບ​ໄປ​ແລ້ວ</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ຖືກເພີ່ມ​ເຂົ້າ​ໃສ່​ໜ້າ​ຈໍ​ຫຼັກ​ຂອງ​ທ່ານ​ແລ້ວ</translation>
@@ -459,7 +449,6 @@
 
 ເພື່ອປ່ຽນການຕັ້ງຄ່ານີ້, ກະລຸນາ <ph name="BEGIN_LINK" />ຣີເຊັດການຊິິ້ງຂໍ້ມູນ<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">ຊື່​ຢູ່ໃນ​ບັດ</translation>
-<translation id="4808319664292298116">ເຂົ້າຫາ VR ຈາກ <ph name="DOMAIN" /> ບໍ?</translation>
 <translation id="4824958205181053313">ຍົກເລີກການຊິ້ງຂໍ້ມູນບໍ?</translation>
 <translation id="4835385943915508971">Chrome ບໍ່ມີການເຂົ້າເຖິງຊັບພະຍາກອນທີ່ຮ້ອງຂໍ.</translation>
 <translation id="4837753911714442426">ເປີດຕົວເລືອກຕໍ່ກັບໜ້າການພິມ</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">ອອກຈາກເຕັມໜ້າຈໍ</translation>
 <translation id="6404511346730675251">ແກ້​ໄຂບຸກມາກສ໌</translation>
 <translation id="6406506848690869874">ຊິງຄ໌</translation>
-<translation id="6410973561433500075">ເຂົ້າສູ່ໂໝດ AR ຈາກ <ph name="DOMAIN" /> ບໍ?</translation>
 <translation id="641643625718530986">ພິມ</translation>
 <translation id="6427112570124116297">ແປເວັບໄຊ</translation>
 <translation id="6433501201775827830">ເລືອກໂປຣແກຣມຊອກຫາຂອງທ່ານ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
index 3d16c38..af9ac7f5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Žr. populiarias svetaines palietę mygtuką „Populiariausios svetainės“</translation>
 <translation id="1173894706177603556">Pervadinti</translation>
 <translation id="1178581264944972037">Pristabdyti</translation>
-<translation id="1188239144602654184">Įveskite AR</translation>
 <translation id="1197267115302279827">Perkelti žymes</translation>
 <translation id="1201402288615127009">Kitas</translation>
 <translation id="1204037785786432551">Atsisiųsti nuorodą</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">teksto pranešimas</translation>
 <translation id="2082238445998314030">Rezultatų: <ph name="RESULT_NUMBER" /> iš <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sinchronizuoti ir suasmeninti įrenginiuose</translation>
-<translation id="2099625543891475722">jūsų fizines savybes, pavyzdžiui, ūgį;</translation>
 <translation id="2100273922101894616">Automatinis prisijungimas</translation>
 <translation id="2100314319871056947">Pabandykite bendrinti tekstą mažesnėmis dalimis</translation>
 <translation id="2109711654079915747">Sužinokite apie temas svetainėse neišėję iš puslapio. Naudojant Paiešką palietus, žodis ir jo kontekstas siunčiami „Google“ paieškai, kuri pateikia apibrėžimų, nuotraukų, paieškos rezultatų ir kitos išsamios informacijos.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Valdyti</translation>
 <translation id="381841723434055211">Telefono numeriai</translation>
 <translation id="3819178904835489326">Ištrinta atsisiuntimų: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">AR režimu ši svetainė gali:
-• kurti jūsų aplinkos 3D žemėlapį;
-• stebėti fotoaparato judesį.
-
-Tik jūs galite matyti vaizdą iš fotoaparato. Svetainė negali matyti fotoaparato vaizdų.</translation>
 <translation id="3859306556332390985">Eiti pirmyn</translation>
 <translation id="388596076286380598">Gaukite straipsnių, vaizdo įrašų ir kito turinio iš jums patinkančių svetainių, net jei esate neprisijungę arba prastas jūsų ryšys.</translation>
 <translation id="3894427358181296146">Aplanko pridėjimas</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nėra interneto ryšio</translation>
 <translation id="4321739720395210191">Kameros atidaryti nepavyko. Paleiskite įrenginį iš naujo ir bandykite dar kartą.</translation>
 <translation id="4351244548802238354">Uždaryti dialogo langą</translation>
-<translation id="4353114845960720315">VR režimu ši svetainė gali sužinoti apie jus tam tikros informacijos:</translation>
 <translation id="4378154925671717803">Telefonas</translation>
 <translation id="4384468725000734951">Atliekant paiešką naudojama „Sogou“</translation>
 <translation id="4404568932422911380">Nėra jokių žymių</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Nėra ryšio</translation>
 <translation id="4565377596337484307">Slėpti slaptažodį</translation>
 <translation id="4572422548854449519">Prisijungimas prie tvarkomos paskyros</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Prieš 1 minutę}one{Prieš # minutę}few{Prieš # minutes}many{Prieš # minutės}other{Prieš # minučių}}</translation>
 <translation id="4587589328781138893">Svetainės</translation>
 <translation id="4594952190837476234">Šis neprisijungus naudojamas puslapis sukurtas <ph name="CREATION_TIME" />, todėl gali skirtis nuo prisijungus pateiktos versijos.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Atidaryti „<ph name="WEBAPK_NAME" />“</translation>
 <translation id="4634124774493850572">Naudoti slaptažodį</translation>
 <translation id="4650364565596261010">Sistemos numatytasis nustatymas</translation>
-<translation id="4660838440047236328">patalpos išdėstymą.</translation>
 <translation id="4662373422909645029">Skaičiai slapyvardyje negalimi</translation>
 <translation id="4663756553811254707">Ištrinta žymių: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Svetainė „<ph name="NAME" />“ pridėta prie pagrindinio ekrano</translation>
@@ -459,7 +449,6 @@
 
 Jei norite pakeisti šį nustatymą, <ph name="BEGIN_LINK" />iš naujo nustatykite sinchronizavimą<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Kortelėje nurodytas vardas ir pavardė</translation>
-<translation id="4808319664292298116">Pradėti VR iš <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Atšaukti sinchronizavimą?</translation>
 <translation id="4835385943915508971">„Chrome“ negali pasiekti pageidaujamo ištekliaus.</translation>
 <translation id="4837753911714442426">Atidaryti puslapio spausdinimo parinktis</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Išeiti iš viso ekrano režimo</translation>
 <translation id="6404511346730675251">Redaguoti žymę</translation>
 <translation id="6406506848690869874">Sinchronizavimas</translation>
-<translation id="6410973561433500075">Įjungti AR režimą iš <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Spausdinti…</translation>
 <translation id="6427112570124116297">Žiniatinklio vertimas</translation>
 <translation id="6433501201775827830">Paieškos variklio pasirinkimas</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
index 4979530..1523526 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Lai skatītu populāras tīmekļa vietnes, pieskarieties pogai “Populāras”</translation>
 <translation id="1173894706177603556">Pārdēvēt</translation>
 <translation id="1178581264944972037">Pauzēt</translation>
-<translation id="1188239144602654184">Ievadīt PR</translation>
 <translation id="1197267115302279827">Pārvietot grāmatzīmes</translation>
 <translation id="1201402288615127009">Tālāk</translation>
 <translation id="1204037785786432551">Lejupielādēt saiti</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">teksts</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />. rezultāts no <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sinhronizējiet un personalizējiet vairākās ierīcēs</translation>
-<translation id="2099625543891475722">jūsu fiziskās īpašības, piemēram, garums;</translation>
 <translation id="2100273922101894616">Automātiski pierakstīties</translation>
 <translation id="2100314319871056947">Kopīgojiet mazākus teksta fragmentus</translation>
 <translation id="2109711654079915747">Uzziniet vairāk par vietnēs aprakstītajām tēmām, neaizverot lapu. Izmantojot funkciju “Meklēšana pieskaroties”, vārds un tā apkārtējais konteksts tiek nosūtīts uz pakalpojumu Google meklēšana, iegūstot definīcijas, attēlus, meklēšanas rezultātus un citu informāciju.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Pārvaldīt</translation>
 <translation id="381841723434055211">Tālruņa numuri</translation>
 <translation id="3819178904835489326">Izdzēsti <ph name="NUMBER_OF_DOWNLOADS" /> lejupielādētie vienumi</translation>
-<translation id="3849365399446680203">Kad ir aktivizēts PR režīms, vietne var:
-• izveidot jūsu vides 3D karti;
-• izsekot kameras kustību.
-
-Tikai jūs varat skatīt, kas ir redzams jūsu kamerā. Vietne nevar skatīt jūsu kameras attēlus.</translation>
 <translation id="3859306556332390985">Pārtīt uz priekšu</translation>
 <translation id="388596076286380598">Saņemiet rakstus, videoklipus un citu saturu no vietnēm, kuras jums patīk, pat ja esat bezsaistē vai ir vājš savienojums.</translation>
 <translation id="3894427358181296146">Mapes pievienošana</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nav interneta savienojuma.</translation>
 <translation id="4321739720395210191">Nevar atvērt kameru. Restartējiet ierīci un mēģiniet vēlreiz.</translation>
 <translation id="4351244548802238354">Aizvērt dialoglodziņu</translation>
-<translation id="4353114845960720315">Kamēr izmantosiet VR režīmu, šī vietne varēs iegūt šādu informāciju:</translation>
 <translation id="4378154925671717803">Tālrunis</translation>
 <translation id="4384468725000734951">Tiek izmantota meklētājprogramma Sogou</translation>
 <translation id="4404568932422911380">Nav grāmatzīmju</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Nav savienojuma</translation>
 <translation id="4565377596337484307">Slēpt paroli</translation>
 <translation id="4572422548854449519">Pierakstīšanās pārvaldītā kontā</translation>
-<translation id="4574741712540401491">• <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{pirms # minūtes}zero{pirms # minūtēm}one{pirms # minūtes}other{pirms # minūtēm}}</translation>
 <translation id="4587589328781138893">Vietnes</translation>
 <translation id="4594952190837476234">Šī lapas bezsaistes versija (izveidota: <ph name="CREATION_TIME" />) var atšķirties no tiešsaistes versijas.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Atvērt <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Izmantot paroli</translation>
 <translation id="4650364565596261010">Sistēmas noklusējums</translation>
-<translation id="4660838440047236328">jūsu telpas izkārtojums.</translation>
 <translation id="4662373422909645029">Segvārdā nedrīkst būt cipari</translation>
 <translation id="4663756553811254707">Dzēstas <ph name="NUMBER_OF_BOOKMARKS" /> grāmatzīmes</translation>
 <translation id="4665282149850138822">Vietne <ph name="NAME" /> tika pievienota sākuma ekrānam.</translation>
@@ -459,7 +449,6 @@
 
 Lai mainītu šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Vārds uz kartes</translation>
-<translation id="4808319664292298116">Vai atvērt VR režīmu vietnē <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Vai atcelt sinhronizāciju?</translation>
 <translation id="4835385943915508971">Chrome nevar piekļūt pieprasītajam resursam.</translation>
 <translation id="4837753911714442426">Atvērt iespējas, lai izdrukātu lapu</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Iziet no pilnekrāna režīma</translation>
 <translation id="6404511346730675251">Rediģēt grāmatzīmi</translation>
 <translation id="6406506848690869874">Sinhronizācija</translation>
-<translation id="6410973561433500075">Vai atvērt PR režīmu vietnē <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Drukāt...</translation>
 <translation id="6427112570124116297">Iztulkojiet tīmekli</translation>
 <translation id="6433501201775827830">Meklētājprogrammas izvēle</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
index 77f841f..dfa828a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Допрете го копчето „Популарни“ за да ги разгледате популарните веб-сајтови</translation>
 <translation id="1173894706177603556">Преименувај</translation>
 <translation id="1178581264944972037">Пауза</translation>
-<translation id="1188239144602654184">Влези во AR</translation>
 <translation id="1197267115302279827">Премести обележувачи</translation>
 <translation id="1201402288615127009">Следно</translation>
 <translation id="1204037785786432551">Преземи линк</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">текст</translation>
 <translation id="2082238445998314030">Резултат <ph name="RESULT_NUMBER" /> од <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Синхронизирајте и персонализирајте низ уредите</translation>
-<translation id="2099625543891475722">вашите физички карактеристики, како висината</translation>
 <translation id="2100273922101894616">Автоматско најавување</translation>
 <translation id="2100314319871056947">Обидете се да го споделите текстот во помали делови</translation>
 <translation id="2109711654079915747">Дознајте повеќе за темите на веб-сајтовите без да ја напуштите страницата. Функцијата „Допри за пребарување“ го испраќа зборот и околниот контекст во „Пребарување на Google“, а враќа дефиниции, слики, резултати од пребарување и други детали.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Управувај</translation>
 <translation id="381841723434055211">Телефонски броеви</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> преземања се избришани</translation>
-<translation id="3849365399446680203">Додека сте во AR, сајтов ќе може:
-• да создаде карта во 3D на вашата околина
-• да го следи движењето на камерата
-
-Само вие може да видите што гледа камерата. Сајтов не може да ги види сликите на вашата камера.</translation>
 <translation id="3859306556332390985">Барај понапред</translation>
 <translation id="388596076286380598">Добивајте статии, видеа и други содржини од сајтови што ви се допаѓаат, дури и ако сте офлајн или ако врската е слаба.</translation>
 <translation id="3894427358181296146">Додај папка</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Нема интернет поврзување</translation>
 <translation id="4321739720395210191">Камерата не може да се отвори. Рестартирајте го уредот и обидете се повторно.</translation>
 <translation id="4351244548802238354">Затвори дијалог</translation>
-<translation id="4353114845960720315">Додека сте во VR, сајтов ќе може да дознае за:</translation>
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Се користи Sogou за пребарување</translation>
 <translation id="4404568932422911380">Нема обележувачи</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Нема интернет-врска</translation>
 <translation id="4565377596337484307">Сокриј ја лозинката</translation>
 <translation id="4572422548854449519">Најавете се на управувана сметка</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Пред # минута}one{Пред # минута}other{Пред # минути}}</translation>
 <translation id="4587589328781138893">Сајтови</translation>
 <translation id="4594952190837476234">Офлајн страницава е од <ph name="CREATION_TIME" /> и може да се разликува од онлајн верзијата.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Отвори <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Употреби ја лозинката</translation>
 <translation id="4650364565596261010">Стандардна поставка за системот</translation>
-<translation id="4660838440047236328">распоредот на вашата соба</translation>
 <translation id="4662373422909645029">Прекарот не може да содржи броеви</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> обележувачи се избришани</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> е додадена на вашиот Почетен екран</translation>
@@ -459,7 +449,6 @@
 
 За да ја промените поставкава, <ph name="BEGIN_LINK" />ресетирајте ја синхронизацијата<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Име на картичка</translation>
-<translation id="4808319664292298116">Да се влезе во VR од <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Да се откаже синхронизацијата?</translation>
 <translation id="4835385943915508971">Chrome нема пристап до бараниот ресурс.</translation>
 <translation id="4837753911714442426">Отворете опции за печатење страница</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Излези од цел екран</translation>
 <translation id="6404511346730675251">Измени обележувач</translation>
 <translation id="6406506848690869874">Синхронизација</translation>
-<translation id="6410973561433500075">Дали да се влезе во AR од <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Печати...</translation>
 <translation id="6427112570124116297">Преведете го интернетот</translation>
 <translation id="6433501201775827830">Изберете пребарувач</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
index afc98fd1..b83fafb4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"മികച്ച സൈറ്റുകൾ" ബട്ടൺ ടാപ്പ് ചെയ്‌ത് ജനപ്രിയ വെബ്‌സൈറ്റുകൾ കാണുക</translation>
 <translation id="1173894706177603556">പേരുമാറ്റുക</translation>
 <translation id="1178581264944972037">അല്പംനിര്‍ത്തൂ</translation>
-<translation id="1188239144602654184">AR ആരംഭിക്കുക</translation>
 <translation id="1197267115302279827">ബു‌ക്ക്‌മാർക്കുകൾ നീക്കുക</translation>
 <translation id="1201402288615127009">അടുത്തത്</translation>
 <translation id="1204037785786432551">ലിങ്ക് ഡൗൺലോഡ് ചെയ്യുക</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ടെക്‌സ്‌റ്റ്</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" /> / <ph name="TOTAL_RESULTS" /> ഫലം</translation>
 <translation id="2096012225669085171">ഉപകരണങ്ങളിലുടനീളം സമന്വയിപ്പിക്കലും വ്യക്തിപരമാക്കലും നടത്തുക.</translation>
-<translation id="2099625543891475722">ഉയരം പോലുള്ള, നിങ്ങളുടെ ശാരീരിക സവിശേഷതകൾ</translation>
 <translation id="2100273922101894616">സ്വയമേവയുള്ള സൈൻ ഇൻ</translation>
 <translation id="2100314319871056947">ചെറിയ ഭാഗങ്ങളായി ടെക്‌സ്‌റ്റ് പങ്കിടാൻ ശ്രമിക്കൂ</translation>
 <translation id="2109711654079915747">പേജ് വിട്ടുപോകാതെ തന്നെ വെബ്‌സൈറ്റുകളിലെ വിഷയങ്ങളെക്കുറിച്ച് അറിയുക. 'തിരയാൻ സ്‌പർശിക്കുക' എന്നത് പദവും അതിന്റെ സന്ദർഭവും Google തിരയലിലേക്ക് അയച്ച്, നിർവചനങ്ങളും ചിത്രങ്ങളും തിരയൽ ഫലങ്ങളും മറ്റ് വിശദാംശങ്ങളും ലഭ്യമാക്കുന്നു.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">മാനേജ് ചെയ്യുക</translation>
 <translation id="381841723434055211">ഫോൺ നമ്പറുകൾ</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ഡൗൺലോഡുകൾ ഇല്ലാതാക്കി</translation>
-<translation id="3849365399446680203">നിങ്ങൾ AR-ൽ ആയിരിക്കുമ്പോൾ, ഈ സൈറ്റിന് ഇനിപ്പറയുന്ന കാര്യങ്ങൾ ചെയ്യാൻ കഴിഞ്ഞേക്കും:
-• നിങ്ങളുടെ ചുറ്റുപാടിന്റെ 3D മാപ്പ് സൃഷ്‌ടിക്കാൻ
-• ക്യാമറയുടെ ചലനം ട്രാക്ക് ചെയ്യാൻ
-
-ക്യാമറ എന്താണ് ഫോക്കസ് ചെയ്യുന്നതെന്ന് നിങ്ങൾക്ക് മാത്രമേ കാണാൻ കഴിയൂ. സൈറ്റിന് നിങ്ങളുടെ ക്യാമറയുടെ ചിത്രങ്ങൾ കാണാനാവില്ല.</translation>
 <translation id="3859306556332390985">മുന്നോട്ട് നീക്കുക</translation>
 <translation id="388596076286380598">നിങ്ങൾ ഓഫ്‌ലൈനിൽ ആണെങ്കിലും കണക്ഷന് വേഗത കുറവാണെങ്കിലും നിങ്ങൾ ഇഷ്‌ടപ്പെടുന്ന സൈറ്റുകളിൽ നിന്ന് ലേഖനങ്ങളും വീഡിയോകളും മറ്റ് ഉള്ളടക്കവും നേടുക.</translation>
 <translation id="3894427358181296146">ഫോൾഡർ ചേർക്കുക</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ഇന്റർനെറ്റ് കണക്ഷനൊന്നുമില്ല</translation>
 <translation id="4321739720395210191">നിങ്ങളുടെ ക്യാമറ തുറക്കാനാവുന്നില്ല. നിങ്ങളുടെ ഉപകരണം റീസ്റ്റാർട്ട് ചെയ്‌ത് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="4351244548802238354">ഡയലോഗ് അടയ്‌ക്കുക</translation>
-<translation id="4353114845960720315">നിങ്ങൾ VR-ൽ ആയിരിക്കുമ്പോൾ, ഈ സൈറ്റിന് ഇനിപ്പറയുന്ന കാര്യങ്ങളെ കുറിച്ച് മനസ്സിലാക്കാൻ കഴിഞ്ഞേക്കും:</translation>
 <translation id="4378154925671717803">ഫോൺ</translation>
 <translation id="4384468725000734951">തിരയാൻ Sogou ഉപയോഗിക്കുന്നു</translation>
 <translation id="4404568932422911380">ബുക്ക്‌മാർക്കുകളൊന്നുമില്ല</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">കണക്ഷൻ ഇല്ല</translation>
 <translation id="4565377596337484307">പാസ്‌വേഡ് മറയ്ക്കുക</translation>
 <translation id="4572422548854449519">മാനേജ് ചെയ്‌ത അക്കൗണ്ടിലേക്ക് സൈൻ ഇൻ ചെയ്യുക</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# മിനിറ്റ് മുമ്പ്}other{# മിനിറ്റ് മുമ്പ്}}</translation>
 <translation id="4587589328781138893">സൈറ്റുകള്‍</translation>
 <translation id="4594952190837476234">ഈ ഓഫ്‌ലൈൻ പേജ് <ph name="CREATION_TIME" /> -ന് സൃഷ്‌ടിച്ചതാണ്, അതിനാൽ ഓൺലൈൻ പതിപ്പിൽ നിന്ന് വ്യത്യസ്തമായിരിക്കാം.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> തുറക്കുക</translation>
 <translation id="4634124774493850572">പാസ്‌വേഡ് ഉപയോഗിക്കുക</translation>
 <translation id="4650364565596261010">സിസ്‌റ്റം ഡിഫോൾട്ട്</translation>
-<translation id="4660838440047236328">നിങ്ങളുടെ റൂമിന്റെ ലേഔട്ട്</translation>
 <translation id="4662373422909645029">വിളിപ്പേരിൽ അക്കങ്ങൾ പാടില്ല</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> ബുക്ക്‌മാർക്കുകൾ ഇല്ലാതാക്കി</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> എന്നയാളെ നിങ്ങളുടെ ഹോം സ്‌ക്രീനിൽ ചേർത്തു</translation>
@@ -459,7 +449,6 @@
 
 ഈ ക്രമീകരണം മാറ്റാൻ, <ph name="BEGIN_LINK" />സമന്വയം പുനഃക്രമീകരിക്കുക<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">കാര്‍‌ഡിലെ നാമം</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> എന്നതിലൂടെ VR-ൽ പ്രവേശിക്കണോ?</translation>
 <translation id="4824958205181053313">സമന്വയം റദ്ദാക്കണോ?</translation>
 <translation id="4835385943915508971">അഭ്യർത്ഥിച്ച ഉറവിടത്തിലേക്ക് Chrome-ന് ആക്‌സസ് ഇല്ല.</translation>
 <translation id="4837753911714442426">പേജ് അച്ചടിക്കുന്നതിനുള്ള ഓപ്‌ഷനുകൾ തുറക്കുക</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">പൂര്‍ണ്ണ സ്ക്രീനില്‍ നിന്ന് പുറത്തുകടക്കുക</translation>
 <translation id="6404511346730675251">ബുക്ക്‌മാർക്ക് എഡിറ്റ് ചെയ്യുക</translation>
 <translation id="6406506848690869874">Sync</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> എന്നതിൽ നിന്ന് AR-ൽ കടക്കണോ?</translation>
 <translation id="641643625718530986">പ്രിന്‍റ് ചെയ്യുക…</translation>
 <translation id="6427112570124116297">വെബ് വിവർത്തനം ചെയ്യുക</translation>
 <translation id="6433501201775827830">നിങ്ങളുടെ തിരയൽ യന്ത്രം തിരഞ്ഞെടുക്കുക</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
index d00626f..c5bca13 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"Шилдэг сайтууд" товчлуурыг товшин, түгээмэл хэрэглэгддэг вэб сайтыг харна уу</translation>
 <translation id="1173894706177603556">Нэр солих</translation>
 <translation id="1178581264944972037">Түр зогсоох</translation>
-<translation id="1188239144602654184">AR оруулна уу</translation>
 <translation id="1197267115302279827">Хавчуургыг шилжүүлэх</translation>
 <translation id="1201402288615127009">Дараагийнх</translation>
 <translation id="1204037785786432551">Холбоос татах</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">текст</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" />-ын <ph name="RESULT_NUMBER" /> илэрц байна</translation>
 <translation id="2096012225669085171">Төхөөрөмжүүдийг синк хийж хувийн болгох</translation>
-<translation id="2099625543891475722">таны биеийн онцлог, жишээлбэл, өндөр</translation>
 <translation id="2100273922101894616">Автоматаар нэвтэх</translation>
 <translation id="2100314319871056947">Текстийг жижиг хэсгээр хуваалцахыг оролдоно уу</translation>
 <translation id="2109711654079915747">Хуудаснаас гаралгүйгээр вэб сайтууд дээрх сэдвүүдийн талаар мэдээлэл аваарай. Хайхын тулд товших онцлог нь үг болон тухайн үгийн хам сэдвийг Google Хайлт руу илгээснээр тодорхойлолт, зураг, хайлтын илэрц болон бусад дэлгэрэнгүйг гаргаж ирнэ.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">удирдах</translation>
 <translation id="381841723434055211">Утасны дугаар</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> таталтыг устгасан</translation>
-<translation id="3849365399446680203">Таныг AR-т байх үед энэ сайт нь:
-• таны хүрээлэн буй орчны 3D газрын зургийг үүсгэх
-• камерын хөдөлгөөнийг хянах
-боломжтой байж болзошгүй.
-Зөвхөн та л таны камер юу харж байгааг харах боломжтой. Сайт нь таны камерын зургуудыг харах боломжгүй.</translation>
 <translation id="3859306556332390985">Урагш хайх</translation>
 <translation id="388596076286380598">Та офлайн эсвэл таны холболт муу байсан ч дуртай сайтаасаа нийтлэл, видео болон бусад контентыг аваарай.</translation>
 <translation id="3894427358181296146">Хавтас нэмэх</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Интернетийн холболтгүй байна</translation>
 <translation id="4321739720395210191">Таны камерыг нээх боломжгүй байна. Төхөөрөмжөө дахин эхлүүлээд дахин оролдоно уу.</translation>
 <translation id="4351244548802238354">Харилцах цонхыг хаах</translation>
-<translation id="4353114845960720315">Таныг Виртуал Орчинд байх үед энэ сайт нь дараахыг судалж болзошгүй:</translation>
 <translation id="4378154925671717803">Утас</translation>
 <translation id="4384468725000734951">Sogou-р хайж байна</translation>
 <translation id="4404568932422911380">Хавчуурга алга</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Холболт алга</translation>
 <translation id="4565377596337484307">Нууц үгийг нуух</translation>
 <translation id="4572422548854449519">Удирдсан бүртгэл рүү нэвтэрнэ үү</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# минутын өмнө}other{# минутын өмнө}}</translation>
 <translation id="4587589328781138893">Сайт</translation>
 <translation id="4594952190837476234">Энэ офлайн хуудсыг <ph name="CREATION_TIME" />-с харуулж байгаа бөгөөд онлайн хувилбараас өөр байж болзошгүй.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />-г нээх</translation>
 <translation id="4634124774493850572">Нууц үг ашиглах</translation>
 <translation id="4650364565596261010">Системийн өгөгдмөл</translation>
-<translation id="4660838440047236328">таны өрөөний төлөвлөлт</translation>
 <translation id="4662373422909645029">Хоч тоо агуулж болохгүй</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> хавчуурга устгасан</translation>
 <translation id="4665282149850138822"><ph name="NAME" />-г таны үндсэн дэлгэцэд нэмсэн</translation>
@@ -458,7 +448,6 @@
 <translation id="4802417911091824046">Нэвтрэх үгийн шифрлэлтэд Google Pay-н төлбөрийн хэрэгслүүд болон хаягуудыг агуулдаггүй.
 Энэ тохиргоог өөрчлөхийн тулд <ph name="BEGIN_LINK" />синкийг шинэчилнэ үү<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Картан дээрх нэр</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />-с Виртуал Орчинд орох уу?</translation>
 <translation id="4824958205181053313">Синкийг цуцлах уу?</translation>
 <translation id="4835385943915508971">Chrome хүсэлт тавьсан нөөцөд хандах эрхгүй.</translation>
 <translation id="4837753911714442426">Хуудас хэвлэхийн тулд сонголтыг нээнэ үү</translation>
@@ -658,7 +647,6 @@
 <translation id="6398765197997659313">Дэлгэц дүүрэн харах горимоос гарах</translation>
 <translation id="6404511346730675251">Хадгалагдсан хуудсыг засах</translation>
 <translation id="6406506848690869874">Sync</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" />-с AR-т орох уу?</translation>
 <translation id="641643625718530986">Хэвлэх...</translation>
 <translation id="6427112570124116297">Вэбийг орчуулах</translation>
 <translation id="6433501201775827830">Хайлтын системээ сонгоно уу</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
index 2f7ad44..640b989 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"टॉप साइट" बटणावर टॅप करून लोकप्रिय वेबसाइट पाहा</translation>
 <translation id="1173894706177603556">नाव बदला</translation>
 <translation id="1178581264944972037">विराम द्या</translation>
-<translation id="1188239144602654184">AR सुरू करा</translation>
 <translation id="1197267115302279827">बुकर्माक हलवा</translation>
 <translation id="1201402288615127009">पुढील</translation>
 <translation id="1204037785786432551">लिंक डाउनलोड करा</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">मजकूर</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> पैकी <ph name="RESULT_NUMBER" /> परिणाम</translation>
 <translation id="2096012225669085171">डिव्हाइसवर सिंक आणि पर्सनलाइझ करा</translation>
-<translation id="2099625543891475722">तुमची शारीरिक वैशिष्‍ट्ये जसे की, उंची</translation>
 <translation id="2100273922101894616">ऑटो साइन इन करा</translation>
 <translation id="2100314319871056947">मजकूर लहान भागांमध्ये शेअर करून पाहा</translation>
 <translation id="2109711654079915747">पेज न सोडता वेबसाइटवरील विषयांबद्दल जाणून घ्या. शोधण्यासाठी स्पर्श करा हे शब्द आणि त्याच्या आसपासचा संदर्भ Google Search ला पाठवते आणि व्याख्या, पिक्चर, शोध परिणाम आणि इतर तपशील मिळवते.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">व्यवस्थापित करा</translation>
 <translation id="381841723434055211">फोन नंबर</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोड हटविले</translation>
-<translation id="3849365399446680203">तुम्ही AR वापरत असताना ही साइट पुढील गोष्टी करू शकते:
-• तुमच्या परिसराचा 3D नकाशा तयार करणे
-• कॅमेरा मोशनचा मागोवा घेणे
-
-तुमच्या कॅमेऱ्यामधून जे दिसते ते फक्त तुम्ही पाहू शकता. तुमच्या कॅमेऱ्यामधील इमेज साइट पाहू शकत नाही.</translation>
 <translation id="3859306556332390985">पुढे शोधा</translation>
 <translation id="388596076286380598">तुम्ही ऑफलाइन असलात किंवा तुमचे कनेक्शन खराब असले तरीही, तुमच्या आवडीच्या साइटवरून लेख, व्हिडिओ आणि इतर आशय मिळवा.</translation>
 <translation id="3894427358181296146">फोल्डर जोडा</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">कोणतेही इंटरनेट कनेक्शन नाही</translation>
 <translation id="4321739720395210191">तुमचा कॅमेरा उघडू शकत नाही. तुमचे डिव्हाइस रीस्टार्ट करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="4351244548802238354">डायलॉग बंद करा</translation>
-<translation id="4353114845960720315">तुम्ही VR वापरत असताना ही साइट कदाचित पुढील गोष्टींबद्दल अधिक माहिती मिळवू शकेल:</translation>
 <translation id="4378154925671717803">फोन</translation>
 <translation id="4384468725000734951">शोध करण्‍यासाठी Sogou वापरत आहे</translation>
 <translation id="4404568932422911380">कोणतेही बुकमार्क नाहीत</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">कनेक्शन नाही</translation>
 <translation id="4565377596337484307">पासवर्ड लपवा</translation>
 <translation id="4572422548854449519">व्यवस्थापित केलेल्या खात्यामध्ये साइन इन करा</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# मिनिटापूर्वी}other{# मिनिटांपूर्वी}}</translation>
 <translation id="4587589328781138893">साइट</translation>
 <translation id="4594952190837476234">हे <ph name="CREATION_TIME" /> पासूनचे ऑफलाइन पेज आहे आणि ऑनलाइन आवृत्तीपेक्षा वेगळे असू शकते.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> उघडा</translation>
 <translation id="4634124774493850572">पासवर्ड वापरा</translation>
 <translation id="4650364565596261010">सिस्टम डीफॉल्ट</translation>
-<translation id="4660838440047236328">तुमच्या रूमचा लेआउट</translation>
 <translation id="4662373422909645029">टोपणनावामध्ये अंकांचा समावेश असू शकत नाही</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> बुकमार्क हटविले</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ला तुमच्या होम स्क्रीनवर पेअरिंग आले</translation>
@@ -459,7 +449,6 @@
 
 हे सेटिंग बदलण्यासाठी, <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">कार्डवरील नाव</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> मधून VR मध्ये एंटर करायचे आहे का?</translation>
 <translation id="4824958205181053313">सिंक रद्द करायचे?</translation>
 <translation id="4835385943915508971">Chrome ला विनंती केलेल्या संसाधनांचा ॲक्सेस नाही.</translation>
 <translation id="4837753911714442426">पेज प्रिंट करण्‍यासाठी पर्याय उघडा</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">पूर्ण स्क्रीनमधून निर्गमन करा</translation>
 <translation id="6404511346730675251">बुकमार्क संपादित करा</translation>
 <translation id="6406506848690869874">Sync</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> मधून AR एंटर करायचे आहे का?</translation>
 <translation id="641643625718530986">प्रिंट करा...</translation>
 <translation id="6427112570124116297">वेबचे भाषांतर करा</translation>
 <translation id="6433501201775827830">तुमचे शोध इंजिन निवडा</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
index f33c17b9..8a5ac58 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Lihat tapak web popular dengan mengetik butang "Tapak popular"</translation>
 <translation id="1173894706177603556">Namakan semula</translation>
 <translation id="1178581264944972037">Jeda</translation>
-<translation id="1188239144602654184">Masuk ke AR</translation>
 <translation id="1197267115302279827">Alihkan penanda halaman</translation>
 <translation id="1201402288615127009">Seterusnya</translation>
 <translation id="1204037785786432551">Muat turun pautan</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">teks</translation>
 <translation id="2082238445998314030">Hasil carian <ph name="RESULT_NUMBER" /> daripada <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Segerakkan dan peribadikan pada semua peranti</translation>
-<translation id="2099625543891475722">ciri fizikal anda, seperti ketinggian</translation>
 <translation id="2100273922101894616">Auto Log masuk</translation>
 <translation id="2100314319871056947">Cuba kongsikan teks itu dalam bahagian yang lebih kecil</translation>
 <translation id="2109711654079915747">Ketahui tentang topik pada tapak web tanpa meninggalkan halaman. Sentuh untuk Cari akan menghantar perkataan dan konteks sekitar perkataan itu kepada Carian Google, mengembalikan takrif, gambar, hasil carian dan butiran lain.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Urus</translation>
 <translation id="381841723434055211">Nombor telefon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> muat turun dipadamkan</translation>
-<translation id="3849365399446680203">Semasa anda dalam AR, tapak ini boleh:
-• membuat peta 3D persekitaran anda
-• menjejak pergerakan kamera
-
-Anda sahaja yang boleh melihat perkara yang dilihat oleh kamera anda. Tapak tersebut tidak dapat melihat imej kamera anda.</translation>
 <translation id="3859306556332390985">Cari ke hadapan</translation>
 <translation id="388596076286380598">Dapatkan artikel, video dan kandungan lain daripada tapak yang anda sukai, walaupun anda di luar talian atau sambungan anda lemah.</translation>
 <translation id="3894427358181296146">Tambah folder</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Tiada sambungan Internet</translation>
 <translation id="4321739720395210191">Tidak dapat membuka kamera anda. Mulakan semula peranti anda dan cuba lagi.</translation>
 <translation id="4351244548802238354">Tutup dialog</translation>
-<translation id="4353114845960720315">Semasa anda dalam VR, tapak ini boleh mendapatkan maklumat tentang:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Menggunakan Sogou untuk carian</translation>
 <translation id="4404568932422911380">Tiada penanda halaman</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Tiada sambungan</translation>
 <translation id="4565377596337484307">Sembunyikan kata laluan</translation>
 <translation id="4572422548854449519">Log masuk ke akaun terurus</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minit yang lalu}other{# minit yang lalu}}</translation>
 <translation id="4587589328781138893">Tapak</translation>
 <translation id="4594952190837476234">Halaman luar talian ini dari <ph name="CREATION_TIME" /> dan mungkin berbeza daripada versi dalam talian.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Buka <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gunakan kata laluan</translation>
 <translation id="4650364565596261010">Lalai sistem</translation>
-<translation id="4660838440047236328">reka letak bilik anda</translation>
 <translation id="4662373422909645029">Nama panggilan tidak boleh mengandungi nombor</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> penanda halaman dipadamkan</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> telah ditambahkan ke skrin Utama anda</translation>
@@ -459,7 +449,6 @@
 
 Untuk menukar tetapan ini, <ph name="BEGIN_LINK" />tetapkan semula penyegerakan<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Nama pada kad</translation>
-<translation id="4808319664292298116">Masukkan VR daripada <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Batalkan penyegerakan?</translation>
 <translation id="4835385943915508971">Chrome tidak boleh mengakses sumber yang diminta.</translation>
 <translation id="4837753911714442426">Buka pilihan untuk mencetak halaman</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Keluar daripada skrin penuh</translation>
 <translation id="6404511346730675251">Edit penanda halaman</translation>
 <translation id="6406506848690869874">Segerak</translation>
-<translation id="6410973561433500075">Masuki AR daripada <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Cetak…</translation>
 <translation id="6427112570124116297">Terjemah Web</translation>
 <translation id="6433501201775827830">Pilih enjin carian anda</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index 8ccfe258..1346a67 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"ထိပ်တန်း ဝဘ်ဆိုက်များ" ခလုတ်ကို တို့ခြင်းဖြင့် လူကြိုက်များသော ဝဘ်ဆိုက်များ ကြည့်ရန်</translation>
 <translation id="1173894706177603556">အမည်ပြောင်းရန်</translation>
 <translation id="1178581264944972037">ဆိုင်းငံ့ထားရန်</translation>
-<translation id="1188239144602654184">AR သို့ ဝင်ရန်</translation>
 <translation id="1197267115302279827">မှတ်သားချက်များကို ရွှေ့မည်</translation>
 <translation id="1201402288615127009">ရှေ့သို့</translation>
 <translation id="1204037785786432551">လင့်ခ်ကို ဒေါင်းလုဒ်လုပ်ရန်</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">စာသား</translation>
 <translation id="2082238445998314030">အဖြေ <ph name="RESULT_NUMBER" /> / <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">စက်ပစ္စည်းများအားလုံးတွင် စင့်ခ်လုပ်ပြီး ပုဂ္ဂိုလ်ရေးသီးသန့် ပြင်ဆင်ပါ</translation>
-<translation id="2099625543891475722">အရပ်ကဲ့သို့ သင်၏ ပုံပန်းသဏ္ဌာန်</translation>
 <translation id="2100273922101894616">အလိုအလျောက် ဝင်ရောက်ရန်</translation>
 <translation id="2100314319871056947">စာသားကို ပိုသေးသော အပိုင်းများအဖြစ် မျှဝေကြည့်ပါ</translation>
 <translation id="2109711654079915747">စာမျက်နှာမှ မထွက်ဘဲ ဝဘ်ဆိုက်များရှိ အကြောင်းအရာများအကြောင်း လေ့လာနိုင်သည်။ 'ထိ၍ ရှာဖွေခြင်း' က စကားလုံးနှင့် ၎င်း၏ဝန်းကျင်ရှိ အကြောင်းအရာများကို Google Search သို့ ပို့ပေးပြီး အဓိပ္ပာယ်ဖွင့်ဆိုချက်၊ ရုပ်ပုံ၊ ရှာဖွေမှု ရလဒ်နှင့် အခြားအသေးစိတ်များကို ဖော်ပြပေးပါသည်။
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">စီမံကွပ်ကဲရန်</translation>
 <translation id="381841723434055211">ဖုန်းနံပါတ်များ</translation>
 <translation id="3819178904835489326">ဒေါင်းလုဒ် <ph name="NUMBER_OF_DOWNLOADS" /> ခုကို ဖျက်လိုက်သည်</translation>
-<translation id="3849365399446680203">သင် AR တွင် ရှိနေစဉ် ဤဝဘ်ဆိုက်က အောက်ပါတို့ ပြုလုပ်နိုင်သည်−
-• သင့်ပတ်ဝန်းကျင်၏ 3D မြေပုံ ပြုလုပ်ခြင်း
-• ကင်မရာရွေ့လျားမှုကို ခြေရာခံခြင်း
-
-သင့်ကင်မရာ ကြည့်နေသည့်အရာကို သင်တစ်ဦးသာ မြင်နိုင်ပါသည်။ ဤဝဘ်ဆိုက်က သင့်ကင်မရာ၏ပုံများကို မမြင်နိုင်ပါ။</translation>
 <translation id="3859306556332390985">အရှေ့သို့ ရစ်ရန်</translation>
 <translation id="388596076286380598">အော့ဖ်လိုင်းဖြစ်နေစဉ် သို့မဟုတ် လိုင်းမကောင်းသည့်အချိန်တွင်ပင် သင်ကြိုက်နှစ်သက်သည့် ဝဘ်ဆိုက်များမှ ဆောင်းပါး၊ ဗီဒီယိုနှင့် အခြားအကြောင်းအရာများကို ရယူလိုက်ပါ။</translation>
 <translation id="3894427358181296146">ဖိုလ်ဒါ ထည့်ရန်</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">အင်တာနက် ချိတ်ဆက်မှု မရှိ</translation>
 <translation id="4321739720395210191">သင့်ကင်မရာကို ဖွင့်၍မရပါ။ သင့်စက်ကို ပြန်စပြီး ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="4351244548802238354">ဒိုင်ယာလော့ ပိတ်ရန်</translation>
-<translation id="4353114845960720315">သင် VR တွင် ရှိနေစဉ် ဤဝဘ်ဆိုက်က အောက်ပါအကြောင်း လေ့လာနိုင်သည်−</translation>
 <translation id="4378154925671717803">ဖုန်း</translation>
 <translation id="4384468725000734951">ရှာဖွေမှုအတွက် Sogou ကို အသုံးပြုသည်</translation>
 <translation id="4404568932422911380">မည်သည့်လိပ်စာမျှ မရှိပါ</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">ချိတ်ဆက်မှု မရှိပါ</translation>
 <translation id="4565377596337484307">စကားဝှက်ကို ဖျောက်ရန်</translation>
 <translation id="4572422548854449519">စီမံခန့်ခွဲထားသည့်အကောင့်သို့ လက်မှတ်ထိုးဝင်ပါ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{လွန်ခဲ့သည့် # မိနစ်က}other{ လွန်ခဲ့သည့် # မိနစ်က}}</translation>
 <translation id="4587589328781138893">ဝဘ်ဆိုက်များ</translation>
 <translation id="4594952190837476234">ဤအော့ဖ်လိုင်း စာမျက်နှာသည် <ph name="CREATION_TIME" /> က ဖြစ်ပြီး အွန်လိုင်းဗားရှင်းနှင့် ကွဲပြားနိုင်ပါသည်။</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ကို ဖွင့်ပါ</translation>
 <translation id="4634124774493850572">စကားဝှက်ကို အသုံးပြုရန်</translation>
 <translation id="4650364565596261010">စက်စနစ် မူရင်း</translation>
-<translation id="4660838440047236328">သင့်အခန်း၏ အပြင်အဆင်</translation>
 <translation id="4662373422909645029">ကိန်းဂဏန်းများ မပါဝင်ရပါ</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> စာညှပ် တွေ့ရှိပါသည်</translation>
 <translation id="4665282149850138822"><ph name="NAME" />ကို သင်၏ ပင်မ မျက်နှာပြင်သို့ ထည့်ပေးခဲ့သည်</translation>
@@ -459,7 +449,6 @@
 
 ဤဆက်တင်ကို ပြောင်းရန် <ph name="BEGIN_LINK" />စင့်ခ်လုပ်ခြင်းကို ပြင်ဆင်သတ်မှတ်ပါ<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">ကတ် အပေါ်က အမည်</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> မှ VR သို့ ဝင်မလား။</translation>
 <translation id="4824958205181053313">စင့်ခ်လုပ်ခြင်းကို ပယ်ဖျက်လိုပါသလား။</translation>
 <translation id="4835385943915508971">တောင်းဆိုထားသည့် အရင်းမြစ်ကို Chrome သည် အသုံးပြုခွင့်မရှိပါ။</translation>
 <translation id="4837753911714442426">စာမျက်နှာကို ပုံနှိပ်ဖို့ နည်းလမ်း အားဖွင့်ရန်</translation>
@@ -658,7 +647,6 @@
 <translation id="6398765197997659313">မျက်နှာပြင် အပြည့်မှ ထွက်ရန်</translation>
 <translation id="6404511346730675251">စာညှပ် တည်းဖြတ်ရန်</translation>
 <translation id="6406506848690869874">ထပ်တူပြုမည်</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> မှ AR သို့ ဝင်မလား။</translation>
 <translation id="641643625718530986">ပရင့်…</translation>
 <translation id="6427112570124116297">ဝဘ်ကို ဘာသာပြန်ခြင်း</translation>
 <translation id="6433501201775827830">သင်၏ ရှာဖွေရေး အင်ဂျင်ကို ရွေးပါ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
index 245b35c1..c2cc6c0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"शीर्ष साइटहरू" नामक बटनमा ट्याप गरी लोकप्रिय वेबसाइटहरू हेर्नुहोस्</translation>
 <translation id="1173894706177603556">पुन: नामाकरण गर्नुहोस्</translation>
 <translation id="1178581264944972037">पज गर्नुहोस्</translation>
-<translation id="1188239144602654184">AR को सत्र सुरु गर्नुहोस्</translation>
 <translation id="1197267115302279827">बुकमार्कहरू सार्नुहोस्</translation>
 <translation id="1201402288615127009">अर्को</translation>
 <translation id="1204037785786432551">डाउनलोड लिंक</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">पाठ</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> को <ph name="RESULT_NUMBER" /> परिणाम</translation>
 <translation id="2096012225669085171">यन्त्रहरूभरि सिंक र वैयक्तीकृत गर्नुहोस्</translation>
-<translation id="2099625543891475722">उचाइ जस्ता तपाईंको शारीरिक विशेषता</translation>
 <translation id="2100273922101894616">स्वत: साइन-इन</translation>
 <translation id="2100314319871056947">पाठलाई विभाजन गरी साना खण्ड बनाएर आदान प्रदान गरी हेर्नुहोस्</translation>
 <translation id="2109711654079915747">यो पृष्ठ नछोडिकन वेबसाइटहरूमा रहेका शीर्षकहरूबारे जान्नुहोस्। खोज्नका लागि छुनुहोस् नामक सुविधाले कुनै शब्द र त्यसको सन्दर्भलाई Google खोजमा पठाउँछ र उक्त शब्दको परिभाषा, त्यससँग सम्बन्धित तस्बिर, खोज परिणाम र अन्य विवरणहरू देखाउँछ।
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">व्यवस्थित गर्नुहोस्</translation>
 <translation id="381841723434055211">फोन नम्बरहरू</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोडहरूलाई मेटाइयो</translation>
-<translation id="3849365399446680203">तपाईं AR मा हुँदा यो साइटले निम्न कुरा गर्न सक्छ:
-• तपाईंका वातावरणको 3D नक्सा सिर्जना गर्न
-• क्यामेराको अवस्था ट्र्याक गर्न
-
-तपाईंको क्यामेराले हेरिरहेको कुरा तपाईं मात्र देख्न सक्नुहुन्छ। यो साइटले तपाईंको क्यामेराका छविहरू देख्न सक्दैन।</translation>
 <translation id="3859306556332390985">अगाडि खोज्नुहोस्</translation>
 <translation id="388596076286380598">आफू अफलाइन भएको वा आफ्नो इन्टरनेट राम्रोसँग नचलेको बेलामा पनि आफूलाई मन पर्ने साइटहरूका लेख, भिडियो वा अन्य सामग्री प्राप्त गर्नुहोस्।</translation>
 <translation id="3894427358181296146">फोल्डर थप्नुहोस्</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">कुनै इन्टरनेट जडान छैन</translation>
 <translation id="4321739720395210191">तपाईंको क्यामेरा खोल्न सकिएन। आफ्नो यन्त्र पुनः सुरु गरी फेरि प्रयास गर्नुहोस्।</translation>
 <translation id="4351244548802238354">सम्बाद बन्द गर्नुहोस्</translation>
-<translation id="4353114845960720315">तपाईं VR मा हुँदा यो साइटले निम्न कुराबारे सिक्न सक्छ:</translation>
 <translation id="4378154925671717803">फोन</translation>
 <translation id="4384468725000734951">खोजीका लागि Sogou प्रयोग गर्दै</translation>
 <translation id="4404568932422911380">कुनै पनि पुस्तक चिन्ह छैन</translation>
@@ -426,7 +418,6 @@
 <translation id="4561979708150884304">इन्टरनेट छैन</translation>
 <translation id="4565377596337484307">पासवर्ड लुकाउनुहोस्</translation>
 <translation id="4572422548854449519">व्यवस्थापन गरिएको खातामा साइन इन गर्नुहोस्</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# मिनेटअघि}other{# मिनेटअघि}}</translation>
 <translation id="4587589328781138893">साइटहरू</translation>
 <translation id="4594952190837476234">यो पृष्ठ <ph name="CREATION_TIME" /> मा सिर्जना गरिएको हुँदा अनलाइन संस्करणभन्दा भिन्न हुन सक्छ।</translation>
@@ -434,7 +425,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> खोल्नुहोस्</translation>
 <translation id="4634124774493850572">पासवर्ड प्रयोग गर्नुहोस्</translation>
 <translation id="4650364565596261010">प्रणालीको पूर्वनिर्धारित सेटिङ</translation>
-<translation id="4660838440047236328">तपाईंको कोठाको लेआउट</translation>
 <translation id="4662373422909645029">उपनाममा अङ्क प्रयोग गर्न पाइँदैन</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> पुस्तक चिन्हहरू मेटाइयो</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> लाई तपाईँको गृहपृष्ठ स्क्रिनमा थपियो</translation>
@@ -458,7 +448,6 @@
 
 यो सेटिङ परिवर्तन गर्न <ph name="BEGIN_LINK" />सिंक रिसेट गर्नुहोस्<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">कार्डमा रहेको नाम</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> बाट VR मा प्रवेश गर्ने हो?</translation>
 <translation id="4824958205181053313">सिंक रद्द गर्ने हो?</translation>
 <translation id="4835385943915508971">Chrome सँग अनुरोध गरिएको स्रोत माथिको पहुँच छैन।</translation>
 <translation id="4837753911714442426">पृष्ठ छाप्ने सम्बन्धी विकल्पहरू खोल्नुहोस्</translation>
@@ -658,7 +647,6 @@
 <translation id="6398765197997659313">पूर्ण स्क्रिनलाई हटाउनुहोस्</translation>
 <translation id="6404511346730675251">बुकमार्क सम्पादन गर्नुहोस्</translation>
 <translation id="6406506848690869874">समक्रमण</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> बाट AR मा प्रवेश गर्ने हो?</translation>
 <translation id="641643625718530986">प्रिन्ट गर्नुहोस्...</translation>
 <translation id="6427112570124116297">वेब अनुवाद गर्नुहोस्</translation>
 <translation id="6433501201775827830">आफ्नो खोज इन्जिन छनौट गर्नुहोस्</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
index 18815d98..c3b9df1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Bekijk populaire websites door op de knop Topsites te tikken</translation>
 <translation id="1173894706177603556">Naam wijzigen</translation>
 <translation id="1178581264944972037">Onderbreken</translation>
-<translation id="1188239144602654184">AR starten</translation>
 <translation id="1197267115302279827">Bladwijzers verplaatsen</translation>
 <translation id="1201402288615127009">Volgende</translation>
 <translation id="1204037785786432551">Link downloaden</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">sms</translation>
 <translation id="2082238445998314030">Resultaat <ph name="RESULT_NUMBER" /> van <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synchronisatie en personalisatie op meerdere apparaten</translation>
-<translation id="2099625543891475722">je fysieke kenmerken, zoals je lengte</translation>
 <translation id="2100273922101894616">Automatisch inloggen</translation>
 <translation id="2100314319871056947">Verdeel de tekst in kleinere stukken en deel in meerdere keren.</translation>
 <translation id="2109711654079915747">Bekijk informatie over onderwerpen op websites zonder de pagina te verlaten. 'Tikken om te zoeken' stuurt een woord en contextuele informatie voor het woord naar Google Zoeken, waarna er definities, afbeeldingen, zoekresultaten en andere gegevens worden weergegeven.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Beheren</translation>
 <translation id="381841723434055211">Telefoonnummers</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads verwijderd</translation>
-<translation id="3849365399446680203">Deze site kan mogelijk het volgende doen als AR actief is:
-• Een 3D-kaart van je omgeving maken
-• De beweging van de camera volgen
-
-Alleen jij kunt zien wat je camera ziet. De site kan de beelden van je camera niet zien.</translation>
 <translation id="3859306556332390985">Vooruit zoeken</translation>
 <translation id="388596076286380598">Krijg artikelen, video's en andere content van sites die je leuk vindt, ook als je offline bent of je een slechte verbinding hebt.</translation>
 <translation id="3894427358181296146">Map toevoegen</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Geen internetverbinding</translation>
 <translation id="4321739720395210191">Kan de camera niet openen. Start het apparaat opnieuw op en probeer het nogmaals.</translation>
 <translation id="4351244548802238354">Dialoogvenster sluiten</translation>
-<translation id="4353114845960720315">Als VR actief is, kan deze site mogelijk informatie verzamelen over het volgende:</translation>
 <translation id="4378154925671717803">Telefoon</translation>
 <translation id="4384468725000734951">Sogou wordt gebruikt om te zoeken</translation>
 <translation id="4404568932422911380">Geen bladwijzers</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Geen verbinding</translation>
 <translation id="4565377596337484307">Wachtwoord verbergen</translation>
 <translation id="4572422548854449519">Inloggen bij een beheerd account</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minuut geleden}other{# minuten geleden}}</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Deze offline pagina is van <ph name="CREATION_TIME" /> en kan afwijken van de online versie.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> openen</translation>
 <translation id="4634124774493850572">Wachtwoord gebruiken</translation>
 <translation id="4650364565596261010">Systeemstandaard</translation>
-<translation id="4660838440047236328">de indeling van je kamer</translation>
 <translation id="4662373422909645029">Cijfers niet toegestaan</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bladwijzers verwijderd</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> is toegevoegd aan je startscherm</translation>
@@ -459,7 +449,6 @@
 
 <ph name="BEGIN_LINK" />Reset de synchronisatie<ph name="END_LINK" /> als je deze instelling wilt wijzigen.</translation>
 <translation id="4807098396393229769">Naam op pas</translation>
-<translation id="4808319664292298116">Wil je VR van <ph name="DOMAIN" /> starten?</translation>
 <translation id="4824958205181053313">Synchronisatie annuleren?</translation>
 <translation id="4835385943915508971">Chrome heeft geen toegang tot de gevraagde bron.</translation>
 <translation id="4837753911714442426">Afdrukopties voor de pagina openen</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Volledig scherm sluiten</translation>
 <translation id="6404511346730675251">Bladwijzer bewerken</translation>
 <translation id="6406506848690869874">Synchronisatie</translation>
-<translation id="6410973561433500075">Wil je AR vanaf <ph name="DOMAIN" /> starten?</translation>
 <translation id="641643625718530986">Afdrukken…</translation>
 <translation id="6427112570124116297">Laat webpagina's vertalen</translation>
 <translation id="6433501201775827830">Je zoekmachine kiezen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index 8807401..018e5a6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Se populære nettsteder ved å trykke på «Populært»-knappen</translation>
 <translation id="1173894706177603556">Gi nytt navn</translation>
 <translation id="1178581264944972037">Stans midlertidig</translation>
-<translation id="1188239144602654184">Start utvidet virkelighet</translation>
 <translation id="1197267115302279827">Flytt bokmerker</translation>
 <translation id="1201402288615127009">Neste</translation>
 <translation id="1204037785786432551">Last ned linken</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">tekst</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> av <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synkronisering og personlig tilpasning på alle enheter</translation>
-<translation id="2099625543891475722">fysiske kjennetegn, for eksempel hvor høy du er</translation>
 <translation id="2100273922101894616">Automatisk pålogging</translation>
 <translation id="2100314319871056947">Prøv å dele teksten i mindre deler</translation>
 <translation id="2109711654079915747">Finn ut mer om emner på nettsteder uten å forlate siden. «Trykk for å søke» sender ord til Google Søk sammen med den omkringliggende konteksten, og definisjoner, bilder, søkeresultater og annen informasjon returneres.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Administrer</translation>
 <translation id="381841723434055211">Telefonnumre</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedlastinger er slettet</translation>
-<translation id="3849365399446680203">Når du er i AR, kan det hende at dette nettstedet kan
-• lage et 3D-kart over omgivelsene dine
-• spore kamerabevegelser
-
-Det er bare du som kan se hva kameraet ditt ser på. Nettstedet kan ikke se bildene fra kameraet.</translation>
 <translation id="3859306556332390985">Spol fremover</translation>
 <translation id="388596076286380598">Få artikler, videoer og annet innhold fra nettsteder du liker, selv om du er uten nett eller har dårlig tilkobling.</translation>
 <translation id="3894427358181296146">Legg til en mappe</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Ingen internettilkobling</translation>
 <translation id="4321739720395210191">Kan ikke åpne kameraet. Start enheten på nytt, og prøv igjen.</translation>
 <translation id="4351244548802238354">Lukk dialogboks</translation>
-<translation id="4353114845960720315">Når du er i VR, kan dette nettstedet finne ut mer om følgende:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Bruker Sogou til å søke</translation>
 <translation id="4404568932422911380">Ingen bokmerker</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Ingen tilkobling</translation>
 <translation id="4565377596337484307">Skjul passord</translation>
 <translation id="4572422548854449519">Logg på en administrert konto</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{for # minutt siden}other{for # minutter siden}}</translation>
 <translation id="4587589328781138893">Nettsteder</translation>
 <translation id="4594952190837476234">Denne siden uten nett er fra <ph name="CREATION_TIME" /> og kan avvike fra nettversjonen.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Åpne <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Bruk passord</translation>
 <translation id="4650364565596261010">Systemstandard</translation>
-<translation id="4660838440047236328">hvordan rommet ditt ser ut</translation>
 <translation id="4662373422909645029">Kallenavnet kan ikke inneholde tall</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bokmerker ble slettet</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ble lagt til på startskjermen</translation>
@@ -459,7 +449,6 @@
 
 For å endre denne innstillingen, <ph name="BEGIN_LINK" />tilbakestill synkroniseringen<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Navn som er oppført på kortet</translation>
-<translation id="4808319664292298116">Vil du starte VR fra <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Vil du avbryte synkroniseringen?</translation>
 <translation id="4835385943915508971">Chrome har ikke tilgang til den forespurte ressursen.</translation>
 <translation id="4837753911714442426">Åpne alternativene for å skrive ut siden</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Avslutt fullskjerm</translation>
 <translation id="6404511346730675251">Rediger bokmerket</translation>
 <translation id="6406506848690869874">Synkroniser</translation>
-<translation id="6410973561433500075">Vil du starte AR fra <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Skriv ut</translation>
 <translation id="6427112570124116297">Oversett nettet</translation>
 <translation id="6433501201775827830">Velg søkemotor</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
index 4f7b2e44..b431e774 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"ଶ୍ରେଷ୍ଠ ସାଇଟ୍‍ଗୁଡ଼ିକ" ବଟନ୍ ଟାପ୍ କରି ଲୋକପ୍ରିୟ ୱେବ୍‌ସାଇଟ୍‌ଗୁଡ଼ିକ ଦେଖନ୍ତୁ</translation>
 <translation id="1173894706177603556">ରିନେମ୍ କରନ୍ତୁ</translation>
 <translation id="1178581264944972037">ବିରତି</translation>
-<translation id="1188239144602654184">AR ଲେଖନ୍ତୁ</translation>
 <translation id="1197267115302279827">ବୁକ୍‍ମାର୍କଗୁଡ଼ିକ ଘୁଞ୍ଚାନ୍ତୁ</translation>
 <translation id="1201402288615127009">ପରବର୍ତ୍ତୀ</translation>
 <translation id="1204037785786432551">ଲିଙ୍କ୍ ଡାଉନ୍‍‍ଲୋଡ୍ କରନ୍ତୁ</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ଟେକ୍ସଟ୍</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" />ର <ph name="RESULT_NUMBER" />ଟି ଫଳାଫଳ</translation>
 <translation id="2096012225669085171">ସମସ୍ତ ଡିଭାଇସ୍‌ରେ ସିଙ୍କ୍ ଏବଂ ବ୍ୟକ୍ତିଗତକୃତ କରନ୍ତୁ</translation>
-<translation id="2099625543891475722">ଆପଣଙ୍କର ଶାରୀରିକ ଫିଚର୍‌ଗୁଡ଼ିକ, ଯେପରି ଉଚ୍ଚତା</translation>
 <translation id="2100273922101894616">ସ୍ୱତଃ ସାଇନ୍-ଇନ୍‌</translation>
 <translation id="2100314319871056947">ଛୋଟ ଛୋଟ ଭାଗରେ ଟେକ୍ସଟ୍ ସେୟାର୍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ</translation>
 <translation id="2109711654079915747">ପୃଷ୍ଠାରେ ରହି ୱେବସାଇଟରେ ବିଷୟଗୁଡ଼ିକ ସମ୍ବନ୍ଧରେ ଜାଣନ୍ତୁ। ’ଟଚ୍ ଟୁ ସର୍ଚ୍ଚ’ ସୁବିଧା, କୌଣସି ଶବ୍ଦ ଏବଂ ଏହାର ପାରିପାର୍ଶ୍ଵିକ ପ୍ରସଙ୍ଗକୁ Google Searchକୁ ପଠାଏ ଏବଂ ସଂଜ୍ଞା, ଛବି, ସନ୍ଧାନ ଫଳାଫଳଗୁଡ଼ିକ ଓ ଅନ୍ୟ ବିବରଣୀ ଦେଖାଇଥାଏ।
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">ପରିଚାଳନା</translation>
 <translation id="381841723434055211">ଫୋନ୍ ନମ୍ଵରଗୁଡ଼ିକ</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" />ଟି ଡାଉନ୍‍‍ଲୋଡ୍ ଡିଲିଟ୍ କରାଯାଇଛି</translation>
-<translation id="3849365399446680203">ଆପଣ ARରେ ଥିବା ସମୟରେ, ଏହି ସାଇଟ୍ ଏହା କରିପାରିବ:
-• ଆପଣଙ୍କର ପରିବେଶର ଏକ 3D ମ୍ୟାପ୍ ତିଆରି କରିବ
-• କ୍ୟାମେରା ମୋସନ୍ ଟ୍ରାକ୍ କରିବ
-
-ଆପଣଙ୍କ କ୍ୟାମେରା କ'ଣ ଦେଖୁଛି, ତାହା କେବଳ ଆପଣ ଦେଖିପାରିବେ। ସାଇଟ୍ ଆପଣଙ୍କର କ୍ୟାମେରାର ଛବି ଦେଖିପାରିବ ନାହିଁ।</translation>
 <translation id="3859306556332390985">ଆଗକୁ ବଢ଼ାନ୍ତୁ</translation>
 <translation id="388596076286380598">ଆପଣ ପସନ୍ଦ କରୁଥିବା ଆର୍ଟିକଲ୍, ଭିଡିଓ ଏବଂ ଅନ୍ୟ ବିଷୟବସ୍ତୁଗୁଡ଼ିକ ସାଇଟ୍‌ଗୁଡ଼ିକରୁ ପାଆନ୍ତୁ, ଏପରିକି ଆପଣ ଅଫ୍‌ଲାଇନ୍ ଥିବା ସମୟରେ କିମ୍ବା ଆପଣଙ୍କର ସଂଯୋଗ ଦୁର୍ବଳ ଥିବା ବେଳେ ମଧ୍ୟ ପାଆନ୍ତୁ।</translation>
 <translation id="3894427358181296146">ଫୋଲ୍ଡର୍‍‍ରେ ଯୋଗ କରନ୍ତୁ</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">କୌଣସି ଇଣ୍ଟର୍ନେଟ୍‍ ସଂଯୋଗ ନାହିଁ</translation>
 <translation id="4321739720395210191">ଆପଣଙ୍କ କ୍ୟାମେରାକୁ ଖୋଲାଯାଇ ପାରିବ ନାହିଁ। ଆପଣଙ୍କର ଡିଭାଇସ୍ ରିଷ୍ଟାର୍ଟ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="4351244548802238354">ଡାୟଲଗ୍‍କୁ ବନ୍ଦ କରନ୍ତୁ</translation>
-<translation id="4353114845960720315">ଆପଣ VRରେ ଥିବା ସମୟରେ, ଏହି ସାଇଟ୍ ଏ ବିଷୟରେ ଜାଣିପାରିବ:</translation>
 <translation id="4378154925671717803">ଫୋନ୍</translation>
 <translation id="4384468725000734951">ସନ୍ଧାନ ପାଇଁ Sogou ବ୍ୟବହାର କରାଯାଉଛି</translation>
 <translation id="4404568932422911380">କୌଣସି ବୁକ୍‍ମାର୍କ ନାହିଁ</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">କୌଣସି ସଂଯୋଗ ନାହିଁ</translation>
 <translation id="4565377596337484307">ପାସୱାର୍ଡ୍ ଲୁଚାନ୍ତୁ</translation>
 <translation id="4572422548854449519">ପରିଚାଳିତ ଆକାଉଣ୍ଟରେ ସାଇନ୍‌ ଇନ୍‌ କରନ୍ତୁ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# ମିନିଟ୍‌ ପୂର୍ବେ}other{#ମିନିଟ୍ ପୂର୍ବେ}}</translation>
 <translation id="4587589328781138893">ସାଇଟଗୁଡ଼ିକ</translation>
 <translation id="4594952190837476234">ଏହି ପୃଷ୍ଠା <ph name="CREATION_TIME" />ର ଅଟେ ଏବଂ ଅନ୍‌ଲାଇନ୍ ସଂସ୍କରଣ ଠାରୁ ଅଲଗା ହୋଇପାରେ।</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ଖୋଲନ୍ତୁ</translation>
 <translation id="4634124774493850572">ପାସ୍‌ୱର୍ଡ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="4650364565596261010">ସିଷ୍ଟମ୍ ଡିଫଲ୍ଟ</translation>
-<translation id="4660838440047236328">ଆପଣଙ୍କର ରୁମ୍‍ର ଲେଆଉଟ୍</translation>
 <translation id="4662373422909645029">ଡାକନାମରେ ନମ୍ବର ରହିପାରିବନି</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" />ଟି ବୁକ୍‌ମାର୍କ ଡିଲିଟ୍ କରାଗଲା</translation>
 <translation id="4665282149850138822">ଆପଣଙ୍କ ମୂଳ ସ୍କ୍ରିନ୍‌ରେ <ph name="NAME" />କୁ ଯୋଗ କରାଯାଇଥିଲା</translation>
@@ -459,7 +449,6 @@
 
 ଏହି ସେଟିଂ ପରିବର୍ତ୍ତନ କରିବାକୁ, <ph name="BEGIN_LINK" />ସିଙ୍କ୍‌ ରିସେଟ୍‍ କରନ୍ତୁ<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">କାର୍ଡରେ ଥିବା ନାମ</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" />ରୁ VR ଲେଖିବେ କି?</translation>
 <translation id="4824958205181053313">ସିଙ୍କ୍‌ ବାତିଲ୍‌ କରିବେ?</translation>
 <translation id="4835385943915508971">Chrome ପାଖରେ ଅନୁରୋଧ କରାଯାଇଥିବା ସମ୍ବଳକୁ ଆକ୍ସେସ୍‌ ନାହିଁ।</translation>
 <translation id="4837753911714442426">ପୃଷ୍ଠା ପ୍ରିଣ୍ଟ କରିବାକୁ ବିକଳ୍ପଗୁଡ଼ିକ ଖୋଲନ୍ତୁ</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ରୁ ପ୍ରସ୍ଥାନ କରନ୍ତୁ</translation>
 <translation id="6404511346730675251">ବୁକ୍‍ମାର୍କ ଏଡିଟ୍ କରନ୍ତୁ</translation>
 <translation id="6406506848690869874">ସିଙ୍କ୍‌ କରନ୍ତୁ</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" />ରୁ ARକୁ ଯିବେ କି?</translation>
 <translation id="641643625718530986">ପ୍ରିଣ୍ଟ କରନ୍ତୁ…</translation>
 <translation id="6427112570124116297">ୱେବ୍ ଅନୁବାଦ କରନ୍ତୁ</translation>
 <translation id="6433501201775827830">ଆପଣଙ୍କର ସନ୍ଧାନ ଇଞ୍ଜିନ୍ ବାଛନ୍ତୁ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
index a8c498d..115032e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"ਪ੍ਰਮੁੱਖ ਸਾਈਟਾਂ" ਬਟਨ 'ਤੇ ਟੈਪ ਕਰਕੇ ਪ੍ਰਸਿੱਧ ਵੈੱਬਸਾਈਟਾਂ ਦੇਖੋ</translation>
 <translation id="1173894706177603556">ਮੁੜ-ਨਾਮਕਰਨ ਕਰੋ</translation>
 <translation id="1178581264944972037">ਰੋਕੋ</translation>
-<translation id="1188239144602654184">AR ਵਿੱਚ ਦਾਖਲ ਹੋਵੋ</translation>
 <translation id="1197267115302279827">ਬੁੱਕਮਾਰਕਾਂ ਨੂੰ ਮੂਵ ਕਰੋ</translation>
 <translation id="1201402288615127009">ਅੱਗੇ</translation>
 <translation id="1204037785786432551">ਲਿੰਕ ਡਾਊਨਲੋਡ ਕਰੋ</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ਲਿਖਤ</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> ਦਾ <ph name="RESULT_NUMBER" /> ਨਤੀਜਾ</translation>
 <translation id="2096012225669085171">ਡੀਵਾਈਸਾਂ ਵਿਚਾਲੇ ਸਮਕਾਲੀਕਰਨ ਕਰੋ ਅਤੇ ਵਿਅਕਤੀਗਤ ਬਣਾਓ</translation>
-<translation id="2099625543891475722">ਤੁਹਾਡੀਆਂ ਸਰੀਰਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ, ਜਿਵੇਂ ਕਿ ਲੰਬਾਈ</translation>
 <translation id="2100273922101894616">ਸਵੈਚਲਿਤ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="2100314319871056947">ਲਿਖਤ ਨੂੰ ਵਧੇਰੇ ਛੋਟੇ ਹਿੱਸਿਆਂ ਵਿੱਚ ਸਾਂਝਾ ਕਰਕੇ ਦੇਖੋ</translation>
 <translation id="2109711654079915747">ਪੰਨਾ ਛੱਡੇ ਬਿਨਾਂ ਵੈੱਬਸਾਈਟਾਂ 'ਤੇ ਵਿਸ਼ਿਆਂ ਬਾਰੇ ਜਾਣੋ। 'ਖੋਜਣ ਲਈ ਸਪਰਸ਼ ਕਰੋ' ਵਿਸ਼ੇਸ਼ਤਾ 'Google ਖੋਜ', ਵਾਪਸੀ ਪਰਿਭਾਸ਼ਾਵਾਂ, ਤਸਵੀਰਾਂ, ਖੋਜ ਨਤੀਜਿਆਂ ਅਤੇ ਹੋਰਾਂ ਵੇਰਵਿਆਂ ਨੂੰ ਇੱਕ ਸ਼ਬਦ ਅਤੇ ਉਸਦੇ ਨੇੜਲੇ ਸੰਦਰਭ ਭੇਜਦੀ ਹੈ।
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">ਵਿਵਸਥਿਤ ਕਰੋ</translation>
 <translation id="381841723434055211">ਫ਼ੋਨ ਨੰਬਰ</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ਡਾਊਨਲੋਡ ਮਿਟਾਏ ਗਏ</translation>
-<translation id="3849365399446680203">AR ਵਿੱਚ ਹੋਣ 'ਤੇ, ਇਹ ਸਾਈਟ ਇਹ ਕੰਮ ਕਰ ਸਕਦੀ ਹੈ:
-• ਤੁਹਾਡੇ ਵਾਤਾਵਰਨ ਦਾ 3D ਨਕਸ਼ਾ ਬਣਾ ਸਕੇਗੀ
-• ਕੈਮਰੇ ਦੀ ਗਤੀਸ਼ੀਲਤਾ 'ਤੇ ਨਿਗਰਾਨੀ ਰੱਖ ਸਕੇਗੀ
-
-ਤੁਹਾਡਾ ਕੈਮਰਾ ਕੀ ਦੇਖ ਰਿਹਾ ਹੈ ਇਹ ਸਿਰਫ਼ ਤੁਸੀਂ ਦੇਖ ਸਕਦੇ ਹੋ। ਇਹ ਸਾਈਟ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੇ ਚਿੱਤਰ ਨਹੀਂ ਦੇਖ ਸਕਦੀ।</translation>
 <translation id="3859306556332390985">ਅੱਗੇ ਵੱਲ ਨੂੰ ਲੈ ਜਾਓ</translation>
 <translation id="388596076286380598">ਆਪਣੀਆਂ ਮਨਪਸੰਦ ਸਾਈਟਾਂ ਤੋਂ ਲੇਖ, ਵੀਡੀਓ ਅਤੇ ਹੋਰ ਸਮੱਗਰੀ ਪ੍ਰਾਪਤ ਕਰੋ, ਭਾਵੇਂ ਤੁਸੀਂ ਆਫ਼ਲਾਈਨ ਹੋਵੋ ਜਾਂ ਤੁਹਾਡਾ ਕਨੈਕਸ਼ਨ ਖਰਾਬ ਹੋਵੇ।</translation>
 <translation id="3894427358181296146">ਫੋਲਡਰ ਜੋੜੋ</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ਕੋਈ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ</translation>
 <translation id="4321739720395210191">ਤੁਹਾਡੇ ਕੈਮਰੇ ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="4351244548802238354">ਡਾਇਲੌਗ ਬੰਦ ਕਰੋ</translation>
-<translation id="4353114845960720315">VR ਵਿੱਚ ਹੋਣ 'ਤੇ, ਇਹ ਸਾਈਟ ਇਸ ਬਾਰੇ ਜਾਣ ਸਕਦੀ ਹੈ:</translation>
 <translation id="4378154925671717803">ਫ਼ੋਨ</translation>
 <translation id="4384468725000734951">ਖੋਜਣ ਲਈ Sogou ਦੀ ਵਰਤੋਂ ਹੋ ਰਹੀ ਹੈ</translation>
 <translation id="4404568932422911380">ਕੋਈ ਬੁੱਕਮਾਰਕ ਨਹੀਂ</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">ਕੋਈ ਕਨੈਕਸ਼ਨ ਨਹੀਂ</translation>
 <translation id="4565377596337484307">ਪਾਸਵਰਡ ਲੁਕਾਓ</translation>
 <translation id="4572422548854449519">ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# ਮਿੰਟ ਪਹਿਲਾਂ}one{# ਮਿੰਟ ਪਹਿਲਾਂ}other{# ਮਿੰਟ ਪਹਿਲਾਂ}}</translation>
 <translation id="4587589328781138893">ਸਾਈਟਾਂ</translation>
 <translation id="4594952190837476234">ਇਹ ਆਫ਼ਲਾਈਨ ਪੰਨਾ <ph name="CREATION_TIME" /> ਦਾ ਹੈ ਅਤੇ ਆਨਲਾਈਨ ਵਰਜਨ ਤੋਂ ਵੱਖਰਾ ਹੋ ਸਕਦਾ ਹੈ।</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ਖੋਲ੍ਹੋ</translation>
 <translation id="4634124774493850572">ਪਾਸਵਰਡ ਵਰਤੋ</translation>
 <translation id="4650364565596261010">ਸਿਸਟਮ ਪੂਰਵ-ਨਿਰਧਾਰਤ</translation>
-<translation id="4660838440047236328">ਤੁਹਾਡੇ ਕਮਰੇ ਦਾ ਖਾਕਾ</translation>
 <translation id="4662373422909645029">ਉਪਨਾਮ 'ਚ ਅੰਕ ਨਹੀਂ ਹੋ ਸਕਦੇ</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> ਬੁੁੱਕਮਾਰਕ ਮਿਟਾਏ ਗਏ</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ਨੂੰ ਤੁਹਾਡੀ ਹੋਮ ਸਕ੍ਰੀਨ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ</translation>
@@ -459,7 +449,6 @@
 
 ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣ ਲਈ, <ph name="BEGIN_LINK" />ਸਮਕਾਲੀਕਰਨ ਨੂੰ ਰੀਸੈੱਟ ਕਰੋ<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">ਕਾਰਡ ਤੇ ਨਾਮ</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> ਤੋਂ VR ਵਿੱਚ ਦਾਖਲ ਹੋਣਾ ਹੈ?</translation>
 <translation id="4824958205181053313">ਕੀ ਸਮਕਾਲੀਕਰਨ ਰੱਦ ਕਰਨਾ ਹੈ?</translation>
 <translation id="4835385943915508971">Chrome ਦੀ ਬੇਨਤੀ ਕੀਤੇ ਸਰੋਤ 'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਹੈ।</translation>
 <translation id="4837753911714442426">ਪੰਨਾ ਪ੍ਰਿੰਟ ਕਰਨ ਲਈ ਵਿਕਲਪਾਂ ਨੂੰ ਖੋਲ੍ਹੋ</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">ਪੂਰੀ ਸਕ੍ਰੀਨ ਤੋਂ ਬਾਹਰ ਜਾਓ</translation>
 <translation id="6404511346730675251">ਬੁੱਕਮਾਰਕ ਸੰਪਾਦਿਤ ਕਰੋ</translation>
 <translation id="6406506848690869874">ਸਿੰਕ ਕਰੋ</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> ਤੋਂ AR ਵਿੱਚ ਦਾਖਲ ਹੋਣਾ ਹੈ?</translation>
 <translation id="641643625718530986">ਪ੍ਰਿੰਟ…</translation>
 <translation id="6427112570124116297">ਵੈੱਬ ਦਾ ਅਨੁਵਾਦ ਕਰੋ</translation>
 <translation id="6433501201775827830">ਆਪਣਾ ਖੋਜ ਇੰਜਣ ਚੁਣੋ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index 889dde16..e0afc39 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Zobacz najpopularniejsze strony, klikając przycisk „Popularne”</translation>
 <translation id="1173894706177603556">Zmień nazwę</translation>
 <translation id="1178581264944972037">Wstrzymaj</translation>
-<translation id="1188239144602654184">Włącz AR</translation>
 <translation id="1197267115302279827">Przenieś zakładki</translation>
 <translation id="1201402288615127009">Dalej</translation>
 <translation id="1204037785786432551">Pobierz link</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">Tekst</translation>
 <translation id="2082238445998314030">Wynik <ph name="RESULT_NUMBER" /> z <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synchronizacja i personalizacja na urządzeniach</translation>
-<translation id="2099625543891475722">Twoje cechy fizyczne, np. wzrost;</translation>
 <translation id="2100273922101894616">Automatyczne logowanie</translation>
 <translation id="2100314319871056947">Spróbuj udostępnić mniejsze fragmenty tekstu</translation>
 <translation id="2109711654079915747">Poznaj tematy omawiane w witrynach, nie opuszczając strony. Funkcja „Dotknij, by wyszukać” wysyła słowo i najbliższy kontekst do wyszukiwarki Google, a następnie zwraca definicje, zdjęcia, wyniki wyszukiwania i inne informacje.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Zarządzaj</translation>
 <translation id="381841723434055211">Numery telefonów</translation>
 <translation id="3819178904835489326">Usunięte pobrane pliki: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Gdy włączysz tryb AR, ta strona będzie mogła:
-• tworzyć mapę 3D Twojego otoczenia,
-• śledzić ruch kamery.
-
-Obraz z kamery będziesz widzieć tylko Ty. Strona nie będzie mieć do niego dostępu.</translation>
 <translation id="3859306556332390985">Przewiń do przodu</translation>
 <translation id="388596076286380598">Możesz czytać artykuły i oglądać filmy oraz inne treści ze swoich ulubionych stron nawet wtedy, gdy jesteś offline lub masz słabe połączenie.</translation>
 <translation id="3894427358181296146">Dodaj folder</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Brak połączenia z internetem</translation>
 <translation id="4321739720395210191">Nie udało się otworzyć aparatu. Ponownie uruchom urządzenie i spróbuj jeszcze raz.</translation>
 <translation id="4351244548802238354">Zamknij okno</translation>
-<translation id="4353114845960720315">Gdy używasz VR, strona może poznać te informacje:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Korzystam z wyszukiwarki Sogou</translation>
 <translation id="4404568932422911380">Brak zakładek</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Brak połączenia</translation>
 <translation id="4565377596337484307">Ukryj hasło</translation>
 <translation id="4572422548854449519">Zaloguj się na konto zarządzane</translation>
-<translation id="4574741712540401491">• <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minutę temu}few{# minuty temu}many{# minut temu}other{# minuty temu}}</translation>
 <translation id="4587589328781138893">Witryny</translation>
 <translation id="4594952190837476234">Ta strona offline jest z <ph name="CREATION_TIME" /> i może różnić się od wersji online.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Otwórz <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Użyj hasła</translation>
 <translation id="4650364565596261010">Ustawienie domyślne</translation>
-<translation id="4660838440047236328">układ Twojego pokoju.</translation>
 <translation id="4662373422909645029">Pseudonim tylko bez cyfr</translation>
 <translation id="4663756553811254707">Usunięte zakładki: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Strona <ph name="NAME" /> została dodana do ekranu głównego</translation>
@@ -459,7 +449,6 @@
 
 Aby zmienić to ustawienie, <ph name="BEGIN_LINK" />zresetuj synchronizację<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Imię i nazwisko na karcie</translation>
-<translation id="4808319664292298116">Włączyć tryb VR z domeny <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Anulować synchronizację?</translation>
 <translation id="4835385943915508971">Chrome nie ma dostępu do żądanego zasobu.</translation>
 <translation id="4837753911714442426">Otwórz opcje drukowania strony</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Zamknij pełny ekran</translation>
 <translation id="6404511346730675251">Edytuj zakładkę</translation>
 <translation id="6406506848690869874">Synchronizacja</translation>
-<translation id="6410973561433500075">Włączyć tryb AR z domeny <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Drukuj…</translation>
 <translation id="6427112570124116297">Tłumacz internet</translation>
 <translation id="6433501201775827830">Wybierz wyszukiwarkę</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index 5f11f136..74bd8e3c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Toque no botão "Sites famosos" para ver os sites muito acessados</translation>
 <translation id="1173894706177603556">Renomear</translation>
 <translation id="1178581264944972037">Pausar</translation>
-<translation id="1188239144602654184">Entrar na RA</translation>
 <translation id="1197267115302279827">Mover favoritos</translation>
 <translation id="1201402288615127009">Próxima</translation>
 <translation id="1204037785786432551">Fazer o download do link</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texto</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincronizar e personalizar entre dispositivos</translation>
-<translation id="2099625543891475722">suas características físicas, como altura;</translation>
 <translation id="2100273922101894616">Login automático</translation>
 <translation id="2100314319871056947">Tente compartilhar o texto em segmentos menores</translation>
 <translation id="2109711654079915747">Saiba mais sobre assuntos específicos em sites sem sair da página. Com o recurso "Tocar para pesquisar", a palavra tocada e o contexto relacionado são enviados para a Pesquisa Google, que mostra definições, imagens, resultados da pesquisa e outros detalhes.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gerenciar</translation>
 <translation id="381841723434055211">Números de telefone</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads excluídos</translation>
-<translation id="3849365399446680203">Enquanto você estiver na RA, este site poderá:
-• criar um mapa 3D do seu ambiente;
-• rastrear o movimento da câmera.
-
-Só você pode ver o que é capturado pela câmera. O site não pode ver essas imagens.</translation>
 <translation id="3859306556332390985">Avançar</translation>
 <translation id="388596076286380598">Receba artigos, vídeos e outros conteúdos dos sites que você gosta, mesmo que você esteja off-line ou com uma conexão ruim.</translation>
 <translation id="3894427358181296146">Adicionar pasta</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Sem conexão com a Internet</translation>
 <translation id="4321739720395210191">Não foi possível abrir a câmera. Reinicie o dispositivo e tente novamente.</translation>
 <translation id="4351244548802238354">Fechar caixa de diálogo</translation>
-<translation id="4353114845960720315">Enquanto você estiver em RV, o site poderá receber dados sobre:</translation>
 <translation id="4378154925671717803">Telefone</translation>
 <translation id="4384468725000734951">Usando o Sogou para pesquisar</translation>
 <translation id="4404568932422911380">Nenhum favorito</translation>
@@ -428,7 +420,6 @@
 <translation id="4561979708150884304">Sem conexão</translation>
 <translation id="4565377596337484307">Ocultar senha</translation>
 <translation id="4572422548854449519">Fazer login em conta gerenciada</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minuto atrás}one{# minutos atrás}other{# minutos atrás}}</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Esta página off-line é de <ph name="CREATION_TIME" /> e pode ser diferente da versão on-line.</translation>
@@ -436,7 +427,6 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar senha</translation>
 <translation id="4650364565596261010">Padrão do sistema</translation>
-<translation id="4660838440047236328">o layout do ambiente.</translation>
 <translation id="4662373422909645029">O apelido não pode ter números</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoritos excluídos</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> foi adicionado à sua tela inicial</translation>
@@ -460,7 +450,6 @@
 
 Para alterar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Nome no cartão de crédito</translation>
-<translation id="4808319664292298116">Entrar na RV do <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Cancelar sincronização?</translation>
 <translation id="4835385943915508971">O Chrome não tem acesso ao recurso solicitado.</translation>
 <translation id="4837753911714442426">Abrir opções de impressão de página</translation>
@@ -660,7 +649,6 @@
 <translation id="6398765197997659313">Sair do modo tela cheia</translation>
 <translation id="6404511346730675251">Editar favorito</translation>
 <translation id="6406506848690869874">Sincronizar</translation>
-<translation id="6410973561433500075">Entrar na RA de <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Imprimir...</translation>
 <translation id="6427112570124116297">Traduzir página da Web</translation>
 <translation id="6433501201775827830">Escolha seu mecanismo de pesquisa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index d18773d..3870c8c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Veja Websites populares ao tocar no botão "Principais sites"</translation>
 <translation id="1173894706177603556">Mudar nome</translation>
 <translation id="1178581264944972037">Pausa</translation>
-<translation id="1188239144602654184">Aceder à realidade aumentada</translation>
 <translation id="1197267115302279827">Mover marcadores</translation>
 <translation id="1201402288615127009">Seguinte</translation>
 <translation id="1204037785786432551">Transferir link</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">texto</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincronizar e personalizar entre dispositivos</translation>
-<translation id="2099625543891475722">as suas caraterísticas físicas, como a altura</translation>
 <translation id="2100273922101894616">Início de sessão automático</translation>
 <translation id="2100314319871056947">Experimente partilhar o texto em partes mais pequenas.</translation>
 <translation id="2109711654079915747">Saiba mais acerca de tópicos em Websites sem sair da página. A funcionalidade Tocar para pesquisar envia uma palavra e o contexto circundante para a Pesquisa Google, que devolve definições, imagens, resultados da pesquisa e outros detalhes.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gerir</translation>
 <translation id="381841723434055211">Números de telefone</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> transferências eliminadas</translation>
-<translation id="3849365399446680203">Enquanto estiver a utilizar a realidade aumentada, este site pode conseguir:
-• criar um mapa 3D do seu ambiente;
-• monitorizar o movimento da câmara.
-
-Aquilo que a câmara vê apenas é visível para si. Este site não pode ver as imagens da câmara.</translation>
 <translation id="3859306556332390985">Procurar para a frente</translation>
 <translation id="388596076286380598">Obtenha artigos, vídeos e outros conteúdos dos sites de que gosta, mesmo se estiver offline ou se a ligação for fraca.</translation>
 <translation id="3894427358181296146">Adicionar pasta</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Sem ligação à Internet</translation>
 <translation id="4321739720395210191">Não é possível abrir a câmara. Reinicie o dispositivo e tente novamente.</translation>
 <translation id="4351244548802238354">Fechar caixa de diálogo</translation>
-<translation id="4353114845960720315">Enquanto estiver na RV, este site pode saber mais sobre:</translation>
 <translation id="4378154925671717803">Telemóvel</translation>
 <translation id="4384468725000734951">A utilizar o Sogou para pesquisa</translation>
 <translation id="4404568932422911380">Sem marcadores</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Sem ligação</translation>
 <translation id="4565377596337484307">Ocultar palavra-passe</translation>
 <translation id="4572422548854449519">Iniciar sessão na conta gerida</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Há # minuto}other{Há # minutos}}</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Esta página foi criada a <ph name="CREATION_TIME" /> e pode ser diferente da versão online.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizar palavra-passe</translation>
 <translation id="4650364565596261010">Predefinição do sistema</translation>
-<translation id="4660838440047236328">a disposição da divisão</translation>
 <translation id="4662373422909645029">O pseudónimo n/ pode ter núm.</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> marcadores eliminados</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> foi adicionado ao seu Ecrã principal</translation>
@@ -459,7 +449,6 @@
 
 Para alterar esta definição, <ph name="BEGIN_LINK" />reponha a sincronização<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Nome no cartão</translation>
-<translation id="4808319664292298116">Pretende entrar na RV a partir do domínio <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Pretende cancelar a sincronização?</translation>
 <translation id="4835385943915508971">O Chrome não tem acesso ao recurso solicitado.</translation>
 <translation id="4837753911714442426">Abrir opções para imprimir página</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Sair do modo de ecrã inteiro</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
 <translation id="6406506848690869874">Sincronização</translation>
-<translation id="6410973561433500075">Pretende aceder à realidade aumentada do domínio <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Imprimir…</translation>
 <translation id="6427112570124116297">Traduzir a Web</translation>
 <translation id="6433501201775827830">Escolher o motor de pesquisa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
index db042ddf..a6f9f8f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Vezi site-uri populare atingând butonul „Site-uri de top”</translation>
 <translation id="1173894706177603556">Redenumește</translation>
 <translation id="1178581264944972037">Întrerupe</translation>
-<translation id="1188239144602654184">Intră în RA</translation>
 <translation id="1197267115302279827">Mută marcaje</translation>
 <translation id="1201402288615127009">Înainte</translation>
 <translation id="1204037785786432551">Descarcă linkul</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">text</translation>
 <translation id="2082238445998314030">Rezultatul <ph name="RESULT_NUMBER" /> din <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sincronizează și personalizează pe toate dispozitivele</translation>
-<translation id="2099625543891475722">trăsăturile tale fizice, cum ar fi înălțimea;</translation>
 <translation id="2100273922101894616">Conectare automată</translation>
 <translation id="2100314319871056947">Împarte textul în fragmente mai mici</translation>
 <translation id="2109711654079915747">Află despre subiectele de pe site-uri fără să părăsești pagina. Funcția Atinge pentru a căuta trimite un cuvânt și contextul aferent către Căutarea Google și returnează definiții, imagini, rezultate ale căutării și alte detalii.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Gestionează</translation>
 <translation id="381841723434055211">Numere de telefon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descărcări șterse</translation>
-<translation id="3849365399446680203">Când ești în modul RA, acest site poate:
-• să creeze o hartă 3D a mediului tău;
-• să urmărească mișcarea camerei.
-
-Doar tu poți vedea ce vede camera. Site-ul nu vede imaginile de pe cameră.</translation>
 <translation id="3859306556332390985">Derulează înainte</translation>
 <translation id="388596076286380598">Descarcă articole, videoclipuri și alte tipuri de conținut de pe site-urile preferate, chiar dacă ești offline sau ai o conexiune lentă.</translation>
 <translation id="3894427358181296146">Adaugă un dosar</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nu există conexiune la internet</translation>
 <translation id="4321739720395210191">Nu se poate deschide camera. Repornește dispozitivul și încearcă din nou.</translation>
 <translation id="4351244548802238354">Închide caseta de dialog</translation>
-<translation id="4353114845960720315">În RV, acest site ar putea afla:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Pentru căutare se folosește Sogou</translation>
 <translation id="4404568932422911380">Niciun marcaj</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Nicio conexiune</translation>
 <translation id="4565377596337484307">Ascunde parola</translation>
 <translation id="4572422548854449519">Conectează-te la contul gestionat</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Acum # minut}few{Acum # minute}other{Acum # de minute}}</translation>
 <translation id="4587589328781138893">Site-uri</translation>
 <translation id="4594952190837476234">Această pagină offline este din data de <ph name="CREATION_TIME" /> și poate fi diferită de versiunea online.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Deschide <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Folosește parola</translation>
 <translation id="4650364565596261010">Setare prestabilită a sistemului</translation>
-<translation id="4660838440047236328">aspectul camerei în care te afli.</translation>
 <translation id="4662373422909645029">Pseudonimele nu pot să includă cifre</translation>
 <translation id="4663756553811254707">S-au șters <ph name="NUMBER_OF_BOOKMARKS" /> (de) marcaje</translation>
 <translation id="4665282149850138822">Site-ul <ph name="NAME" /> a fost adăugat pe ecranul de pornire</translation>
@@ -459,7 +449,6 @@
 
 Pentru a modifica această setare, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Numele de pe card</translation>
-<translation id="4808319664292298116">Intri în RV din <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Anulezi sincronizarea?</translation>
 <translation id="4835385943915508971">Chrome nu are acces la resursa solicitată.</translation>
 <translation id="4837753911714442426">Deschide opțiunile pentru a printa pagina</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Ieși din ecranul complet</translation>
 <translation id="6404511346730675251">Modifică marcajul</translation>
 <translation id="6406506848690869874">Sincronizare</translation>
-<translation id="6410973561433500075">Intri în RA de pe <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Printați...</translation>
 <translation id="6427112570124116297">Tradu pe web</translation>
 <translation id="6433501201775827830">Alege motorul de căutare</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index ecc7761c..8b57b6b8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Чтобы перейти к списку популярных сайтов, нажмите кнопку "Топ сайтов"</translation>
 <translation id="1173894706177603556">Переименовать</translation>
 <translation id="1178581264944972037">Пауза</translation>
-<translation id="1188239144602654184">Начать</translation>
 <translation id="1197267115302279827">Переместить закладки</translation>
 <translation id="1201402288615127009">Далее</translation>
 <translation id="1204037785786432551">Сохранить данные по ссылке</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">текст</translation>
 <translation id="2082238445998314030">Результат <ph name="RESULT_NUMBER" />, всего <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Синхронизация и персонализация данных на всех устройствах.</translation>
-<translation id="2099625543891475722">получить представление о параметрах вашего тела, например о росте;</translation>
 <translation id="2100273922101894616">Автоматический вход</translation>
 <translation id="2100314319871056947">Перед отправкой разбейте текст на несколько частей.</translation>
 <translation id="2109711654079915747">Эта функция позволяет находить картинки, определения и другую информацию, не покидая открытой страницы. Просто выберите слово, и оно будет отправлено в Google Поиск вместе с контекстом.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Настроить</translation>
 <translation id="381841723434055211">Номера телефонов</translation>
 <translation id="3819178904835489326">Удаленные скачивания: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">В этом режиме сайт может:
-• создавать 3D-карту места, в котором вы находитесь;
-• отслеживать движение камеры.
-
-Только вы будете видеть то, что попадает в объектив камеры. Сайт не получит доступ к этим изображениям.</translation>
 <translation id="3859306556332390985">Перемотать вперед</translation>
 <translation id="388596076286380598">Вы можете просматривать статьи, видео и другой контент на любимых сайтах даже в офлайн-режиме или при нестабильном подключении.</translation>
 <translation id="3894427358181296146">Добавление папки</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Нет подключения к Интернету</translation>
 <translation id="4321739720395210191">Не удается открыть камеру. Перезапустите устройство и повторите попытку.</translation>
 <translation id="4351244548802238354">Закрыть</translation>
-<translation id="4353114845960720315">Когда вы находитесь в этом режиме, сайт может:</translation>
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Sogou используется как поисковая система по умолчанию</translation>
 <translation id="4404568932422911380">Нет закладок</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Нет подключения</translation>
 <translation id="4565377596337484307">Скрыть пароль</translation>
 <translation id="4572422548854449519">Войдите в управляемый аккаунт</translation>
-<translation id="4574741712540401491">• <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# минуту назад}one{# минуту назад}few{# минуты назад}many{# минут назад}other{# минуты назад}}</translation>
 <translation id="4587589328781138893">Сайты</translation>
 <translation id="4594952190837476234">Офлайн-версия страницы сохранена <ph name="CREATION_TIME" />. Она может отличаться от онлайн-версии.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Открыть <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Использовать пароль</translation>
 <translation id="4650364565596261010">По умолчанию</translation>
-<translation id="4660838440047236328">узнать планировку комнаты, в которой вы находитесь.</translation>
 <translation id="4662373422909645029">Название не должно содержать цифры.</translation>
 <translation id="4663756553811254707">Удалено закладок: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Сайт <ph name="NAME" /> добавлен на главный экран</translation>
@@ -459,7 +449,6 @@
 
 Чтобы изменить эту настройку, <ph name="BEGIN_LINK" />сбросьте параметры синхронизации<ph name="END_LINK" />.</translation>
 <translation id="4807098396393229769">Имя владельца</translation>
-<translation id="4808319664292298116">Войти в режим виртуальной реальности на сайте <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Отключить синхронизацию?</translation>
 <translation id="4835385943915508971">Запрошенный ресурс недоступен в Chrome</translation>
 <translation id="4837753911714442426">Открыть параметры печати страницы</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Обычный режим</translation>
 <translation id="6404511346730675251">Изменить закладку</translation>
 <translation id="6406506848690869874">Синхронизация...</translation>
-<translation id="6410973561433500075">Войти в режим дополненной реальности на сайте <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Печать</translation>
 <translation id="6427112570124116297">Перевод веб-страниц</translation>
 <translation id="6433501201775827830">Выберите поисковую систему</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
index 420c5ad..02779b4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"ඉහළම වෙබ් අඩවි" බොත්තමට තට්ටු කිරීමෙන් ජනප්‍රිය වෙබ් අඩවි බලන්න</translation>
 <translation id="1173894706177603556">ප්‍රතිනම්</translation>
 <translation id="1178581264944972037">විරාමය</translation>
-<translation id="1188239144602654184">AR ඇතුළත් කරන්න</translation>
 <translation id="1197267115302279827">පිටුසන් ගෙන යන්න</translation>
 <translation id="1201402288615127009">ඊළඟ</translation>
 <translation id="1204037785786432551">බාගැනීමේ සබැඳිය</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">පාඨය</translation>
 <translation id="2082238445998314030">ප්‍රතිඵල <ph name="TOTAL_RESULTS" /> කින් <ph name="RESULT_NUMBER" /></translation>
 <translation id="2096012225669085171">උපාංග හරහා සමමුහුර්ත සහ පුද්ගලිකකරණය කරන්න</translation>
-<translation id="2099625543891475722">උස වැනි ඔබේ ශාරීරික ලක්‍ෂණ</translation>
 <translation id="2100273922101894616">ස්වයංක්‍රිය පුරනය වන්න</translation>
 <translation id="2100314319871056947">පාඨය කුඩා කැබලි ලෙස බෙදා ගැනීමට උත්සාහ කරන්න</translation>
 <translation id="2109711654079915747">පිටුව හැර යාමෙන් තොරව වෙබ් අඩවිවල මාතෘකා පිළිබඳ හදාරන්න. සෙවීමට ස්පර්ශ කිරීම වචනයක් සහ එහි අවට සන්දර්භය Google සෙවීම වෙත යවයි, නිර්වචන, පින්තූර, සෙවුම් ප්‍රතිඵල, සහ වෙනත් විස්තර ලබා දෙයි.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">කළමනාකරණය</translation>
 <translation id="381841723434055211">දුරකථන අංක</translation>
 <translation id="3819178904835489326">බාගැනීම් <ph name="NUMBER_OF_DOWNLOADS" />ක් මැකිණි</translation>
-<translation id="3849365399446680203">ඔබ VR තුළ සිටින විට, මෙම අඩවියට හැකි වීමට ඉඩ ඇත:
-• ඔබේ පරිසරයේ ත්‍රිමාන සිතියමක් සෑදීම
-• කැමරා චලනය හඹා යෑම
-
-ඔබේ කැමරාව බලන දේ දැකිය හැක්කේ ඔබට පමණි. අඩවියට ඔබේ කැමරාවේ රූප දැකිය නොහැක.</translation>
 <translation id="3859306556332390985">ඉදිරියට සොයන්න</translation>
 <translation id="388596076286380598">ඔබ නොබැඳි හෝ ඔබේ සබැඳුම දුර්වල වුවත්, ඔබ කැමති අඩවි වලින් ලිපි, වීඩියෝ සහ වෙනත් අන්තර්ගතයන් ලබා ගන්න.</translation>
 <translation id="3894427358181296146">ෆෝල්ඩරය එක් කරන්න</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">අන්තර්ජාල සබැඳුම නැත</translation>
 <translation id="4321739720395210191">ඔබේ කැමරාව විවෘත කළ නොහැක. ඔබේ උපාංගය යළි අරඹා නැවත උත්සාහ කරන්න.</translation>
 <translation id="4351244548802238354">සංවාදය වසන්න</translation>
-<translation id="4353114845960720315">ඔබ VR තුළ සිටින විට, මෙම වෙබ් අඩවියට මේවා ගැන දැන ගත හැකි වීමට ඉඩ ඇත:</translation>
 <translation id="4378154925671717803">දුරකථනය</translation>
 <translation id="4384468725000734951">සෙවීම සඳහා Sogou භාවිත කරමින්</translation>
 <translation id="4404568932422911380">පිටුසන් නැත</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">සබැඳුමක් නැත</translation>
 <translation id="4565377596337484307">මුරපදය සඟවන්න</translation>
 <translation id="4572422548854449519">කළමනාකරණය කරන ලද ගිණුමට පිරීම</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{මිනිත්තු #කට පෙර}one{මිනිත්තු #කට පෙර}other{මිනිත්තු #කට පෙර}}</translation>
 <translation id="4587589328781138893">අඩවි</translation>
 <translation id="4594952190837476234">මෙම නොබැඳි පිටුව <ph name="CREATION_TIME" /> වෙතින් වන අතර සබැඳි අනුවාදයෙන් වෙනස් විය හැකිය.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> විවෘත කරන්න</translation>
 <translation id="4634124774493850572">මුරපදය භාවිත කරන්න</translation>
 <translation id="4650364565596261010">පද්ධති පෙරනිමිය</translation>
-<translation id="4660838440047236328">ඔබේ කාමරයේ වින්‍යාසය</translation>
 <translation id="4662373422909645029">අපනාමයේ අංක ඇතුළත් විය නොහැක</translation>
 <translation id="4663756553811254707">පිටුසන් <ph name="NUMBER_OF_BOOKMARKS" /> ක් මකන ලදී</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ඔබේ මුල් තිරය වෙත එක් කරන ලදී</translation>
@@ -459,7 +449,6 @@
 
 මෙම සැකසීම වෙනස් කිරීමට, <ph name="BEGIN_LINK" />සමමුහූර්තය යළි සකසන්න<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">කාඩ්පතෙහි නම</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> වෙතින් VR එකට ඇතුළත් වන්නේද?</translation>
 <translation id="4824958205181053313">සමමුහූර්තය අවලංගු කරන්නේද?</translation>
 <translation id="4835385943915508971">Chrome හට ඉල්ලන ලද සම්පත් වෙත ප්‍රවේශය නැත.</translation>
 <translation id="4837753911714442426">පිටුවක් මුද්‍රණය කිරීමට විකල්ප විවෘත කරන්න</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">සම්පුර්ණ තිරයෙන් ඉවත් වන්න</translation>
 <translation id="6404511346730675251">පිටු සලකුණ සංස්කරණය කරන්න</translation>
 <translation id="6406506848690869874">සමමුහුව</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> සිට VR වෙත ඇතුළු වන්න ද?</translation>
 <translation id="641643625718530986">මුද්‍රණය කරන්න...</translation>
 <translation id="6427112570124116297">වෙබ් අඩවිය පරිවර්තන කරන්න</translation>
 <translation id="6433501201775827830">ඔබේ සෙවුම් එන්ජිම තෝරා ගන්න</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
index fb78b79..4c60d810 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Klepnutím na tlačidlo Hlavné weby zobrazíte obľúbené webové stránky</translation>
 <translation id="1173894706177603556">Premenovať</translation>
 <translation id="1178581264944972037">Pozastaviť</translation>
-<translation id="1188239144602654184">Spustiť VR</translation>
 <translation id="1197267115302279827">Presunúť záložky</translation>
 <translation id="1201402288615127009">Ďalej</translation>
 <translation id="1204037785786432551">Stiahnuť obsah odkazu</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">text</translation>
 <translation id="2082238445998314030">Výsledok <ph name="RESULT_NUMBER" /> z <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synchronizovať a prispôsobiť v rôznych zariadeniach</translation>
-<translation id="2099625543891475722">vašich fyzických vlastnostiach, napríklad výške;</translation>
 <translation id="2100273922101894616">Automaticky prihlasovať</translation>
 <translation id="2100314319871056947">Skúste text zdieľať po menších častiach</translation>
 <translation id="2109711654079915747">Zistite viac o témach na weboch bez toho, aby ste museli opustiť stránku. Funkcia Vyhľadávanie klepnutím odošle slovo a súvisiaci kontext do Vyhľadávania Google a vráti definície, obrázky, výsledky vyhľadávania a ďalšie podrobnosti.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Spravovať</translation>
 <translation id="381841723434055211">Telefónne čísla</translation>
 <translation id="3819178904835489326">Počet odstránených stiahnutých súborov: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Keď ste v RR, tento web môže:
-• vytvoriť 3D mapu vášho prostredia;
-• sledovať pohyb fotoaparátu.
-
-Iba vy vidíte, čo je v zábere fotoaparátu. Tomuto webu sa nezobrazujú obrázky vášho fotoaparátu.</translation>
 <translation id="3859306556332390985">Pretočiť dopredu</translation>
 <translation id="388596076286380598">Dostávajte články, videá a ďalší obsah z webov, ktoré sa vám páčia, aj keď ste offline alebo máte slabé pripojenie.</translation>
 <translation id="3894427358181296146">Pridanie priečinka</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Žiadne internetové pripojenie</translation>
 <translation id="4321739720395210191">Vaša kamera sa nedá otvoriť. Reštartujte zariadenie a skúste to znova.</translation>
 <translation id="4351244548802238354">Zavrieť dialógové okno</translation>
-<translation id="4353114845960720315">Keď budete vo VR, tento web môže získať informácie o:</translation>
 <translation id="4378154925671717803">Telefón</translation>
 <translation id="4384468725000734951">Na vyhľadávanie sa používa Sogou</translation>
 <translation id="4404568932422911380">Žiadne záložky</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Bez pripojenia</translation>
 <translation id="4565377596337484307">Skryť heslo</translation>
 <translation id="4572422548854449519">Prihlásenie do spravovaného účtu</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{pred # minútou}few{pred # minútami}many{pred # minútou}other{pred # minútami}}</translation>
 <translation id="4587589328781138893">Weby</translation>
 <translation id="4594952190837476234">Táto offline stránka je z <ph name="CREATION_TIME" /> a líši sa od online verzie.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Otvoriť <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Použiť heslo</translation>
 <translation id="4650364565596261010">Predvolené</translation>
-<translation id="4660838440047236328">rozložení vašej miestnosti.</translation>
 <translation id="4662373422909645029">Prezývka nemôže mať čísla</translation>
 <translation id="4663756553811254707">Počet odstránených záložiek: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Stránky <ph name="NAME" /> boli pridané na plochu</translation>
@@ -459,7 +449,6 @@
 
 Ak chcete toto nastavenie zmeniť, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Meno na karte</translation>
-<translation id="4808319664292298116">Chcete prejsť do VR z domény <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Chcete zrušiť synchronizáciu?</translation>
 <translation id="4835385943915508971">Chrome nemá prístup k požadovanému zdroju.</translation>
 <translation id="4837753911714442426">Otvorenie možností tlače stránky</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Ukončiť zobrazenie na celú obrazovku</translation>
 <translation id="6404511346730675251">Upraviť záložku</translation>
 <translation id="6406506848690869874">Synchronizácia</translation>
-<translation id="6410973561433500075">Chcete prejsť do RR z domény <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Tlačiť...</translation>
 <translation id="6427112570124116297">Preklad webu</translation>
 <translation id="6433501201775827830">Výber vyhľadávača</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index 81618760..932ee1fc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Oglejte si priljubljena spletna mesta z dotikom gumba »Najb. prilj.«</translation>
 <translation id="1173894706177603556">Preimenuj</translation>
 <translation id="1178581264944972037">Prekini</translation>
-<translation id="1188239144602654184">Začni RR</translation>
 <translation id="1197267115302279827">Premakni zavihke</translation>
 <translation id="1201402288615127009">Naprej</translation>
 <translation id="1204037785786432551">Prenesi povezavo</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">besedilo</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />. rezultat od <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sinhronizacija in prilagajanje med napravami</translation>
-<translation id="2099625543891475722">vaše fizične poteze, na primer višina,</translation>
 <translation id="2100273922101894616">Samodejna prijava</translation>
 <translation id="2100314319871056947">Poskusite deliti besedilo v manjših kosih</translation>
 <translation id="2109711654079915747">Preberite več o temah na spletnih mestih, ne da bi vam bilo treba zapustiti stran. Funkcija »Iskanje z dotikom« pošlje besedo in njeno sobesedilo Iskanju Google in vrne definicije, slike, rezultate iskanja in druge podrobnosti.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Upravljanje</translation>
 <translation id="381841723434055211">Telefonske številke</translation>
 <translation id="3819178904835489326">Št. izbrisanih prenosov: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Med uporabo razširjene resničnosti lahko to spletno mesto:
-• ustvari 3D-zemljevid okolja,
-• spremlja premikanje fotoaparata.
-
-Samo vam je vidno, kam je usmerjen fotoaparat. Spletno mesto si ne more ogledati slik fotoaparata.</translation>
 <translation id="3859306556332390985">Išči naprej</translation>
 <translation id="388596076286380598">Prejemajte članke, videoposnetke in drugo vsebino s spletnih mest, ki so vam všeč, tudi ko nimate povezave ali ko je ta slaba.</translation>
 <translation id="3894427358181296146">Dodajanje mape</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Ni internetne povezave</translation>
 <translation id="4321739720395210191">Kamere ni mogoče odpreti. Znova zaženite napravo in poskusite znova.</translation>
 <translation id="4351244548802238354">Zapri pogovorno okno</translation>
-<translation id="4353114845960720315">Med uporabo navidezne resničnosti lahko to spletno mesto o vas izve to:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Uporaba iskalnika Sogou za iskanje</translation>
 <translation id="4404568932422911380">Ni zaznamkov</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Ni povezave</translation>
 <translation id="4565377596337484307">Skrij geslo</translation>
 <translation id="4572422548854449519">Prijava v upravljani račun</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Pred # minuto}one{Pred # minuto}two{Pred # minutama}few{Pred # minutami}other{Pred # minutami}}</translation>
 <translation id="4587589328781138893">Spletna mesta</translation>
 <translation id="4594952190837476234">Ta stran brez povezave je bila ustvarjena <ph name="CREATION_TIME" /> in se morda razlikuje od spletne različice.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Odpri <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Uporabi geslo</translation>
 <translation id="4650364565596261010">Sistemsko privzeto</translation>
-<translation id="4660838440047236328">tloris sobe.</translation>
 <translation id="4662373422909645029">Vzdevek ne sme vsebovati številk</translation>
 <translation id="4663756553811254707">Št. izbrisanih zaznamkov: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Spletno mesto <ph name="NAME" /> je bilo dodano na začetni zaslon</translation>
@@ -459,7 +449,6 @@
 
 Če želite spremeniti to nastavitev, <ph name="BEGIN_LINK" />ponastavite sinhronizacijo<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Ime na kartici</translation>
-<translation id="4808319664292298116">Želite zagnati navidezno resničnost z domene <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Želite preklicati sinhronizacijo?</translation>
 <translation id="4835385943915508971">Chrome nima dostopa do zahtevanega vira</translation>
 <translation id="4837753911714442426">Odpiranje možnosti za tiskanje strani</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Izhod iz celozaslonskega načina</translation>
 <translation id="6404511346730675251">Uredi zaznamek</translation>
 <translation id="6406506848690869874">Sinhronizacija</translation>
-<translation id="6410973561433500075">Ali želite zagnati razširjeno resničnost z domene <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Tiskanje …</translation>
 <translation id="6427112570124116297">Prevajanje spleta</translation>
 <translation id="6433501201775827830">Izbira iskalnika</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
index b117f78a..98f9a95a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Shiko sajte uebi të mirënjohura duke trokitur te butoni "Sajtet kryesore"</translation>
 <translation id="1173894706177603556">Riemërto</translation>
 <translation id="1178581264944972037">Pauzë</translation>
-<translation id="1188239144602654184">Hyr në AR</translation>
 <translation id="1197267115302279827">Zhvendos faqeshënuesit</translation>
 <translation id="1201402288615127009">Tjetra</translation>
 <translation id="1204037785786432551">Lidhja e shkarkimit</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">teksti</translation>
 <translation id="2082238445998314030">Rezultati <ph name="RESULT_NUMBER" /> nga <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sinkronizo e personalizo përmes pajisjeve</translation>
-<translation id="2099625543891475722">karakteristikat e tua fizike, si gjatësia</translation>
 <translation id="2100273922101894616">Identifikohu automatikisht</translation>
 <translation id="2100314319871056947">Provo ta ndash tekstin në copëza më të vogla</translation>
 <translation id="2109711654079915747">Mëso për temat në sajtet e uebit pa u larguar nga faqja. "Trokit për të kërkuar" dërgon një fjalë dhe kontekstin e saj rrethues te "Kërko në Google", duke sjellë përkufizime, fotografi, rezultate kërkimi dhe detaje të tjera.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Menaxho</translation>
 <translation id="381841723434055211">Numrat e telefonit</translation>
 <translation id="3819178904835489326">U fshinë <ph name="NUMBER_OF_DOWNLOADS" /> shkarkime</translation>
-<translation id="3849365399446680203">Kur je në AR, ky sajt mund të arrijë:
-• të krijojë një hartë 3D të ambientit tënd
-• të gjurmojë lëvizjen e kamerës
-
-Vetëm ti mund të shohësh se çfarë po shikon kamera. Sajti nuk mund të shikojë imazhet e kamerës sate.</translation>
 <translation id="3859306556332390985">Kërko përpara</translation>
 <translation id="388596076286380598">Merr artikuj, video dhe përmbajtje të tjera nga sajtet që të pëlqejnë, edhe nëse je jashtë linje ose lidhja jote është e dobët.</translation>
 <translation id="3894427358181296146">Shto dosje</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nuk ka lidhje me internetin</translation>
 <translation id="4321739720395210191">Kamera nuk mund të hapet. Rinise pajisjen dhe provo përsëri.</translation>
 <translation id="4351244548802238354">Mbyll dialogun</translation>
-<translation id="4353114845960720315">Kur je në VR, ky sajt mund të arrijë të mësojë për:</translation>
 <translation id="4378154925671717803">Telefoni</translation>
 <translation id="4384468725000734951">Po përdor Sogou për kërkimin</translation>
 <translation id="4404568932422911380">Nuk ka faqeshënues</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Nuk ka lidhje</translation>
 <translation id="4565377596337484307">Fshih fjalëkalimin</translation>
 <translation id="4572422548854449519">Identifikohu në llogarinë e menaxhuar</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# minutë më parë}other{# minuta më parë}}</translation>
 <translation id="4587589328781138893">Sajtet</translation>
 <translation id="4594952190837476234">Kjo faqe jashtë linje është nga <ph name="CREATION_TIME" /> dhe mund të ndryshojë nga versioni në linjë.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Hap <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Përdor fjalëkalimin</translation>
 <translation id="4650364565596261010">Parazgjedhja e sistemit</translation>
-<translation id="4660838440047236328">struktura e dhomës</translation>
 <translation id="4662373422909645029">Pseudonimi nuk mund të përmbajë numra</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> faqeshënuesë u fshinë</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> u shtua në ekranin bazë</translation>
@@ -459,7 +449,6 @@
 
 Për të ndryshuar këtë cilësim, <ph name="BEGIN_LINK" />rivendos sinkronizimin<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Emri në kartë</translation>
-<translation id="4808319664292298116">Do të hysh në VR nga <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Të anulohet sinkronizimi?</translation>
 <translation id="4835385943915508971">Chrome nuk ka qasje te burimi i kërkuar.</translation>
 <translation id="4837753911714442426">Hap opsionet për të printuar faqen</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Dil nga ekrani i plotë</translation>
 <translation id="6404511346730675251">Redakto faqeshënuesin</translation>
 <translation id="6406506848690869874">Sinkronizo</translation>
-<translation id="6410973561433500075">Do të hysh në AR nga <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Printo…</translation>
 <translation id="6427112570124116297">Përkthe uebin</translation>
 <translation id="6433501201775827830">Zgjidh motorin e kërkimit</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index e0f720c2..05d9672 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Dodirnite dugme „Najpopularniji veb-sajtovi“ i vidite te veb-sajtove</translation>
 <translation id="1173894706177603556">Preimenuj</translation>
 <translation id="1178581264944972037">Pauziraj</translation>
-<translation id="1188239144602654184">Uđi u PR</translation>
 <translation id="1197267115302279827">Premesti obeleživače</translation>
 <translation id="1201402288615127009">Dalje</translation>
 <translation id="1204037785786432551">Preuzmi link</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">tekst</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />. od <ph name="TOTAL_RESULTS" /> rezultata</translation>
 <translation id="2096012225669085171">Sinhronizacija i personalizacija na svim uređajima</translation>
-<translation id="2099625543891475722">vašim fizičkim osobinama, poput visine</translation>
 <translation id="2100273922101894616">Automatsko prijavljivanje</translation>
 <translation id="2100314319871056947">Probajte da delite tekst u manjim delovima</translation>
 <translation id="2109711654079915747">Saznajte više o temama na veb-sajtovima bez napuštanja stranice. „Dodirnite za pretragu“ šalje reč i njen kontekst u Google pretragu i prikazuje definicije, slike, rezultate pretrage i druge detalje.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Promeni</translation>
 <translation id="381841723434055211">Brojevi telefona</translation>
 <translation id="3819178904835489326">Izbrisana preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Dok ste u režimu proširene realnosti, ovaj sajt će možda moći:
-• da pravi 3D mapu vašeg okruženja
-• da prati pomeranje kamere
-
-Samo vi možete da vidite prikaz kamere. Sajt ne može da vidi slike kamere.</translation>
 <translation id="3859306556332390985">Premotaj unapred</translation>
 <translation id="388596076286380598">Dobijajte članke, video snimke i drugi sadržaj sa sajtova koji vam se sviđaju, čak i kada ste oflajn ili je veza slaba.</translation>
 <translation id="3894427358181296146">Dodajte direktorijum</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Nema internet veze</translation>
 <translation id="4321739720395210191">Ne možemo da otvorimo kameru. Restartujte uređaj i probajte ponovo.</translation>
 <translation id="4351244548802238354">Zatvori dijalog</translation>
-<translation id="4353114845960720315">Dok ste u VR režimu, ovaj sajt će možda moći da sazna nešto o vama:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Koristite Sogou za pretragu</translation>
 <translation id="4404568932422911380">Nema obeleživača</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Veza nije uspostavljena</translation>
 <translation id="4565377596337484307">Sakrij lozinku</translation>
 <translation id="4572422548854449519">Prijavite se na nalog kojim se upravlja</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Pre # minuta}one{Pre # minuta}few{Pre # minuta}other{Pre # minuta}}</translation>
 <translation id="4587589328781138893">Sajtovi</translation>
 <translation id="4594952190837476234">Ova oflajn stranica je od <ph name="CREATION_TIME" /> i može da se razlikuje od onlajn verzije.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Koristi lozinku</translation>
 <translation id="4650364565596261010">Podrazumevana sistemska</translation>
-<translation id="4660838440047236328">izgledu vaše sobe</translation>
 <translation id="4662373422909645029">Nadimak ne sme da sadrži brojeve</translation>
 <translation id="4663756553811254707">Izbrisali ste <ph name="NUMBER_OF_BOOKMARKS" /> obeleživača</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> je dodat na početni ekran</translation>
@@ -459,7 +449,6 @@
 
 Da biste promenili ovo podešavanje, <ph name="BEGIN_LINK" />resetujte sinhronizaciju<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Ime i prezime na kartici</translation>
-<translation id="4808319664292298116">Želite da aktivirate VR sa <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Želite li da otkažete sinhronizaciju?</translation>
 <translation id="4835385943915508971">Chrome nema pristup zahtevanom resursu.</translation>
 <translation id="4837753911714442426">Otvaranje opcija za štampanje stranice</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Izađi iz režima celog ekrana</translation>
 <translation id="6404511346730675251">Izmena obeleživača</translation>
 <translation id="6406506848690869874">Sinhronizacija</translation>
-<translation id="6410973561433500075">Želite da aktivirate proširenu realnost sa <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Štampaj...</translation>
 <translation id="6427112570124116297">Prevodite stranice sa veba</translation>
 <translation id="6433501201775827830">Izaberite pretraživač</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index 1faa672..3ff89c0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Додирните дугме „Најпопуларнији веб-сајтови“ и видите те веб-сајтове</translation>
 <translation id="1173894706177603556">Преименуј</translation>
 <translation id="1178581264944972037">Паузирај</translation>
-<translation id="1188239144602654184">Уђи у ПР</translation>
 <translation id="1197267115302279827">Премести обележиваче</translation>
 <translation id="1201402288615127009">Даље</translation>
 <translation id="1204037785786432551">Преузми линк</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">текст</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />. од <ph name="TOTAL_RESULTS" /> резултата</translation>
 <translation id="2096012225669085171">Синхронизација и персонализација на свим уређајима</translation>
-<translation id="2099625543891475722">вашим физичким особинама, попут висине</translation>
 <translation id="2100273922101894616">Аутоматско пријављивање</translation>
 <translation id="2100314319871056947">Пробајте да делите текст у мањим деловима</translation>
 <translation id="2109711654079915747">Сазнајте више о темама на веб-сајтовима без напуштања странице. „Додирните за претрагу“ шаље реч и њен контекст у Google претрагу и приказује дефиниције, слике, резултате претраге и друге детаље.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Промени</translation>
 <translation id="381841723434055211">Бројеви телефона</translation>
 <translation id="3819178904835489326">Избрисана преузимања: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Док сте у режиму проширене реалности, овај сајт ће можда моћи:
-• да прави 3D мапу вашег окружења
-• да прати померање камере
-
-Само ви можете да видите приказ камере. Сајт не може да види слике камере.</translation>
 <translation id="3859306556332390985">Премотај унапред</translation>
 <translation id="388596076286380598">Добијајте чланке, видео снимке и други садржај са сајтова који вам се свиђају, чак и када сте офлајн или је веза слаба.</translation>
 <translation id="3894427358181296146">Додајте директоријум</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Нема интернет везе</translation>
 <translation id="4321739720395210191">Не можемо да отворимо камеру. Рестартујте уређај и пробајте поново.</translation>
 <translation id="4351244548802238354">Затвори дијалог</translation>
-<translation id="4353114845960720315">Док сте у ВР режиму, овај сајт ће можда моћи да сазна нешто о вама:</translation>
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Користите Sogou за претрагу</translation>
 <translation id="4404568932422911380">Нема обележивача</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Веза није успостављена</translation>
 <translation id="4565377596337484307">Сакриј лозинку</translation>
 <translation id="4572422548854449519">Пријавите се на налог којим се управља</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Пре # минута}one{Пре # минута}few{Пре # минута}other{Пре # минута}}</translation>
 <translation id="4587589328781138893">Сајтови</translation>
 <translation id="4594952190837476234">Ова офлајн страница је од <ph name="CREATION_TIME" /> и може да се разликује од онлајн верзије.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Отвори <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Користи лозинку</translation>
 <translation id="4650364565596261010">Подразумевана системска</translation>
-<translation id="4660838440047236328">изгледу ваше собе</translation>
 <translation id="4662373422909645029">Надимак не сме да садржи бројеве</translation>
 <translation id="4663756553811254707">Избрисали сте <ph name="NUMBER_OF_BOOKMARKS" /> обележивача</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> је додат на почетни екран</translation>
@@ -459,7 +449,6 @@
 
 Да бисте променили ово подешавање, <ph name="BEGIN_LINK" />ресетујте синхронизацију<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Име и презиме на картици</translation>
-<translation id="4808319664292298116">Желите да активирате ВР са <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Желите ли да откажете синхронизацију?</translation>
 <translation id="4835385943915508971">Chrome нема приступ захтеваном ресурсу.</translation>
 <translation id="4837753911714442426">Отварање опција за штампање странице</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Изађи из режима целог екрана</translation>
 <translation id="6404511346730675251">Измена обележивача</translation>
 <translation id="6406506848690869874">Синхронизација</translation>
-<translation id="6410973561433500075">Желите да активирате проширену реалност са <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Штампај...</translation>
 <translation id="6427112570124116297">Преводите странице са веба</translation>
 <translation id="6433501201775827830">Изаберите претраживач</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index 6ea2ef0..2020ffa 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Visa populära webbplatser genom att trycka på Populärt</translation>
 <translation id="1173894706177603556">Ändra namn</translation>
 <translation id="1178581264944972037">Paus</translation>
-<translation id="1188239144602654184">Starta AR</translation>
 <translation id="1197267115302279827">Flytta bokmärken</translation>
 <translation id="1201402288615127009">Nästa</translation>
 <translation id="1204037785786432551">Ladda ned länk</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">text</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> av <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Synkronisera och anpassa på alla enheter</translation>
-<translation id="2099625543891475722">dina fysiska egenskaper, t.ex. hur lång du är</translation>
 <translation id="2100273922101894616">Automatisk inloggning</translation>
 <translation id="2100314319871056947">Testa att dela upp texten i mindre bitar</translation>
 <translation id="2109711654079915747">Läs om olika ämnen på webbplatser utan att lämna sidan. Med funktionen Tryck för att söka skickas ett ord och dess kontext till Google Sök. Sedan visas definitioner, bilder, sökresultat och annan information.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Hantera</translation>
 <translation id="381841723434055211">Telefonnummer</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedladdningar har raderats</translation>
-<translation id="3849365399446680203">Webbplatsen kan göra följande när AR är aktiverat:
-• skapa en karta över omgivningen i 3D
-• spåra kamerans rörelser
-
-Det är endast du som kan se det kameran avbildar. Bilderna från kameran visas inte för webbplatsen.</translation>
 <translation id="3859306556332390985">Sök framåt</translation>
 <translation id="388596076286380598">Kom åt artiklar, videor och annat innehåll från webbplatser som du gillar, även när du är offline eller har dålig anslutning.</translation>
 <translation id="3894427358181296146">Lägg till mapp</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Ingen internetanslutning</translation>
 <translation id="4321739720395210191">Det gick inte att öppna kameran. Starta om enheten och försök igen.</translation>
 <translation id="4351244548802238354">Stäng dialogrutan</translation>
-<translation id="4353114845960720315">Medan du använder VR-läget kan den här webbplatsen ta reda på följande om dig:</translation>
 <translation id="4378154925671717803">Mobil</translation>
 <translation id="4384468725000734951">Du söker med Sogou</translation>
 <translation id="4404568932422911380">Inga bokmärken</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Ingen anslutning</translation>
 <translation id="4565377596337484307">Dölj lösenord</translation>
 <translation id="4572422548854449519">Logga in på hanterat konto</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{för # minut sedan}other{för # minuter sedan}}</translation>
 <translation id="4587589328781138893">Webbplatser</translation>
 <translation id="4594952190837476234">Den här offlinesidan sparades <ph name="CREATION_TIME" /> och kan skilja sig från onlineversionen.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Öppna <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Använd lösenordet</translation>
 <translation id="4650364565596261010">Systemets standardinställning</translation>
-<translation id="4660838440047236328">hur ditt rum ser ut</translation>
 <translation id="4662373422909645029">Namnet får inte innehålla siffror</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bokmärken har raderats</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> har lagts till på startskärmen.</translation>
@@ -459,7 +449,6 @@
 
 <ph name="BEGIN_LINK" />Återställ synkroniseringen<ph name="END_LINK" /> om du vill ändra den här inställningen.</translation>
 <translation id="4807098396393229769">Namn på kort</translation>
-<translation id="4808319664292298116">Vill du låta <ph name="DOMAIN" /> aktivera VR-läget?</translation>
 <translation id="4824958205181053313">Vill du avbryta synkroniseringen?</translation>
 <translation id="4835385943915508971">Chrome har inte tillgång till den begärda resursen.</translation>
 <translation id="4837753911714442426">Öppna utskriftsalternativ</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Avsluta helskärmsläge</translation>
 <translation id="6404511346730675251">Redigera bokmärke</translation>
 <translation id="6406506848690869874">Synkronisera</translation>
-<translation id="6410973561433500075">Vill du starta AR från <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Skriv ut …</translation>
 <translation id="6427112570124116297">Översätt webbsidor</translation>
 <translation id="6433501201775827830">Välj sökmotor</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
index f1eab5b..21d4df7a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Ona tovuti maarufu kwa kugusa kitufe cha "Tovuti maarufu"</translation>
 <translation id="1173894706177603556">Ipe jina jipya</translation>
 <translation id="1178581264944972037">Sitisha</translation>
-<translation id="1188239144602654184">Weka Uhalisia Ulioboreshwa</translation>
 <translation id="1197267115302279827">Sogeza alamisho</translation>
 <translation id="1201402288615127009">Endelea</translation>
 <translation id="1204037785786432551">Kiungo cha kupakua</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">maandishi</translation>
 <translation id="2082238445998314030">Tokeo <ph name="RESULT_NUMBER" /> kati ya <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Sawazisha na uweke mapendeleo kwenye vifaa vyote</translation>
-<translation id="2099625543891475722">sifa zako za kimwili, kama vile urefu</translation>
 <translation id="2100273922101894616">Ingia katika Akaunti Kiotomatiki</translation>
 <translation id="2100314319871056947">Jaribu kushiriki maandishi katika sehemu ndogo ndogo</translation>
 <translation id="2109711654079915747">Pata maelezo kuhusu mada zilizo kwenye tovuti bila kufunga ukurasa ulipo. Kipengele cha 'Gusa ili Utafute' hutuma neno na muktadha wake kwenye huduma ya Tafuta na Google kisha huonyesha ufafanuzi, picha, matokeo ya utafutaji na maelezo mengine.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Dhibiti</translation>
 <translation id="381841723434055211">Nambari za simu</translation>
 <translation id="3819178904835489326">Vipakuliwa <ph name="NUMBER_OF_DOWNLOADS" /> vimefutwa</translation>
-<translation id="3849365399446680203">Ukiwa katika hali ya Uhalisia Ulioboreshwa, tovuti hii inaweza:
-• kuunda ramani ya 3D ya mazingira yako
-• kufuatilia mwendo wa kamera
-
-Ni wewe pekee unaweza kuona kile ambacho kamera yako inaona. Tovuti hii haiwezi kuona picha za kamera yako.</translation>
 <translation id="3859306556332390985">Peleka mbele</translation>
 <translation id="388596076286380598">Pata makala, video na maudhui mengine kutoka tovuti unazopenda, hata ikiwa uko nje ya mtandao au muunganisho wako ni dhaifu.</translation>
 <translation id="3894427358181296146">Ongeza folda</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Hakuna muunganisho wa intaneti</translation>
 <translation id="4321739720395210191">Imeshindwa kufungua kamera yako. Zima kisha uwashe kifaa chako halafu ujaribu tena.</translation>
 <translation id="4351244548802238354">Funga kidirisha</translation>
-<translation id="4353114845960720315">Wakati uko katika hali ya VR, tovuti hii inaweza kujifunza kuhusu:</translation>
 <translation id="4378154925671717803">Simu</translation>
 <translation id="4384468725000734951">Unatumia Sogou kutafuta</translation>
 <translation id="4404568932422911380">Hakuna alamisho</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Hakuna muunganisho</translation>
 <translation id="4565377596337484307">Ficha nenosiri</translation>
 <translation id="4572422548854449519">Ingia katika akaunti zinazodhibitiwa</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{Dakika # iliyopita}other{Dakika # zilizopita}}</translation>
 <translation id="4587589328781138893">Tovuti</translation>
 <translation id="4594952190837476234">Ukurasa huu wa nje ya mtandao umetoka <ph name="CREATION_TIME" /> na huenda ukatofautiana na toleo lililo mtandaoni.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Fungua <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Tumia nenosiri</translation>
 <translation id="4650364565596261010">Mipangilio chaguomsingi ya mfumo</translation>
-<translation id="4660838440047236328">muundo wa chumba chako</translation>
 <translation id="4662373422909645029">Jina la kuwakilisha halipaswi kuwa na nambari</translation>
 <translation id="4663756553811254707">Alamisho <ph name="NUMBER_OF_BOOKMARKS" /> zimefutwa</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> iliongezwa kwenye Skrini yako ya kwanza</translation>
@@ -459,7 +449,6 @@
 
 Ili ubadilishe mipangilio hii, <ph name="BEGIN_LINK" />fanya usawazishaji upya<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Jina kwenye kadi</translation>
-<translation id="4808319664292298116">Ungependa kuingia hali ya VR ukitumia <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Ungependa kughairi usawazishaji?</translation>
 <translation id="4835385943915508971">Chrome haina idhini ya kufikia rasilimali uliyoomba.</translation>
 <translation id="4837753911714442426">Fungua chaguo za kuchapisha ukurasa</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Ondoka kwenye Skrini nzima</translation>
 <translation id="6404511346730675251">Badilisha alamisho</translation>
 <translation id="6406506848690869874">Sawazisha</translation>
-<translation id="6410973561433500075">Ungependa kuingia Uhalisia Ulioboreshwa ukitumia <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Chapisha...</translation>
 <translation id="6427112570124116297">Tafsiri Wavuti</translation>
 <translation id="6433501201775827830">Chagua mtambo wako wa kutafuta</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
index 9781c2a9..63eafd0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"பிரபலமானவை" பட்டனைத் தட்டி பிரபல இணையதளங்களைப் பாருங்கள்</translation>
 <translation id="1173894706177603556">மறுபெயரிடு</translation>
 <translation id="1178581264944972037">இடைநிறுத்து</translation>
-<translation id="1188239144602654184">ARரில் நுழைக</translation>
 <translation id="1197267115302279827">புத்தகக்குறிகளை நகர்த்து</translation>
 <translation id="1201402288615127009">அடுத்து</translation>
 <translation id="1204037785786432551">இணைப்பைப் பதிவிறக்கு</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">உரை</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> முடிவுகளில் <ph name="RESULT_NUMBER" />வது முடிவு</translation>
 <translation id="2096012225669085171">பல சாதனங்களுக்கிடையில் ஒத்திசைக்கலாம், தனிப்பயனாக்கலாம்</translation>
-<translation id="2099625543891475722">உங்களின் உயரம் போன்ற உடல் அமைப்பு விவரங்கள்</translation>
 <translation id="2100273922101894616">தானாக உள்நுழையவும்</translation>
 <translation id="2100314319871056947">சிறுசிறு பகுதியாக உரையைப் பகிர முயலவும்</translation>
 <translation id="2109711654079915747">பக்கத்தை விட்டு வெளியேறாமலேயே இணையதளங்களில் தலைப்புகளைப் பற்றித் தெரிந்துகொள்ளலாம். 'தேடுவதற்குத் தொடு' அம்சமானது சொல்லையும் அதன் சூழலையும் Google தேடலுக்கு அனுப்பி விளக்கங்கள், படங்கள், தேடல் முடிவுகள் மற்றும் பிற விவரங்களை வழங்குகிறது.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">நிர்வகி</translation>
 <translation id="381841723434055211">ஃபோன் எண்கள்</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> பதிவிறக்கங்கள் உள்ளன</translation>
-<translation id="3849365399446680203">நீங்கள் ARரில் இருக்கும்போது இந்தத் தளத்தால் செய்யமுடியக்கூடும்:
-• உங்களைச் சுற்றியுள்ள இடத்தின் 3D மேப்பை உருவாக்குதல்
-• கேமரா நகர்வைக் கண்காணித்தல்
-
-உங்கள் கேமரா எங்கு ஃபோகஸ் செய்கிறது என்பதை உங்களால் மட்டுமே பார்க்க முடியும். உங்கள் கேமராவின் படங்களைத் தளத்தால் பார்க்க முடியாது.</translation>
 <translation id="3859306556332390985">முன்செல்</translation>
 <translation id="388596076286380598">ஆஃப்லைனிலும், வேகம் குறைந்த இணைப்பிலும் கூட உங்களுக்கு விருப்பமான தளங்களில் இருந்து கட்டுரைகள், வீடியோக்கள் மற்றும் பிற உள்ளடக்கங்களைப் பெற்றிடுங்கள்.</translation>
 <translation id="3894427358181296146">கோப்புறையைச் சேர்</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">இணைய இணைப்பு இல்லை</translation>
 <translation id="4321739720395210191">கேமராவைத் திறக்க முடியவில்லை. சாதனத்தை மீண்டும் தொடங்கி மறுபடியும் முயலவும்.</translation>
 <translation id="4351244548802238354">அறிவிப்பை மூடு</translation>
-<translation id="4353114845960720315">VRரில் இருக்கும்போது இந்தத் தளம் இவற்றைப் பற்றி அறியக்கூடும்:</translation>
 <translation id="4378154925671717803">மொபைல்</translation>
 <translation id="4384468725000734951">தேடலுக்கு Sogouஐப் பயன்படுத்துகிறீர்கள்</translation>
 <translation id="4404568932422911380">புக்மார்க்குகள் இல்லை</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">இணைப்பு இல்லை</translation>
 <translation id="4565377596337484307">கடவுச்சொல்லை மறைக்கும்</translation>
 <translation id="4572422548854449519">நிர்வகிக்கப்படும் கணக்கில் உள்நுழையவும்</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# நிமிடத்திற்கு முன்பு}other{# நிமிடங்களுக்கு முன்பு}}</translation>
 <translation id="4587589328781138893">தளங்கள்</translation>
 <translation id="4594952190837476234"><ph name="CREATION_TIME" /> அன்று இந்த ஆஃப்லைன் பக்கம் உருவாக்கப்பட்டது. இது ஆன்லைன் பதிப்பிலிருந்து வேறுபடலாம்.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ஐத் திற</translation>
 <translation id="4634124774493850572">கடவுச்சொல்லைப் பயன்படுத்து</translation>
 <translation id="4650364565596261010">சிஸ்டத்தின் இயல்புநிலை</translation>
-<translation id="4660838440047236328">உங்கள் அறையின் வடிவமைப்பு</translation>
 <translation id="4662373422909645029">புனைப்பெயரில் எண்கள் இருக்கக்கூடாது</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> புக்மார்க்குகள் நீக்கப்பட்டன</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> உங்கள் முகப்புத் திரையில் சேர்க்கப்பட்டது</translation>
@@ -459,7 +449,6 @@
 
 இந்த அமைப்பை மாற்ற, <ph name="BEGIN_LINK" />ஒத்திசைவை மீட்டமைக்கவும்<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">அட்டையிலுள்ள பெயர் </translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> வழங்கும் VRரைப் பார்க்க விரும்புகிறீர்களா?</translation>
 <translation id="4824958205181053313">ஒத்திசைவை ரத்துசெய்யவா?</translation>
 <translation id="4835385943915508971">Chromeமிடம் நீங்கள் கோரியதற்கான அணுகல் இல்லை.</translation>
 <translation id="4837753911714442426">பக்கத்தை அச்சிடுவதற்கான விருப்பங்களைத் திறக்கும்</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">முழுத்திரையிலிருந்து வெளியேறு</translation>
 <translation id="6404511346730675251">புக்மார்க்களைத் திருத்து</translation>
 <translation id="6406506848690869874">Sync</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> இல் இருந்து ARரில் நுழையவா?</translation>
 <translation id="641643625718530986">அச்சிடு...</translation>
 <translation id="6427112570124116297">இணையத்தை மொழிபெயர்த்தல்</translation>
 <translation id="6433501201775827830">தேடல் இன்ஜினைத் தேர்வுசெய்யவும்</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index c040cad5..29e26f2a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"టాప్ సైట్‌లు" బటన్‌పై నొక్కడం ద్వారా ప్రసిద్ధ వెబ్‌సైట్‌లను చూడండి</translation>
 <translation id="1173894706177603556">పేరుమార్చు</translation>
 <translation id="1178581264944972037">పాజ్ చేయి</translation>
-<translation id="1188239144602654184">ARలోకి ప్రవేశించు</translation>
 <translation id="1197267115302279827">బుక్‌మార్క్‌లను తరలించు</translation>
 <translation id="1201402288615127009">తరువాత</translation>
 <translation id="1204037785786432551">లింక్‌ను డౌన్‌లోడ్ చేయి</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">వచనం</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" />లో <ph name="RESULT_NUMBER" />వ ఫలితం</translation>
 <translation id="2096012225669085171">అన్ని పరికరాలలో సింక్ చేయండి మరియు వ్యక్తిగతీకరించండి</translation>
-<translation id="2099625543891475722">మీ ఎత్తు వంటి భౌతిక లక్షణాలు</translation>
 <translation id="2100273922101894616">స్వీయ సైన్-ఇన్</translation>
 <translation id="2100314319871056947">వచనాన్ని చిన్న భాగాలుగా చేసి షేర్ చేయడానికి ప్రయత్నించండి</translation>
 <translation id="2109711654079915747">పేజీ వదిలిపెట్టకుండానే వెబ్‌సైట్‌లలోని అంశాల గురించి తెలుసుకోండి. 'వెతకడానికి తాకండి' అనే ఫీచర్ ద్వారా, ఏదైనా ఒక పదాన్ని, దానికి సంబంధించిన సందర్భాన్ని Google శోధనకు పంపవచ్చు. దీని వల్ల, ఆ పదానికి సంబంధించిన నిర్వచనాలు, ఫోటోలు, శోధన ఫలితాలు, ఇతర వివరాలు పొందవచ్చు.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">నిర్వహించు</translation>
 <translation id="381841723434055211">ఫోన్ నంబర్‌లు</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> డౌన్‌లోడ్‌లు తొలగించబడ్డాయి</translation>
-<translation id="3849365399446680203">మీరు AR మోడ్‌లో ఉన్నప్పుడు, ఈ సైట్ వీటిని చేయగలదు:
-• మీ పరిసరాలకు సంబంధించిన 3D మ్యాప్‌ను సృష్టించడం
-• కెమెరా చలనాన్ని ట్రాక్ చేయడం
-
-మీ కెమెరాలో కనిపించే దృశ్యాన్ని మీరు మాత్రమే చూడగలరు. మీ కెమెరా ఇమేజ్‌లను సైట్ చూడలేదు.</translation>
 <translation id="3859306556332390985">ముందుకు జరుపు</translation>
 <translation id="388596076286380598">మీరు ఆఫ్‌లైన్‌లో ఉన్నప్పటికీ, మీ కనెక్షన్ బలహీనంగా ఉన్నప్పటికీ మీరు ఇష్టపడే సైట్‌ల నుండి కథనాలు, వీడియోలు, ఇతర కంటెంట్‌ను పొందండి.</translation>
 <translation id="3894427358181296146">ఫోల్డర్‌ను జోడించండి</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ఇంటర్నెట్ కనెక్షన్ లేదు</translation>
 <translation id="4321739720395210191">మీ కెమెరాను తెరవడం సాధ్యపడలేదు. మీ పరికరాన్ని పునఃప్రారంభించి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="4351244548802238354">డైలాగ్‌ను మూసివేయి</translation>
-<translation id="4353114845960720315">మీరు VRలో ఉన్నప్పుడు, ఈ సైట్ కింది వాటిని గురించి తెలుసుకునే అవకాశం ఉంది:</translation>
 <translation id="4378154925671717803">ఫోన్</translation>
 <translation id="4384468725000734951">శోధన కోసం Sogouను ఉపయోగిస్తుంది</translation>
 <translation id="4404568932422911380">బుక్‌మార్క్‌లు లేవు</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">కనెక్షన్ లేదు</translation>
 <translation id="4565377596337484307">పాస్‌వర్డ్‌ను దాచిపెట్టు</translation>
 <translation id="4572422548854449519">నిర్వాహిత ఖాతాకు సైన్ ఇన్ చేయండి</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# నిమిషం క్రితం}other{# నిమిషాల క్రితం}}</translation>
 <translation id="4587589328781138893">సైట్‌లు</translation>
 <translation id="4594952190837476234">ఈ ఆఫ్‌లైన్ పేజీ <ph name="CREATION_TIME" />కి చెందినది మరియు ఆన్‌లైన్ వెర్షన్ వేరుగా ఉండవచ్చు.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ని తెరువు</translation>
 <translation id="4634124774493850572">పాస్‌వర్డ్‌ను ఉపయోగించు</translation>
 <translation id="4650364565596261010">సిస్టమ్ డిఫాల్ట్</translation>
-<translation id="4660838440047236328">మీ గది యొక్క లేఅవుట్</translation>
 <translation id="4662373422909645029">మారుపేరులో అంకెలు ఉండరాదు</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> బుక్‌మార్క్‌లు తొలగించబడ్డాయి</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> మీ హోమ్ స్క్రీన్‌కు జోడించబడింది</translation>
@@ -459,7 +449,6 @@
 
 ఈ సెట్టింగ్‌ని మార్చడం కోసం, <ph name="BEGIN_LINK" />సమకాలీకరణను రీసెట్ చేయండి<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">కార్డ్‌పై పేరు</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> నుండి VR మోడ్‌లోకి ప్రవేశించాలా?</translation>
 <translation id="4824958205181053313">సింక్‌ను రద్దు చేయాలా?</translation>
 <translation id="4835385943915508971">Chrome అభ్యర్థించిన వనరుకు యాక్సెస్ కలిగి లేదు.</translation>
 <translation id="4837753911714442426">పేజీని ముద్రించడానికి ఎంపికలను తెరవండి</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">పూర్తి స్క్రీన్ నుండి నిష్క్రమించు</translation>
 <translation id="6404511346730675251">బుక్‌మార్క్‌ను సవరించు</translation>
 <translation id="6406506848690869874">Sync</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> నుండి AR మోడ్‌లోకి ప్రవేశించాలా?</translation>
 <translation id="641643625718530986">ముద్రించు…</translation>
 <translation id="6427112570124116297">వెబ్‌ను అనువదించండి</translation>
 <translation id="6433501201775827830">మీ శోధన ఇంజిన్‌ను ఎంచుకోండి</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
index bf3594a1..ddcdb07 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">ดูเว็บไซต์ยอดนิยมโดยการแตะปุ่ม "เว็บไซต์อันดับสูงสุด"</translation>
 <translation id="1173894706177603556">เปลี่ยนชื่อ</translation>
 <translation id="1178581264944972037">หยุดชั่วคราว</translation>
-<translation id="1188239144602654184">เริ่ม AR</translation>
 <translation id="1197267115302279827">ย้ายบุ๊กมาร์ก</translation>
 <translation id="1201402288615127009">ถัดไป</translation>
 <translation id="1204037785786432551">ดาวน์โหลดลิงก์</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">ข้อความ</translation>
 <translation id="2082238445998314030">ผลลัพธ์ <ph name="RESULT_NUMBER" /> จาก <ph name="TOTAL_RESULTS" /> รายการ</translation>
 <translation id="2096012225669085171">ซิงค์และปรับแต่งในอุปกรณ์ทุกเครื่อง</translation>
-<translation id="2099625543891475722">ลักษณะทางกายภาพของคุณ เช่น ส่วนสูง</translation>
 <translation id="2100273922101894616">ลงชื่อเข้าใช้อัตโนมัติ</translation>
 <translation id="2100314319871056947">ลองแชร์ข้อความโดยแบ่งเป็นส่วนเล็กๆ หลายส่วน</translation>
 <translation id="2109711654079915747">ดูข้อมูลเกี่ยวกับหัวข้อในเว็บไซต์โดยไม่ต้องออกจากหน้า การแตะเพื่อค้นหาจะส่งคำและบริบทที่อยู่ข้างเคียงไปยัง Google Search เพื่อแสดงคำจำกัดความ รูปภาพ ผลการค้นหา และรายละเอียดอื่นๆ
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">จัดการ</translation>
 <translation id="381841723434055211">หมายเลขโทรศัพท์</translation>
 <translation id="3819178904835489326">ลบการดาวน์โหลด <ph name="NUMBER_OF_DOWNLOADS" /> รายการแล้ว</translation>
-<translation id="3849365399446680203">ขณะอยู่ในโหมด AR เว็บไซต์นี้อาจทำสิ่งต่างๆ ต่อไปนี้ได้:
-• สร้างแผนที่ 3 มิติของสภาพแวดล้อม
-• ติดตามการเคลื่อนไหวของกล้อง
-
-เฉพาะคุณเท่านั้นที่เห็นภาพที่กล้องกำลังมองอยู่ เว็บไซต์นี้จะมองไม่เห็นภาพจากกล้องของคุณ</translation>
 <translation id="3859306556332390985">ไปข้างหน้า</translation>
 <translation id="388596076286380598">ดูบทความ วิดีโอและเนื้อหาอื่นๆ จากเว็บไซต์ที่คุณชื่นชอบ แม้ว่าคุณกำลังออฟไลน์หรือมีการเชื่อมต่อสัญญาณที่ไม่ดี</translation>
 <translation id="3894427358181296146">เพิ่มโฟลเดอร์</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="4321739720395210191">เปิดกล้องไม่ได้ รีสตาร์ทอุปกรณ์และลองอีกครั้ง</translation>
 <translation id="4351244548802238354">ปิดหน้าต่างโต้ตอบ</translation>
-<translation id="4353114845960720315">ขณะอยู่ในโหมด VR เว็บไซต์นี้อาจรู้เกี่ยวกับ</translation>
 <translation id="4378154925671717803">โทรศัพท์</translation>
 <translation id="4384468725000734951">กำลังใช้ Sogou ในการค้นหา</translation>
 <translation id="4404568932422911380">ไม่มีบุ๊กมาร์ก</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">ไม่มีการเชื่อมต่อ</translation>
 <translation id="4565377596337484307">ซ่อนรหัสผ่าน</translation>
 <translation id="4572422548854449519">ลงชื่อเข้าใช้บัญชีที่มีการจัดการ</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# นาทีที่ผ่านมา}other{# นาทีที่ผ่านมา}}</translation>
 <translation id="4587589328781138893">เว็บไซต์</translation>
 <translation id="4594952190837476234">หน้าเว็บออฟไลน์นี้สร้างเมื่อวันที่ <ph name="CREATION_TIME" /> และอาจแตกต่างไปจากเวอร์ชันออนไลน์</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">เปิด <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ใช้รหัสผ่าน</translation>
 <translation id="4650364565596261010">ค่าเริ่มต้นของระบบ</translation>
-<translation id="4660838440047236328">เลย์เอาต์ของห้อง</translation>
 <translation id="4662373422909645029">ชื่อเล่นต้องไม่มีตัวเลข</translation>
 <translation id="4663756553811254707">ลบบุ๊กมาร์ก <ph name="NUMBER_OF_BOOKMARKS" /> รายการแล้ว</translation>
 <translation id="4665282149850138822">เพิ่ม <ph name="NAME" /> ลงในหน้าแรกแล้ว</translation>
@@ -459,7 +449,6 @@
 
 หากต้องการเปลี่ยนแปลงการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">ชื่อบนบัตร</translation>
-<translation id="4808319664292298116">เข้าสู่โหมด VR จาก <ph name="DOMAIN" /> ใช่ไหม</translation>
 <translation id="4824958205181053313">ยกเลิกการซิงค์ใช่ไหม</translation>
 <translation id="4835385943915508971">Chrome ไม่มีสิทธิ์เข้าถึงทรัพยากรที่ขอ</translation>
 <translation id="4837753911714442426">เปิดตัวเลือกในการพิมพ์หน้า</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">ออกจากการแสดงแบบเต็มหน้าจอ</translation>
 <translation id="6404511346730675251">แก้ไขบุ๊กมาร์ก</translation>
 <translation id="6406506848690869874">การซิงค์ข้อมูล</translation>
-<translation id="6410973561433500075">เข้าสู่โหมด AR จาก <ph name="DOMAIN" /> ใช่ไหม</translation>
 <translation id="641643625718530986">พิมพ์…</translation>
 <translation id="6427112570124116297">แปลเว็บ</translation>
 <translation id="6433501201775827830">เลือกเครื่องมือค้นหา</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
index 232ffc7d..60743fb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"Popüler siteler" düğmesine dokunarak popüler web sitelerini görün</translation>
 <translation id="1173894706177603556">Yeniden adlandır</translation>
 <translation id="1178581264944972037">Duraklat</translation>
-<translation id="1188239144602654184">AR'ye gir</translation>
 <translation id="1197267115302279827">Yer işaretlerini taşı</translation>
 <translation id="1201402288615127009">İleri</translation>
 <translation id="1204037785786432551">Bağlantıyı indir</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">Kısa mesaj</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> sonuçtan <ph name="RESULT_NUMBER" /> numaralı sonuç</translation>
 <translation id="2096012225669085171">Cihazlar arasında senkronizasyon ve kişiselleştirme</translation>
-<translation id="2099625543891475722">boyunuz gibi fiziksel özellikleriniz</translation>
 <translation id="2100273922101894616">Otomatik Oturum Aç</translation>
 <translation id="2100314319871056947">Metni daha küçük parçalar halinde paylaşmayı deneyin</translation>
 <translation id="2109711654079915747">Sayfadan ayrılmadan web sitelerindeki konular hakkında bilgi edinin. Dokun ve Ara özelliği, seçilen kelimeyi, çevresindeki içerikle birlikte Google Arama'ya gönderip karşılığında ilgili tanımlar, resimler, arama sonuçları ve diğer ayrıntıları döndürür.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Yönet</translation>
 <translation id="381841723434055211">Telefon numaraları</translation>
 <translation id="3819178904835489326">İndirilen <ph name="NUMBER_OF_DOWNLOADS" /> dosya silindi</translation>
-<translation id="3849365399446680203">Bu site, siz artırılmış gerçeklik (AR) kullanırken şunları yapabilir:
-• çevrenizin 3D haritasını oluşturabilir
-• kamera hareketini takip edebilir
-
-Kameranızın neye baktığını yalnızca siz görebilirsiniz. Site, kameranızın çektiği resimleri göremez.</translation>
 <translation id="3859306556332390985">İleriye doğru git</translation>
 <translation id="388596076286380598">Çevrimdışıyken veya bağlantınız kötü olduğunda bile beğendiğiniz sitelerdeki makalelere, videolara ve diğer içeriklere ulaşabilirsiniz.</translation>
 <translation id="3894427358181296146">Klasör ekleyin</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">İnternet bağlantısı yok</translation>
 <translation id="4321739720395210191">Kameranız açılamıyor. Cihazınızı yeniden başlatıp işlemi tekrar deneyin.</translation>
 <translation id="4351244548802238354">İletişim kutusunu kapat</translation>
-<translation id="4353114845960720315">Bu site, siz VR'deyken aşağıdakileri öğrenebilir:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Arama için Sogou kullanılıyor</translation>
 <translation id="4404568932422911380">Yer işareti yok</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Bağlantı yok</translation>
 <translation id="4565377596337484307">Şifreyi gizle</translation>
 <translation id="4572422548854449519">Yönetilen hesapta oturum açın</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# dakika önce}other{# dakika önce}}</translation>
 <translation id="4587589328781138893">Siteler</translation>
 <translation id="4594952190837476234">Bu çevrimdışı sayfa <ph name="CREATION_TIME" /> tarihli olup web'deki sürümden farklı olabilir.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> APK'sını aç</translation>
 <translation id="4634124774493850572">Şifre kullan</translation>
 <translation id="4650364565596261010">Sistem varsayılanı</translation>
-<translation id="4660838440047236328">odanızın düzeni</translation>
 <translation id="4662373422909645029">Takma ad sayı içeremez</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> yer işareti silindi</translation>
 <translation id="4665282149850138822"><ph name="NAME" />, Ana ekranınıza eklendi</translation>
@@ -459,7 +449,6 @@
 
 Bu ayarı değiştirmek için <ph name="BEGIN_LINK" />senkronizasyonu sıfırlayın<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Kartın üzerindeki ad</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> adresinden VR'ye girilsin mi?</translation>
 <translation id="4824958205181053313">Senkronizasyon iptal edilsin mi?</translation>
 <translation id="4835385943915508971">Chrome, istenen kaynağa erişemiyor.</translation>
 <translation id="4837753911714442426">Sayfayı yazdırma seçeneklerini açar</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Tam ekrandan çık</translation>
 <translation id="6404511346730675251">Yer işaretini düzenle</translation>
 <translation id="6406506848690869874">Senkronizasyon</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> üzerinden artırılmış gerçekliğe (AR) girilsin mi?</translation>
 <translation id="641643625718530986">Yazdır…</translation>
 <translation id="6427112570124116297">Web'i çevir</translation>
 <translation id="6433501201775827830">Arama motorunuzu seçin</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
index 23d7f81..8e1c8e7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Натисніть кнопку "Популярні сайти", щоб переглянути їх.</translation>
 <translation id="1173894706177603556">Перейменувати</translation>
 <translation id="1178581264944972037">Пауза</translation>
-<translation id="1188239144602654184">Почати сеанс у режимі доповненої реальності</translation>
 <translation id="1197267115302279827">Перемістити закладки</translation>
 <translation id="1201402288615127009">Далі</translation>
 <translation id="1204037785786432551">Завантажити дані за посиланням</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">SMS</translation>
 <translation id="2082238445998314030">Результат <ph name="RESULT_NUMBER" /> з <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Синхронізація та персоналізація на всіх пристроях</translation>
-<translation id="2099625543891475722">ваші фізичні характеристики, такі як зріст;</translation>
 <translation id="2100273922101894616">Автоматичний вхід</translation>
 <translation id="2100314319871056947">Спробуйте надіслати текст меншими частинами</translation>
 <translation id="2109711654079915747">Дізнавайтеся про теми на веб-сайтах, залишаючись на сторінці. Функція пошуку дотиком надсилає в Пошук Google слово та його контекст і повертає визначення, зображення, результати пошуку й іншу інформацію.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Змінити</translation>
 <translation id="381841723434055211">Номери телефонів</translation>
 <translation id="3819178904835489326">Видалено завантажених файлів: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
-<translation id="3849365399446680203">Під час сеансу доповненої реальності цей сайт може:
-• створювати 3D-мапу вашого оточення;
-• відстежувати рух камери.
-
-Лише ви можете бачити те, що знімає ваша камера. Сайт не має доступу до зображень із вашої камери.</translation>
 <translation id="3859306556332390985">Далі</translation>
 <translation id="388596076286380598">Отримуйте статті, відео й інший контент від сайтів, які вам подобаються, навіть у режимі офлайн або при слабкому з'єднанні.</translation>
 <translation id="3894427358181296146">Додати папку</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Немає з’єднання з Інтернетом</translation>
 <translation id="4321739720395210191">Не вдається відкрити камеру. Перезапустіть пристрій і повторіть спробу.</translation>
 <translation id="4351244548802238354">Закрити діалогове вікно</translation>
-<translation id="4353114845960720315">Під час сеансу VR цей сайт може розпізнавати:</translation>
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Пошук за допомогою Sogou</translation>
 <translation id="4404568932422911380">Немає закладок</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Немає з’єднання</translation>
 <translation id="4565377596337484307">Сховати пароль</translation>
 <translation id="4572422548854449519">Увійдіть у керований обліковий запис</translation>
-<translation id="4574741712540401491">• <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# хвилину тому}one{# хвилину тому}few{# хвилини тому}many{# хвилин тому}other{# хвилини тому}}</translation>
 <translation id="4587589328781138893">Сайти</translation>
 <translation id="4594952190837476234">Цю сторінку створено <ph name="CREATION_TIME" />. Вона може відрізнятися від онлайн-версії.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Відкрити файл <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Прийняти пароль</translation>
 <translation id="4650364565596261010">За умовчанням у системі</translation>
-<translation id="4660838440047236328">вигляд вашої кімнати.</translation>
 <translation id="4662373422909645029">Не можна додавати цифри</translation>
 <translation id="4663756553811254707">Видалено закладок: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Веб-сайт <ph name="NAME" /> додано на головний екран</translation>
@@ -459,7 +449,6 @@
 
 Щоб змінити це налаштування, <ph name="BEGIN_LINK" />скиньте параметри синхронізації<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Ім'я на картці</translation>
-<translation id="4808319664292298116">Увійти у VR-режим на сайті <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Скасувати синхронізацію?</translation>
 <translation id="4835385943915508971">Chrome не має доступу до потрібного ресурсу.</translation>
 <translation id="4837753911714442426">Відкрити налаштування друку сторінки</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Вийти з повноекранного режиму</translation>
 <translation id="6404511346730675251">Редагувати закладку</translation>
 <translation id="6406506848690869874">Синхронізація</translation>
-<translation id="6410973561433500075">Почати сеанс доповненої реальності на сайті <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Друк…</translation>
 <translation id="6427112570124116297">Перекласти веб-сторінки</translation>
 <translation id="6433501201775827830">Виберіть пошукову систему</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
index 52f1c286..c8dd6a4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">"سر فہرست سائٹس" بٹن پر تھپتھپا کر مقبول ویب سائٹس دیکھیں</translation>
 <translation id="1173894706177603556">نام بدلیں</translation>
 <translation id="1178581264944972037">موقوف کریں</translation>
-<translation id="1188239144602654184">‏AR میں داخل ہوں</translation>
 <translation id="1197267115302279827">بُک مارکس منتقل کریں</translation>
 <translation id="1201402288615127009">اگلا</translation>
 <translation id="1204037785786432551">ڈاؤن لوڈ کا لنک</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">متن</translation>
 <translation id="2082238445998314030">نتیجہ <ph name="RESULT_NUMBER" /> از <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">سبھی آلات پر مطابقت پذیری اور ذاتی نوعیت سازی کریں</translation>
-<translation id="2099625543891475722">آپ کی جسمانی خصوصیات، جیسے کہ قد</translation>
 <translation id="2100273922101894616">خودکار سائن ان</translation>
 <translation id="2100314319871056947">چھوٹے ٹکڑوں میں متن کا اشتراک کرنے کی کوشش کریں</translation>
 <translation id="2109711654079915747">‏صفحہ کو چھوڑے بغیر ویب سائٹس پر موجود عنوانات کے بارے میں جانیں۔ 'تلاش کرنے کے لیے ٹچ کریں' کسی لفظ اور اس کے آس پاس کا سیاق و سباق Google تلاش کو بھیجتا ہے، جس کے نتیجے میں تعریفات، تصاویر، تلاش کے نتائج اور دیگر تفصیلات موصول ہوتی ہیں۔
@@ -341,10 +339,6 @@
 <translation id="3810973564298564668">نظم کریں</translation>
 <translation id="381841723434055211">فون نمبرز</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ڈاؤن لوڈز کو حذف کر دیا گیا</translation>
-<translation id="3849365399446680203">‏آپ کے AR ہونے کے دوران، یہ سائٹ درج ذیل چیزیں کر سکے گی:
-• آپ کے ماحول کا ایک 3D نقشہ تخلیق کر سکے گی
-• کیمرے کی حرکت کو ٹریک کر سکے گی
-صرف آپ ہی دیکھ سکتے ہیں کہ آپ کا کیمرا کیا دیکھ رہا ہے۔ سائٹ آپ کے کیمرا کی تصاویر نہیں دیکھ سکتی۔</translation>
 <translation id="3859306556332390985">آگے لے جائیں</translation>
 <translation id="388596076286380598">آف لائن ہونے یا آپ کا کنکشن خراب ہونے کے باوجود اپنی پسندیدہ سائٹس سے مضامین، ویڈیوز اور دیگر مواد حاصل کریں۔</translation>
 <translation id="3894427358181296146">فولڈر کا اضافہ کریں</translation>
@@ -398,7 +392,6 @@
 <translation id="4320177379694898372">کوئی انٹرنیٹ کنکشن نہیں ہے</translation>
 <translation id="4321739720395210191">اپنا کیمرا نہیں کھول سکتے۔ اپنا آلہ ری سٹارٹ کریں اور دوبارہ کوشش کریں۔</translation>
 <translation id="4351244548802238354">ڈائیلاگ بند کریں</translation>
-<translation id="4353114845960720315">‏آپ کے VR میں ہونے کے دوران یہ سائٹ درج ذیل چیزیں جاننے کے قابل ہو سکتی ہے:</translation>
 <translation id="4378154925671717803">فون</translation>
 <translation id="4384468725000734951">‏تلاش کیلئے Sogou کا استعمال کیا جا رہا ہے</translation>
 <translation id="4404568932422911380">کوئی بُک مارک نہیں</translation>
@@ -426,7 +419,6 @@
 <translation id="4561979708150884304">کوئی کنکشن نہیں</translation>
 <translation id="4565377596337484307">پاس ورڈ چھپائیں</translation>
 <translation id="4572422548854449519">نظم کردہ اکاؤنٹ میں سائن ان کریں</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# منٹ پہلے}other{# منٹ پہلے}}</translation>
 <translation id="4587589328781138893">سائٹیں</translation>
 <translation id="4594952190837476234">یہ آف لائن صفحہ <ph name="CREATION_TIME" /> کا ہے اور آن لائن ورژن سے مختلف ہو سکتا ہے۔</translation>
@@ -434,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> کو کھولیں</translation>
 <translation id="4634124774493850572">پاس ورڈ استعمال کریں</translation>
 <translation id="4650364565596261010">سسٹم ڈیفالٹ</translation>
-<translation id="4660838440047236328">آپ کے کمرے کا لے آؤٹ</translation>
 <translation id="4662373422909645029">عرفی نام میں نمبرز شامل نہیں ہو سکتے</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> بُک مارکس حذف کر دیے گئے</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> کو آپ کی ہوم اسکرین میں شامل کر دیا گیا تھا</translation>
@@ -458,7 +449,6 @@
 
 اس ترتیب کو تبدیل کرنے کیلئے، <ph name="BEGIN_LINK" />مطابقت پذیری کو دوبارہ ترتیب دیں<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">کارڈ پر نام</translation>
-<translation id="4808319664292298116">‏<ph name="DOMAIN" /> سے VR داخل کریں؟</translation>
 <translation id="4824958205181053313">مطابقت پذیری منسوخ کریں؟</translation>
 <translation id="4835385943915508971">‏Chrome کو درخواست کردہ وسیلہ تک رسائی حاصل نہیں ہے۔</translation>
 <translation id="4837753911714442426">صفحہ پرنٹ کرنے کیلئے اختیارات کھولیں</translation>
@@ -658,7 +648,6 @@
 <translation id="6398765197997659313">پوری سکرین سے خارج ہوں</translation>
 <translation id="6404511346730675251">بک مارک میں ترمیم کریں</translation>
 <translation id="6406506848690869874">مطابقت پذیر بنائیں</translation>
-<translation id="6410973561433500075">‏<ph name="DOMAIN" /> سے AR میں داخل ہوں؟</translation>
 <translation id="641643625718530986">پرنٹ کریں…</translation>
 <translation id="6427112570124116297">ویب کا ترجمہ کریں</translation>
 <translation id="6433501201775827830">اپنے تلاش انجن کا انتخاب کریں</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
index a869505..04ba6bfc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Mashhur saytlarni chiqarish uchun “Top saytlar” tugmasini bosing</translation>
 <translation id="1173894706177603556">Qayta nomlash</translation>
 <translation id="1178581264944972037">Pauza</translation>
-<translation id="1188239144602654184">Virtual reallikka kirish</translation>
 <translation id="1197267115302279827">Xatcho‘plarni ko‘chirib o‘tkazish</translation>
 <translation id="1201402288615127009">Keyingisi</translation>
 <translation id="1204037785786432551">Havola kontentini yuklab olish</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">matn</translation>
 <translation id="2082238445998314030">Natija: <ph name="RESULT_NUMBER" /> / <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Barcha qurilmalardagi sinxronizatsiya va shaxsiy sozlamalar</translation>
-<translation id="2099625543891475722">boʻy kabi jismoniy xususiyatlaringiz</translation>
 <translation id="2100273922101894616">Avtomatik kirish</translation>
 <translation id="2100314319871056947">Yuboriladigan matnni biroz qisqartiring</translation>
 <translation id="2109711654079915747">Tasvirlar, mavzular va boshqa maʼlumotlarni belgilangan sahifani tark etmasdan qidiring. Buning uchun soʻz tanlang va u Google qidiruv serverlariga kontekst bilan birga yuboriladi.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Sozlash</translation>
 <translation id="381841723434055211">Telefon raqamlari</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ta yuklanma o‘chirib tashlandi</translation>
-<translation id="3849365399446680203">AR seansida bu sayt quyidagi amallarni bajara oladi:
-• atrofingizdagi muhitning 3D xaritasini yaratish
-• kamera harakatlarini kuzatish
-
-Kameradagi tasvirlar faqat sizga koʻrinadi. Kamera tasvirlari saytga koʻrinmaydi.</translation>
 <translation id="3859306556332390985">Oldinga surish</translation>
 <translation id="388596076286380598">Sevimli saytlaringizda maqola, video va boshqa kontentni oflayn rejimda yoki uzilishli internetda ham ochishingiz mumkin.</translation>
 <translation id="3894427358181296146">Jild qo‘shish</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Internet aloqasi yo‘q</translation>
 <translation id="4321739720395210191">Kamerangiz ochilmadi. Qurilmani qayta ishga tushirib, yana urining.</translation>
 <translation id="4351244548802238354">Oynani yopish</translation>
-<translation id="4353114845960720315">VR seansida bu sayt ayrim axborotlar ishlatilishini taniy oladi, jumladan:</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Asosiy qidiruv tizimi – Sogou</translation>
 <translation id="4404568932422911380">Hech qanday xatcho‘p yo‘q</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Internetga ulanmagansiz</translation>
 <translation id="4565377596337484307">Parolni berkitish</translation>
 <translation id="4572422548854449519">Tobe hisobga kirish</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# daqiqa oldin}other{# daqiqa oldin}}</translation>
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Bu sahifa saytning <ph name="CREATION_TIME" /> kunidagi nusxasi va onlayn versiyasidan farq qilishi mumkin.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> veb-ilovasini ochish</translation>
 <translation id="4634124774493850572">Paroldan foydalanish</translation>
 <translation id="4650364565596261010">Tizim standarti</translation>
-<translation id="4660838440047236328">xonangiz dizayni</translation>
 <translation id="4662373422909645029">Taxallusga raqam kiritish mumkin emas</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> ta xatcho‘p o‘chirib tashlandi</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> sayti bosh ekranga qo‘shildi</translation>
@@ -459,7 +449,6 @@
 
 Bu sozlamani almashtirish uchun <ph name="BEGIN_LINK" />sinxronizatsiyani tiklang<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Karta egasining ismi</translation>
-<translation id="4808319664292298116"><ph name="DOMAIN" /> orqali VR rejimiga kirilsinmi?</translation>
 <translation id="4824958205181053313">Sinxronizatsiya bekor qilinsinmi?</translation>
 <translation id="4835385943915508971">So‘ralgan manbadan foydalanish uchun Chrome brauzeriga ruxsat berilmagan.</translation>
 <translation id="4837753911714442426">Sahifani chop etish uchun sozlamalarni ochish</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">To‘liq ekran rejimidan chiqish</translation>
 <translation id="6404511346730675251">Xatcho‘pni tahrirlash</translation>
 <translation id="6406506848690869874">Sinxronlash</translation>
-<translation id="6410973561433500075"><ph name="DOMAIN" /> orqali AR rejimiga kirilsinmi?</translation>
 <translation id="641643625718530986">Chop etish…</translation>
 <translation id="6427112570124116297">Internetni oʻz tilingizda kezing</translation>
 <translation id="6433501201775827830">Qidiruv tizimini tanlang</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
index 5f679bc..03182b51 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Xem các trang web phổ biến bằng cách nhấn vào nút "Trang web hàng đầu"</translation>
 <translation id="1173894706177603556">Đổi tên</translation>
 <translation id="1178581264944972037">Tạm dừng</translation>
-<translation id="1188239144602654184">Chuyển sang thực tế tăng cường</translation>
 <translation id="1197267115302279827">Di chuyển dấu trang</translation>
 <translation id="1201402288615127009">Tiếp theo</translation>
 <translation id="1204037785786432551">Tải nội dung đường liên kết</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">văn bản</translation>
 <translation id="2082238445998314030">Kết quả <ph name="RESULT_NUMBER" /> trong tổng số <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Đồng bộ hóa và cá nhân hóa trên các thiết bị</translation>
-<translation id="2099625543891475722">đặc điểm hình thể của bạn, chẳng hạn như chiều cao</translation>
 <translation id="2100273922101894616">Tự động đăng nhập</translation>
 <translation id="2100314319871056947">Hãy thử chia sẻ văn bản theo các đoạn nhỏ hơn</translation>
 <translation id="2109711654079915747">Tìm hiểu về các chủ đề trên trang web mà không cần rời khỏi trang. Tính năng Chạm để tìm kiếm sẽ gửi một từ và ngữ cảnh xung quanh từ đó tới Google Tìm kiếm, sau đó hiển thị định nghĩa, hình ảnh, kết quả tìm kiếm và các chi tiết khác.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Quản lý</translation>
 <translation id="381841723434055211">Số điện thoại</translation>
 <translation id="3819178904835489326">Đã xóa <ph name="NUMBER_OF_DOWNLOADS" /> bản tải xuống</translation>
-<translation id="3849365399446680203">Khi bạn ở chế độ thực tế tăng cường, trang web này có thể:
-• tạo bản đồ 3D về môi trường xung quanh bạn
-• theo dõi chuyển động của máy ảnh
-
-Chỉ bạn mới biết được máy ảnh đang nhìn vào thứ gì. Trang web này không thể nhìn thấy hình ảnh trên máy ảnh của bạn.</translation>
 <translation id="3859306556332390985">Tìm kiếm tiến</translation>
 <translation id="388596076286380598">Bạn có thể xem các bài viết, video và nội dung khác trên những trang web mình thích, ngay cả khi không có kết nối mạng hoặc kết nối yếu.</translation>
 <translation id="3894427358181296146">Thêm thư mục</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Không có kết nối Internet</translation>
 <translation id="4321739720395210191">Không thể mở máy ảnh. Hãy khởi động lại thiết bị rồi thử lại.</translation>
 <translation id="4351244548802238354">Đóng hộp thoại</translation>
-<translation id="4353114845960720315">Khi bạn ở chế độ thực tế ảo, trang web này có thể biết được:</translation>
 <translation id="4378154925671717803">Điện thoại</translation>
 <translation id="4384468725000734951">Sử dụng Sogou để tìm kiếm</translation>
 <translation id="4404568932422911380">Không có dấu trang nào</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Không có kết nối</translation>
 <translation id="4565377596337484307">Ẩn mật khẩu</translation>
 <translation id="4572422548854449519">Đăng nhập vào tài khoản được quản lý</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# phút trước}other{# phút trước}}</translation>
 <translation id="4587589328781138893">Trang web</translation>
 <translation id="4594952190837476234">Trang ngoại tuyến này được tạo từ lúc <ph name="CREATION_TIME" /> và có thể khác với phiên bản trực tuyến.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Mở <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Sử dụng mật khẩu</translation>
 <translation id="4650364565596261010">Tùy chọn mặc định của hệ thống</translation>
-<translation id="4660838440047236328">cách bài trí phòng của bạn</translation>
 <translation id="4662373422909645029">Biệt hiệu không được bao gồm số</translation>
 <translation id="4663756553811254707">Đã xóa <ph name="NUMBER_OF_BOOKMARKS" /> dấu trang</translation>
 <translation id="4665282149850138822">Đã thêm <ph name="NAME" /> vào Màn hình chính của bạn</translation>
@@ -459,7 +449,6 @@
 
 Để thay đổi tùy chọn cài đặt này, hãy <ph name="BEGIN_LINK" />đặt lại tính năng đồng bộ hóa<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Tên trên thẻ</translation>
-<translation id="4808319664292298116">Chuyển sang chế độ thực tế ảo trên <ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Bạn muốn hủy đồng bộ hóa?</translation>
 <translation id="4835385943915508971">Chrome không có quyền truy cập vào tài nguyên đã yêu cầu.</translation>
 <translation id="4837753911714442426">Mở tùy chọn để in trang</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Thoát khỏi chế độ toàn màn hình</translation>
 <translation id="6404511346730675251">Chỉnh sửa dấu trang</translation>
 <translation id="6406506848690869874">Đồng bộ hóa</translation>
-<translation id="6410973561433500075">Chuyển sang chế độ thực tế tăng cường từ <ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">In…</translation>
 <translation id="6427112570124116297">Dịch web</translation>
 <translation id="6433501201775827830">Chọn công cụ tìm kiếm của bạn</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index ee2340b8..1aa67e6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">点按“热门网站”按钮可查看热门网站</translation>
 <translation id="1173894706177603556">重命名</translation>
 <translation id="1178581264944972037">暂停</translation>
-<translation id="1188239144602654184">进入 AR 会话</translation>
 <translation id="1197267115302279827">移动书签</translation>
 <translation id="1201402288615127009">下一步</translation>
 <translation id="1204037785786432551">下载链接</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">文本</translation>
 <translation id="2082238445998314030">第 <ph name="RESULT_NUMBER" /> 条结果,共 <ph name="TOTAL_RESULTS" /> 条</translation>
 <translation id="2096012225669085171">在所有设备上保持同步并进行个性化设置</translation>
-<translation id="2099625543891475722">您的身体特征,例如身高</translation>
 <translation id="2100273922101894616">自动登录</translation>
 <translation id="2100314319871056947">请尝试使用较小的文本块进行分享</translation>
 <translation id="2109711654079915747">无需离开所在页面,便可了解网站上的主题。“触摸搜索”功能会将被触摸的字词及上下文一起发送给 Google 搜索,后者随即会据此返回相应的定义、图片、搜索结果及其他详情。
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">管理</translation>
 <translation id="381841723434055211">电话号码</translation>
 <translation id="3819178904835489326">已删除 <ph name="NUMBER_OF_DOWNLOADS" /> 项下载内容</translation>
-<translation id="3849365399446680203">当您进入 AR 环境后,此网站或许能够:
-• 为您的环境创建 3D 地图
-• 跟踪相机运动
-
-只有您可以看到该相机捕捉的图像。此网站无法看到这些图像。</translation>
 <translation id="3859306556332390985">前进</translation>
 <translation id="388596076286380598">畅享您喜爱的网站上的文章、视频和其他内容,即使离线或网络连接状况不佳也不受影响。</translation>
 <translation id="3894427358181296146">添加文件夹</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">未连接到互联网</translation>
 <translation id="4321739720395210191">无法打开您的摄像头。请重启设备,然后重试。</translation>
 <translation id="4351244548802238354">关闭对话框</translation>
-<translation id="4353114845960720315">当您处于 VR 环境时,此网站或许能够得知:</translation>
 <translation id="4378154925671717803">电话机</translation>
 <translation id="4384468725000734951">目前使用的搜索引擎是搜狗</translation>
 <translation id="4404568932422911380">没有书签</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">无网络连接</translation>
 <translation id="4565377596337484307">隐藏密码</translation>
 <translation id="4572422548854449519">请登录受管理的帐号</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# 分钟前}other{# 分钟前}}</translation>
 <translation id="4587589328781138893">网站</translation>
 <translation id="4594952190837476234">此离线网页是在 <ph name="CREATION_TIME" />创建的,可能与在线版本有所不同。</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">打开<ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密码</translation>
 <translation id="4650364565596261010">系统默认设置</translation>
-<translation id="4660838440047236328">您房间的布局</translation>
 <translation id="4662373422909645029">昵称不能包含数字</translation>
 <translation id="4663756553811254707">已删除 <ph name="NUMBER_OF_BOOKMARKS" /> 个书签</translation>
 <translation id="4665282149850138822"><ph name="NAME" />已添加到您的主屏幕</translation>
@@ -459,7 +449,6 @@
 
 要更改此设置,请<ph name="BEGIN_LINK" />重置同步设置<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">持卡人姓名</translation>
-<translation id="4808319664292298116">从 <ph name="DOMAIN" /> 进入 VR 环境?</translation>
 <translation id="4824958205181053313">取消同步?</translation>
 <translation id="4835385943915508971">Chrome 无权访问请求的资源。</translation>
 <translation id="4837753911714442426">打开选项以打印网页</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">退出全屏模式</translation>
 <translation id="6404511346730675251">修改书签</translation>
 <translation id="6406506848690869874">同步</translation>
-<translation id="6410973561433500075">从 <ph name="DOMAIN" /> 进入 AR 环境?</translation>
 <translation id="641643625718530986">打印…</translation>
 <translation id="6427112570124116297">翻译网页</translation>
 <translation id="6433501201775827830">选择您的搜索引擎</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
index ad6be4a1e..6c0a1a3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">輕按「熱門網站」按鈕,即可查看熱門網站</translation>
 <translation id="1173894706177603556">重新命名</translation>
 <translation id="1178581264944972037">暫停</translation>
-<translation id="1188239144602654184">啟動 AR</translation>
 <translation id="1197267115302279827">移動書籤</translation>
 <translation id="1201402288615127009">下一個</translation>
 <translation id="1204037785786432551">下載連結</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">文字</translation>
 <translation id="2082238445998314030">第 <ph name="RESULT_NUMBER" /> 項結果 (共 <ph name="TOTAL_RESULTS" /> 項)</translation>
 <translation id="2096012225669085171">在不同裝置上同步與個人化</translation>
-<translation id="2099625543891475722">您的身體特徵,例如身高</translation>
 <translation id="2100273922101894616">自動登入</translation>
 <translation id="2100314319871056947">請嘗試將要分享的文字分為數個簡短片段</translation>
 <translation id="2109711654079915747">無需離開網頁即可瞭解網站上的主題。「輕觸搜尋」會將字詞及其上下文傳送至「Google 搜尋」,並傳回定義、圖片、搜尋結果和其他詳細資料。
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">管理</translation>
 <translation id="381841723434055211">電話號碼</translation>
 <translation id="3819178904835489326">已刪除 <ph name="NUMBER_OF_DOWNLOADS" /> 個下載項目</translation>
-<translation id="3849365399446680203">當您處於 AR 模式時,此網站可以進行下列操作:
-• 為您的環境建立 3D 地圖
-• 追蹤相機的移動方向
-
-相機畫面只有您能看見,此網站無法查看。</translation>
 <translation id="3859306556332390985">向前快轉</translation>
 <translation id="388596076286380598">即使離線或連線速度欠佳,您仍可從喜歡的網站取得文章、影片和其他內容。</translation>
 <translation id="3894427358181296146">新增資料夾</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">沒有互聯網連線</translation>
 <translation id="4321739720395210191">無法開啟攝錄機。請重新開機,然後再試一次。</translation>
 <translation id="4351244548802238354">關閉對話方塊</translation>
-<translation id="4353114845960720315">當您處於 VR 模式時,此網站可以識別:</translation>
 <translation id="4378154925671717803">電話號碼</translation>
 <translation id="4384468725000734951">使用「搜狗」搜尋內容</translation>
 <translation id="4404568932422911380">沒有書籤</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">沒有連線</translation>
 <translation id="4565377596337484307">隱藏密碼</translation>
 <translation id="4572422548854449519">登入受管理的帳戶</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# 分鐘前}other{# 分鐘前}}</translation>
 <translation id="4587589328781138893">網站</translation>
 <translation id="4594952190837476234">此離線網頁在 <ph name="CREATION_TIME" />建立,且可能與網上版本不同。</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">開啟 <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密碼</translation>
 <translation id="4650364565596261010">系統預設</translation>
-<translation id="4660838440047236328">您的房間配置</translation>
 <translation id="4662373422909645029">暱稱不可包含數字</translation>
 <translation id="4663756553811254707">已刪除 <ph name="NUMBER_OF_BOOKMARKS" /> 個書籤</translation>
 <translation id="4665282149850138822">已將 <ph name="NAME" /> 新增到主畫面</translation>
@@ -459,7 +449,6 @@
 
 如要變更此設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">信用卡持有人姓名</translation>
-<translation id="4808319664292298116">要從 <ph name="DOMAIN" /> 進入 VR 嗎?</translation>
 <translation id="4824958205181053313">要取消同步功能嗎?</translation>
 <translation id="4835385943915508971">Chrome 沒有要求資源的存取權。</translation>
 <translation id="4837753911714442426">開啟列印網頁選項</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">退出全螢幕模式</translation>
 <translation id="6404511346730675251">編輯書籤</translation>
 <translation id="6406506848690869874">同步處理</translation>
-<translation id="6410973561433500075">要從 <ph name="DOMAIN" /> 進入 AR 嗎?</translation>
 <translation id="641643625718530986">列印…</translation>
 <translation id="6427112570124116297">翻譯網頁</translation>
 <translation id="6433501201775827830">選取您的搜尋引擎</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
index 08ac00d..72079983 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">輕觸 [熱門網站] 按鈕,即可查看熱門網站</translation>
 <translation id="1173894706177603556">重新命名</translation>
 <translation id="1178581264944972037">暫停</translation>
-<translation id="1188239144602654184">啟動 AR</translation>
 <translation id="1197267115302279827">移動書籤</translation>
 <translation id="1201402288615127009">繼續</translation>
 <translation id="1204037785786432551">下載連結</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">文字</translation>
 <translation id="2082238445998314030">第 <ph name="RESULT_NUMBER" /> 個結果,共 <ph name="TOTAL_RESULTS" /> 個</translation>
 <translation id="2096012225669085171">讓多部裝置保持同步,並提供人化體驗</translation>
-<translation id="2099625543891475722">你的身體特徵,例如身高</translation>
 <translation id="2100273922101894616">自動登入</translation>
 <translation id="2100314319871056947">請嘗試將要分享的文字分成多個片段</translation>
 <translation id="2109711654079915747">不須離開網頁即可瞭解網站上的主題。「輕觸搜尋」功能可將特定字詞及其上下文內容傳送給 Google 搜尋,並傳回定義、圖片、搜尋結果和其他詳細資料。
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">管理</translation>
 <translation id="381841723434055211">電話號碼</translation>
 <translation id="3819178904835489326">已刪除 <ph name="NUMBER_OF_DOWNLOADS" /> 個下載項目</translation>
-<translation id="3849365399446680203">當你進入 AR 時,這個網站可能會執行以下作業:
-• 為你的環境建立 3D 地圖
-• 追蹤相機的動作
-
-只有你可以看見相機拍攝的畫面,這個網站無法查看。</translation>
 <translation id="3859306556332390985">快轉到特定的播放時間點</translation>
 <translation id="388596076286380598">即使處於離線狀態或網路訊號不良,你也可以查看喜愛網站上的文章、影片和其他內容。</translation>
 <translation id="3894427358181296146">新增資料夾</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">沒有網際網路連線</translation>
 <translation id="4321739720395210191">無法開啟攝影機,請重新啟動裝置,然後再試一次。</translation>
 <translation id="4351244548802238354">關閉對話方塊</translation>
-<translation id="4353114845960720315">當你進入 VR 時,這個網站可能會取得以下資訊:</translation>
 <translation id="4378154925671717803">電話</translation>
 <translation id="4384468725000734951">現已使用 Sogou 搜尋</translation>
 <translation id="4404568932422911380">沒有書籤</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">沒有網路連線</translation>
 <translation id="4565377596337484307">隱藏密碼</translation>
 <translation id="4572422548854449519">登入受管理的帳戶</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# 分鐘前}other{# 分鐘前}}</translation>
 <translation id="4587589328781138893">網站</translation>
 <translation id="4594952190837476234">這個離線版網頁是於 <ph name="CREATION_TIME" />建立,可能會和線上版本有所不同。</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">開啟 <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密碼</translation>
 <translation id="4650364565596261010">系統預設</translation>
-<translation id="4660838440047236328">你的房間配置</translation>
 <translation id="4662373422909645029">暱稱不可包含數字</translation>
 <translation id="4663756553811254707">已刪除 <ph name="NUMBER_OF_BOOKMARKS" /> 個書籤</translation>
 <translation id="4665282149850138822">「<ph name="NAME" />」已加入您的主畫面</translation>
@@ -459,7 +449,6 @@
 
 如要變更這項設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">持卡人姓名</translation>
-<translation id="4808319664292298116">要從 <ph name="DOMAIN" /> 進入 VR 嗎?</translation>
 <translation id="4824958205181053313">取消同步處理?</translation>
 <translation id="4835385943915508971">Chrome 無法存取要求的資源。</translation>
 <translation id="4837753911714442426">開啟列印網頁的選項</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">退出全螢幕模式</translation>
 <translation id="6404511346730675251">編輯書籤</translation>
 <translation id="6406506848690869874">同步</translation>
-<translation id="6410973561433500075">要從 <ph name="DOMAIN" /> 進入 AR 嗎?</translation>
 <translation id="641643625718530986">列印…</translation>
 <translation id="6427112570124116297">翻譯網頁</translation>
 <translation id="6433501201775827830">選擇搜尋引擎</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
index a4dbf689..3db073e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -25,7 +25,6 @@
 <translation id="1171770572613082465">Bona amawebhusayithi adumile ngokuthepha inkinobho yokuthi "Amasayithi aphezulu"</translation>
 <translation id="1173894706177603556">Qamba kabusha</translation>
 <translation id="1178581264944972037">Misa isikhashana</translation>
-<translation id="1188239144602654184">Faka i-AR</translation>
 <translation id="1197267115302279827">Hambisa amabhukhimakhi</translation>
 <translation id="1201402288615127009">Okulandelayo</translation>
 <translation id="1204037785786432551">Landa isixhumanisi</translation>
@@ -132,7 +131,6 @@
 <translation id="2067805253194386918">umbhalo</translation>
 <translation id="2082238445998314030">Umphumela ongu-<ph name="RESULT_NUMBER" /> wokungu-<ph name="TOTAL_RESULTS" /></translation>
 <translation id="2096012225669085171">Vumelanisa uphinde wenze kube ngokwakho kumadivayisi onkana</translation>
-<translation id="2099625543891475722">izici zakho zomzimba, njengobude</translation>
 <translation id="2100273922101894616">Ngena ngemvume ngokuzenzakalela</translation>
 <translation id="2100314319871056947">Zama ukwabelana ngombhalo ngezingxenye ezincane</translation>
 <translation id="2109711654079915747">Funda mayelana nezihloko kumawebhusayithi ngaphandle kokushiya ikhasi. Ukuthinta ukuze Useshe kuthumela igama kanye nokuqukethwe kwayo okusibekele kokuthi Usesho lwe-Google, izincazelo ezibuyayo, izithombe, imiphumela yosesho, neminye imininingwane.
@@ -341,11 +339,6 @@
 <translation id="3810973564298564668">Phatha</translation>
 <translation id="381841723434055211">Izinombolo zefoni</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ukulanda kutholakele</translation>
-<translation id="3849365399446680203">Ngenkathi uku-AR, leli sayithi lingakwazi ukuthi:
-• lidale imephu ye-3D yemvelo yakho
-• ukulandelela ukunyakaza kwekhamera yakho
-
-Nguwe kuphela ongabona ukuthi ikhamera yakho ibheke ini. Leli sayithi alikwazi ukubona izithombe zekhamera yakho.</translation>
 <translation id="3859306556332390985">Funela phambili</translation>
 <translation id="388596076286380598">Thola ama-athikili, amavidiyo, nokunye okuqukethwe kusuka kumasayithi owathandayo, ngisho noma ungaxhumekile ku-inthanethi noma uxhumo lwakho lungaqinile.</translation>
 <translation id="3894427358181296146">Engeza ifolda</translation>
@@ -399,7 +392,6 @@
 <translation id="4320177379694898372">Alukho uxhumano lwe-inthanethi</translation>
 <translation id="4321739720395210191">Ayikwazi ukuvula ikhamera yakho. Qala kabusha idivayisi yakho uphinde uzame futhi.</translation>
 <translation id="4351244548802238354">Vala ingxoxo</translation>
-<translation id="4353114845960720315">Ngenkathi uku-VR, leli sayithi lingakwazi ukufunda ngokulandelayo:</translation>
 <translation id="4378154925671717803">Ifoni</translation>
 <translation id="4384468725000734951">Isebenzisa i-Sogou ukuze iseshe</translation>
 <translation id="4404568932422911380">Awekho amabhukimakhi</translation>
@@ -427,7 +419,6 @@
 <translation id="4561979708150884304">Alukho uxhumano</translation>
 <translation id="4565377596337484307">Fihla iphasiwedi</translation>
 <translation id="4572422548854449519">Ngena ngemvume ku-akhawunti ephethwe</translation>
-<translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
 <translation id="4583164079174244168">{MINUTES,plural, =1{# iminithi eledlule}one{# amaminithi adlule}other{# amaminithi adlule}}</translation>
 <translation id="4587589328781138893">Amasayithi</translation>
 <translation id="4594952190837476234">Leli khasi elingaxhunyiwe kwi-inthanethi livele ngo-<ph name="CREATION_TIME" /> futhi lingahluka kusukela kunguqulo eku-inthanethi.</translation>
@@ -435,7 +426,6 @@
 <translation id="4616150815774728855">Vula i-<ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Sebenzisa iphasiwedi</translation>
 <translation id="4650364565596261010">Okuzenzakalelayo kwesistimu</translation>
-<translation id="4660838440047236328">isendlalelo segumbi lakho</translation>
 <translation id="4662373422909645029">Isiteketiso asikwazi ukuba nezinombolo</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> amabhukhimakhi asusiwe</translation>
 <translation id="4665282149850138822">I-<ph name="NAME" /> iye yangezwa kusikrini sakho sasekhaya</translation>
@@ -459,7 +449,6 @@
 
 Ukuze ushintshe lesi silungiselelo, <ph name="BEGIN_LINK" />setha kabusha ukuvumelanisa<ph name="END_LINK" /></translation>
 <translation id="4807098396393229769">Igama kukhadi</translation>
-<translation id="4808319664292298116">Faka i-VR kusuka ku-<ph name="DOMAIN" />?</translation>
 <translation id="4824958205181053313">Khansela ukuvumelanisa?</translation>
 <translation id="4835385943915508971">I-Chrome ayinakho ukufinyelela kusisetshenziswa esiceliwe.</translation>
 <translation id="4837753911714442426">Vula izinketho ukuze uphrinte ikhasi</translation>
@@ -659,7 +648,6 @@
 <translation id="6398765197997659313">Phuma kusikrini esigcwele</translation>
 <translation id="6404511346730675251">Hlela ibhukhimakhi</translation>
 <translation id="6406506848690869874">Vumelanisa</translation>
-<translation id="6410973561433500075">Ngena ku-AR kusukela ku-<ph name="DOMAIN" />?</translation>
 <translation id="641643625718530986">Phrinta…</translation>
 <translation id="6427112570124116297">Humusha iwebhu</translation>
 <translation id="6433501201775827830">Khetha injini yakho yokusesha</translation>
diff --git a/chrome/browser/ui/ash/keyboard_shortcut_viewer_metadata_unittest.cc b/chrome/browser/ui/ash/keyboard_shortcut_viewer_metadata_unittest.cc
index 6e68cda6..35dd421 100644
--- a/chrome/browser/ui/ash/keyboard_shortcut_viewer_metadata_unittest.cc
+++ b/chrome/browser/ui/ash/keyboard_shortcut_viewer_metadata_unittest.cc
@@ -23,9 +23,9 @@
 namespace {
 
 // The total number of Ash accelerators.
-constexpr int kAshAcceleratorsTotalNum = 117;
+constexpr int kAshAcceleratorsTotalNum = 118;
 // The hash of Ash accelerators.
-constexpr char kAshAcceleratorsHash[] = "d373edc491b25723d45223b590b288bd";
+constexpr char kAshAcceleratorsHash[] = "8c10cc51d4e84e4b94310bc91d15a0a8";
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
 // Internal builds add an extra accelerator for the Feedback app.
 // The total number of Chrome accelerators (available on Chrome OS).
diff --git a/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.cc
index 28f770b4d..d33a940 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.cc
@@ -35,12 +35,11 @@
     : PasswordBubbleControllerBase(
           std::move(delegate),
           /*display_disposition=*/metrics_util::MANUAL_MANAGE_PASSWORDS),
-      dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION) {
-  local_credentials_ = DeepCopyForms(delegate_->GetCurrentForms());
-  GetManagePasswordsDialogTitleText(GetWebContents()->GetVisibleURL(),
-                                    delegate_->GetOrigin(),
-                                    !local_credentials_.empty(), &title_);
-}
+      local_credentials_(DeepCopyForms(delegate_->GetCurrentForms())),
+      title_(
+          GetManagePasswordsDialogTitleText(GetWebContents()->GetVisibleURL(),
+                                            delegate_->GetOrigin(),
+                                            !local_credentials_.empty())) {}
 
 ItemsBubbleController::~ItemsBubbleController() {
   if (!interaction_reported_)
diff --git a/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.h
index f8f34a4..f96d957b 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.h
+++ b/chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.h
@@ -37,10 +37,11 @@
   base::string16 GetTitle() const override;
   void ReportInteractions() override;
 
-  std::vector<autofill::PasswordForm> local_credentials_;
-  base::string16 title_;
+  const std::vector<autofill::PasswordForm> local_credentials_;
+  const base::string16 title_;
   // Dismissal reason for a password bubble.
-  password_manager::metrics_util::UIDismissalReason dismissal_reason_;
+  password_manager::metrics_util::UIDismissalReason dismissal_reason_ =
+      password_manager::metrics_util::NO_DIRECT_INTERACTION;
 };
 
 #endif  // CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_ITEMS_BUBBLE_CONTROLLER_H_
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc
index 1197922a..96a9863 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc
@@ -133,16 +133,6 @@
   enable_editing_ = delegate_->GetCredentialSource() !=
                     password_manager::metrics_util::CredentialSourceType::
                         kCredentialManagementAPI;
-
-  // Compute the title.
-  PasswordTitleType type =
-      state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE
-          ? PasswordTitleType::UPDATE_PASSWORD
-          : (pending_password_.federation_origin.opaque()
-                 ? PasswordTitleType::SAVE_PASSWORD
-                 : PasswordTitleType::SAVE_ACCOUNT);
-  GetSavePasswordDialogTitleTextAndLinkRange(GetWebContents()->GetVisibleURL(),
-                                             origin_, type, &title_);
 }
 
 SaveUpdateBubbleController::~SaveUpdateBubbleController() {
@@ -213,7 +203,6 @@
   if (password_bubble_experiment::ShouldShowChromeSignInPasswordPromo(
           prefs, sync_service)) {
     ReportInteractions();
-    title_ = l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SYNC_PROMO_TITLE);
     state_ = password_manager::ui::CHROME_SIGN_IN_PROMO_STATE;
     int show_count = prefs->GetInteger(
         password_manager::prefs::kNumberSignInPasswordPromoShown);
@@ -233,6 +222,19 @@
   return reveal_immediately;
 }
 
+base::string16 SaveUpdateBubbleController::GetTitle() const {
+  if (state_ == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE)
+    return l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SYNC_PROMO_TITLE);
+
+  PasswordTitleType type = IsCurrentStateUpdate()
+                               ? PasswordTitleType::UPDATE_PASSWORD
+                               : (pending_password_.federation_origin.opaque()
+                                      ? PasswordTitleType::SAVE_PASSWORD
+                                      : PasswordTitleType::SAVE_ACCOUNT);
+  return GetSavePasswordDialogTitleText(GetWebContents()->GetVisibleURL(),
+                                        origin_, type);
+}
+
 void SaveUpdateBubbleController::ReportInteractions() {
   if (state_ == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE)
     return;
@@ -278,7 +280,3 @@
   if (metrics_recorder_)
     metrics_recorder_->RecordUIDismissalReason(dismissal_reason_);
 }
-
-base::string16 SaveUpdateBubbleController::GetTitle() const {
-  return title_;
-}
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h
index d163c80..c623bed2 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h
+++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h
@@ -61,6 +61,9 @@
   // re-authentication is successful.
   bool RevealPasswords();
 
+  // PasswordBubbleControllerBase methods:
+  base::string16 GetTitle() const override;
+
   password_manager::ui::State state() const { return state_; }
 
   const autofill::PasswordForm& pending_password() const {
@@ -87,13 +90,11 @@
 
  private:
   // PasswordBubbleControllerBase methods:
-  base::string16 GetTitle() const override;
   void ReportInteractions() override;
 
   // Origin of the page from where this bubble was triggered.
   url::Origin origin_;
   password_manager::ui::State state_;
-  base::string16 title_;
   autofill::PasswordForm pending_password_;
   std::vector<autofill::PasswordForm> local_credentials_;
   password_manager::InteractionsStats interaction_stats_;
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc
index 62c4ac8..027c233 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc
@@ -139,16 +139,6 @@
   enable_editing_ = delegate_->GetCredentialSource() !=
                     password_manager::metrics_util::CredentialSourceType::
                         kCredentialManagementAPI;
-
-  // Compute the title.
-  PasswordTitleType type =
-      state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE
-          ? PasswordTitleType::UPDATE_PASSWORD
-          : (pending_password_.federation_origin.opaque()
-                 ? PasswordTitleType::SAVE_PASSWORD
-                 : PasswordTitleType::SAVE_ACCOUNT);
-  GetSavePasswordDialogTitleTextAndLinkRange(GetWebContents()->GetVisibleURL(),
-                                             origin_, type, &title_);
 }
 
 SaveUpdateWithAccountStoreBubbleController::
@@ -283,6 +273,16 @@
                                    icon_size_dip, profiles::SHAPE_CIRCLE));
 }
 
+base::string16 SaveUpdateWithAccountStoreBubbleController::GetTitle() const {
+  PasswordTitleType type = IsCurrentStateUpdate()
+                               ? PasswordTitleType::UPDATE_PASSWORD
+                               : (pending_password_.federation_origin.opaque()
+                                      ? PasswordTitleType::SAVE_PASSWORD
+                                      : PasswordTitleType::SAVE_ACCOUNT);
+  return GetSavePasswordDialogTitleText(GetWebContents()->GetVisibleURL(),
+                                        origin_, type);
+}
+
 void SaveUpdateWithAccountStoreBubbleController::ReportInteractions() {
   DCHECK(state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
          state_ == password_manager::ui::PENDING_PASSWORD_STATE);
@@ -326,7 +326,3 @@
   if (metrics_recorder_)
     metrics_recorder_->RecordUIDismissalReason(dismissal_reason_);
 }
-
-base::string16 SaveUpdateWithAccountStoreBubbleController::GetTitle() const {
-  return title_;
-}
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.h
index 61ca86cf..3fddad1 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.h
+++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.h
@@ -80,6 +80,9 @@
   // account is signed in.
   ui::ImageModel GetPrimaryAccountAvatar(int icon_size_dip);
 
+  // PasswordBubbleControllerBase methods:
+  base::string16 GetTitle() const override;
+
   password_manager::ui::State state() const { return state_; }
 
   const autofill::PasswordForm& pending_password() const {
@@ -106,13 +109,11 @@
 
  private:
   // PasswordBubbleControllerBase methods:
-  base::string16 GetTitle() const override;
   void ReportInteractions() override;
 
   // Origin of the page from where this bubble was triggered.
   url::Origin origin_;
   password_manager::ui::State state_;
-  base::string16 title_;
   autofill::PasswordForm pending_password_;
   std::vector<autofill::PasswordForm> existing_credentials_;
   password_manager::InteractionsStats interaction_stats_;
diff --git a/chrome/browser/ui/passwords/manage_passwords_view_utils.cc b/chrome/browser/ui/passwords/manage_passwords_view_utils.cc
index eba449b..2744f46a 100644
--- a/chrome/browser/ui/passwords/manage_passwords_view_utils.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_view_utils.cc
@@ -80,8 +80,7 @@
     skia_image = gfx::ImageSkiaOperations::ExtractSubset(skia_image, target);
   }
   return gfx::ImageSkiaOperations::CreateResizedImage(
-      skia_image,
-      skia::ImageOperations::RESIZE_BEST,
+      skia_image, skia::ImageOperations::RESIZE_BEST,
       gfx::Size(kAvatarImageSize, kAvatarImageSize));
 }
 
@@ -103,11 +102,10 @@
       form.username_value + base::ASCIIToUTF16("\n") + federation);
 }
 
-void GetSavePasswordDialogTitleTextAndLinkRange(
+base::string16 GetSavePasswordDialogTitleText(
     const GURL& user_visible_url,
     const url::Origin& form_origin_url,
-    PasswordTitleType dialog_type,
-    base::string16* title) {
+    PasswordTitleType dialog_type) {
   std::vector<size_t> offsets;
   std::vector<base::string16> replacements;
   int title_id = 0;
@@ -136,13 +134,13 @@
         form_origin_url, url_formatter::SchemeDisplay::OMIT_HTTP_AND_HTTPS));
   }
 
-  *title = l10n_util::GetStringFUTF16(title_id, replacements, &offsets);
+  return l10n_util::GetStringFUTF16(title_id, replacements, &offsets);
 }
 
-void GetManagePasswordsDialogTitleText(const GURL& user_visible_url,
-                                       const url::Origin& password_origin_url,
-                                       bool has_credentials,
-                                       base::string16* title) {
+base::string16 GetManagePasswordsDialogTitleText(
+    const GURL& user_visible_url,
+    const url::Origin& password_origin_url,
+    bool has_credentials) {
   DCHECK(!password_origin_url.opaque());
   // Check whether the registry controlled domains for user-visible URL
   // (i.e. the one seen in the omnibox) and the managed password origin URL
@@ -150,16 +148,15 @@
   if (!SameDomainOrHost(user_visible_url, password_origin_url)) {
     base::string16 formatted_url =
         url_formatter::FormatOriginForSecurityDisplay(password_origin_url);
-    *title = l10n_util::GetStringFUTF16(
+    return l10n_util::GetStringFUTF16(
         has_credentials
             ? IDS_MANAGE_PASSWORDS_DIFFERENT_DOMAIN_TITLE
             : IDS_MANAGE_PASSWORDS_DIFFERENT_DOMAIN_NO_PASSWORDS_TITLE,
         formatted_url);
-  } else {
-    *title = l10n_util::GetStringUTF16(
-        has_credentials ? IDS_MANAGE_PASSWORDS_TITLE
-                        : IDS_MANAGE_PASSWORDS_NO_PASSWORDS_TITLE);
   }
+  return l10n_util::GetStringUTF16(
+      has_credentials ? IDS_MANAGE_PASSWORDS_TITLE
+                      : IDS_MANAGE_PASSWORDS_NO_PASSWORDS_TITLE);
 }
 
 base::string16 GetDisplayUsername(const autofill::PasswordForm& form) {
diff --git a/chrome/browser/ui/passwords/manage_passwords_view_utils.h b/chrome/browser/ui/passwords/manage_passwords_view_utils.h
index 8f0f37b0..d129e30 100644
--- a/chrome/browser/ui/passwords/manage_passwords_view_utils.h
+++ b/chrome/browser/ui/passwords/manage_passwords_view_utils.h
@@ -45,31 +45,30 @@
 std::pair<base::string16, base::string16> GetCredentialLabelsForAccountChooser(
     const autofill::PasswordForm& form);
 
-// Sets the formatted |title| in the Save Password bubble or the Update Password
-// bubble (depending on |dialog_type|). If the registry controlled domain of
-// |user_visible_url| (i.e. the one seen in the omnibox) differs from the
-// registry controlled domain of |form_origin_url|, it adds the site name.
-void GetSavePasswordDialogTitleTextAndLinkRange(
+// Returns the formatted title in the Save Password bubble or the Update
+// Password bubble (depending on |dialog_type|). If the registry controlled
+// domain of |user_visible_url| (i.e. the one seen in the omnibox) differs from
+// the registry controlled domain of |form_origin_url|, it adds the site name.
+base::string16 GetSavePasswordDialogTitleText(
     const GURL& user_visible_url,
     const url::Origin& form_origin_url,
-    PasswordTitleType dialog_type,
-    base::string16* title);
+    PasswordTitleType dialog_type);
 
-// Sets the formatted |title| in the Manage Passwords bubble. If the registry
+// Returns the formatted title in the Manage Passwords bubble. If the registry
 // controlled domain of |user_visible_url| (i.e. the one seen in the omnibox)
 // differs from the domain of the managed password origin URL
 // |password_origin_url|, sets |IDS_MANAGE_PASSWORDS_DIFFERENT_DOMAIN_TITLE| or
 // |IDS_MANAGE_PASSWORDS_DIFFERENT_DOMAIN_NO_PASSWORDS_TITLE| as
-// the |title| so that it replaces "this site" in title text with output of
+// the title so that it replaces "this site" in title text with output of
 // |FormatUrlForSecurityDisplay(password_origin_url)|.
 // Otherwise, sets |IDS_MANAGE_PASSWORDS_TITLE| or
-// |IDS_MANAGE_PASSWORDS_NO_PASSWORDS_TITLE| as |title| having "this site".
+// |IDS_MANAGE_PASSWORDS_NO_PASSWORDS_TITLE| as the title having "this site".
 // The *_NO_PASSWORDS_* variants of the title strings are used when no
 // credentials are present.
-void GetManagePasswordsDialogTitleText(const GURL& user_visible_url,
-                                       const url::Origin& password_origin_url,
-                                       bool has_credentials,
-                                       base::string16* title);
+base::string16 GetManagePasswordsDialogTitleText(
+    const GURL& user_visible_url,
+    const url::Origin& password_origin_url,
+    bool has_credentials);
 
 // Returns an username in the form that should be shown in the bubble.
 base::string16 GetDisplayUsername(const autofill::PasswordForm& form);
diff --git a/chrome/browser/ui/passwords/manage_passwords_view_utils_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_view_utils_unittest.cc
index 91c9727..a22b61e2 100644
--- a/chrome/browser/ui/passwords/manage_passwords_view_utils_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_view_utils_unittest.cc
@@ -56,7 +56,7 @@
   }
 
   const bool had_shared_instance_;  // Was there a shared bundle before?
-  ui::ResourceBundle& bundle_;  // The shared bundle.
+  ui::ResourceBundle& bundle_;      // The shared bundle.
   const std::string app_locale_;
 
   DISALLOW_COPY_AND_ASSIGN(ScopedResourceOverride);
@@ -130,19 +130,18 @@
 
 }  // namespace
 
-// Test for GetSavePasswordDialogTitleTextAndLinkRange().
-TEST(ManagePasswordsViewUtilTest, GetSavePasswordDialogTitleTextAndLinkRange) {
+// Test for GetSavePasswordDialogTitleText().
+TEST(ManagePasswordsViewUtilTest, GetSavePasswordDialogTitleText) {
   for (size_t i = 0; i < base::size(kDomainsTestCases); ++i) {
     SCOPED_TRACE(testing::Message() << "user_visible_url = "
                                     << kDomainsTestCases[i].user_visible_url
                                     << ", form_origin_url = "
                                     << kDomainsTestCases[i].form_origin_url);
 
-    base::string16 title;
-    GetSavePasswordDialogTitleTextAndLinkRange(
+    base::string16 title = GetSavePasswordDialogTitleText(
         GURL(kDomainsTestCases[i].user_visible_url),
         url::Origin::Create(GURL(kDomainsTestCases[i].form_origin_url)),
-        kDomainsTestCases[i].bubble_type, &title);
+        kDomainsTestCases[i].bubble_type);
 
     // Verify against expectations.
     base::string16 domain =
@@ -160,15 +159,13 @@
 }
 
 // Check that empty localised strings do not cause a crash.
-TEST(ManagePasswordsViewUtilTest,
-     GetSavePasswordDialogTitleTextAndLinkRange_EmptyStrings) {
+TEST(ManagePasswordsViewUtilTest, GetSavePasswordDialogTitleText_EmptyStrings) {
   ScopedResourceOverride resource_override;
 
   // Ensure that the resource bundle returns an empty string for the UI.
   resource_override.OverrideLocaleStringResource(IDS_SAVE_PASSWORD,
                                                  base::string16());
 
-  base::string16 title;
   const GURL kExample("http://example.org");
   // The arguments passed below have this importance for the codepath:
   // * The first two URLs need to be the same, otherwise
@@ -179,11 +176,11 @@
   //   triggers the crash in http://crbug.com/658902.
   // * SAVE_PASSWORD dialog type needs to be passed to match the
   //   IDS_SAVE_PASSWORD overridden above.
-  GetSavePasswordDialogTitleTextAndLinkRange(
-      kExample, url::Origin::Create(kExample), PasswordTitleType::SAVE_PASSWORD,
-      &title);
+  base::string16 title =
+      GetSavePasswordDialogTitleText(kExample, url::Origin::Create(kExample),
+                                     PasswordTitleType::SAVE_PASSWORD);
   // Verify that the test did not pass just because
-  // GetSavePasswordDialogTitleTextAndLinkRange changed the resource IDs it uses
+  // GetSavePasswordDialogTitleText changed the resource IDs it uses
   // (and hence did not get the overridden empty string). If the empty localised
   // string was used, the title and the range will be empty as well.
   EXPECT_THAT(title, testing::IsEmpty());
@@ -196,11 +193,9 @@
                                     << ", password_origin_url = "
                                     << kDomainsTestCases[i].form_origin_url);
 
-    base::string16 title;
-    GetManagePasswordsDialogTitleText(
+    base::string16 title = GetManagePasswordsDialogTitleText(
         GURL(kDomainsTestCases[i].user_visible_url),
-        url::Origin::Create(GURL(kDomainsTestCases[i].form_origin_url)), true,
-        &title);
+        url::Origin::Create(GURL(kDomainsTestCases[i].form_origin_url)), true);
 
     // Verify against expectations.
     base::string16 domain =
diff --git a/chrome/browser/ui/qrcode_generator/qrcode_generator_bubble_controller.cc b/chrome/browser/ui/qrcode_generator/qrcode_generator_bubble_controller.cc
index 91bfc58..058a8cfa 100644
--- a/chrome/browser/ui/qrcode_generator/qrcode_generator_bubble_controller.cc
+++ b/chrome/browser/ui/qrcode_generator/qrcode_generator_bubble_controller.cc
@@ -47,6 +47,8 @@
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
   qrcode_generator_bubble_ =
       browser->window()->ShowQRCodeGeneratorBubble(web_contents_, this, url);
+
+  browser->window()->UpdatePageActionIcon(PageActionIconType::kQRCodeGenerator);
 }
 
 void QRCodeGeneratorBubbleController::HideBubble() {
@@ -63,6 +65,8 @@
 
 void QRCodeGeneratorBubbleController::OnBubbleClosed() {
   qrcode_generator_bubble_ = nullptr;
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
+  browser->window()->UpdatePageActionIcon(PageActionIconType::kQRCodeGenerator);
 }
 
 QRCodeGeneratorBubbleController::QRCodeGeneratorBubbleController() = default;
diff --git a/chrome/browser/ui/send_tab_to_self/send_tab_to_self_bubble_controller.cc b/chrome/browser/ui/send_tab_to_self/send_tab_to_self_bubble_controller.cc
index 0b4f494..c1432ff 100644
--- a/chrome/browser/ui/send_tab_to_self/send_tab_to_self_bubble_controller.cc
+++ b/chrome/browser/ui/send_tab_to_self/send_tab_to_self_bubble_controller.cc
@@ -50,9 +50,6 @@
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
   send_tab_to_self_bubble_view_ =
       browser->window()->ShowSendTabToSelfBubble(web_contents_, this, true);
-  RecordSendTabToSelfClickResult(kOmniboxIcon,
-                                 SendTabToSelfClickResult::kShowDeviceList);
-  RecordSendTabToSelfDeviceCount(kOmniboxIcon, GetValidDevices().size());
 }
 
 SendTabToSelfBubbleView*
diff --git a/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.cc b/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.cc
index 4aa8693..d886ed7b 100644
--- a/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.cc
+++ b/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.cc
@@ -130,13 +130,6 @@
   return;
 }
 
-void SendTabToSelfSubMenuModel::OnMenuWillShow(ui::SimpleMenuModel* source) {
-  RecordSendTabToSelfClickResult(MenuTypeToString(menu_type_),
-                                 SendTabToSelfClickResult::kShowDeviceList);
-  RecordSendTabToSelfDeviceCount(MenuTypeToString(menu_type_),
-                                 valid_device_items_.size());
-}
-
 void SendTabToSelfSubMenuModel::Build(Profile* profile) {
   SendTabToSelfSyncService* service =
       SendTabToSelfSyncServiceFactory::GetForProfile(profile);
diff --git a/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.h b/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.h
index 0d5ddf170..6895859 100644
--- a/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.h
+++ b/chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.h
@@ -42,7 +42,6 @@
   // Overridden from ui::SimpleMenuModel::Delegate:
   bool IsCommandIdEnabled(int command_id) const override;
   void ExecuteCommand(int command_id, int event_flags) override;
-  void OnMenuWillShow(ui::SimpleMenuModel* source) override;
 
  private:
   void Build(Profile* profile);
diff --git a/chrome/browser/ui/tabs/tab_menu_model.cc b/chrome/browser/ui/tabs/tab_menu_model.cc
index 74d0711..d6ab1ed2 100644
--- a/chrome/browser/ui/tabs/tab_menu_model.cc
+++ b/chrome/browser/ui/tabs/tab_menu_model.cc
@@ -104,8 +104,6 @@
                           IDS_TAB_CXMENU_SOUND_UNMUTE_SITE, num_affected_tabs));
   if (send_tab_to_self::ShouldOfferFeature(
           tab_strip->GetWebContentsAt(index))) {
-    send_tab_to_self::RecordSendTabToSelfClickResult(
-        send_tab_to_self::kTabMenu, SendTabToSelfClickResult::kShowItem);
     AddSeparator(ui::NORMAL_SEPARATOR);
 
     if (send_tab_to_self::GetValidDeviceCount(tab_strip->profile()) == 1) {
@@ -123,11 +121,6 @@
                               tab_strip->profile()))),
                       ui::ImageModel::FromVectorIcon(kSendTabToSelfIcon));
 #endif
-      send_tab_to_self::RecordSendTabToSelfClickResult(
-          send_tab_to_self::kTabMenu,
-          SendTabToSelfClickResult::kShowDeviceList);
-      send_tab_to_self::RecordSendTabToSelfDeviceCount(
-          send_tab_to_self::kTabMenu, 1);
     } else {
       send_tab_to_self_sub_menu_model_ =
           std::make_unique<send_tab_to_self::SendTabToSelfSubMenuModel>(
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc
index c1329a05..5c7d9a6 100644
--- a/chrome/browser/ui/tabs/tab_strip_model.cc
+++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -1847,9 +1847,20 @@
   if (contents_data_.empty())
     return;
 
-  int index = active_index();
-  int delta = next ? 1 : -1;
-  index = (index + count() + delta) % count();
+  const int start_index = active_index();
+  base::Optional<tab_groups::TabGroupId> start_group =
+      GetTabGroupForTab(start_index);
+
+  // Ensure the active tab is not in a collapsed group so the while loop can
+  // fallback on activating the active tab.
+  DCHECK(!start_group.has_value() || !IsGroupCollapsed(start_group.value()));
+  const int delta = next ? 1 : -1;
+  int index = (start_index + count() + delta) % count();
+  base::Optional<tab_groups::TabGroupId> group = GetTabGroupForTab(index);
+  while (group.has_value() && IsGroupCollapsed(group.value())) {
+    index = (index + count() + delta) % count();
+    group = GetTabGroupForTab(index);
+  }
   ActivateTabAt(index, detail);
 }
 
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc
index f72811b0..3b8d7e00 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc
@@ -293,7 +293,8 @@
   }
 
   CreditCard SaveLocalCard(std::string card_number,
-                           bool set_as_expired_card = false) {
+                           bool set_as_expired_card = false,
+                           bool set_nickname = false) {
     CreditCard local_card;
     test::SetCreditCardInfo(&local_card, "John Smith", card_number.c_str(),
                             "12",
@@ -302,6 +303,9 @@
                             "1");
     local_card.set_guid("00000000-0000-0000-0000-" + card_number.substr(0, 12));
     local_card.set_record_type(CreditCard::LOCAL_CARD);
+    if (set_nickname)
+      local_card.SetNickname(base::ASCIIToUTF16("card nickname"));
+
     AddTestCreditCard(browser(), local_card);
     return local_card;
   }
@@ -790,11 +794,11 @@
   ASSERT_EQ(2u, card_list_view->children().size());
   // Cards will be added to database in a reversed order.
   EXPECT_EQ(static_cast<MigratableCardView*>(card_list_view->children()[0])
-                ->GetNetworkAndLastFourDigits(),
-            second_card.NetworkAndLastFourDigits());
+                ->GetCardIdentifierString(),
+            second_card.CardIdentifierStringForAutofillDisplay());
   EXPECT_EQ(static_cast<MigratableCardView*>(card_list_view->children()[1])
-                ->GetNetworkAndLastFourDigits(),
-            first_card.NetworkAndLastFourDigits());
+                ->GetCardIdentifierString(),
+            first_card.CardIdentifierStringForAutofillDisplay());
 }
 
 // Ensures that rejecting the main migration dialog closes the dialog.
@@ -1228,6 +1232,53 @@
       AutofillMetrics::LOCAL_CARD_MIGRATION_BUBBLE_LOST_FOCUS, 1);
 }
 
+// Tests to ensure the card nickname is shown correctly in the local card
+// migration dialog. The param indicates whether the nickname experiment is
+// enabled.
+class LocalCardMigrationBrowserTestForNickname
+    : public LocalCardMigrationBrowserTest,
+      public ::testing::WithParamInterface<bool> {
+ protected:
+  LocalCardMigrationBrowserTestForNickname() {
+    scoped_feature_list_.InitWithFeatureState(
+        features::kAutofillEnableSurfacingServerCardNickname, GetParam());
+  }
+
+  ~LocalCardMigrationBrowserTestForNickname() override = default;
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(,
+                         LocalCardMigrationBrowserTestForNickname,
+                         testing::Bool());
+
+IN_PROC_BROWSER_TEST_P(LocalCardMigrationBrowserTestForNickname,
+                       CardIdentifierString) {
+  base::HistogramTester histogram_tester;
+
+  CreditCard first_card = SaveLocalCard(
+      kFirstCardNumber, /*set_as_expired_card=*/false, /*set_nickname=*/true);
+  CreditCard second_card = SaveLocalCard(
+      kSecondCardNumber, /*set_as_expired_card=*/false, /*set_nickname=*/false);
+  UseCardAndWaitForMigrationOffer(kFirstCardNumber);
+  // Click the [Continue] button.
+  ClickOnOkButton(GetLocalCardMigrationOfferBubbleViews());
+
+  views::View* card_list_view = GetCardListView();
+  EXPECT_TRUE(card_list_view->GetVisible());
+  ASSERT_EQ(2u, card_list_view->children().size());
+  // Cards will be added to database in a reversed order.
+  EXPECT_EQ(static_cast<MigratableCardView*>(card_list_view->children()[0])
+                ->GetCardIdentifierString(),
+            second_card.NetworkAndLastFourDigits());
+  EXPECT_EQ(static_cast<MigratableCardView*>(card_list_view->children()[1])
+                ->GetCardIdentifierString(),
+            GetParam() ? first_card.NicknameAndLastFourDigitsForTesting()
+                       : first_card.NetworkAndLastFourDigits());
+}
+
 // TODO(crbug.com/897998):
 // - Add more tests for feedback dialog.
 
diff --git a/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc b/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc
index f486e18..961db333 100644
--- a/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc
@@ -81,8 +81,9 @@
   return migratable_credit_card_.credit_card().guid();
 }
 
-const base::string16 MigratableCardView::GetNetworkAndLastFourDigits() const {
-  return migratable_credit_card_.credit_card().NetworkAndLastFourDigits();
+base::string16 MigratableCardView::GetCardIdentifierString() const {
+  return migratable_credit_card_.credit_card()
+      .CardIdentifierStringForAutofillDisplay();
 }
 
 std::unique_ptr<views::View>
@@ -100,9 +101,8 @@
               views::DISTANCE_RELATED_CONTROL_HORIZONTAL)));
 
   std::unique_ptr<views::Label> card_description =
-      std::make_unique<views::Label>(
-          migratable_credit_card.credit_card().NetworkAndLastFourDigits(),
-          views::style::CONTEXT_LABEL);
+      std::make_unique<views::Label>(GetCardIdentifierString(),
+                                     views::style::CONTEXT_LABEL);
 
   constexpr int kMigrationResultImageSize = 16;
   switch (migratable_credit_card.migration_status()) {
diff --git a/chrome/browser/ui/views/autofill/payments/migratable_card_view.h b/chrome/browser/ui/views/autofill/payments/migratable_card_view.h
index 9a464ba6..8c2011f 100644
--- a/chrome/browser/ui/views/autofill/payments/migratable_card_view.h
+++ b/chrome/browser/ui/views/autofill/payments/migratable_card_view.h
@@ -36,7 +36,7 @@
 
   bool IsSelected();
   std::string GetGuid();
-  const base::string16 GetNetworkAndLastFourDigits() const;
+  base::string16 GetCardIdentifierString() const;
 
   std::unique_ptr<views::View> GetMigratableCardDescriptionView(
       const MigratableCreditCard& migratable_credit_card,
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc
index 5db82ea..2407675 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc
+++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc
@@ -137,6 +137,10 @@
   return footnote_view_;
 }
 
+const base::string16 SaveCardBubbleViews::GetCardIdentifierString() const {
+  return controller_->GetCard().CardIdentifierStringForAutofillDisplay();
+}
+
 SaveCardBubbleViews::~SaveCardBubbleViews() = default;
 
 // Overridden
@@ -177,9 +181,9 @@
   card_network_icon->set_tooltip_text(card.NetworkForDisplay());
   description_view->AddChildView(card_network_icon);
 
-  description_view->AddChildView(
-      new views::Label(card.NetworkAndLastFourDigits(), CONTEXT_BODY_TEXT_LARGE,
-                       views::style::STYLE_PRIMARY));
+  description_view->AddChildView(new views::Label(GetCardIdentifierString(),
+                                                  CONTEXT_BODY_TEXT_LARGE,
+                                                  views::style::STYLE_PRIMARY));
 
   if (!card.IsExpired(base::Time::Now())) {
     // The spacer will stretch to use the available horizontal space in the
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h
index e2814ac..1fcf7fc 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h
+++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h
@@ -53,6 +53,8 @@
   // Exists for testing (specifically, browsertests).
   views::View* GetFootnoteViewForTesting();
 
+  const base::string16 GetCardIdentifierString() const;
+
  protected:
   // Delegate for the personalized sync promo view used when desktop identity
   // consistency is enabled.
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
index ae4eb3b..45c86348 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
+++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
@@ -14,6 +14,7 @@
 #include "base/test/metrics/user_action_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
+#include "chrome/browser/autofill/autofill_uitest_util.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -326,10 +327,9 @@
   void SetAccountFullName(const std::string& full_name) {
     signin::IdentityManager* identity_manager =
         IdentityManagerFactory::GetForProfile(browser()->profile());
-    PersonalDataManager* personal_data_manager =
-        PersonalDataManagerFactory::GetForProfile(browser()->profile());
     CoreAccountInfo core_info =
-        personal_data_manager->GetAccountInfoForPaymentsServer();
+        PersonalDataManagerFactory::GetForProfile(browser()->profile())
+            ->GetAccountInfoForPaymentsServer();
 
     AccountInfo account_info;
     account_info.account_id = core_info.account_id;
@@ -2208,6 +2208,76 @@
       AutofillMetrics::SAVE_CARD_ICON_SHOWN_WITHOUT_PROMPT, 1);
 }
 
+// Tests to ensure the card nickname is shown correctly in the Upstream bubble.
+// The param indicates whether the experiment is enabled.
+class SaveCardBubbleViewsFullFormBrowserTestWithUpstreamForNickname
+    : public SaveCardBubbleViewsFullFormBrowserTest,
+      public ::testing::WithParamInterface<bool> {
+ protected:
+  SaveCardBubbleViewsFullFormBrowserTestWithUpstreamForNickname() {
+    if (GetParam()) {
+      feature_list_.InitWithFeatures(
+          /*enabled_features=*/{features::
+                                    kAutofillEnableSurfacingServerCardNickname,
+                                features::kAutofillUpstream},
+          /*disabled_features=*/{});
+    } else {
+      feature_list_.InitWithFeatures(
+          /*enabled_features=*/{features::kAutofillUpstream},
+          /*disabled_features=*/{
+              features::kAutofillEnableSurfacingServerCardNickname});
+    }
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    SaveCardBubbleViewsFullFormBrowserTestWithUpstreamForNickname,
+    testing::Bool());
+
+IN_PROC_BROWSER_TEST_P(
+    SaveCardBubbleViewsFullFormBrowserTestWithUpstreamForNickname,
+    LocalCardHasNickname) {
+  base::HistogramTester histogram_tester;
+  CreditCard card = test::GetCreditCard();
+  // Set card number to match the number to be filled in the form.
+  card.SetNumber(base::ASCIIToUTF16("5454545454545454"));
+  card.SetNickname(base::ASCIIToUTF16("nickname"));
+  AddTestCreditCard(browser(), card);
+
+  // Start sync.
+  harness_->SetupSync();
+
+  FillForm();
+  SubmitFormAndWaitForCardUploadSaveBubble();
+
+  EXPECT_EQ(GetSaveCardBubbleViews()->GetCardIdentifierString(),
+            (GetParam() ? card.NicknameAndLastFourDigitsForTesting()
+                        : card.NetworkAndLastFourDigits()));
+}
+
+IN_PROC_BROWSER_TEST_P(
+    SaveCardBubbleViewsFullFormBrowserTestWithUpstreamForNickname,
+    LocalCardHasNoNickname) {
+  base::HistogramTester histogram_tester;
+  CreditCard card = test::GetCreditCard();
+  // Set card number to match the number to be filled in the form.
+  card.SetNumber(base::ASCIIToUTF16("5454545454545454"));
+  AddTestCreditCard(browser(), card);
+
+  // Start sync.
+  harness_->SetupSync();
+
+  FillForm();
+  SubmitFormAndWaitForCardUploadSaveBubble();
+
+  EXPECT_EQ(GetSaveCardBubbleViews()->GetCardIdentifierString(),
+            card.NetworkAndLastFourDigits());
+}
+
 // TODO(crbug.com/932818): Remove the condition once the experiment is enabled
 // on ChromeOS.
 #if !defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 54c6c3e..c701f86 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -2831,7 +2831,8 @@
       // downloads bar.
       webui_tab_strip_ = top_container_->AddChildView(
           std::make_unique<WebUITabStripContainerView>(
-              browser_.get(), contents_container_, top_container_));
+              browser_.get(), contents_container_, top_container_,
+              GetLocationBarView()->omnibox_view()));
       loading_bar_ = top_container_->AddChildView(
           std::make_unique<TopContainerLoadingBar>(browser_.get()));
       loading_bar_->SetWebContents(GetActiveWebContents());
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
index fe740d2a..bfe6201 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -122,20 +122,42 @@
 
 }  // namespace
 
-// When enabled, closes the container upon any event in the window not
-// destined for the container and cancels the event. If an event is
-// destined for the container, it passes it through.
-class WebUITabStripContainerView::AutoCloser : public ui::EventHandler {
+// When enabled, closes the container for taps in either the web content
+// area or the Omnibox (both passed in as View arguments).
+class WebUITabStripContainerView::AutoCloser : public ui::EventHandler,
+                                               public views::ViewObserver {
  public:
-  using EventPassthroughPredicate =
-      base::RepeatingCallback<bool(const ui::Event& event)>;
+  using CloseCallback = base::RepeatingCallback<void(TabStripUICloseAction)>;
 
-  AutoCloser(EventPassthroughPredicate event_passthrough_predicate,
-             base::RepeatingClosure close_container_callback)
-      : event_passthrough_predicate_(std::move(event_passthrough_predicate)),
-        close_container_callback_(std::move(close_container_callback)) {}
+  AutoCloser(CloseCallback close_callback,
+             views::View* content_area,
+             views::View* omnibox)
+      : close_callback_(std::move(close_callback)),
+        content_area_(content_area),
+        omnibox_(omnibox) {
+    DCHECK(content_area_);
+    DCHECK(omnibox_);
+    view_observer_.Add(content_area_);
+    view_observer_.Add(omnibox_);
 
-  ~AutoCloser() override {}
+    // Our observed Widget's NativeView may be destroyed before us. We
+    // have no reasonable way of un-registering our pre-target handler
+    // from the NativeView while the Widget is destroying. This disables
+    // EventHandler's check that it has been removed from all
+    // EventTargets.
+    DisableCheckTargets();
+
+    content_area_->GetWidget()->GetNativeView()->AddPreTargetHandler(this);
+    pretarget_handler_added_ = true;
+  }
+
+  ~AutoCloser() override {
+    views::Widget* const widget =
+        content_area_ ? content_area_->GetWidget() : nullptr;
+    if (pretarget_handler_added_ && widget) {
+      widget->GetNativeView()->RemovePreTargetHandler(this);
+    }
+  }
 
   // Sets whether to inspect events. If not enabled, all events are
   // ignored and passed through as usual.
@@ -145,17 +167,73 @@
   void OnEvent(ui::Event* event) override {
     if (!enabled_)
       return;
-    if (event_passthrough_predicate_.Run(*event))
+    if (!event->IsLocatedEvent())
+      return;
+    ui::LocatedEvent* located_event = event->AsLocatedEvent();
+
+    if (!EventTypeCanCloseTabStrip(located_event->type()))
       return;
 
-    event->StopPropagation();
-    close_container_callback_.Run();
+    const gfx::Point event_location_in_screen =
+        located_event->target()->GetScreenLocation(*located_event);
+    if (!content_area_->GetBoundsInScreen().Contains(event_location_in_screen))
+      return;
+
+    located_event->StopPropagation();
+    close_callback_.Run(TabStripUICloseAction::kTapInTabContent);
+  }
+
+  // views::ViewObserver:
+  void OnViewFocused(views::View* observed_view) override {
+    if (observed_view != omnibox_)
+      return;
+    if (!enabled_)
+      return;
+
+    close_callback_.Run(TabStripUICloseAction::kOmniboxFocusedOrNewTabOpened);
+  }
+
+  void OnViewIsDeleting(views::View* observed_view) override {
+    view_observer_.Remove(observed_view);
+    if (observed_view == content_area_)
+      content_area_ = nullptr;
+    else if (observed_view == omnibox_)
+      omnibox_ = nullptr;
+    else
+      NOTREACHED();
+  }
+
+  void OnViewAddedToWidget(views::View* observed_view) override {
+    if (observed_view != content_area_)
+      return;
+    if (pretarget_handler_added_)
+      return;
+    aura::Window* const native_view =
+        content_area_->GetWidget()->GetNativeView();
+    if (native_view)
+      native_view->RemovePreTargetHandler(this);
+  }
+
+  void OnViewRemovedFromWidget(views::View* observed_view) override {
+    if (observed_view != content_area_)
+      return;
+    aura::Window* const native_view =
+        content_area_->GetWidget()->GetNativeView();
+    if (native_view)
+      native_view->RemovePreTargetHandler(this);
+    pretarget_handler_added_ = false;
   }
 
  private:
-  EventPassthroughPredicate event_passthrough_predicate_;
-  base::RepeatingClosure close_container_callback_;
+  CloseCallback close_callback_;
+  views::View* content_area_;
+  views::View* omnibox_;
+
   bool enabled_ = false;
+
+  bool pretarget_handler_added_ = false;
+
+  ScopedObserver<views::View, views::ViewObserver> view_observer_{this};
 };
 
 class WebUITabStripContainerView::DragToOpenHandler : public ui::EventHandler {
@@ -347,16 +425,17 @@
 WebUITabStripContainerView::WebUITabStripContainerView(
     Browser* browser,
     views::View* tab_contents_container,
-    views::View* drag_handle)
+    views::View* drag_handle,
+    views::View* omnibox)
     : browser_(browser),
       web_view_(AddChildView(
           std::make_unique<WebUITabStripWebView>(browser->profile()))),
       tab_contents_container_(tab_contents_container),
       auto_closer_(std::make_unique<AutoCloser>(
-          base::Bind(&WebUITabStripContainerView::EventShouldPropagate,
-                     base::Unretained(this)),
           base::Bind(&WebUITabStripContainerView::CloseForEventOutsideTabStrip,
-                     base::Unretained(this)))),
+                     base::Unretained(this)),
+          tab_contents_container,
+          omnibox)),
       drag_to_open_handler_(
           std::make_unique<DragToOpenHandler>(this, drag_handle)),
       iph_controller_(std::make_unique<IPHController>(browser_)) {
@@ -364,13 +443,6 @@
   DCHECK(UseTouchableTabStrip());
   animation_.SetTweenType(gfx::Tween::Type::FAST_OUT_SLOW_IN);
 
-  // Our observed Widget's NativeView may be destroyed before us. We
-  // have no reasonable way of un-registering our pre-target handler
-  // from the NativeView while the Widget is destroying. This disables
-  // EventHandler's check that it has been removed from all
-  // EventTargets.
-  auto_closer_->DisableCheckTargets();
-
   SetVisible(false);
   animation_.Reset(0.0);
 
@@ -551,7 +623,12 @@
       animation_.Show();
     }
 
-    web_view_->SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
+    // Switch focus to the WebView container. This prevents a confusing
+    // situation where a View appears to have focus, but keyboard inputs
+    // are actually directed to the WebUITabStrip.
+    web_view_->SetFocusBehavior(FocusBehavior::ALWAYS);
+    web_view_->RequestFocus();
+
     time_at_open_ = base::TimeTicks::Now();
 
     // If we're opening, end IPH if it's showing.
@@ -572,61 +649,13 @@
     }
 
     web_view_->SetFocusBehavior(FocusBehavior::NEVER);
-
-    // Tapping in the WebUI tab strip gives keyboard focus to the
-    // WebContents's native window. While this doesn't take away View
-    // focus, it will change the focused TextInputClient; see
-    // |ui::InputMethod::SetFocusedTextInputClient()|. The Omnibox is a
-    // TextInputClient, and it installs itself as the focused
-    // TextInputClient when it receives Views-focus. So, tapping in the
-    // tab strip while the Omnibox has focus will mean text cannot be
-    // entered until it is blurred and re-focused. This caused
-    // crbug.com/1027375.
-    //
-    // TODO(crbug.com/994350): stop WebUI tab strip from taking focus on
-    // tap and remove this workaround.
-    views::FocusManager* const focus_manager = GetFocusManager();
-    if (focus_manager) {
-      focus_manager->StoreFocusedView(true /* clear_native_focus */);
-      focus_manager->RestoreFocusedView();
-    }
   }
   auto_closer_->set_enabled(target_visible);
 }
 
-bool WebUITabStripContainerView::EventShouldPropagate(const ui::Event& event) {
-  if (!event.IsLocatedEvent())
-    return true;
-  const ui::LocatedEvent* located_event = event.AsLocatedEvent();
-
-  if (!EventTypeCanCloseTabStrip(located_event->type()))
-    return true;
-
-  const gfx::Point event_location_in_screen =
-      located_event->target()->GetScreenLocation(*located_event);
-  const gfx::Rect container_bounds_in_screen = GetBoundsInScreen();
-
-  // Events in the titlebar need to be handled, so that, for example, hitting
-  // close actually closes the window. Since converting into frame coordinates
-  // is fraught, it's easiest to just test relative position - any click above
-  // the tabstrip is in the frame since the tabstrip is the topmost view.
-  if (event_location_in_screen.y() < container_bounds_in_screen.y())
-    return true;
-
-  // Events in the tab strip container need to be handled.
-  if (container_bounds_in_screen.Contains(event_location_in_screen))
-    return true;
-
-  // Events in the tab counter button need to be handled.
-  if (tab_counter_->GetBoundsInScreen().Contains(event_location_in_screen))
-    return true;
-
-  // Otherwise, cancel the event and close the container.
-  return false;
-}
-
-void WebUITabStripContainerView::CloseForEventOutsideTabStrip() {
-  RecordTabStripUICloseHistogram(TabStripUICloseAction::kTapOutsideTabStrip);
+void WebUITabStripContainerView::CloseForEventOutsideTabStrip(
+    TabStripUICloseAction reason) {
+  RecordTabStripUICloseHistogram(reason);
   iph_controller_->NotifyClosed();
   SetContainerTargetVisibility(false);
 }
@@ -676,16 +705,6 @@
   return GetThemeProvider()->GetColor(id);
 }
 
-void WebUITabStripContainerView::AddedToWidget() {
-  GetWidget()->GetNativeView()->AddPreTargetHandler(auto_closer_.get());
-}
-
-void WebUITabStripContainerView::RemovedFromWidget() {
-  aura::Window* const native_view = GetWidget()->GetNativeView();
-  if (native_view)
-    native_view->RemovePreTargetHandler(auto_closer_.get());
-}
-
 int WebUITabStripContainerView::GetHeightForWidth(int w) const {
   DCHECK(!(animation_.is_animating() && current_drag_height_));
 
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
index d4c0ff0..9b9b732 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
@@ -14,6 +14,7 @@
 #include "chrome/browser/ui/views/toolbar/toolbar_button.h"
 #include "chrome/browser/ui/webui/tab_strip/tab_strip_ui.h"
 #include "chrome/browser/ui/webui/tab_strip/tab_strip_ui_embedder.h"
+#include "chrome/browser/ui/webui/tab_strip/tab_strip_ui_metrics.h"
 #include "chrome/common/buildflags.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "ui/events/event_handler.h"
@@ -46,7 +47,8 @@
  public:
   WebUITabStripContainerView(Browser* browser,
                              views::View* tab_contents_container,
-                             views::View* drag_handle);
+                             views::View* drag_handle,
+                             views::View* omnibox);
   ~WebUITabStripContainerView() override;
 
   static bool UseTouchableTabStrip();
@@ -97,13 +99,8 @@
 
   void SetContainerTargetVisibility(bool target_visible);
 
-  // When the container is open, it intercepts most tap and click
-  // events. This checks if each event should be intercepted or passed
-  // through to its target.
-  bool EventShouldPropagate(const ui::Event& event);
-
   // Passed to the AutoCloser to handle closing.
-  void CloseForEventOutsideTabStrip();
+  void CloseForEventOutsideTabStrip(TabStripUICloseAction reason);
 
   // TabStripUI::Embedder:
   const ui::AcceleratorProvider* GetAcceleratorProvider() const override;
@@ -118,8 +115,6 @@
   SkColor GetColor(int id) const override;
 
   // views::View:
-  void AddedToWidget() override;
-  void RemovedFromWidget() override;
   int GetHeightForWidth(int w) const override;
 
   gfx::Size FlexRule(const views::View* view,
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc b/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc
index 072f6096..a60cccd 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc
@@ -48,17 +48,24 @@
   container->SetVisibleForTesting(true);
   browser_view->Layout();
 
+  EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
+
   // Make sure the tab strip's contents are fully loaded.
   views::WebView* const container_web_view = container->web_view_for_testing();
   ASSERT_TRUE(WaitForLoadStop(container_web_view->GetWebContents()));
 
-  // Click in tab strip, then close it.
-  base::RunLoop click_loop;
+  // Click in tab strip then in Omnibox.
+  base::RunLoop click_loop_1;
   ui_test_utils::MoveMouseToCenterAndPress(
       container_web_view, ui_controls::LEFT,
-      ui_controls::DOWN | ui_controls::UP, click_loop.QuitClosure());
-  click_loop.Run();
-  container->SetVisibleForTesting(false);
+      ui_controls::DOWN | ui_controls::UP, click_loop_1.QuitClosure());
+  click_loop_1.Run();
+
+  base::RunLoop click_loop_2;
+  ui_test_utils::MoveMouseToCenterAndPress(omnibox, ui_controls::LEFT,
+                                           ui_controls::DOWN | ui_controls::UP,
+                                           click_loop_2.QuitClosure());
+  click_loop_2.Run();
 
   // The omnibox should still be focused and should accept keyboard input.
   EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index e3b9ed05..6e8012f 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -992,6 +992,13 @@
   }
 }
 
+inline void LocationBarView::UpdateQRCodeGeneratorIcon() {
+  PageActionIconView* icon = page_action_icon_controller_->GetIconView(
+      PageActionIconType::kQRCodeGenerator);
+  if (icon)
+    icon->Update();
+}
+
 inline bool LocationBarView::UpdateSendTabToSelfIcon() {
   PageActionIconView* icon = page_action_icon_controller_->GetIconView(
       PageActionIconType::kSendTabToSelf);
@@ -1146,6 +1153,7 @@
   Layout();
   SchedulePaint();
   UpdateSendTabToSelfIcon();
+  UpdateQRCodeGeneratorIcon();
 }
 
 void LocationBarView::OnPopupVisibilityChanged() {
@@ -1177,10 +1185,8 @@
   // the omnibox is intentional, snapping is better than transitioning here.
   hover_animation_.Reset();
 
-  if (UpdateSendTabToSelfIcon()) {
-    send_tab_to_self::RecordSendTabToSelfClickResult(
-        send_tab_to_self::kOmniboxIcon, SendTabToSelfClickResult::kShowItem);
-  }
+  UpdateSendTabToSelfIcon();
+  UpdateQRCodeGeneratorIcon();
   RefreshBackground();
 }
 
@@ -1188,6 +1194,7 @@
   if (focus_ring_)
     focus_ring_->SchedulePaint();
   UpdateSendTabToSelfIcon();
+  UpdateQRCodeGeneratorIcon();
   RefreshBackground();
 }
 
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index ef98e985..2e62c296 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -343,7 +343,11 @@
   // Called with an async fetched for the keyword view.
   void OnKeywordFaviconFetched(const gfx::Image& icon);
 
+  // Updates the visibility of the QR Code Generator icon.
+  void UpdateQRCodeGeneratorIcon();
+
   // Updates the visibility of the send tab to self icon.
+  // Returns true if visibility changed.
   bool UpdateSendTabToSelfIcon();
 
   // The Browser this LocationBarView is in.  Note that at least
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
index f9c9cf2..ffa9abd 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
@@ -271,6 +271,8 @@
     // the omnibox popup window.  Close any existing popup.
     if (popup_) {
       NotifyAccessibilityEvent(ax::mojom::Event::kExpandedChanged, true);
+      // The active descendant should be cleared when the popup closes.
+      FireAXEventsForNewActiveDescendant(nullptr);
       popup_->CloseAnimated();  // This will eventually delete the popup.
       popup_.reset();
     }
@@ -378,8 +380,7 @@
     NotifyAccessibilityEvent(ax::mojom::Event::kExpandedChanged, true);
     if (!base::FeatureList::IsEnabled(omnibox::kWebUIOmniboxPopup) &&
         result_view_at(0)) {
-      result_view_at(0)->NotifyAccessibilityEvent(ax::mojom::Event::kSelection,
-                                                  true);
+      FireAXEventsForNewActiveDescendant(result_view_at(0));
     }
   }
   InvalidateLayout();
@@ -444,6 +445,14 @@
   event->SetHandled();
 }
 
+void OmniboxPopupContentsView::FireAXEventsForNewActiveDescendant(
+    View* descendant_view) {
+  if (descendant_view)
+    descendant_view->NotifyAccessibilityEvent(ax::mojom::Event::kSelection,
+                                              true);
+  NotifyAccessibilityEvent(ax::mojom::Event::kActiveDescendantChanged, true);
+}
+
 void OmniboxPopupContentsView::OnWidgetBoundsChanged(
     views::Widget* widget,
     const gfx::Rect& new_bounds) {
@@ -545,6 +554,12 @@
   node_data->role = ax::mojom::Role::kListBox;
   if (IsOpen()) {
     node_data->AddState(ax::mojom::State::kExpanded);
+    OmniboxResultView* selected_result_view =
+        result_view_at(model_->selected_line());
+    if (selected_result_view)
+      node_data->AddIntAttribute(
+          ax::mojom::IntAttribute::kActivedescendantId,
+          selected_result_view->GetViewAccessibility().GetUniqueId().Get());
   } else {
     node_data->AddState(ax::mojom::State::kCollapsed);
     node_data->AddState(ax::mojom::State::kInvisible);
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h
index 7d3fcda..c550d393 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h
@@ -90,6 +90,8 @@
   void OnWidgetBoundsChanged(views::Widget* widget,
                              const gfx::Rect& new_bounds) override;
 
+  void FireAXEventsForNewActiveDescendant(View* descendant_view);
+
  private:
   friend class OmniboxPopupContentsViewTest;
   class AutocompletePopupWidget;
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc
index d2e767a..66d593a 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc
@@ -103,6 +103,8 @@
       text_changed_on_listboxoption_count_++;
     else if (event_type == ax::mojom::Event::kSelectedChildrenChanged)
       selected_children_changed_count_++;
+    else if (event_type == ax::mojom::Event::kActiveDescendantChanged)
+      active_descendant_changed_count_++;
   }
 
   int text_changed_on_listboxoption_count() {
@@ -111,10 +113,14 @@
   int selected_children_changed_count() {
     return selected_children_changed_count_;
   }
+  int active_descendant_changed_count() {
+    return active_descendant_changed_count_;
+  }
 
  private:
   int text_changed_on_listboxoption_count_ = 0;
   int selected_children_changed_count_ = 0;
+  int active_descendant_changed_count_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(TestAXEventObserver);
 };
@@ -428,7 +434,32 @@
   // Lets check that arrowing up and down emits the event.
   TestAXEventObserver observer;
   EXPECT_EQ(observer.selected_children_changed_count(), 0);
-  // This is equiverlent of the user arrowing down in the omnibox.
+  EXPECT_EQ(observer.active_descendant_changed_count(), 0);
+
+  // This is equivalent of the user arrowing down in the omnibox.
   popup_view()->model()->SetSelectedLine(1, false, false);
   EXPECT_EQ(observer.selected_children_changed_count(), 1);
+  EXPECT_EQ(observer.active_descendant_changed_count(), 1);
+
+  // This is equivalent of the user arrowing up in the omnibox.
+  popup_view()->model()->SetSelectedLine(0, false, false);
+  EXPECT_EQ(observer.selected_children_changed_count(), 2);
+  EXPECT_EQ(observer.active_descendant_changed_count(), 2);
+
+  // TODO(accessibility) Test that closing the popup fires an activedescendant
+  // changed event.
+
+  // Check accessibility of list box while it's open.
+  ui::AXNodeData popup_node_data_while_open;
+  popup_view()->GetAccessibleNodeData(&popup_node_data_while_open);
+  EXPECT_EQ(popup_node_data_while_open.role, ax::mojom::Role::kListBox);
+  EXPECT_TRUE(popup_node_data_while_open.HasState(ax::mojom::State::kExpanded));
+  EXPECT_FALSE(
+      popup_node_data_while_open.HasState(ax::mojom::State::kCollapsed));
+  EXPECT_FALSE(
+      popup_node_data_while_open.HasState(ax::mojom::State::kInvisible));
+  EXPECT_TRUE(popup_node_data_while_open.HasIntAttribute(
+      ax::mojom::IntAttribute::kActivedescendantId));
+  EXPECT_TRUE(popup_node_data_while_open.HasIntAttribute(
+      ax::mojom::IntAttribute::kPopupForId));
 }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
index bda6903..cd69dc9d 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -229,7 +229,7 @@
     // The text is also accessible via text/value change events in the omnibox
     // but this selection event allows the screen reader to get more details
     // about the list and the user's position within it.
-    NotifyAccessibilityEvent(ax::mojom::Event::kSelection, true);
+    popup_contents_view_->FireAXEventsForNewActiveDescendant(this);
 
     // TODO(orinj): Eventually the deep digging in this class should get
     //  replaced with a single local point of access to all selection state.
@@ -247,7 +247,6 @@
          popup_contents_view_->model()->selected_line_state() !=
              OmniboxPopupModel::HEADER_BUTTON_FOCUSED;
 }
-
 views::Button* OmniboxResultView::GetSecondaryButton() {
   if (suggestion_tab_switch_button_->GetVisible())
     return suggestion_tab_switch_button_;
@@ -487,9 +486,11 @@
 void OmniboxResultView::ProvideButtonFocusHint() {
   if (suggestion_tab_switch_button_->GetVisible()) {
     suggestion_tab_switch_button_->ProvideFocusHint();
+    // TODO(tommycli) Why isn't this using the same AX code as for the
+    // remove suggestion button below?
   } else if (remove_suggestion_button_->GetVisible()) {
-    remove_suggestion_button_->NotifyAccessibilityEvent(
-        ax::mojom::Event::kSelection, true);
+    popup_contents_view_->FireAXEventsForNewActiveDescendant(
+        remove_suggestion_button_);
   }
 }
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc
index 0548965..966d03b 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc
@@ -21,6 +21,7 @@
 #include "ui/events/event_utils.h"
 #include "ui/events/types/event_type.h"
 #include "ui/gfx/image/image.h"
+#include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/widget/widget.h"
 
 namespace {
@@ -268,4 +269,8 @@
   EXPECT_FALSE(popup_node_data.HasState(ax::mojom::State::kExpanded));
   EXPECT_TRUE(popup_node_data.HasState(ax::mojom::State::kCollapsed));
   EXPECT_TRUE(popup_node_data.HasState(ax::mojom::State::kInvisible));
+  EXPECT_FALSE(popup_node_data.HasIntAttribute(
+      ax::mojom::IntAttribute::kActivedescendantId));
+  EXPECT_FALSE(
+      popup_node_data.HasIntAttribute(ax::mojom::IntAttribute::kPopupForId));
 }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
index ae14dd39..724b8d0 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -1898,8 +1898,6 @@
   // Only add this menu entry if SendTabToSelf feature is enabled.
   if (send_tab_to_self::ShouldOfferFeature(
           location_bar_view_->GetWebContents())) {
-    send_tab_to_self::RecordSendTabToSelfClickResult(
-        send_tab_to_self::kOmniboxMenu, SendTabToSelfClickResult::kShowItem);
     int index = menu_contents->GetIndexOfCommandId(Textfield::kUndo);
     // Add a separator if this is not the first item.
     if (index)
@@ -1913,11 +1911,6 @@
               IDS_CONTEXT_MENU_SEND_TAB_TO_SELF_SINGLE_TARGET,
               send_tab_to_self::GetSingleTargetDeviceName(
                   location_bar_view_->profile())));
-      send_tab_to_self::RecordSendTabToSelfClickResult(
-          send_tab_to_self::kOmniboxMenu,
-          SendTabToSelfClickResult::kShowDeviceList);
-      send_tab_to_self::RecordSendTabToSelfDeviceCount(
-          send_tab_to_self::kOmniboxMenu, 1);
     } else {
       send_tab_to_self_sub_menu_model_ =
           std::make_unique<send_tab_to_self::SendTabToSelfSubMenuModel>(
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
index dfe05f8b..7f6c888e 100644
--- a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
+++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
@@ -119,18 +119,6 @@
   return controller->GetWebContents();
 }
 
-base::string16 PasswordBubbleViewBase::GetWindowTitle() const {
-  const PasswordBubbleControllerBase* controller = GetController();
-  DCHECK(controller);
-  return controller->GetTitle();
-}
-
-bool PasswordBubbleViewBase::ShouldShowWindowTitle() const {
-  const PasswordBubbleControllerBase* controller = GetController();
-  DCHECK(controller);
-  return !controller->GetTitle().empty();
-}
-
 PasswordBubbleViewBase::PasswordBubbleViewBase(
     content::WebContents* web_contents,
     views::View* anchor_view,
@@ -151,6 +139,14 @@
     g_manage_passwords_bubble_ = nullptr;
 }
 
+void PasswordBubbleViewBase::Init() {
+  LocationBarBubbleDelegateView::Init();
+  const PasswordBubbleControllerBase* controller = GetController();
+  DCHECK(controller);
+  SetTitle(controller->GetTitle());
+  SetShowTitle(!controller->GetTitle().empty());
+}
+
 void PasswordBubbleViewBase::OnWidgetClosing(views::Widget* widget) {
   LocationBarBubbleDelegateView::OnWidgetClosing(widget);
   if (widget != GetWidget())
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.h b/chrome/browser/ui/views/passwords/password_bubble_view_base.h
index a95eb8e5..5b66e1ca 100644
--- a/chrome/browser/ui/views/passwords/password_bubble_view_base.h
+++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.h
@@ -57,10 +57,6 @@
   virtual PasswordBubbleControllerBase* GetController() = 0;
   virtual const PasswordBubbleControllerBase* GetController() const = 0;
 
-  // LocationBarBubbleDelegateView:
-  base::string16 GetWindowTitle() const override;
-  bool ShouldShowWindowTitle() const override;
-
  protected:
   // The |easily_dismissable| flag indicates if the bubble should close upon
   // a click in the content area of the browser.
@@ -71,6 +67,9 @@
   ~PasswordBubbleViewBase() override;
 
  private:
+  // views::BubbleDialogDelegateView:
+  void Init() override;
+
   // WidgetObserver:
   void OnWidgetClosing(views::Widget* widget) override;
 
diff --git a/chrome/browser/ui/views/passwords/password_save_update_view.cc b/chrome/browser/ui/views/passwords/password_save_update_view.cc
index 13b2bae5..451accd9 100644
--- a/chrome/browser/ui/views/passwords/password_save_update_view.cc
+++ b/chrome/browser/ui/views/passwords/password_save_update_view.cc
@@ -43,6 +43,11 @@
 
 namespace {
 
+// Controls whether we should update the bubble title when transitioning
+// between Save and Update states.
+const base::Feature kUpdatePasswordSaveUpdateBubbleTitle{
+    "UpdatePasswordSaveUpdateBubbleTitle", base::FEATURE_ENABLED_BY_DEFAULT};
+
 enum PasswordSaveUpdateViewColumnSetType {
   // | | (LEADING, FILL) | | (FILL, FILL) | |
   // Used for the username/password line of the bubble, for the pending view.
@@ -311,7 +316,7 @@
   SetFootnoteView(CreateFooterView());
   SetCancelCallback(base::BindOnce(&PasswordSaveUpdateView::OnDialogCancelled,
                                    base::Unretained(this)));
-  UpdateDialogButtons();
+  UpdateBubbleUIElements();
 }
 
 views::View* PasswordSaveUpdateView::GetUsernameTextfieldForTest() const {
@@ -364,7 +369,7 @@
   if (is_update_state_before != controller_.IsCurrentStateUpdate() ||
       is_ok_button_enabled_before !=
           IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)) {
-    UpdateDialogButtons();
+    UpdateBubbleUIElements();
     DialogModelChanged();
     // TODO(ellyjones): This should not be necessary; DialogModelChanged()
     // implies a re-layout of the dialog.
@@ -466,15 +471,15 @@
     NOTREACHED();
   }
   GetWidget()->UpdateWindowIcon();
-  GetWidget()->UpdateWindowTitle();
-  UpdateDialogButtons();
+  SetTitle(controller_.GetTitle());
+  UpdateBubbleUIElements();
   DialogModelChanged();
 
   SizeToContents();
 #endif  // defined(OS_CHROMEOS)
 }
 
-void PasswordSaveUpdateView::UpdateDialogButtons() {
+void PasswordSaveUpdateView::UpdateBubbleUIElements() {
   if (sign_in_promo_) {
     SetButtons(ui::DIALOG_BUTTON_NONE);
     return;
@@ -490,6 +495,9 @@
       l10n_util::GetStringUTF16(
           is_update_bubble_ ? IDS_PASSWORD_MANAGER_CANCEL_BUTTON
                             : IDS_PASSWORD_MANAGER_BUBBLE_BLACKLIST_BUTTON));
+
+  if (base::FeatureList::IsEnabled(kUpdatePasswordSaveUpdateBubbleTitle))
+    SetTitle(controller_.GetTitle());
 }
 
 std::unique_ptr<views::View> PasswordSaveUpdateView::CreateFooterView() {
diff --git a/chrome/browser/ui/views/passwords/password_save_update_view.h b/chrome/browser/ui/views/passwords/password_save_update_view.h
index 0ba97b29..d867f37f 100644
--- a/chrome/browser/ui/views/passwords/password_save_update_view.h
+++ b/chrome/browser/ui/views/passwords/password_save_update_view.h
@@ -65,7 +65,7 @@
   void TogglePasswordVisibility();
   void UpdateUsernameAndPasswordInModel();
   void ReplaceWithPromo();
-  void UpdateDialogButtons();
+  void UpdateBubbleUIElements();
   std::unique_ptr<views::View> CreateFooterView();
   void OnDialogCancelled();
 
diff --git a/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.cc b/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.cc
index 69c8270..2b390ab 100644
--- a/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.cc
+++ b/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.cc
@@ -447,7 +447,7 @@
   }
 
   SetFootnoteView(CreateFooterView());
-  UpdateDialogButtonsAndAccountPickerVisiblity();
+  UpdateBubbleUIElements();
 }
 
 PasswordSaveUpdateWithAccountStoreView::
@@ -487,7 +487,7 @@
   if (is_update_state_before != controller_.IsCurrentStateUpdate() ||
       is_ok_button_enabled_before !=
           IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)) {
-    UpdateDialogButtonsAndAccountPickerVisiblity();
+    UpdateBubbleUIElements();
     DialogModelChanged();
   }
 }
@@ -570,8 +570,7 @@
                                  std::move(new_password));
 }
 
-void PasswordSaveUpdateWithAccountStoreView::
-    UpdateDialogButtonsAndAccountPickerVisiblity() {
+void PasswordSaveUpdateWithAccountStoreView::UpdateBubbleUIElements() {
   SetButtons((ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL));
   SetButtonLabel(
       ui::DIALOG_BUTTON_OK,
@@ -583,6 +582,9 @@
       l10n_util::GetStringUTF16(
           is_update_bubble_ ? IDS_PASSWORD_MANAGER_CANCEL_BUTTON
                             : IDS_PASSWORD_MANAGER_BUBBLE_BLACKLIST_BUTTON));
+
+  SetTitle(controller_.GetTitle());
+
   // Nothing to do if the bubble isn't visible yet.
   if (!GetWidget())
     return;
diff --git a/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.h b/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.h
index 857519e..ed8b3c6 100644
--- a/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.h
+++ b/chrome/browser/ui/views/passwords/password_save_update_with_account_store_view.h
@@ -72,7 +72,7 @@
 
   void TogglePasswordVisibility();
   void UpdateUsernameAndPasswordInModel();
-  void UpdateDialogButtonsAndAccountPickerVisiblity();
+  void UpdateBubbleUIElements();
   std::unique_ptr<views::View> CreateFooterView();
 
   SaveUpdateWithAccountStoreBubbleController controller_;
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc
index 9bc490c8..dcf24bb 100644
--- a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc
+++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc
@@ -261,6 +261,12 @@
       return {extension_name, false /* is_origin */};
   }
 
+  // File URLs should be displayed as "This file".
+  if (origin_url.SchemeIsFile()) {
+    return {l10n_util::GetStringUTF16(IDS_PERMISSIONS_BUBBLE_PROMPT_THIS_FILE),
+            false /* is_origin */};
+  }
+
   // Web URLs should be displayed as the origin in the URL.
   return {url_formatter::FormatUrlForSecurityDisplay(
               origin_url, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC),
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc
index 082520f..8f9eded 100644
--- a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc
+++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.h"
+#include "chrome/grit/generated_resources.h"
 #include "chrome/test/views/chrome_views_test_base.h"
 #include "components/permissions/test/mock_permission_request.h"
+#include "ui/base/l10n/l10n_util.h"
 
 using PermissionPromptBubbleViewTest = ChromeViewsTestBase;
 
@@ -71,4 +73,16 @@
   EXPECT_PRED_FORMAT2(::testing::IsNotSubstring, "baz", title);
   EXPECT_PRED_FORMAT2(::testing::IsNotSubstring, "quxx", title);
 }
+
+TEST_F(PermissionPromptBubbleViewTest,
+       AccessibleTitleFileSchemeMentionsThisFile) {
+  TestDelegate delegate(GURL("file:///tmp/index.html"), {"foo", "bar"});
+  auto bubble = std::make_unique<PermissionPromptBubbleView>(
+      nullptr, &delegate, base::TimeTicks::Now());
+
+  EXPECT_PRED_FORMAT2(::testing::IsSubstring,
+                      base::UTF16ToUTF8(l10n_util::GetStringUTF16(
+                          IDS_PERMISSIONS_BUBBLE_PROMPT_THIS_FILE)),
+                      base::UTF16ToUTF8(bubble->GetAccessibleWindowTitle()));
+}
 }  // namespace
diff --git a/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.cc b/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.cc
index 2e5b4b8..162fa78 100644
--- a/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.cc
+++ b/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.cc
@@ -24,7 +24,8 @@
     : PageActionIconView(command_updater,
                          IDC_QRCODE_GENERATOR,
                          icon_label_bubble_delegate,
-                         page_action_icon_delegate) {
+                         page_action_icon_delegate),
+      bubble_requested_(false) {
   SetVisible(false);
   SetLabel(l10n_util::GetStringUTF16(IDS_OMNIBOX_QRCODE_GENERATOR_ICON_LABEL));
 }
@@ -54,26 +55,31 @@
   if (!omnibox_view)
     return;
 
-  if (!QRCodeGeneratorBubbleController::IsGeneratorAvailable(
+  bool feature_available =
+      QRCodeGeneratorBubbleController::IsGeneratorAvailable(
           web_contents->GetURL(),
-          web_contents->GetBrowserContext()->IsOffTheRecord())) {
-    return;
-  }
+          web_contents->GetBrowserContext()->IsOffTheRecord());
 
-  if (omnibox_view->model()->has_focus()) {
-    if (!omnibox_view->model()->user_input_in_progress() && !GetVisible()) {
-      SetVisible(true);
-    }
-  } else {
-    // Omnibox not focused.
-    if (GetVisible()) {
-      SetVisible(false);
-    }
-  }
+  bool visible = GetBubble() != nullptr ||
+                 (feature_available && omnibox_view->model()->has_focus() &&
+                  !omnibox_view->model()->user_input_in_progress());
+
+  // Once the bubble has initialized, or focus returned to the omnibox,
+  // clear the initializing flag.
+  if (visible && bubble_requested_)
+    bubble_requested_ = false;
+
+  // If the bubble is in the process of showing, prevent losing the
+  // inkdrop or going through a hide/show cycle.
+  visible |= bubble_requested_;
+
+  SetVisible(visible);
 }
 
 void QRCodeGeneratorIconView::OnExecuting(
-    PageActionIconView::ExecuteSource execute_source) {}
+    PageActionIconView::ExecuteSource execute_source) {
+  bubble_requested_ = true;
+}
 
 const gfx::VectorIcon& QRCodeGeneratorIconView::GetVectorIcon() const {
   return kQrcodeGeneratorIcon;
diff --git a/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.h b/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.h
index 9647ecd..14a8936 100644
--- a/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.h
+++ b/chrome/browser/ui/views/qrcode_generator/qrcode_generator_icon_view.h
@@ -35,6 +35,10 @@
   const char* GetClassName() const override;
 
  private:
+  // Flag set when OnExecuting() is called and cleared after bubble is created.
+  // Avoids losing ink drop on, or flickering, the PageActionIconView.
+  bool bubble_requested_;
+
   DISALLOW_COPY_AND_ASSIGN(QRCodeGeneratorIconView);
 };
 
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
index 8dfcdc2..4d091d0 100644
--- a/chrome/browser/ui/views/tabs/tab_strip.cc
+++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -1273,6 +1273,14 @@
                              int model_index) {
   tab_at(model_index)->set_group(std::move(group));
 
+  // Expand the group if the tab that is getting grouped is the active tab. This
+  // can result in the group expanding in a series of actions where the final
+  // active tab is not in the group.
+  if (model_index == selected_tabs_.active() && group.has_value() &&
+      controller()->IsGroupCollapsed(group.value())) {
+    controller()->ToggleTabGroupCollapsedState(group.value());
+  }
+
   ExitTabClosingMode();
 }
 
diff --git a/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc b/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc
index 7b08f855..23ac26e5 100644
--- a/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc
@@ -474,31 +474,13 @@
 }
 
 namespace {
-static constexpr char kBaseDataDir[] = "chrome/test/data/web_app_file_handling";
+constexpr char kBaseDataDir[] = "chrome/test/data/web_app_file_handling";
 
 // This is the public key of tools/origin_trials/eftest.key, used to validate
 // origin trial tokens generated by tools/origin_trials/generate_token.py.
-static constexpr char kOriginTrialPublicKeyForTesting[] =
+constexpr char kOriginTrialPublicKeyForTesting[] =
     "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA=";
 
-// Create a URLLoaderInterceptor that serves a test Web App (with origin trial
-// token) at the given url.
-std::unique_ptr<content::URLLoaderInterceptor>
-CreateURLLoaderInterceptorAndServeTestApp(const GURL& app_url) {
-  return std::make_unique<content::URLLoaderInterceptor>(
-      base::BindLambdaForTesting(
-          [&](content::URLLoaderInterceptor::RequestParams* params) -> bool {
-            // Only serve this App's url.
-            if (params->url_request.url != app_url)
-              return false;
-
-            content::URLLoaderInterceptor::WriteResponse(
-                base::StrCat(
-                    {kBaseDataDir, params->url_request.url.path_piece()}),
-                params->client.get());
-            return true;
-          }));
-}
 }  // namespace
 
 class WebAppFileHandlingOriginTrialTest
@@ -540,14 +522,16 @@
 
 IN_PROC_BROWSER_TEST_P(WebAppFileHandlingOriginTrialTest,
                        LaunchParamsArePassedCorrectly) {
-  const GURL app_url = GURL("https://file-handling-pwa/index.html");
+  std::string origin = "https://file-handling-pwa";
 
   // We need to use URLLoaderInterceptor (rather than a EmbeddedTestServer),
   // because origin trial token is associated with a fixed origin, whereas
   // EmbeddedTestServer serves content on a random port.
-  std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor_ =
-      CreateURLLoaderInterceptorAndServeTestApp(app_url);
+  auto interceptor =
+      content::URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+          kBaseDataDir, GURL(origin));
 
+  const GURL app_url = GURL(origin + "/index.html");
   const web_app::AppId app_id = InstallFileHandlingWebApp(app_url);
   base::FilePath test_file_path = NewTestFilePath(FILE_PATH_LITERAL("txt"));
   content::WebContents* web_content = LaunchApplication(
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
index fd926cb..a9705d3e 100644
--- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
@@ -884,7 +884,7 @@
   if (LoginDisplayHost::default_host())
     LoginDisplayHost::default_host()->SetDisplayEmail(username);
 
-  set_populated_email(username);
+  set_populated_account(AccountId::FromUserEmail(username));
   DCHECK(authpolicy_login_helper_);
   Key key(password);
   key.SetLabel(kCryptohomeGaiaKeyLabel);
@@ -1085,7 +1085,7 @@
   // |args| can be null if it's OOBE.
   if (args)
     args->GetString(0, &email);
-  set_populated_email(email);
+  set_populated_account(AccountId::FromUserEmail(email));
   OnShowAddUser();
 }
 
@@ -1288,9 +1288,9 @@
 
 void GaiaScreenHandler::ShowGaiaAsync(const AccountId& account_id) {
   if (account_id.is_valid())
-    populated_email_ = account_id.GetUserEmail();
+    populated_account_id_ = account_id;
   show_when_ready_ = true;
-  if (gaia_silent_load_ && populated_email_.empty()) {
+  if (gaia_silent_load_ && !populated_account_id_.is_valid()) {
     dns_cleared_ = true;
     cookies_cleared_ = true;
     ShowGaiaScreenIfReady();
@@ -1410,9 +1410,10 @@
   imm->SetState(gaia_ime_state);
 
   // Set Least Recently Used input method for the user.
-  if (!populated_email_.empty()) {
-    lock_screen_utils::SetUserInputMethod(
-        populated_email_, gaia_ime_state.get(), true /*honor_device_policy*/);
+  if (populated_account_id_.is_valid()) {
+    lock_screen_utils::SetUserInputMethod(populated_account_id_,
+                                          gaia_ime_state.get(),
+                                          true /*honor_device_policy*/);
   } else {
     std::vector<std::string> input_methods;
     if (gaia_ime_state->GetAllowedInputMethods().empty()) {
@@ -1422,7 +1423,7 @@
       input_methods = gaia_ime_state->GetAllowedInputMethods();
     }
     const std::string owner_im = lock_screen_utils::GetUserLastInputMethod(
-        user_manager::UserManager::Get()->GetOwnerAccountId().GetUserEmail());
+        user_manager::UserManager::Get()->GetOwnerAccountId());
     const std::string system_im = g_browser_process->local_state()->GetString(
         language_prefs::kPreferredKeyboardLayout);
 
@@ -1497,7 +1498,7 @@
   GaiaContext context;
   context.force_reload = force;
   context.use_offline = offline;
-  context.email = populated_email_;
+  context.email = populated_account_id_.GetUserEmail();
 
   std::string gaia_id;
   if (!context.email.empty() &&
@@ -1511,7 +1512,7 @@
         AccountId::FromUserEmail(gaia::CanonicalizeEmail(context.email)));
   }
 
-  populated_email_.clear();
+  populated_account_id_.clear();
 
   LoadGaia(context);
 }
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h
index c92122c..921a2ed 100644
--- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h
@@ -254,9 +254,9 @@
                        bool using_saml,
                        const SamlPasswordAttributes& password_attributes);
 
-  // Fill GAIA user name.
-  void set_populated_email(const std::string& populated_email) {
-    populated_email_ = populated_email;
+  // Fill GAIA account.
+  void set_populated_account(const AccountId& populated_account_id) {
+    populated_account_id_ = populated_account_id;
   }
 
   // Kick off cookie / local storage cleanup.
@@ -359,8 +359,8 @@
   ActiveDirectoryPasswordChangeScreenHandler*
       active_directory_password_change_screen_handler_ = nullptr;
 
-  // Email to pre-populate with.
-  std::string populated_email_;
+  // Account to pre-populate with.
+  AccountId populated_account_id_;
 
   // Whether the handler has been initialized.
   bool initialized_ = false;
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index 6554102..bfd9465 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -1107,7 +1107,7 @@
   std::string email;
   args->GetString(0, &email);
 
-  gaia_screen_handler_->set_populated_email(email);
+  gaia_screen_handler_->set_populated_account(AccountId::FromUserEmail(email));
   gaia_screen_handler_->LoadAuthExtension(true /* force */, true /* offline */);
   UpdateUIState(UI_STATE_GAIA_SIGNIN);
 }
@@ -1313,8 +1313,7 @@
   // TODO(https://crbug.com/1071779): Migrate KioskTest to Views Account picker.
   // DCHECK_EQ(session_manager::SessionManager::Get()->session_state(),
   //           session_manager::SessionState::LOGIN_SECONDARY);
-  lock_screen_utils::SetUserInputMethod(account_id.GetUserEmail(),
-                                        ime_state_.get(),
+  lock_screen_utils::SetUserInputMethod(account_id, ime_state_.get(),
                                         false /*honor_device_policy*/);
   lock_screen_utils::SetKeyboardSettings(account_id);
 
diff --git a/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.cc
index 634b08c..8d99eb5 100644
--- a/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.h"
 
-#include "base/metrics/histogram_functions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
@@ -208,19 +207,19 @@
 void SyncConsentScreenHandler::HandleAcceptAndContinue(
     const login::StringList& consent_description,
     const std::string& consent_confirmation) {
-  Continue(consent_description, consent_confirmation, UserChoice::kAccepted);
+  Continue(consent_description, consent_confirmation, /*enable_sync=*/true);
 }
 
 void SyncConsentScreenHandler::HandleDeclineAndContinue(
     const login::StringList& consent_description,
     const std::string& consent_confirmation) {
-  Continue(consent_description, consent_confirmation, UserChoice::kDeclined);
+  Continue(consent_description, consent_confirmation, /*enable_sync=*/false);
 }
 
 void SyncConsentScreenHandler::Continue(
     const login::StringList& consent_description,
     const std::string& consent_confirmation,
-    UserChoice choice) {
+    bool enable_sync) {
   DCHECK(chromeos::features::IsSplitSettingsSyncEnabled());
   std::vector<int> consent_description_ids;
   int consent_confirmation_id;
@@ -229,7 +228,8 @@
   // Manually add this ID because the string contains a runtime substitution,
   // so it's not included in GetConsentIDs().
   consent_description_ids.push_back(IDS_LOGIN_SYNC_CONSENT_SCREEN_SUBTITLE);
-  screen_->OnContinue(consent_description_ids, consent_confirmation_id, choice);
+  screen_->OnAcceptAndContinue(consent_description_ids, consent_confirmation_id,
+                               enable_sync);
 
   SyncConsentScreen::SyncConsentScreenTestDelegate* test_delegate =
       screen_->GetDelegateForTesting();
diff --git a/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.h
index a11e554..dfb8a054 100644
--- a/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.h
@@ -42,10 +42,6 @@
  public:
   using TView = SyncConsentScreenView;
 
-  // These values are persisted to logs. Entries should not be renumbered and
-  // numeric values should never be reused. Public for testing.
-  enum class UserChoice { kDeclined = 0, kAccepted = 1, kMaxValue = kAccepted };
-
   explicit SyncConsentScreenHandler(JSCallsContainer* js_calls_container);
   ~SyncConsentScreenHandler() override;
 
@@ -81,7 +77,7 @@
   // Helper for the accept and decline cases.
   void Continue(const ::login::StringList& consent_description,
                 const std::string& consent_confirmation,
-                UserChoice choice);
+                bool enable_sync);
 
   // Adds resource |resource_id| both to |builder| and to |known_string_ids_|.
   void RememberLocalizedValue(const std::string& name,
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_metrics.h b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_metrics.h
index 356c716..66d548f 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_metrics.h
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_metrics.h
@@ -18,9 +18,12 @@
 
 enum class TabStripUICloseAction {
   kTapOnTabCounter = 0,
-  kTapOutsideTabStrip = 1,
+  // No longer used
+  // kTapOutsideTabStrip = 1,
   kTabSelected = 2,
-  kMaxValue = kTabSelected,
+  kTapInTabContent = 3,
+  kOmniboxFocusedOrNewTabOpened = 4,
+  kMaxValue = kOmniboxFocusedOrNewTabOpened,
 };
 
 void RecordTabStripUIOpenHistogram(TabStripUIOpenAction action);
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index ee5aef2..6e9a223 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-master-1591286362-902781b12ab9dd448871f9768174868838c7d326.profdata
+chrome-win64-master-1591399286-b39212858debc8dd3bf1b48362b37180826018ff.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 6699a54..195c320 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -401,6 +401,11 @@
 const base::Feature kHideCorsMitigationListPolicySupport{
     "HideCorsMitigationListPolicySupport", base::FEATURE_ENABLED_BY_DEFAULT};
 
+// Enables LiteVideos, a data-saving optimization that throttles media requests
+// to reduce the bitrate of adaptive media streams. Only for Lite mode users
+// (formerly DataSaver).
+const base::Feature kLiteVideo{"LiteVideo", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables navigation suggestions UI for lookalike URLs (e.g. internationalized
 // domain names that are visually similar to popular domains or to domains with
 // engagement score, such as googlé.com).
@@ -623,37 +628,6 @@
 #endif
 };
 
-// Controls a mode for dynamically process-isolating sites where the user has
-// entered a password.  This is intended to be used primarily when full site
-// isolation is turned off.  To check whether this mode is enabled, use
-// SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled() rather than
-// checking the feature directly, since that decision is influenced by other
-// factors as well.
-const base::Feature kSiteIsolationForPasswordSites {
-  "site-isolation-for-password-sites",
-// Enabled by default on Android; see https://crbug.com/849815.  Note that this
-// should not affect Android Webview, which does not include this code.
-#if defined(OS_ANDROID)
-      base::FEATURE_ENABLED_BY_DEFAULT
-#else
-      base::FEATURE_DISABLED_BY_DEFAULT
-#endif
-};
-
-// kSitePerProcessOnlyForHighMemoryClients is checked before kSitePerProcess,
-// and (if enabled) can restrict if kSitePerProcess feature is checked at all -
-// no check will be made on devices with low memory (these devices will have no
-// Site Isolation via kSitePerProcess trials and won't activate either the
-// control or the experiment group).  The threshold for what is considered a
-// "low memory" device is set (in MB) via a field trial param with the name
-// defined below ("site-per-process-low-memory-cutoff-mb") and compared against
-// base::SysInfo::AmountOfPhysicalMemoryMB().
-const base::Feature kSitePerProcessOnlyForHighMemoryClients{
-    "site-per-process-only-for-high-memory-clients",
-    base::FEATURE_DISABLED_BY_DEFAULT};
-const char kSitePerProcessOnlyForHighMemoryClientsParamName[] =
-    "site-per-process-low-memory-cutoff-mb";
-
 #if defined(OS_CHROMEOS)
 // Enables or disables automatic setup of USB printers.
 const base::Feature kStreamlinedUsbPrinterSetup{
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index 30bdb5a..6f05e35 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -278,6 +278,9 @@
 #endif
 
 COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::Feature kLiteVideo;
+
+COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kLookalikeUrlNavigationSuggestionsUI;
 
 #if defined(OS_MACOSX)
@@ -389,14 +392,6 @@
 
 COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kSitePerProcess;
 
-COMPONENT_EXPORT(CHROME_FEATURES)
-extern const base::Feature kSiteIsolationForPasswordSites;
-
-COMPONENT_EXPORT(CHROME_FEATURES)
-extern const base::Feature kSitePerProcessOnlyForHighMemoryClients;
-COMPONENT_EXPORT(CHROME_FEATURES)
-extern const char kSitePerProcessOnlyForHighMemoryClientsParamName[];
-
 #if defined(OS_CHROMEOS)
 COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kStreamlinedUsbPrinterSetup;
diff --git a/chrome/common/media_router/providers/cast/cast_media_source.cc b/chrome/common/media_router/providers/cast/cast_media_source.cc
index bb61282..2e37e19 100644
--- a/chrome/common/media_router/providers/cast/cast_media_source.cc
+++ b/chrome/common/media_router/providers/cast/cast_media_source.cc
@@ -191,8 +191,8 @@
     const MediaSource::Id& source_id) {
   return std::make_unique<CastMediaSource>(
       source_id,
-      std::vector<CastAppInfo>({CastAppInfo(kCastStreamingAppId),
-                                CastAppInfo(kCastStreamingAudioAppId)}));
+      std::vector<CastAppInfo>({CastAppInfo::ForCastStreaming(),
+                                CastAppInfo::ForCastStreamingAudio()}));
 }
 
 std::unique_ptr<CastMediaSource> CastMediaSourceForDesktopMirroring(
@@ -200,7 +200,7 @@
   // TODO(https://crbug.com/849335): Add back audio-only devices for desktop
   // mirroring when proper support is implemented.
   return std::make_unique<CastMediaSource>(
-      source_id, std::vector<CastAppInfo>({CastAppInfo(kCastStreamingAppId)}));
+      source_id, std::vector<CastAppInfo>({CastAppInfo::ForCastStreaming()}));
 }
 
 // The logic shared by ParseCastUrl() and ParseLegacyCastUrl().
@@ -363,11 +363,24 @@
     const std::string& app_id,
     BitwiseOr<cast_channel::CastDeviceCapability> required_capabilities)
     : app_id(app_id), required_capabilities(required_capabilities) {}
+
 CastAppInfo::~CastAppInfo() = default;
 
 CastAppInfo::CastAppInfo(const CastAppInfo& other) = default;
 
 // static
+CastAppInfo CastAppInfo::ForCastStreaming() {
+  return CastAppInfo(kCastStreamingAppId, {CastDeviceCapability::VIDEO_OUT,
+                                           CastDeviceCapability::AUDIO_OUT});
+}
+
+// static
+CastAppInfo CastAppInfo::ForCastStreamingAudio() {
+  return CastAppInfo(kCastStreamingAudioAppId,
+                     {CastDeviceCapability::AUDIO_OUT});
+}
+
+// static
 std::unique_ptr<CastMediaSource> CastMediaSource::FromMediaSource(
     const MediaSource& source) {
   if (source.IsTabMirroringSource() || source.IsLocalFileSource())
diff --git a/chrome/common/media_router/providers/cast/cast_media_source.h b/chrome/common/media_router/providers/cast/cast_media_source.h
index ff5328d..02b8d26 100644
--- a/chrome/common/media_router/providers/cast/cast_media_source.h
+++ b/chrome/common/media_router/providers/cast/cast_media_source.h
@@ -44,12 +44,20 @@
     for (E e : values)
       Add(e);
   }
+  static constexpr BitwiseOr FromBits(T bits) { return BitwiseOr(bits); }
   bool empty() const { return bits_ == 0; }
+  T bits() const { return bits_; }
   void Add(E value) { bits_ |= Mask(value); }
+  bool Has(E value) const { return (bits_ & Mask(value)) != 0; }
+  bool HasAll(const BitwiseOr& other) const {
+    return (bits_ & other.bits_) == other.bits_;
+  }
   bool operator==(const BitwiseOr& other) const { return bits_ == other.bits_; }
   bool operator!=(const BitwiseOr& other) const { return *this != other; }
 
  private:
+  explicit constexpr BitwiseOr(T bits) : bits_(bits) {}
+
   static T Mask(E value) {
     const T result = static_cast<T>(value);
     DCHECK(static_cast<E>(result) == value);
@@ -60,12 +68,16 @@
 
 // Represents a Cast app and its capabilitity requirements.
 struct CastAppInfo {
-  explicit CastAppInfo(const std::string& app_id,
-                       BitwiseOr<cast_channel::CastDeviceCapability> = {});
+  explicit CastAppInfo(
+      const std::string& app_id,
+      BitwiseOr<cast_channel::CastDeviceCapability> required_capabilities);
   ~CastAppInfo();
 
   CastAppInfo(const CastAppInfo& other);
 
+  static CastAppInfo ForCastStreaming();
+  static CastAppInfo ForCastStreamingAudio();
+
   std::string app_id;
 
   // A bitset of capabilities required by the app.
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 2f560be..a1961d58 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -2855,12 +2855,6 @@
 // Boolean that specifies opting into --site-per-process (full Site Isolation).
 const char kSitePerProcess[] = "site_isolation.site_per_process";
 
-// A list of origins that were heuristically determined to need process
-// isolation. For example, an origin may be placed on this list in response to
-// the user typing a password on it.
-const char kUserTriggeredIsolatedOrigins[] =
-    "site_isolation.user_triggered_isolated_origins";
-
 #if !defined(OS_ANDROID)
 // Boolean that specifies whether media (audio/video) autoplay is allowed.
 const char kAutoplayAllowed[] = "media.autoplay_allowed";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 3954588f..df3fc650 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -990,7 +990,6 @@
 
 extern const char kIsolateOrigins[];
 extern const char kSitePerProcess[];
-extern const char kUserTriggeredIsolatedOrigins[];
 
 #if !defined(OS_ANDROID)
 extern const char kAutoplayAllowed[];
diff --git a/chrome/credential_provider/gaiacp/associated_user_validator.cc b/chrome/credential_provider/gaiacp/associated_user_validator.cc
index 495ebfd5..4334c60 100644
--- a/chrome/credential_provider/gaiacp/associated_user_validator.cc
+++ b/chrome/credential_provider/gaiacp/associated_user_validator.cc
@@ -139,7 +139,28 @@
     return hr;
   }
 
-  return manager->ModifyUserAccessWithLogonHours(domain, username, allow);
+  PSID psid;
+  if (!::ConvertStringSidToSidW(sid.c_str(), &psid)) {
+    hr = HRESULT_FROM_WIN32(::GetLastError());
+    LOGFN(ERROR) << "ConvertStringSidToSidW sid=" << sid << " hr=" << putHR(hr);
+    return hr;
+  }
+
+  std::vector<base::string16> account_rights{
+      SE_DENY_INTERACTIVE_LOGON_NAME, SE_DENY_NETWORK_LOGON_NAME,
+      SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME};
+  if (!allow) {
+    return policy->AddAccountRights(psid, account_rights);
+  } else {
+    // Note: We are still going to keep this time restrictions flow to avoid
+    // any cornercase scenario where user is blocked on login UI because
+    // time restrictions were set but were never added back.
+    hr = manager->ModifyUserAccessWithLogonHours(domain, username, allow);
+    if (FAILED(hr))
+      LOGFN(ERROR) << "Failed to remove time restrictions for sid : " << sid;
+
+    return policy->RemoveAccountRights(psid, account_rights);
+  }
 }
 
 }  // namespace
diff --git a/chrome/credential_provider/gaiacp/gaia_credential_base.cc b/chrome/credential_provider/gaiacp/gaia_credential_base.cc
index 3b405cc..7c7b322 100644
--- a/chrome/credential_provider/gaiacp/gaia_credential_base.cc
+++ b/chrome/credential_provider/gaiacp/gaia_credential_base.cc
@@ -897,7 +897,8 @@
   }
 
   // Add "logon as batch" right.
-  hr = policy->AddAccountRights(sid, SE_BATCH_LOGON_NAME);
+  std::vector<base::string16> rights{SE_BATCH_LOGON_NAME};
+  hr = policy->AddAccountRights(sid, rights);
   ::LocalFree(sid);
   if (FAILED(hr)) {
     LOGFN(ERROR) << "policy.AddAccountRights hr=" << putHR(hr);
@@ -1513,9 +1514,8 @@
     can_proceed_to_logon_stub = false;
     error_message = AllocErrorString(IDS_EMAIL_MISMATCH_BASE);
     LOGFN(ERROR) << "Restricted domains registry key must be set";
-  }
-  // If there is no internet connection, just abort right away.
-  else if (!InternetAvailabilityChecker::Get()->HasInternetConnection()) {
+  } else if (!InternetAvailabilityChecker::Get()->HasInternetConnection()) {
+    // If there is no internet connection, just abort right away.
     can_proceed_to_logon_stub = false;
     error_message = AllocErrorString(IDS_NO_NETWORK_BASE);
     LOGFN(VERBOSE) << "No internet connection";
diff --git a/chrome/credential_provider/gaiacp/scoped_lsa_policy.cc b/chrome/credential_provider/gaiacp/scoped_lsa_policy.cc
index 6483579..425f305 100644
--- a/chrome/credential_provider/gaiacp/scoped_lsa_policy.cc
+++ b/chrome/credential_provider/gaiacp/scoped_lsa_policy.cc
@@ -124,10 +124,16 @@
   return true;
 }
 
-HRESULT ScopedLsaPolicy::AddAccountRights(PSID sid, const wchar_t* right) {
-  LSA_UNICODE_STRING lsa_right;
-  InitLsaString(right, &lsa_right);
-  NTSTATUS sts = ::LsaAddAccountRights(handle_, sid, &lsa_right, 1);
+HRESULT ScopedLsaPolicy::AddAccountRights(
+    PSID sid,
+    const std::vector<base::string16>& rights) {
+  std::vector<LSA_UNICODE_STRING> lsa_rights;
+  for (auto& right : rights) {
+    LSA_UNICODE_STRING lsa_right;
+    InitLsaString(right.c_str(), &lsa_right);
+    lsa_rights.push_back(lsa_right);
+  }
+  NTSTATUS sts = ::LsaAddAccountRights(handle_, sid, lsa_rights.data(), 1);
   if (sts != STATUS_SUCCESS) {
     HRESULT hr = HRESULT_FROM_NT(sts);
     LOGFN(ERROR) << "LsaAddAccountRights sts=" << putHR(sts)
@@ -137,6 +143,26 @@
   return S_OK;
 }
 
+HRESULT ScopedLsaPolicy::RemoveAccountRights(
+    PSID sid,
+    const std::vector<base::string16>& rights) {
+  std::vector<LSA_UNICODE_STRING> lsa_rights;
+  for (auto& right : rights) {
+    LSA_UNICODE_STRING lsa_right;
+    InitLsaString(right.c_str(), &lsa_right);
+    lsa_rights.push_back(lsa_right);
+  }
+  NTSTATUS sts =
+      ::LsaRemoveAccountRights(handle_, sid, FALSE, lsa_rights.data(), 1);
+  if (sts != STATUS_SUCCESS) {
+    HRESULT hr = HRESULT_FROM_NT(sts);
+    LOGFN(ERROR) << "LsaRemoveAccountRights sts=" << putHR(sts)
+                 << " hr=" << putHR(hr);
+    return hr;
+  }
+  return S_OK;
+}
+
 HRESULT ScopedLsaPolicy::RemoveAccount(PSID sid) {
   // When all rights are removed from an account, the account itself is also
   // deleted.
diff --git a/chrome/credential_provider/gaiacp/scoped_lsa_policy.h b/chrome/credential_provider/gaiacp/scoped_lsa_policy.h
index 07bec66..bad2a827 100644
--- a/chrome/credential_provider/gaiacp/scoped_lsa_policy.h
+++ b/chrome/credential_provider/gaiacp/scoped_lsa_policy.h
@@ -30,8 +30,13 @@
                                       size_t length);
   virtual bool PrivateDataExists(const wchar_t* key);
 
-  // Adds the given right to the given user.
-  virtual HRESULT AddAccountRights(PSID sid, const wchar_t* right);
+  // Adds the set of given rights to the given user.
+  virtual HRESULT AddAccountRights(PSID sid,
+                                   const std::vector<base::string16>& rights);
+
+  // Removes the set of given rights to the given user.
+  virtual HRESULT RemoveAccountRights(
+      PSID sid, const std::vector<base::string16>& rights);
 
   // Removes the user account from the system.
   virtual HRESULT RemoveAccount(PSID sid);
diff --git a/chrome/credential_provider/test/gcp_fakes.cc b/chrome/credential_provider/test/gcp_fakes.cc
index e9f614e..880b664a 100644
--- a/chrome/credential_provider/test/gcp_fakes.cc
+++ b/chrome/credential_provider/test/gcp_fakes.cc
@@ -535,7 +535,15 @@
   return private_data().count(key) != 0;
 }
 
-HRESULT FakeScopedLsaPolicy::AddAccountRights(PSID sid, const wchar_t* right) {
+HRESULT FakeScopedLsaPolicy::AddAccountRights(
+    PSID sid,
+    const std::vector<base::string16>& rights) {
+  return S_OK;
+}
+
+HRESULT FakeScopedLsaPolicy::RemoveAccountRights(
+    PSID sid,
+    const std::vector<base::string16>& rights) {
   return S_OK;
 }
 
diff --git a/chrome/credential_provider/test/gcp_fakes.h b/chrome/credential_provider/test/gcp_fakes.h
index 2d2c973..65a2c72 100644
--- a/chrome/credential_provider/test/gcp_fakes.h
+++ b/chrome/credential_provider/test/gcp_fakes.h
@@ -239,7 +239,11 @@
                               wchar_t* value,
                               size_t length) override;
   bool PrivateDataExists(const wchar_t* key) override;
-  HRESULT AddAccountRights(PSID sid, const wchar_t* right) override;
+  HRESULT AddAccountRights(PSID sid,
+                           const std::vector<base::string16>& rights) override;
+  HRESULT RemoveAccountRights(
+      PSID sid,
+      const std::vector<base::string16>& rights) override;
   HRESULT RemoveAccount(PSID sid) override;
 
  private:
diff --git a/chrome/installer/setup/installer_state.cc b/chrome/installer/setup/installer_state.cc
index d3619a5..9e7da95e 100644
--- a/chrome/installer/setup/installer_state.cc
+++ b/chrome/installer/setup/installer_state.cc
@@ -80,8 +80,6 @@
 
   const bool is_uninstall = command_line.HasSwitch(switches::kUninstall);
 
-  // TODO(grt): Infer target_path_ from an existing install in support of
-  // varying install locations; see https://crbug.com/380177.
   target_path_ = GetChromeInstallPath(system_install());
   state_key_ = install_static::GetClientStateKeyPath();
 
diff --git a/chrome/installer/util/BUILD.gn b/chrome/installer/util/BUILD.gn
index 8010633..0b770ce 100644
--- a/chrome/installer/util/BUILD.gn
+++ b/chrome/installer/util/BUILD.gn
@@ -310,6 +310,7 @@
       "experiment_storage_unittest.cc",
       "experiment_unittest.cc",
       "google_update_settings_unittest.cc",
+      "helper_unittest.cc",
       "install_util_unittest.cc",
       "l10n_string_util_unittest.cc",
       "logging_installer_unittest.cc",
diff --git a/chrome/installer/util/helper.cc b/chrome/installer/util/helper.cc
index 9019ba94a..1190b20 100644
--- a/chrome/installer/util/helper.cc
+++ b/chrome/installer/util/helper.cc
@@ -5,26 +5,56 @@
 #include "chrome/installer/util/helper.h"
 
 #include "base/path_service.h"
+#include "base/win/registry.h"
 #include "chrome/install_static/install_util.h"
+#include "chrome/installer/util/install_util.h"
 #include "chrome/installer/util/util_constants.h"
 
+namespace {
+
+base::FilePath GetDefaultChromeInstallPath(bool system_install) {
+  base::FilePath install_path;
+  int key = system_install ? base::DIR_PROGRAM_FILES : base::DIR_LOCAL_APP_DATA;
+  if (base::PathService::Get(key, &install_path)) {
+    install_path =
+        install_path.Append(install_static::GetChromeInstallSubDirectory());
+    install_path = install_path.Append(installer::kInstallBinaryDir);
+  }
+  return install_path;
+}
+
+base::FilePath GetCurrentInstallPathFromRegistry(bool system_install) {
+  base::FilePath install_path;
+  if (!InstallUtil::GetChromeVersion(system_install).IsValid())
+    return install_path;
+
+  std::wstring uninstall_string;
+  base::win::RegKey key(system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
+                        install_static::GetClientStateKeyPath().c_str(),
+                        KEY_QUERY_VALUE | KEY_WOW64_32KEY);
+  key.ReadValue(installer::kUninstallStringField, &uninstall_string);
+
+  // The UninstallString has the format
+  // [InstallPath]/[version]/Installer/setup.exe. In order to get the
+  // [InstallPath], the full path must be pruned of the last 3 components.
+  if (!uninstall_string.empty()) {
+    install_path = base::FilePath(std::move(uninstall_string))
+                       .DirName()
+                       .DirName()
+                       .DirName();
+  }
+  return install_path;
+}
+
+}  // namespace
+
 namespace installer {
 
 base::FilePath GetChromeInstallPath(bool system_install) {
-  base::FilePath install_path;
-#if defined(_WIN64)
-  // TODO(wfh): Place Chrome binaries into DIR_PROGRAM_FILESX86 until the code
-  // to support moving the binaries is added.
-  int key =
-      system_install ? base::DIR_PROGRAM_FILESX86 : base::DIR_LOCAL_APP_DATA;
-#else
-  int key = system_install ? base::DIR_PROGRAM_FILES : base::DIR_LOCAL_APP_DATA;
-#endif
-  if (base::PathService::Get(key, &install_path)) {
-    install_path =
-        install_path.Append(install_static::GetChromeInstallSubDirectory());
-    install_path = install_path.Append(kInstallBinaryDir);
-  }
+  base::FilePath install_path =
+      GetCurrentInstallPathFromRegistry(system_install);
+  if (install_path.empty())
+    install_path = GetDefaultChromeInstallPath(system_install);
   return install_path;
 }
 
diff --git a/chrome/installer/util/helper.h b/chrome/installer/util/helper.h
index 5dadc32..16c4bf7 100644
--- a/chrome/installer/util/helper.h
+++ b/chrome/installer/util/helper.h
@@ -11,11 +11,14 @@
 
 namespace installer {
 
-// This function returns the install path for Chrome depending on whether its
-// system wide install or user specific install.
-// system_install: if true, the function returns system wide location
-//                 (ProgramFiles\Google). Otherwise it returns user specific
-//                 location (Document And Settings\<user>\Local Settings...)
+// This function returns the install path for Chrome depending on whether it's
+// a system wide install or a user specific install.
+// Returns the install path stored at
+// Software\Google\Update\ClientState\{appguid}\UninstallString
+// under HKLM if |system_install| is true, HKCU otherwise. If no path was stored
+// in the registry, returns (%ProgramFiles%\[Company\]Product\Application) if
+// |system_install| is true, otherwise returns user specific location
+// (%LOCALAPPDATA%\[Company\]Product\Application).
 base::FilePath GetChromeInstallPath(bool system_install);
 
 }  // namespace installer
diff --git a/chrome/installer/util/helper_unittest.cc b/chrome/installer/util/helper_unittest.cc
new file mode 100644
index 0000000..f02e9b8
--- /dev/null
+++ b/chrome/installer/util/helper_unittest.cc
@@ -0,0 +1,146 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/installer/util/helper.h"
+
+#include "base/files/file_path.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/optional.h"
+#include "base/path_service.h"
+#include "base/test/scoped_path_override.h"
+#include "base/test/test_reg_util_win.h"
+#include "base/version.h"
+#include "base/win/registry.h"
+#include "chrome/install_static/install_util.h"
+#include "chrome/installer/util/google_update_constants.h"
+#include "chrome/installer/util/util_constants.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace installer {
+
+// Tests GetChromeInstallPath with a boolean parameter which is |true| if the
+// test must use system-level values or |false| it the test must use user-level
+// values.
+class GetChromeInstallPathTest : public testing::TestWithParam<bool> {
+ public:
+  GetChromeInstallPathTest() = default;
+
+  void SetUp() override {
+    ASSERT_TRUE(program_files_.CreateUniqueTempDir());
+    ASSERT_TRUE(random_.CreateUniqueTempDir());
+    ASSERT_TRUE(local_app_data_.CreateUniqueTempDir());
+    ASSERT_NO_FATAL_FAILURE(
+        registry_override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE));
+    ASSERT_NO_FATAL_FAILURE(
+        registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER));
+    program_files_override_.emplace(base::DIR_PROGRAM_FILES,
+                                    program_files_path());
+    local_data_app_override_.emplace(base::DIR_LOCAL_APP_DATA,
+                                     local_app_data_path());
+  }
+
+  base::FilePath random_path() const { return random_.GetPath(); }
+  base::FilePath program_files_path() const { return program_files_.GetPath(); }
+  base::FilePath local_app_data_path() const {
+    return local_app_data_.GetPath();
+  }
+  static bool is_system_level() { return GetParam(); }
+
+  base::FilePath GetExpectedPath(bool system_level) {
+    auto path = system_level ? program_files_path() : local_app_data_path();
+    return path.Append(install_static::GetChromeInstallSubDirectory())
+        .Append(kInstallBinaryDir);
+  }
+
+  static base::win::RegKey GetClientsRegKey() {
+    return base::win::RegKey(
+        is_system_level() ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
+        install_static::GetClientsKeyPath().c_str(),
+        KEY_SET_VALUE | KEY_WOW64_32KEY);
+  }
+
+  static base::win::RegKey GetClientStateRegKey() {
+    return base::win::RegKey(
+        is_system_level() ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
+        install_static::GetClientStateKeyPath().c_str(),
+        KEY_SET_VALUE | KEY_WOW64_32KEY);
+  }
+
+ private:
+  base::ScopedTempDir program_files_;
+  base::ScopedTempDir random_;
+  base::ScopedTempDir local_app_data_;
+  registry_util::RegistryOverrideManager registry_override_manager_;
+  base::Optional<base::ScopedPathOverride> program_files_override_;
+  base::Optional<base::ScopedPathOverride> local_data_app_override_;
+};
+
+TEST_P(GetChromeInstallPathTest, NoRegistryValue) {
+  EXPECT_EQ(GetChromeInstallPath(is_system_level()),
+            GetExpectedPath(is_system_level()));
+}
+
+TEST_P(GetChromeInstallPathTest, RegistryValueSet) {
+  base::win::RegKey client_state_key(GetClientStateRegKey());
+  ASSERT_EQ(client_state_key.WriteValue(
+                kUninstallStringField,
+                random_path()
+                    .Append(install_static::GetChromeInstallSubDirectory())
+                    .Append(kInstallBinaryDir)
+                    .AppendASCII("1.0.0.0\\Installer\\setup.exe")
+                    .value()
+                    .c_str()),
+            ERROR_SUCCESS);
+
+  base::win::RegKey client_key(GetClientsRegKey());
+  ASSERT_EQ(client_key.WriteValue(google_update::kRegVersionField, L"1.0.0.0"),
+            ERROR_SUCCESS);
+  EXPECT_EQ(GetChromeInstallPath(is_system_level()),
+            random_path()
+                .Append(install_static::GetChromeInstallSubDirectory())
+                .Append(kInstallBinaryDir));
+}
+
+TEST_P(GetChromeInstallPathTest, RegistryValueSetWrongScope) {
+  base::win::RegKey client_state_key(GetClientStateRegKey());
+  ASSERT_EQ(client_state_key.WriteValue(
+                kUninstallStringField,
+                random_path()
+                    .Append(install_static::GetChromeInstallSubDirectory())
+                    .Append(kInstallBinaryDir)
+                    .AppendASCII("1.0.0.0\\Installer\\setup.exe")
+                    .value()
+                    .c_str()),
+            ERROR_SUCCESS);
+
+  base::win::RegKey client_key(GetClientsRegKey());
+  ASSERT_EQ(client_key.WriteValue(google_update::kRegVersionField, L"1.0.0.0"),
+            ERROR_SUCCESS);
+  EXPECT_EQ(GetChromeInstallPath(!is_system_level()),
+            GetExpectedPath(!is_system_level()));
+}
+
+TEST_P(GetChromeInstallPathTest, RegistryValueSetNoProductVersion) {
+  base::win::RegKey client_state_key(GetClientStateRegKey());
+  ASSERT_EQ(client_state_key.WriteValue(
+                kUninstallStringField,
+                random_path()
+                    .Append(install_static::GetChromeInstallSubDirectory())
+                    .Append(kInstallBinaryDir)
+                    .AppendASCII("1.0.0.0\\Installer\\setup.exe")
+                    .value()
+                    .c_str()),
+            ERROR_SUCCESS);
+  EXPECT_EQ(GetChromeInstallPath(is_system_level()),
+            GetExpectedPath(is_system_level()));
+}
+
+INSTANTIATE_TEST_SUITE_P(UserLevelTest,
+                         GetChromeInstallPathTest,
+                         testing::Values(false));
+INSTANTIATE_TEST_SUITE_P(SystemLevelTest,
+                         GetChromeInstallPathTest,
+                         testing::Values(true));
+
+}  // namespace installer
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
index 718f7c85..b61dc7a6 100644
--- a/chrome/installer/util/shell_util.cc
+++ b/chrome/installer/util/shell_util.cc
@@ -872,11 +872,8 @@
 base::string16 GetInstallationSuffixForModeAtLevel(
     const install_static::InstallConstants& mode,
     bool system_install) {
-  // Search based on the default install location for the mode. If we ever
-  // support customizing the install location (https://crbug.com/113987,
-  // https://crbug.com/302491) this will have to change to something else, such
-  // as probing the Omaha keys in the registry to see where the mode is
-  // installed.
+  // Search based on the existing install location. If no existing install
+  // found, uses the default install location for the mode.
   const base::FilePath chrome_exe =
       installer::GetChromeInstallPath(system_install)
           .Append(installer::kChromeExe);
diff --git a/chrome/renderer/safe_browsing/DEPS b/chrome/renderer/safe_browsing/DEPS
index 76dae5d..d7b14f5 100644
--- a/chrome/renderer/safe_browsing/DEPS
+++ b/chrome/renderer/safe_browsing/DEPS
@@ -1,9 +1,11 @@
 include_rules = [
   "+components/safe_browsing/content/renderer",
+  "+components/safe_browsing/content/password_protection/visual_utils.h",
   "+components/safe_browsing/core/common",
   "+components/safe_browsing/core/proto/csd.pb.h",
   "+components/safe_browsing/core/proto/client_model.pb.h",
   "+components/safe_browsing/core/features.h",
+  "+cc/paint",
   "+third_party/smhasher",
 ]
 
diff --git a/chrome/renderer/safe_browsing/phishing_classifier.cc b/chrome/renderer/safe_browsing/phishing_classifier.cc
index 86aefb5..2d0492b 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier.cc
@@ -16,6 +16,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "cc/paint/skia_paint_canvas.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/renderer/safe_browsing/feature_extractor_clock.h"
 #include "chrome/renderer/safe_browsing/features.h"
@@ -158,34 +159,67 @@
 
 void PhishingClassifier::TermExtractionFinished(bool success) {
   if (success) {
-    blink::WebLocalFrame* main_frame = render_frame_->GetWebFrame();
-
-    // Hash all of the features so that they match the model, then compute
-    // the score.
-    FeatureMap hashed_features;
-    ClientPhishingRequest verdict;
-    verdict.set_model_version(scorer_->model_version());
-    verdict.set_url(main_frame->GetDocument().Url().GetString().Utf8());
-    for (const auto& it : features_->features()) {
-      bool result = hashed_features.AddRealFeature(
-          crypto::SHA256HashString(it.first), it.second);
-      DCHECK(result);
-      ClientPhishingRequest::Feature* feature = verdict.add_feature_map();
-      feature->set_name(it.first);
-      feature->set_value(it.second);
-    }
-    for (const auto& it : *shingle_hashes_) {
-      verdict.add_shingle_hashes(it);
-    }
-    float score = static_cast<float>(scorer_->ComputeScore(hashed_features));
-    verdict.set_client_score(score);
-    verdict.set_is_phishing(score >= scorer_->threshold_probability());
-    RunCallback(verdict);
+    ExtractVisualFeatures();
   } else {
     RunFailureCallback();
   }
 }
 
+void PhishingClassifier::ExtractVisualFeatures() {
+  blink::WebLocalFrame* frame = render_frame_->GetWebFrame();
+  gfx::Rect bounds = gfx::Rect(0, 0, frame->DocumentSize().width,
+                               frame->DocumentSize().height);
+  bitmap_ = std::make_unique<SkBitmap>();
+  // Use the Rec. 2020 color space, in case the user input is wide-gamut.
+  sk_sp<SkColorSpace> rec2020 = SkColorSpace::MakeRGB(
+      {2.22222f, 0.909672f, 0.0903276f, 0.222222f, 0.0812429f, 0, 0},
+      SkNamedGamut::kRec2020);
+  SkImageInfo bitmap_info = SkImageInfo::Make(
+      bounds.width(), bounds.height(), SkColorType::kRGBA_8888_SkColorType,
+      SkAlphaType::kUnpremul_SkAlphaType, rec2020);
+  if (!bitmap_->tryAllocPixels(bitmap_info))
+    return VisualExtractionFinished(/*success=*/false);
+  SkCanvas sk_canvas(*bitmap_);
+  cc::SkiaPaintCanvas cc_canvas(&sk_canvas);
+  VisualExtractionFinished(frame->CapturePaintPreview(bounds, &cc_canvas));
+}
+
+void PhishingClassifier::VisualExtractionFinished(bool success) {
+  if (!success) {
+    RunFailureCallback();
+    return;
+  }
+
+  blink::WebLocalFrame* main_frame = render_frame_->GetWebFrame();
+
+  // Hash all of the features so that they match the model, then compute
+  // the score.
+  FeatureMap hashed_features;
+  ClientPhishingRequest verdict;
+  verdict.set_model_version(scorer_->model_version());
+  verdict.set_url(main_frame->GetDocument().Url().GetString().Utf8());
+  for (const auto& it : features_->features()) {
+    bool result = hashed_features.AddRealFeature(
+        crypto::SHA256HashString(it.first), it.second);
+    DCHECK(result);
+    ClientPhishingRequest::Feature* feature = verdict.add_feature_map();
+    feature->set_name(it.first);
+    feature->set_value(it.second);
+  }
+  for (const auto& it : *shingle_hashes_) {
+    verdict.add_shingle_hashes(it);
+  }
+  float score = static_cast<float>(scorer_->ComputeScore(hashed_features));
+  verdict.set_client_score(score);
+  verdict.set_is_phishing(score >= scorer_->threshold_probability());
+
+  if (scorer_->GetMatchingVisualTargets(*bitmap_, &verdict)) {
+    verdict.set_is_phishing(true);
+  }
+
+  RunCallback(verdict);
+}
+
 void PhishingClassifier::CheckNoPendingClassification() {
   DCHECK(done_callback_.is_null());
   DCHECK(!page_text_);
@@ -215,6 +249,7 @@
   done_callback_.Reset();
   features_.reset(nullptr);
   shingle_hashes_.reset(nullptr);
+  bitmap_.reset(nullptr);
 }
 
 }  // namespace safe_browsing
diff --git a/chrome/renderer/safe_browsing/phishing_classifier.h b/chrome/renderer/safe_browsing/phishing_classifier.h
index 9528c434..f6f5aad2 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier.h
+++ b/chrome/renderer/safe_browsing/phishing_classifier.h
@@ -27,6 +27,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
+#include "third_party/skia/include/core/SkBitmap.h"
 
 namespace content {
 class RenderFrame;
@@ -110,10 +111,18 @@
   void DOMExtractionFinished(bool success);
 
   // Callback to be run when term feature extraction is complete.
+  // If it was successful, begins visual feature extraction, otherwise runs the
+  // DoneCallback with a non-phishy verdict.
+  void TermExtractionFinished(bool success);
+
+  // Called to extract the visual features of the current page.
+  void ExtractVisualFeatures();
+
+  // Callback when visual feature extraction is complete.
   // If it was successful, computes a score and runs the DoneCallback.
   // If extraction was unsuccessful, runs the DoneCallback with a
   // non-phishy verdict.
-  void TermExtractionFinished(bool success);
+  void VisualExtractionFinished(bool success);
 
   // Helper to verify that there is no pending phishing classification.  Dies
   // in debug builds if the state is not as expected.  This is a no-op in
@@ -141,6 +150,7 @@
   std::unique_ptr<FeatureMap> features_;
   std::unique_ptr<std::set<uint32_t>> shingle_hashes_;
   const base::string16* page_text_;  // owned by the caller
+  std::unique_ptr<SkBitmap> bitmap_;
   DoneCallback done_callback_;
 
   // Used in scheduling BeginFeatureExtraction tasks.
diff --git a/chrome/renderer/safe_browsing/scorer.cc b/chrome/renderer/safe_browsing/scorer.cc
index 8e37a934..a04122ad 100644
--- a/chrome/renderer/safe_browsing/scorer.cc
+++ b/chrome/renderer/safe_browsing/scorer.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_piece.h"
 #include "chrome/renderer/safe_browsing/features.h"
+#include "components/safe_browsing/content/password_protection/visual_utils.h"
 #include "components/safe_browsing/core/proto/client_model.pb.h"
 
 namespace {
@@ -86,6 +87,21 @@
   return LogOdds2Prob(logodds);
 }
 
+bool Scorer::GetMatchingVisualTargets(const SkBitmap& bitmap,
+                                      ClientPhishingRequest* request) const {
+  bool has_match = false;
+  for (const VisualTarget& target : model_.vision_model().targets()) {
+    base::Optional<VisionMatchResult> result =
+        visual_utils::IsVisualMatch(bitmap, target);
+    if (result.has_value()) {
+      *request->add_vision_match() = result.value();
+      has_match = true;
+    }
+  }
+
+  return has_match;
+}
+
 int Scorer::model_version() const {
   return model_.version();
 }
diff --git a/chrome/renderer/safe_browsing/scorer.h b/chrome/renderer/safe_browsing/scorer.h
index 5fda83d..597b4cf0 100644
--- a/chrome/renderer/safe_browsing/scorer.h
+++ b/chrome/renderer/safe_browsing/scorer.h
@@ -23,6 +23,7 @@
 #include "base/macros.h"
 #include "base/strings/string_piece.h"
 #include "components/safe_browsing/core/proto/client_model.pb.h"
+#include "third_party/skia/include/core/SkBitmap.h"
 
 namespace safe_browsing {
 class FeatureMap;
@@ -41,6 +42,11 @@
   // (range is inclusive on both ends).
   virtual double ComputeScore(const FeatureMap& features) const;
 
+  // This method matches the given |bitmap| against the visual model. It returns
+  // true if any visual target matches, and populates |request| appropriately.
+  virtual bool GetMatchingVisualTargets(const SkBitmap& bitmap,
+                                        ClientPhishingRequest* request) const;
+
   // Returns the version number of the loaded client model.
   int model_version() const;
 
diff --git a/chrome/renderer/safe_browsing/scorer_unittest.cc b/chrome/renderer/safe_browsing/scorer_unittest.cc
index 9ea41fd1..9083eca 100644
--- a/chrome/renderer/safe_browsing/scorer_unittest.cc
+++ b/chrome/renderer/safe_browsing/scorer_unittest.cc
@@ -59,9 +59,39 @@
     model_.set_murmur_hash_seed(12345U);
     model_.set_max_shingles_per_page(10);
     model_.set_shingle_size(3);
+
+    // The first target hash is all 1-bits, except the first 8.
+    std::vector<unsigned char> target_hash;
+    target_hash.push_back('\x30');
+    for (int i = 0; i < 288; i++)
+      target_hash.push_back('\xff');
+    target_hash[1] = '\x00';
+    VisualTarget* target1 = model_.mutable_vision_model()->add_targets();
+    target1->set_digest("target1");
+    target1->set_hash(target_hash.data(), target_hash.size());
+    target1->mutable_match_config()->add_match_rule()->set_hash_distance(8.0);
+
+    // The second target hash is all 1-bits, except the second 8.
+    target_hash[1] = '\xff';
+    target_hash[2] = '\x00';
+    VisualTarget* target2 = model_.mutable_vision_model()->add_targets();
+    target2->set_digest("target2");
+    target2->set_hash(target_hash.data(), target_hash.size());
+    target2->mutable_match_config()->add_match_rule()->set_hash_distance(8.0);
+
+    // Allocate a bitmap for testing visual scoring
+    sk_sp<SkColorSpace> rec2020 = SkColorSpace::MakeRGB(
+        {2.22222f, 0.909672f, 0.0903276f, 0.222222f, 0.0812429f, 0, 0},
+        SkNamedGamut::kRec2020);
+    SkImageInfo bitmap_info =
+        SkImageInfo::Make(1000, 1000, SkColorType::kRGBA_8888_SkColorType,
+                          SkAlphaType::kUnpremul_SkAlphaType, rec2020);
+
+    ASSERT_TRUE(bitmap_.tryAllocPixels(bitmap_info));
   }
 
   ClientSideModel model_;
+  SkBitmap bitmap_;
 };
 
 TEST_F(PhishingScorerTest, HasValidModel) {
@@ -145,4 +175,48 @@
   EXPECT_TRUE(features.AddBooleanFeature("feature2"));
   EXPECT_DOUBLE_EQ(0.77729986117469119, scorer->ComputeScore(features));
 }
+
+TEST_F(PhishingScorerTest, GetMatchingVisualTargetsMatchOne) {
+  std::unique_ptr<Scorer> scorer(Scorer::Create(model_.SerializeAsString()));
+
+  // Make the whole image white
+  for (int x = 0; x < 1000; x++)
+    for (int y = 0; y < 1000; y++)
+      *bitmap_.getAddr32(x, y) = 0xffffffff;
+
+  // Make the first 164 pixels black. This will make the first 8 bits of the
+  // hash 0.
+  for (int x = 0; x < 164; x++)
+    *bitmap_.getAddr32(x, 0) = 0xff000000;
+
+  ClientPhishingRequest request;
+  scorer->GetMatchingVisualTargets(bitmap_, &request);
+  ASSERT_EQ(request.vision_match_size(), 1);
+  EXPECT_EQ(request.vision_match(0).matched_target_digest(), "target1");
+}
+
+TEST_F(PhishingScorerTest, GetMatchingVisualTargetsMatchBoth) {
+  std::unique_ptr<Scorer> scorer(Scorer::Create(model_.SerializeAsString()));
+
+  // Make the whole image white
+  for (int x = 0; x < 1000; x++)
+    for (int y = 0; y < 1000; y++)
+      *bitmap_.getAddr32(x, y) = 0xffffffff;
+
+  // Create an alternating black/white pattern to match both targets. The
+  // pattern is 84 black pixels, then 84 white, then 84 black, then 84 white.
+  // This causes the hash to start 0F0F, for a distance of 8 from both targets.
+  for (int x = 0; x < 84; x++)
+    *bitmap_.getAddr32(x, 0) = 0xff000000;
+
+  for (int x = 168; x < 248; x++)
+    *bitmap_.getAddr32(x, 0) = 0xff000000;
+
+  ClientPhishingRequest request;
+  scorer->GetMatchingVisualTargets(bitmap_, &request);
+  ASSERT_EQ(request.vision_match_size(), 2);
+  EXPECT_EQ(request.vision_match(0).matched_target_digest(), "target1");
+  EXPECT_EQ(request.vision_match(1).matched_target_digest(), "target2");
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/services/sharing/nearby_decoder/BUILD.gn b/chrome/services/sharing/nearby_decoder/BUILD.gn
index ca099e1..6b7666f 100644
--- a/chrome/services/sharing/nearby_decoder/BUILD.gn
+++ b/chrome/services/sharing/nearby_decoder/BUILD.gn
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//testing/libfuzzer/fuzzer_test.gni")
+
 source_set("nearby_decoder") {
   sources = [
     "advertisement.cc",
@@ -34,3 +36,12 @@
     "//testing/gtest",
   ]
 }
+
+fuzzer_test("nearby_decoder_fuzzer") {
+  sources = [ "nearby_decoder_fuzzer.cc" ]
+  deps = [
+    ":nearby_decoder",
+    "//base",
+    "//mojo/core/embedder",
+  ]
+}
diff --git a/chrome/services/sharing/nearby_decoder/DEPS b/chrome/services/sharing/nearby_decoder/DEPS
new file mode 100644
index 0000000..fa225c4
--- /dev/null
+++ b/chrome/services/sharing/nearby_decoder/DEPS
@@ -0,0 +1,5 @@
+specific_include_rules = {
+  "nearby_decoder_fuzzer.cc": [
+    "+mojo/core/embedder/embedder.h",
+  ]
+}
diff --git a/chrome/services/sharing/nearby_decoder/nearby_decoder_fuzzer.cc b/chrome/services/sharing/nearby_decoder/nearby_decoder_fuzzer.cc
new file mode 100644
index 0000000..b9a796f
--- /dev/null
+++ b/chrome/services/sharing/nearby_decoder/nearby_decoder_fuzzer.cc
@@ -0,0 +1,53 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/services/sharing/nearby_decoder/nearby_decoder.h"
+
+#include <stddef.h>
+#include <stdint.h>
+#include <memory>
+#include <vector>
+
+#include "base/logging.h"
+#include "base/no_destructor.h"
+#include "base/run_loop.h"
+#include "base/task/single_thread_task_executor.h"
+#include "chrome/services/sharing/public/mojom/nearby_decoder.mojom.h"
+#include "chrome/services/sharing/public/mojom/nearby_decoder_types.mojom.h"
+#include "mojo/core/embedder/embedder.h"
+#include "mojo/public/cpp/bindings/remote.h"
+
+struct Environment {
+  Environment() {
+    mojo::core::Init();
+    // Disable noisy logging as per "libFuzzer in Chrome" documentation:
+    // testing/libfuzzer/getting_started.md#Disable-noisy-error-message-logging.
+    logging::SetMinLogLevel(logging::LOG_FATAL);
+
+    // Create instance once to be reused between fuzzing rounds.
+    decoder = std::make_unique<sharing::NearbySharingDecoder>(
+        remote.BindNewPipeAndPassReceiver());
+  }
+
+  base::SingleThreadTaskExecutor task_executor;
+  mojo::Remote<sharing::mojom::NearbySharingDecoder> remote;
+  std::unique_ptr<sharing::NearbySharingDecoder> decoder;
+};
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  static base::NoDestructor<Environment> environment;
+
+  std::vector<uint8_t> buffer(data, data + size);
+  base::RunLoop run_loop;
+  environment->decoder->DecodeAdvertisement(
+      buffer, base::BindOnce(
+                  [](base::RunLoop* run_loop,
+                     sharing::mojom::AdvertisementPtr advertisement) {
+                    run_loop->Quit();
+                  },
+                  &run_loop));
+  run_loop.Run();
+
+  return 0;
+}
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 6509c9ce..e772fe62 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3047,7 +3047,6 @@
     "../browser/android/oom_intervention/oom_intervention_decider_unittest.cc",
     "../browser/android/password_edit_delegate_settings_impl_unittest.cc",
     "../browser/android/password_ui_view_android_unittest.cc",
-    "../browser/android/preferences/prefs_unittest.cc",
     "../browser/android/shortcut_info_unittest.cc",
     "../browser/android/signin/signin_manager_android_unittest.cc",
     "../browser/android/usage_stats/usage_stats_database_unittest.cc",
@@ -3165,6 +3164,7 @@
     "../browser/internal_auth_unittest.cc",
     "../browser/language/language_model_manager_factory_unittest.cc",
     "../browser/language/url_language_histogram_factory_unittest.cc",
+    "../browser/lite_video/lite_video_hint_cache_unittest.cc",
     "../browser/logging_chrome_unittest.cc",
     "../browser/mac/exception_processor_unittest.mm",
     "../browser/mac/keystone_glue_unittest.mm",
@@ -3306,6 +3306,7 @@
     "../browser/policy/javascript_policy_handler_unittest.cc",
     "../browser/policy/messaging_layer/encryption/test_encryption_module.cc",
     "../browser/policy/messaging_layer/encryption/test_encryption_module.h",
+    "../browser/policy/messaging_layer/public/report_client_unittest.cc",
     "../browser/policy/messaging_layer/public/report_queue_configuration_unittest.cc",
     "../browser/policy/messaging_layer/public/report_queue_unittest.cc",
     "../browser/policy/messaging_layer/storage/test_storage_module.cc",
@@ -3424,7 +3425,7 @@
     "../browser/signin/signin_status_metrics_provider_chromeos_unittest.cc",
     "../browser/signin/test_signin_client_builder.cc",
     "../browser/signin/test_signin_client_builder.h",
-    "../browser/site_isolation/site_isolation_policy_unittest.cc",
+    "../browser/site_isolation/chrome_site_isolation_policy_unittest.cc",
     "../browser/ssl/certificate_error_reporter_unittest.cc",
     "../browser/ssl/certificate_reporting_test_utils.cc",
     "../browser/ssl/certificate_reporting_test_utils.h",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorTestUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorTestUtils.java
index 4a432db..637263c3 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorTestUtils.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorTestUtils.java
@@ -4,6 +4,9 @@
 
 package org.chromium.chrome.browser.omnibox.suggestions;
 
+import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteMediator.DropdownItemViewInfo;
+import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
+
 /**
  * Utility methods providing access to package-private methods in {@link AutocompleteCoordinator}
  * for tests.
@@ -34,4 +37,28 @@
             AutocompleteCoordinator coordinator) {
         return ((AutocompleteCoordinatorImpl) coordinator).getSuggestionsDropdown();
     }
+
+    /**
+     * @return The {@link OmniboxSuggestion} at the specified index.
+     */
+    public static OmniboxSuggestion getOmniboxSuggestionAt(
+            AutocompleteCoordinator coordinator, int index) {
+        return coordinator.getSuggestionAt(index);
+    }
+
+    /**
+     * @return The index of the first suggestion which is |type|.
+     */
+    public static int getIndexForFirstSuggestionOfType(
+            AutocompleteCoordinator coordinator, @OmniboxSuggestionUiType int type) {
+        ModelList currentModels =
+                ((AutocompleteCoordinatorImpl) coordinator).getSuggestionModelList();
+        for (int i = 0; i < currentModels.size(); i++) {
+            DropdownItemViewInfo info = (DropdownItemViewInfo) currentModels.get(i);
+            if (info.type == type) {
+                return i;
+            }
+        }
+        return -1;
+    }
 }
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestRule.java
index 6ed96232..a562d62 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestRule.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestRule.java
@@ -120,7 +120,11 @@
                 // views that may make tests flaky.
                 Features.getInstance().disable(ChromeFeatureList.OFFLINE_INDICATOR);
 
-                base.evaluate();
+                try {
+                    base.evaluate();
+                } finally {
+                    ruleTearDown();
+                }
             }
         };
         Statement testServerStatement = mTestServerRule.apply(chromeActivityStatement, description);
@@ -134,19 +138,13 @@
         return ACTIVITY_START_TIMEOUT_MS;
     }
 
-    @Override
-    protected void afterActivityFinished() {
+    private void ruleTearDown() {
         try {
-            if (mSetActivity != null) {
-                // Destroy the activity launched manually in this test rule.
-                ApplicationTestUtils.finishActivity(mSetActivity);
-            }
             ApplicationTestUtils.tearDown(InstrumentationRegistry.getTargetContext());
             Thread.setDefaultUncaughtExceptionHandler(mDefaultUncaughtExceptionHandler);
         } catch (Exception e) {
             throw new RuntimeException("Failed to tearDown", e);
         }
-        super.afterActivityFinished();
     }
 
     // TODO(yolandyan): remove this once startActivityCompletely is refactored out of
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java
index c641211..169213a 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java
@@ -68,7 +68,10 @@
 
     public static void tearDown(Context context) {
         Assert.assertNotNull("Uninitialized wake lock", sWakeLock);
-        sWakeLock.release();
+        if (sWakeLock.isHeld()) {
+            // Make sure that sWakeLock is only released from being held state
+            sWakeLock.release();
+        }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             try {
                 finishAllChromeTasks(context);
diff --git a/chrome/test/data/android/portals/media-capture-portal.html b/chrome/test/data/android/portals/media-capture-portal.html
index 5fdf115..906e56c 100644
--- a/chrome/test/data/android/portals/media-capture-portal.html
+++ b/chrome/test/data/android/portals/media-capture-portal.html
@@ -13,5 +13,12 @@
       await adoptionCompletePromise;
       domAutomationController.send(true);
     }
+
+    function activate() {
+      let portal = document.querySelector('portal');
+      portal.activate().then(() => {
+        document.body.removeChild(portal);
+      });
+    }
   </script>
 </body>
diff --git a/chrome/test/data/android/portals/media-notification.html b/chrome/test/data/android/portals/media-notification.html
new file mode 100644
index 0000000..30aaaf4
--- /dev/null
+++ b/chrome/test/data/android/portals/media-notification.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<body>
+  <video id="video" src="../media/test.webm" loop></video>
+  <portal src="media-capture-portal.html"></portal>
+  <script>
+    let video = document.querySelector('video');
+    video.onclick = () => {
+      video.play();
+    }
+
+    function activate() {
+      let portal = document.querySelector('portal');
+      portal.activate();
+    }
+  </script>
+</body>
diff --git a/chrome/test/data/geolocation/geolocation_on_load.html b/chrome/test/data/geolocation/geolocation_on_load.html
index d83a0f6..d09d53d 100644
--- a/chrome/test/data/geolocation/geolocation_on_load.html
+++ b/chrome/test/data/geolocation/geolocation_on_load.html
@@ -29,14 +29,14 @@
   var lng = position.coords.longitude;
   document.getElementById('lat').innerHTML = lat;
   document.getElementById('lng').innerHTML = lng;
-  window.document.title = "Granted:1";
+  window.document.title = "Granted";
 }
 
 function showError(positionError) {
   document.getElementById('lat').innerHTML =
-      positionError.message;  
+      positionError.message;
   document.getElementById('lng').innerHTML = '';
-  window.document.title = "Denied:1";
+  window.document.title = "Denied";
 }
 
     </script>
diff --git a/chrome/test/data/notifications/notification_tester.html b/chrome/test/data/notifications/notification_tester.html
index 769c243..be82a17 100644
--- a/chrome/test/data/notifications/notification_tester.html
+++ b/chrome/test/data/notifications/notification_tester.html
@@ -98,6 +98,7 @@
 function sendResultToTest(result) {
   // Convert the result to a string.
   var stringResult = "" + result;
+  window.document.title = stringResult;
   if (typeof stringResult != "string")
     stringResult = JSON.stringify(result);
   window.domAutomationController.send(stringResult);
diff --git a/chrome/test/data/prerender/appcache.manifest b/chrome/test/data/prerender/appcache.manifest
index a4ca9c2..7f3f095 100644
--- a/chrome/test/data/prerender/appcache.manifest
+++ b/chrome/test/data/prerender/appcache.manifest
@@ -1,2 +1,5 @@
 CACHE MANIFEST
-REPLACE_WITH_URL
+image.png
+prefetch_page.html
+ORIGIN-TRIAL:
+AseQL1+xng7ZqEbO0mynsp3rl7CUC0u7b79iWgwSIpIjhJfUp/W+O9K2dL8kvdUjOeLssX0mToI2Bvjn0af0Hw0AAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDgwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2Mzg1NjU2Mn0=
diff --git a/chrome/test/data/prerender/isolated/prefetch-redirect-end.js b/chrome/test/data/prerender/isolated/prefetch-redirect-end.js
new file mode 100644
index 0000000..9958ef7
--- /dev/null
+++ b/chrome/test/data/prerender/isolated/prefetch-redirect-end.js
@@ -0,0 +1,5 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var theScriptHasExecuted = true;
diff --git a/chrome/test/data/prerender/isolated/prefetch-redirect-middle.js b/chrome/test/data/prerender/isolated/prefetch-redirect-middle.js
new file mode 100644
index 0000000..d5e9641
--- /dev/null
+++ b/chrome/test/data/prerender/isolated/prefetch-redirect-middle.js
@@ -0,0 +1,5 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+console.log("hello world");
diff --git a/chrome/test/data/prerender/isolated/prefetch-redirect-middle.js.mock-http-headers b/chrome/test/data/prerender/isolated/prefetch-redirect-middle.js.mock-http-headers
new file mode 100644
index 0000000..640ed06
--- /dev/null
+++ b/chrome/test/data/prerender/isolated/prefetch-redirect-middle.js.mock-http-headers
@@ -0,0 +1,2 @@
+HTTP/1.1 302 Found
+Location: prefetch-redirect-end.js
diff --git a/chrome/test/data/prerender/isolated/prefetch-redirect-start.js b/chrome/test/data/prerender/isolated/prefetch-redirect-start.js
new file mode 100644
index 0000000..d5e9641
--- /dev/null
+++ b/chrome/test/data/prerender/isolated/prefetch-redirect-start.js
@@ -0,0 +1,5 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+console.log("hello world");
diff --git a/chrome/test/data/prerender/isolated/prefetch-redirect-start.js.mock-http-headers b/chrome/test/data/prerender/isolated/prefetch-redirect-start.js.mock-http-headers
new file mode 100644
index 0000000..18f503a
--- /dev/null
+++ b/chrome/test/data/prerender/isolated/prefetch-redirect-start.js.mock-http-headers
@@ -0,0 +1,2 @@
+HTTP/1.1 302 Found
+Location: prefetch-redirect-middle.js
diff --git a/chrome/test/data/prerender/isolated/prefetch.js b/chrome/test/data/prerender/isolated/prefetch.js
new file mode 100644
index 0000000..9958ef7
--- /dev/null
+++ b/chrome/test/data/prerender/isolated/prefetch.js
@@ -0,0 +1,5 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var theScriptHasExecuted = true;
diff --git a/chrome/test/data/prerender/isolated/prefetch_page.html b/chrome/test/data/prerender/isolated/prefetch_page.html
new file mode 100644
index 0000000..00bae11c8
--- /dev/null
+++ b/chrome/test/data/prerender/isolated/prefetch_page.html
@@ -0,0 +1,17 @@
+<html>
+<!--
+Copyright (c) 2020 The Chromium Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+<body>
+  <script src="prefetch.js"></script>
+  <script src="prefetch-redirect-start.js"></script>
+  <script>
+    var s = document.createElement("script");
+    s.src = "prefetch2.js";
+    document.body.appendChild(s);
+  </script>
+  Some content that is necessary for registering paint metrics.
+</body>
+</html>
diff --git a/chrome/test/data/prerender/prefetch_appcache.html b/chrome/test/data/prerender/prefetch_appcache.html
index bbe1c09b..3e3ecaa 100644
--- a/chrome/test/data/prerender/prefetch_appcache.html
+++ b/chrome/test/data/prerender/prefetch_appcache.html
@@ -1,7 +1,14 @@
-<html manifest="REPLACE_WITH_MANIFEST">
+<html manifest="appcache.manifest">
 <!--
 A stub page used to set up an AppCache manifest.
---> 
+-->
+
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py --version=2 http://127.0.0.1:8080 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AseQL1+xng7ZqEbO0mynsp3rl7CUC0u7b79iWgwSIpIjhJfUp/W+O9K2dL8kvdUjOeLssX0mToI2Bvjn0af0Hw0AAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDgwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2Mzg1NjU2Mn0=">
+
 <body>
   <script src="prefetch.js"></script>
   <img src="image.png"/>
diff --git a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
index 5e77154..54aa026 100644
--- a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
@@ -239,6 +239,19 @@
 });
 
 // eslint-disable-next-line no-var
+var CrSettingsPasswordsDeviceSectionV3Test =
+    class extends CrSettingsV3BrowserTest {
+  /** @override */
+  get browsePreload() {
+    return 'chrome://settings/test_loader.html?module=settings/passwords_device_section_test.js';
+  }
+};
+
+TEST_F('CrSettingsPasswordsDeviceSectionV3Test', 'All', function() {
+  mocha.run();
+});
+
+// eslint-disable-next-line no-var
 var CrSettingsMultiStoreExceptionEntryV3Test =
     class extends CrSettingsV3BrowserTest {
   /** @override */
diff --git a/chrome/test/data/webui/settings/passwords_device_section_test.js b/chrome/test/data/webui/settings/passwords_device_section_test.js
new file mode 100644
index 0000000..455e2d8
--- /dev/null
+++ b/chrome/test/data/webui/settings/passwords_device_section_test.js
@@ -0,0 +1,184 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/** @fileoverview Runs the Polymer tests for the PasswordsDeviceSection page. */
+
+import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {MultiStorePasswordUiEntry, PasswordManagerImpl, PasswordManagerProxy} from 'chrome://settings/settings.js';
+import {createMultiStorePasswordEntry, createPasswordEntry} from 'chrome://test/settings/passwords_and_autofill_fake_data.js';
+import {simulateStoredAccounts, simulateSyncStatus} from 'chrome://test/settings/sync_test_util.m.js';
+import {TestPasswordManagerProxy} from 'chrome://test/settings/test_password_manager_proxy.js';
+
+/**
+ * Sets the fake data and creates the element for testing.
+ * @param {!TestPasswordManagerProxy} passwordManager
+ * @param {!Array<!chrome.passwordsPrivate.PasswordUiEntry>} passwordList
+ * @return {!Object}
+ */
+function createPasswordsDeviceSection(passwordManager, passwordList) {
+  passwordManager.data.passwords = passwordList;
+  const passwordsDeviceSection =
+      document.createElement('passwords-device-section');
+  document.body.appendChild(passwordsDeviceSection);
+  flush();
+  return passwordsDeviceSection;
+}
+
+/**
+ * @param {!Element} subsection The passwords subsection element that will be
+ * checked.
+ * @param {!Array<!MultiStorePasswordUiEntry>} expectedPasswords The
+ *     expected passwords in this subsection.
+ * @private
+ */
+function validatePasswordsSubsection(subsection, expectedPasswords) {
+  assertDeepEquals(expectedPasswords, subsection.items);
+  const listItemElements = subsection.querySelectorAll('password-list-item');
+  for (let index = 0; index < expectedPasswords.length; ++index) {
+    const expectedPassword = expectedPasswords[index];
+    const listItemElement = listItemElements[index];
+    assertTrue(!!listItemElement);
+    assertEquals(
+        expectedPassword.urls.shown,
+        listItemElement.$.originUrl.textContent.trim());
+    assertEquals(expectedPassword.urls.link, listItemElement.$.originUrl.href);
+    assertEquals(expectedPassword.username, listItemElement.$.username.value);
+  }
+}
+
+suite('PasswordsDeviceSection', function() {
+  /** @type {TestPasswordManagerProxy} */
+  let passwordManager = null;
+
+  suiteSetup(function() {
+    // Enable feature flag.
+    loadTimeData.overrideValues({enableAccountStorage: true});
+  });
+
+  setup(function() {
+    PolymerTest.clearBody();
+    passwordManager = new TestPasswordManagerProxy();
+    PasswordManagerImpl.instance_ = passwordManager;
+
+    // The user only enters this page when they are eligible (signed-in but not
+    // syncing) and opted-in to account storage.
+    simulateStoredAccounts([{
+      fullName: 'john doe',
+      givenName: 'john',
+      email: 'john@gmail.com',
+    }]);
+    simulateSyncStatus({signedIn: false});
+    passwordManager.setIsOptedInForAccountStorageAndNotify(false);
+  });
+
+  // Test verifies that the fallback text is displayed when passwords are not
+  // present.
+  test('verifyPasswordsEmptySubsections', function() {
+    const passwordsDeviceSection =
+        createPasswordsDeviceSection(passwordManager, []);
+    assertFalse(passwordsDeviceSection.shadowRoot
+                    .querySelector('#noDeviceAndAccountPasswordsLabel')
+                    .hidden);
+    assertFalse(passwordsDeviceSection.shadowRoot
+                    .querySelector('#noDeviceAndAccountPasswordsLabel')
+                    .hidden);
+  });
+
+  // Test verifies that account passwords are not displayed, whereas
+  // device-only and device-and-account ones end up in the correct subsection.
+  test('verifyPasswordsFilledSubsections', function() {
+    const devicePassword = createPasswordEntry(
+        {username: 'device', id: 0, fromAccountStore: false});
+    const accountPassword = createPasswordEntry(
+        {username: 'account', id: 1, fromAccountStore: true});
+    // Create duplicate that gets merged.
+    const deviceCopyPassword = createPasswordEntry(
+        {username: 'both', frontendId: 42, id: 2, fromAccountStore: false});
+    const accountCopyPassword = createPasswordEntry(
+        {username: 'both', frontendId: 42, id: 3, fromAccountStore: true});
+
+    // Shuffle entries a little.
+    const passwordsDeviceSection =
+        createPasswordsDeviceSection(passwordManager, [
+          devicePassword,
+          deviceCopyPassword,
+          accountPassword,
+          accountCopyPassword,
+        ]);
+
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceOnlyPasswordList, [
+          createMultiStorePasswordEntry({username: 'device', deviceId: 0}),
+        ]);
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceAndAccountPasswordList, [
+          createMultiStorePasswordEntry(
+              {username: 'both', deviceId: 2, accountId: 3}),
+        ]);
+    assertTrue(passwordsDeviceSection.shadowRoot
+                   .querySelector('#noDeviceAndAccountPasswordsLabel')
+                   .hidden);
+    assertTrue(passwordsDeviceSection.shadowRoot
+                   .querySelector('#noDeviceAndAccountPasswordsLabel')
+                   .hidden);
+  });
+
+  // Test verifies that removing the device copy of a duplicated password
+  // removes it from both lists.
+  test('verifyPasswordListRemoveDeviceCopy', function() {
+    const passwordList = [
+      createPasswordEntry({frontendId: 42, id: 10, fromAccountStore: true}),
+      createPasswordEntry({frontendId: 42, id: 20, fromAccountStore: false}),
+    ];
+
+    const passwordsDeviceSection =
+        createPasswordsDeviceSection(passwordManager, passwordList);
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceOnlyPasswordList, []);
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceAndAccountPasswordList,
+        [createMultiStorePasswordEntry({accountId: 10, deviceId: 20})]);
+
+    // Remove device copy.
+    passwordList.splice(1, 1);
+    passwordManager.lastCallback.addSavedPasswordListChangedListener(
+        passwordList);
+    flush();
+
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceOnlyPasswordList, []);
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceAndAccountPasswordList, []);
+  });
+
+  // Test verifies that removing the account copy of a duplicated password
+  // moves it to the other subsection.
+  test('verifyPasswordListRemoveDeviceCopy', function() {
+    const passwordList = [
+      createPasswordEntry({frontendId: 42, id: 10, fromAccountStore: true}),
+      createPasswordEntry({frontendId: 42, id: 20, fromAccountStore: false}),
+    ];
+
+    const passwordsDeviceSection =
+        createPasswordsDeviceSection(passwordManager, passwordList);
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceOnlyPasswordList, []);
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceAndAccountPasswordList,
+        [createMultiStorePasswordEntry({accountId: 10, deviceId: 20})]);
+
+    // Remove account copy.
+    passwordList.splice(0, 1);
+    passwordManager.lastCallback.addSavedPasswordListChangedListener(
+        passwordList);
+    flush();
+
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceOnlyPasswordList,
+        [createMultiStorePasswordEntry({deviceId: 20})]);
+    validatePasswordsSubsection(
+        passwordsDeviceSection.$.deviceAndAccountPasswordList, []);
+  });
+});
diff --git a/chrome/test/data/webui/settings/passwords_section_test.js b/chrome/test/data/webui/settings/passwords_section_test.js
index f5eb555..e8e714eb 100644
--- a/chrome/test/data/webui/settings/passwords_section_test.js
+++ b/chrome/test/data/webui/settings/passwords_section_test.js
@@ -27,23 +27,21 @@
  * the expected data.
  * @param {!Element} passwordsSection The passwords section element that will
  *     be checked.
- * @param {!Array<!MultiStorePasswordUiEntry>} passwordList The expected data.
+ * @param {!Array<!MultiStorePasswordUiEntry>} expectedPasswords The expected
+ *     data.
  * @private
  */
-function validateMultiStorePasswordList(passwordsSection, passwordList) {
-  const listElement = passwordsSection.$.passwordList;
-  assertEquals(passwordList.length, listElement.items.length);
-  for (let index = 0; index < passwordList.length; ++index) {
-    const listItems =
-        passwordsSection.shadowRoot.querySelectorAll('password-list-item');
-    const node = listItems[index];
-    assertTrue(!!node);
-    const passwordInfo = passwordList[index];
-    assertEquals(
-        passwordInfo.urls.shown, node.$$('#originUrl').textContent.trim());
-    assertEquals(passwordInfo.urls.link, node.$$('#originUrl').href);
-    assertEquals(passwordInfo.username, node.$$('#username').value);
-    assertDeepEquals(listElement.items[index], passwordInfo);
+function validateMultiStorePasswordList(passwordsSection, expectedPasswords) {
+  assertDeepEquals(expectedPasswords, passwordsSection.$.passwordList.items);
+  const listItems =
+      passwordsSection.shadowRoot.querySelectorAll('password-list-item');
+  for (let index = 0; index < expectedPasswords.length; ++index) {
+    const expected = expectedPasswords[index];
+    const listItem = listItems[index];
+    assertTrue(!!listItem);
+    assertEquals(expected.urls.shown, listItem.$.originUrl.textContent.trim());
+    assertEquals(expected.urls.link, listItem.$.originUrl.href);
+    assertEquals(expected.username, listItem.$.username.value);
   }
 }
 
diff --git a/chrome/test/data/webui/settings/settings_subpage_test.js b/chrome/test/data/webui/settings/settings_subpage_test.js
index 8f28e980..b85b48f 100644
--- a/chrome/test/data/webui/settings/settings_subpage_test.js
+++ b/chrome/test/data/webui/settings/settings_subpage_test.js
@@ -6,7 +6,7 @@
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {Route, Router} from 'chrome://settings/settings.js';
 import {setupPopstateListener} from 'chrome://test/settings/test_util.js';
-import {flushTasks} from 'chrome://test/test_util.m.js';
+import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js';
 
 // clang-format on
 
@@ -23,6 +23,9 @@
     testRoutes.SYNC = testRoutes.PEOPLE.createChild('/syncSetup');
     testRoutes.PRIVACY = testRoutes.BASIC.createSection('/privacy', 'privacy');
     testRoutes.CERTIFICATES = testRoutes.PRIVACY.createChild('/certificates');
+    testRoutes.SITE_DATA = testRoutes.BASIC.createChild('/siteData');
+    testRoutes.COOKIE_DETAILS =
+        testRoutes.SITE_DATA.createChild('/cookies/detail');
 
     Router.resetInstanceForTesting(new Router(testRoutes));
 
@@ -31,6 +34,15 @@
     PolymerTest.clearBody();
   });
 
+  function createSettingsSubpageWithPreserveSearchTerm() {
+    const subpage = document.createElement('settings-subpage');
+    subpage.searchLabel = 'label';
+    subpage.preserveSearchTerm = true;
+    subpage.setAttribute('route-path', testRoutes.SITE_DATA.path);
+    document.body.appendChild(subpage);
+    return subpage;
+  }
+
   test('clear search (event)', function() {
     const subpage = document.createElement('settings-subpage');
     // Having a searchLabel will create the cr-search-field.
@@ -61,6 +73,50 @@
     assertEquals(search.$.searchInput, search.root.activeElement);
   });
 
+  test('preserve search result when back button is clicked', async () => {
+    // Load settings subpage.
+    Router.getInstance().navigateTo(testRoutes.SITE_DATA);
+    let subpage = createSettingsSubpageWithPreserveSearchTerm();
+    flush();
+
+    // Set search field.
+    let search = subpage.$$('cr-search-field');
+    assertTrue(!!search);
+    search.setValue('test');
+    assertEquals('test', search.getValue());
+
+    // Navigate to another subpage.
+    Router.getInstance().navigateTo(testRoutes.COOKIE_DETAILS);
+    subpage.remove();
+
+    // Go back to settings subpage, verify search field is restored.
+    Router.getInstance().navigateToPreviousRoute();
+    subpage = createSettingsSubpageWithPreserveSearchTerm();
+    await eventToPromise('popstate', window);
+    search = subpage.$$('cr-search-field');
+    assertTrue(!!search);
+    assertEquals('test', search.getValue());
+
+    // Go back to settings subpage, verify search field is empty
+    Router.getInstance().navigateToPreviousRoute();
+    subpage = createSettingsSubpageWithPreserveSearchTerm();
+    await eventToPromise('popstate', window);
+    search = subpage.$$('cr-search-field');
+    assertTrue(!!search);
+    assertEquals('', search.getValue());
+  });
+
+  test('preserve search result from URL input', async function() {
+    const params = new URLSearchParams();
+    params.append('searchSubpage', 'test');
+    Router.getInstance().navigateTo(testRoutes.SITE_DATA, params);
+    const subpage = createSettingsSubpageWithPreserveSearchTerm();
+    await flushTasks();
+    const search = subpage.$$('cr-search-field');
+    assertTrue(!!search);
+    assertEquals('test', search.getValue());
+  });
+
   test('navigates to parent when there is no history', function() {
     // Pretend that we initially started on the CERTIFICATES route.
     window.history.replaceState(undefined, '', testRoutes.CERTIFICATES.path);
@@ -75,7 +131,7 @@
     assertEquals(testRoutes.PRIVACY, Router.getInstance().getCurrentRoute());
   });
 
-  test('navigates to any route via window.back()', function(done) {
+  test('navigates to any route via window.back()', async () => {
     Router.getInstance().navigateTo(testRoutes.BASIC);
     Router.getInstance().navigateTo(testRoutes.SYNC);
     assertEquals(testRoutes.SYNC, Router.getInstance().getCurrentRoute());
@@ -85,12 +141,10 @@
 
     subpage.$$('cr-icon-button').click();
 
-    window.addEventListener('popstate', function(event) {
-      assertEquals(
-          Router.getInstance().getRoutes().BASIC,
-          Router.getInstance().getCurrentRoute());
-      done();
-    });
+    await eventToPromise('popstate', window);
+    assertEquals(
+        Router.getInstance().getRoutes().BASIC,
+        Router.getInstance().getCurrentRoute());
   });
 
   test('updates the title of the document when active', function() {
diff --git a/chrome/test/data/webui/tab_strip/drag_manager_test.js b/chrome/test/data/webui/tab_strip/drag_manager_test.js
index 88b25da3..9ff50c26 100644
--- a/chrome/test/data/webui/tab_strip/drag_manager_test.js
+++ b/chrome/test/data/webui/tab_strip/drag_manager_test.js
@@ -568,4 +568,35 @@
     assertFalse(
         !!delegate.querySelector(`[data-tab-id="${PLACEHOLDER_TAB_ID}"]`));
   });
+
+  test('DragOverInvalidDragOverTarget', () => {
+    const draggedIndex = 0;
+    const dragOverIndex = 1;
+    const draggedTab = delegate.children[draggedIndex];
+    const dragOverTab = delegate.children[dragOverIndex];
+    const mockDataTransfer = new MockDataTransfer();
+
+    // Dispatch a dragstart event to start the drag process.
+    const dragStartEvent = new DragEvent('dragstart', {
+      bubbles: true,
+      composed: true,
+      clientX: 100,
+      clientY: 150,
+      dataTransfer: mockDataTransfer,
+    });
+    draggedTab.dispatchEvent(dragStartEvent);
+
+    // Mark the dragOverIndex tab to be an invalid dragover target.
+    dragOverTab.isValidDragOverTarget = false;
+    const dragOverEvent = new DragEvent('dragover', {
+      bubbles: true,
+      composed: true,
+      dataTransfer: mockDataTransfer,
+    });
+    dragOverTab.dispatchEvent(dragOverEvent);
+
+    // Dragover tab and dragged tab remain in their initial positions.
+    assertEquals(draggedTab, delegate.children[draggedIndex]);
+    assertEquals(dragOverTab, delegate.children[dragOverIndex]);
+  });
 });
diff --git a/chrome/test/data/webui/tab_strip/tab_list_test.js b/chrome/test/data/webui/tab_strip/tab_list_test.js
index c3a9e0a..4d80ece 100644
--- a/chrome/test/data/webui/tab_strip/tab_list_test.js
+++ b/chrome/test/data/webui/tab_strip/tab_list_test.js
@@ -242,6 +242,68 @@
     assertEquals('TABSTRIP-TAB-GROUP', groupedTab.parentElement.tagName);
   });
 
+  /**
+   * @param {!Element} element
+   * @param {number} scale
+   */
+  function testPlaceTabElementAnimation(element, scale) {
+    const animations = element.getAnimations();
+
+    // TODO(crbug.com/1090645): Remove logging once the test no longer flakes.
+    if (animations.length > 1) {
+      console.log('--- Multiple animations found. ---');
+      animations.forEach(animation => {
+        console.log('playState:', animation.playState);
+        console.log('duration:', animation.effect.getTiming().duration);
+      });
+    }
+
+    assertEquals(1, animations.length);
+    assertEquals('running', animations[0].playState);
+    assertEquals(120, animations[0].effect.getTiming().duration);
+    assertEquals('ease-out', animations[0].effect.getTiming().easing);
+
+    const keyframes = animations[0].effect.getKeyframes();
+    const tabSpacingVars =
+        '(var(--tabstrip-tab-width) + var(--tabstrip-tab-spacing))';
+    assertEquals(2, keyframes.length);
+    assertEquals(
+        `translateX(calc(${scale} * ${tabSpacingVars}))`,
+        keyframes[0].transform);
+    assertEquals('translateX(0px)', keyframes[1].transform);
+  }
+
+  test('PlaceTabElementAnimatesTabMovedLeft', async () => {
+    await tabList.animationPromises;
+    let unpinnedTabs = getUnpinnedTabs();
+
+    // Move the last tab to the first tab to test right to left animations.
+    const movedTab = unpinnedTabs[unpinnedTabs.length - 1];
+    tabList.placeTabElement(movedTab, 0, false, undefined);
+    testPlaceTabElementAnimation(movedTab, unpinnedTabs.length - 1);
+
+    // All other tabs should animate a space of 1 TabElement to the right.
+    Array.from(unpinnedTabs)
+        .filter(tabElement => tabElement !== movedTab)
+        .forEach(tabElement => testPlaceTabElementAnimation(tabElement, -1));
+  });
+
+  test('PlaceTabElementAnimatesTabMovedRight', async () => {
+    await tabList.animationPromises;
+    let unpinnedTabs = getUnpinnedTabs();
+
+    // Move the first tab to the last tab to test left to right animations.
+    const movedTab = unpinnedTabs[0];
+    tabList.placeTabElement(
+        movedTab, unpinnedTabs.length - 1, false, undefined);
+    testPlaceTabElementAnimation(movedTab, -1 * (unpinnedTabs.length - 1));
+
+    // All other tabs should animate a space of 1 TabElement to the left.
+    Array.from(unpinnedTabs)
+        .filter(tabElement => tabElement !== movedTab)
+        .forEach(tabElement => testPlaceTabElementAnimation(tabElement, 1));
+  });
+
   test('PlacesTabGroupElement', () => {
     const tabGroupElement = document.createElement('tabstrip-tab-group');
     tabList.placeTabGroupElement(tabGroupElement, 2);
diff --git a/chrome/test/mini_installer/variable_expander.py b/chrome/test/mini_installer/variable_expander.py
index f9be0137..04a6dba 100644
--- a/chrome/test/mini_installer/variable_expander.py
+++ b/chrome/test/mini_installer/variable_expander.py
@@ -157,31 +157,46 @@
         previous_version_mini_installer_path)
     windows_major_ver, windows_minor_ver, _, _, _ = win32api.GetVersionEx()
     self._variable_mapping = {
-        'CHROMEDRIVER_PATH': chromedriver_path,
-        'QUIET': '-q' if quiet else '',
-        'OUTPUT_DIR': '"--output-dir=%s"' % output_dir if output_dir else '',
-        'LOCAL_APPDATA': shell.SHGetFolderPath(0, shellcon.CSIDL_LOCAL_APPDATA,
-                                               None, 0),
-        'LOG_FILE': '',
-        'MINI_INSTALLER': mini_installer_abspath,
-        'MINI_INSTALLER_FILE_VERSION': _GetFileVersion(mini_installer_abspath),
-        'MINI_INSTALLER_BITNESS': _GetFileBitness(mini_installer_abspath),
+        'CHROMEDRIVER_PATH':
+        chromedriver_path,
+        'QUIET':
+        '-q' if quiet else '',
+        'OUTPUT_DIR':
+        '"--output-dir=%s"' % output_dir if output_dir else '',
+        'LOCAL_APPDATA':
+        shell.SHGetFolderPath(0, shellcon.CSIDL_LOCAL_APPDATA, None, 0),
+        'LOG_FILE':
+        '',
+        'MINI_INSTALLER':
+        mini_installer_abspath,
+        'MINI_INSTALLER_FILE_VERSION':
+        _GetFileVersion(mini_installer_abspath),
+        'MINI_INSTALLER_BITNESS':
+        _GetFileBitness(mini_installer_abspath),
         'PREVIOUS_VERSION_MINI_INSTALLER':
-            previous_version_mini_installer_abspath,
-        'PREVIOUS_VERSION_MINI_INSTALLER_FILE_VERSION': _GetFileVersion(
-            previous_version_mini_installer_abspath),
-        'PROGRAM_FILES': shell.SHGetFolderPath(0,
-                                               shellcon.CSIDL_PROGRAM_FILESX86,
-                                               None, 0),
-        'USER_SPECIFIC_REGISTRY_SUFFIX': _GetUserSpecificRegistrySuffix(),
-        'VERSION_SERVER_2003': '(5, 2)',
-        'VERSION_VISTA': '(6, 0)',
-        'VERSION_WIN10': '(10, 0)',
-        'VERSION_WIN7': '(6, 1)',
-        'VERSION_WIN8': '(6, 2)',
-        'VERSION_WIN8_1': '(6, 3)',
-        'VERSION_XP': '(5, 1)',
-        'WINDOWS_VERSION': '(%s, %s)' % (windows_major_ver, windows_minor_ver)
+        previous_version_mini_installer_abspath,
+        'PREVIOUS_VERSION_MINI_INSTALLER_FILE_VERSION':
+        _GetFileVersion(previous_version_mini_installer_abspath),
+        'PROGRAM_FILES':
+        shell.SHGetFolderPath(0, shellcon.CSIDL_PROGRAM_FILES, None, 0),
+        'USER_SPECIFIC_REGISTRY_SUFFIX':
+        _GetUserSpecificRegistrySuffix(),
+        'VERSION_SERVER_2003':
+        '(5, 2)',
+        'VERSION_VISTA':
+        '(6, 0)',
+        'VERSION_WIN10':
+        '(10, 0)',
+        'VERSION_WIN7':
+        '(6, 1)',
+        'VERSION_WIN8':
+        '(6, 2)',
+        'VERSION_WIN8_1':
+        '(6, 3)',
+        'VERSION_XP':
+        '(5, 1)',
+        'WINDOWS_VERSION':
+        '(%s, %s)' % (windows_major_ver, windows_minor_ver)
     }
 
     mini_installer_product_name = _GetProductName(mini_installer_abspath)
diff --git a/chrome/updater/app/app.h b/chrome/updater/app/app.h
index a02fb6cd..3e5c113 100644
--- a/chrome/updater/app/app.h
+++ b/chrome/updater/app/app.h
@@ -14,6 +14,8 @@
 
 // Creates a ref-counted singleton instance of the type T. Use this function
 // to get instances of classes derived from updater::App.
+// TODO(crbug.com/1064498) - provide non-leaky creation for callers where
+// a singleton is not needed.
 template <typename T>
 scoped_refptr<T> AppInstance() {
   static base::NoDestructor<scoped_refptr<T>> instance{
diff --git a/chrome/updater/server/win/server.cc b/chrome/updater/server/win/server.cc
index f345e96..0966ece 100644
--- a/chrome/updater/server/win/server.cc
+++ b/chrome/updater/server/win/server.cc
@@ -28,9 +28,11 @@
 #include "chrome/updater/server/win/com_classes.h"
 #include "chrome/updater/server/win/com_classes_legacy.h"
 #include "chrome/updater/update_service_in_process.h"
+#include "components/prefs/pref_service.h"
 
 namespace updater {
 
+// Returns a leaky singleton of the App instance.
 scoped_refptr<App> AppServerInstance() {
   return AppInstance<ComServerApp>();
 }
@@ -128,7 +130,14 @@
 void ComServerApp::Stop() {
   VLOG(2) << __func__ << ": COM server is shutting down.";
   UnregisterClassObjects();
-  Shutdown(0);
+  main_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce([]() {
+        auto this_server = ComServerApp::Instance();
+        this_server->config_->GetPrefService()->CommitPendingWrite();
+        this_server->service_ = nullptr;
+        this_server->config_ = nullptr;
+        this_server->Shutdown(0);
+      }));
 }
 
 void ComServerApp::Initialize() {
diff --git a/chrome/updater/server/win/server.h b/chrome/updater/server/win/server.h
index b4aae04f5..d3bc1be1 100644
--- a/chrome/updater/server/win/server.h
+++ b/chrome/updater/server/win/server.h
@@ -39,6 +39,9 @@
 //
 // This class is responsible for the lifetime of the COM server, as well as
 // class factory registration.
+//
+// The instance of the this class is managed by a singleton and it leaks at
+// runtime.
 class ComServerApp : public App {
  public:
   ComServerApp();
@@ -74,7 +77,8 @@
   // Creates an out-of-process WRL Module.
   void CreateWRLModule();
 
-  // Handles object unregistration then triggers program shutdown.
+  // Handles object unregistration then triggers program shutdown. This
+  // function runs on a COM RPC thread when the WRL module is destroyed.
   void Stop();
 
   // Identifier of registered class objects used for unregistration.
diff --git a/chrome/updater/update_service_in_process.cc b/chrome/updater/update_service_in_process.cc
index c66bdecc7..f9b1f40 100644
--- a/chrome/updater/update_service_in_process.cc
+++ b/chrome/updater/update_service_in_process.cc
@@ -99,9 +99,11 @@
 
 update_client::UpdateClient::CrxStateChangeCallback
 MakeUpdateClientCrxStateChangeCallback(
+    scoped_refptr<update_client::Configurator> config,
     UpdateService::StateChangeCallback callback) {
   return base::BindRepeating(
-      [](UpdateService::StateChangeCallback callback,
+      [](scoped_refptr<update_client::Configurator> config,
+         UpdateService::StateChangeCallback callback,
          update_client::CrxUpdateItem crx_update_item) {
         UpdateService::UpdateState update_state;
         update_state.app_id = crx_update_item.id;
@@ -113,9 +115,16 @@
             ToErrorCategory(crx_update_item.error_category);
         update_state.error_code = crx_update_item.error_code;
         update_state.extra_code1 = crx_update_item.extra_code1;
+
+        // Commit the prefs values written by |update_client| when the
+        // update has completed, such as `pv` and `fingerprint`.
+        if (update_state.state == UpdateService::UpdateState::State::kUpdated) {
+          config->GetPrefService()->CommitPendingWrite();
+        }
+
         callback.Run(update_state);
       },
-      callback);
+      config, callback);
 }
 
 std::vector<base::Optional<update_client::CrxComponent>> GetComponents(
@@ -160,10 +169,10 @@
   const auto app_ids = persisted_data_->GetAppIds();
   DCHECK(base::Contains(app_ids, kUpdaterAppId));
 
-  update_client_->Update(app_ids,
-                         base::BindOnce(&GetComponents, persisted_data_),
-                         MakeUpdateClientCrxStateChangeCallback(state_update),
-                         false, MakeUpdateClientCallback(std::move(callback)));
+  update_client_->Update(
+      app_ids, base::BindOnce(&GetComponents, persisted_data_),
+      MakeUpdateClientCrxStateChangeCallback(config_, state_update), false,
+      MakeUpdateClientCallback(std::move(callback)));
 }
 
 void UpdateServiceInProcess::Update(const std::string& app_id,
@@ -172,11 +181,11 @@
                                     Callback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  update_client_->Update({app_id},
-                         base::BindOnce(&GetComponents, persisted_data_),
-                         MakeUpdateClientCrxStateChangeCallback(state_update),
-                         priority == Priority::kForeground,
-                         MakeUpdateClientCallback(std::move(callback)));
+  update_client_->Update(
+      {app_id}, base::BindOnce(&GetComponents, persisted_data_),
+      MakeUpdateClientCrxStateChangeCallback(config_, state_update),
+      priority == Priority::kForeground,
+      MakeUpdateClientCallback(std::move(callback)));
 }
 
 void UpdateServiceInProcess::Uninitialize() {
diff --git a/chrome/updater/updater.cc b/chrome/updater/updater.cc
index cfd76b3..123f78b 100644
--- a/chrome/updater/updater.cc
+++ b/chrome/updater/updater.cc
@@ -35,7 +35,7 @@
 // Instructions For Windows.
 // - To install only the updater, run "updatersetup.exe" from the build out dir.
 // - To install Chrome and the updater, do the same but use the --appid:
-//    updatersetup.exe --appid={8A69D345-D564-463C-AFF1-A69D9E530F96}
+//    updatersetup.exe --appid={8A69D345-D564-463c-AFF1-A69D9E530F96}
 // - To uninstall, run "updater.exe --uninstall" from its install directory,
 // which is under %LOCALAPPDATA%\Google\GoogleUpdater, or from the |out|
 // directory of the build.
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn
index f3a49cb..eaeb27e 100644
--- a/chromecast/BUILD.gn
+++ b/chromecast/BUILD.gn
@@ -650,7 +650,7 @@
     android_manifest_dep = "//chromecast/browser/android:cast_shell_manifest"
 
     min_sdk_version = 21
-    target_sdk_version = 29
+    target_sdk_version = 30
 
     shared_libraries = [ "//chromecast/android:libcast_shell_android" ]
 
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 1a3ee59..54a9c33 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-13261.0.0
\ No newline at end of file
+13270.0.0
\ No newline at end of file
diff --git a/chromeos/components/sync_wifi/network_type_conversions.cc b/chromeos/components/sync_wifi/network_type_conversions.cc
index 845da95..0b4f0952 100644
--- a/chromeos/components/sync_wifi/network_type_conversions.cc
+++ b/chromeos/components/sync_wifi/network_type_conversions.cc
@@ -146,21 +146,33 @@
     sync_pb::
         WifiConfigurationSpecifics_ProxyConfiguration_ManualProxyConfiguration*
             manual_settings = proto.mutable_manual_proxy_configuration();
-    manual_settings->set_http_proxy_url(
-        proxy_settings->manual->http_proxy->host->active_value);
-    manual_settings->set_http_proxy_port(
-        proxy_settings->manual->http_proxy->port->active_value);
-    manual_settings->set_secure_http_proxy_url(
-        proxy_settings->manual->secure_http_proxy->host->active_value);
-    manual_settings->set_secure_http_proxy_port(
-        proxy_settings->manual->secure_http_proxy->port->active_value);
-    manual_settings->set_socks_host_url(
-        proxy_settings->manual->socks->host->active_value);
-    manual_settings->set_socks_host_port(
-        proxy_settings->manual->socks->port->active_value);
-    for (const std::string& domain :
-         proxy_settings->exclude_domains->active_value) {
-      manual_settings->add_whitelisted_domains(domain);
+
+    if (proxy_settings->manual->http_proxy) {
+      manual_settings->set_http_proxy_url(
+          proxy_settings->manual->http_proxy->host->active_value);
+      manual_settings->set_http_proxy_port(
+          proxy_settings->manual->http_proxy->port->active_value);
+    }
+
+    if (proxy_settings->manual->secure_http_proxy) {
+      manual_settings->set_secure_http_proxy_url(
+          proxy_settings->manual->secure_http_proxy->host->active_value);
+      manual_settings->set_secure_http_proxy_port(
+          proxy_settings->manual->secure_http_proxy->port->active_value);
+    }
+
+    if (proxy_settings->manual->socks) {
+      manual_settings->set_socks_host_url(
+          proxy_settings->manual->socks->host->active_value);
+      manual_settings->set_socks_host_port(
+          proxy_settings->manual->socks->port->active_value);
+    }
+
+    if (proxy_settings->exclude_domains) {
+      for (const std::string& domain :
+           proxy_settings->exclude_domains->active_value) {
+        manual_settings->add_whitelisted_domains(domain);
+      }
     }
   }
 
diff --git a/chromeos/components/sync_wifi/wifi_configuration_bridge.cc b/chromeos/components/sync_wifi/wifi_configuration_bridge.cc
index 7bf1a17..d32a7d1 100644
--- a/chromeos/components/sync_wifi/wifi_configuration_bridge.cc
+++ b/chromeos/components/sync_wifi/wifi_configuration_bridge.cc
@@ -409,9 +409,7 @@
   metrics_recorder_->RecordTotalCount(entries_.size());
 }
 
-void WifiConfigurationBridge::OnConfigurationCreated(
-    const std::string& service_path,
-    const std::string& guid) {
+void WifiConfigurationBridge::OnNetworkCreated(const std::string& guid) {
   if (network_metadata_store_->GetIsConfiguredBySync(guid)) {
     // Don't have to upload a configuration that came from sync.
     NET_LOG(EVENT) << "Not uploading newly configured network "
diff --git a/chromeos/components/sync_wifi/wifi_configuration_bridge.h b/chromeos/components/sync_wifi/wifi_configuration_bridge.h
index 67987f2b..220c5531 100644
--- a/chromeos/components/sync_wifi/wifi_configuration_bridge.h
+++ b/chromeos/components/sync_wifi/wifi_configuration_bridge.h
@@ -70,12 +70,11 @@
 
   // NetworkMetadataObserver:
   void OnFirstConnectionToNetwork(const std::string& guid) override;
+  void OnNetworkCreated(const std::string& guid) override;
   void OnNetworkUpdate(const std::string& guid,
                        base::DictionaryValue* set_properties) override;
 
   // NetworkConfigurationObserver::
-  void OnConfigurationCreated(const std::string& service_path,
-                              const std::string& guid) override;
   void OnBeforeConfigurationRemoved(const std::string& service_path,
                                     const std::string& guid) override;
   void OnConfigurationRemoved(const std::string& service_path,
@@ -113,6 +112,8 @@
   // Starts an async request to serialize a network to a proto and save to sync.
   void OnNetworkConfiguredDelayComplete(const std::string& network_guid);
 
+  bool IsLastUpdateFromSync(const std::string& network_guid);
+
   // An in-memory list of the proto's that mirrors what is on the sync server.
   // This gets updated when changes are received from the server and after local
   // changes have been committed.  On initialization of this class, it is
diff --git a/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc b/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc
index 13e9a912f4..4b2b175 100644
--- a/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc
+++ b/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc
@@ -159,7 +159,7 @@
         /*network_configuration_handler=*/nullptr,
         /*network_connection_handler=*/nullptr,
         /*network_state_handler=*/nullptr, user_prefs_.get(),
-        device_prefs_.get());
+        device_prefs_.get(), /*is_enterprise_enrolled=*/false);
 
     bridge_ = std::make_unique<WifiConfigurationBridge>(
         synced_network_updater(), local_network_collector(),
@@ -420,7 +420,7 @@
   EXPECT_CALL(*processor(), Put(_, _, _))
       .WillOnce(testing::SaveArg<0>(&storage_key));
   std::string guid = meow_network_id().SerializeToString();
-  bridge()->OnConfigurationCreated("service_path", guid);
+  bridge()->OnNetworkCreated(guid);
   base::RunLoop().RunUntilIdle();
 
   timer_factory()->FireAll();
@@ -435,7 +435,7 @@
   EXPECT_CALL(*processor(), Put(_, _, _)).Times(testing::Exactly(0));
 
   std::string guid = meow_network_id().SerializeToString();
-  bridge()->OnConfigurationCreated("service_path", guid);
+  bridge()->OnNetworkCreated(guid);
   base::RunLoop().RunUntilIdle();
 
   timer_factory()->FireAll();
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index 1a642a5..3d3cd3c 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -359,11 +359,20 @@
 const base::Feature kSmartDimModelV3{"SmartDimModelV3",
                                      base::FEATURE_DISABLED_BY_DEFAULT};
 
-// Enables separate sync controls for OS settings (display, keyboard, etc.).
-// For example, the user could choose to sync OS settings but not browser
-// settings.
+// This feature:
+// - Creates a new "Sync your settings" section in Chrome OS settings
+// - Moves app, wallpaper and Wi-Fi sync to OS settings
+// - Provides a separate toggle for OS preferences, distinct from browser
+//   preferences
+// - Makes the OS ModelTypes run in sync transport mode, controlled by a
+//   master pref for the OS sync feature
+// - Updates the OOBE sync consent screen
+//
+// NOTE: The feature is rolling out via a client-side Finch trial, so the actual
+// state will vary. See config in
+// chrome/browser/chromeos/sync/split_settings_sync_field_trial.cc
 const base::Feature kSplitSettingsSync{"SplitSettingsSync",
-                                       base::FEATURE_DISABLED_BY_DEFAULT};
+                                       base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables a settings UI toggle that controls Suggested Content status. Also
 // enables a corresponding notice in the Launcher about Suggested Content.
diff --git a/chromeos/network/network_handler.cc b/chromeos/network/network_handler.cc
index 9c2b28e..b0cf31a4 100644
--- a/chromeos/network/network_handler.cc
+++ b/chromeos/network/network_handler.cc
@@ -126,7 +126,8 @@
       ui_proxy_config_service_.get());
   network_metadata_store_.reset(new NetworkMetadataStore(
       network_configuration_handler_.get(), network_connection_handler_.get(),
-      network_state_handler_.get(), logged_in_profile_prefs, device_prefs));
+      network_state_handler_.get(), logged_in_profile_prefs, device_prefs,
+      is_enterprise_managed_));
 }
 
 void NetworkHandler::ShutdownPrefServices() {
diff --git a/chromeos/network/network_handler.h b/chromeos/network/network_handler.h
index ffc1523..706ad6f98 100644
--- a/chromeos/network/network_handler.h
+++ b/chromeos/network/network_handler.h
@@ -89,6 +89,10 @@
   UIProxyConfigService* ui_proxy_config_service();
   bool has_ui_proxy_config_service() { return ui_proxy_config_service_.get(); }
 
+  void set_is_enterprise_managed(bool is_enterprise_managed) {
+    is_enterprise_managed_ = is_enterprise_managed;
+  }
+
  private:
   NetworkHandler();
   virtual ~NetworkHandler();
@@ -117,6 +121,9 @@
   std::unique_ptr<UIProxyConfigService> ui_proxy_config_service_;
   std::unique_ptr<CellularMetricsLogger> cellular_metrics_logger_;
 
+  // True when the device is managed by policy.
+  bool is_enterprise_managed_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(NetworkHandler);
 };
 
diff --git a/chromeos/network/network_metadata_observer.cc b/chromeos/network/network_metadata_observer.cc
index 5045db7..1bd44c98 100644
--- a/chromeos/network/network_metadata_observer.cc
+++ b/chromeos/network/network_metadata_observer.cc
@@ -13,6 +13,8 @@
 void NetworkMetadataObserver::OnFirstConnectionToNetwork(
     const std::string& guid) {}
 
+void NetworkMetadataObserver::OnNetworkCreated(const std::string& guid) {}
+
 void NetworkMetadataObserver::OnNetworkUpdate(
     const std::string& guid,
     base::DictionaryValue* set_properties) {}
diff --git a/chromeos/network/network_metadata_observer.h b/chromeos/network/network_metadata_observer.h
index 8efb772e..50528378 100644
--- a/chromeos/network/network_metadata_observer.h
+++ b/chromeos/network/network_metadata_observer.h
@@ -22,6 +22,10 @@
   virtual void OnFirstConnectionToNetwork(const std::string& guid);
 
   // Called after a network configuration and associated metadata has been
+  // created.
+  virtual void OnNetworkCreated(const std::string& guid);
+
+  // Called after a network configuration and associated metadata has been
   // updated.
   virtual void OnNetworkUpdate(const std::string& guid,
                                base::DictionaryValue* set_properties);
diff --git a/chromeos/network/network_metadata_store.cc b/chromeos/network/network_metadata_store.cc
index 049f6432..c2f2a726 100644
--- a/chromeos/network/network_metadata_store.cc
+++ b/chromeos/network/network_metadata_store.cc
@@ -61,18 +61,23 @@
     NetworkConnectionHandler* network_connection_handler,
     NetworkStateHandler* network_state_handler,
     PrefService* profile_pref_service,
-    PrefService* device_pref_service)
+    PrefService* device_pref_service,
+    bool is_enterprise_managed)
     : network_configuration_handler_(network_configuration_handler),
       network_connection_handler_(network_connection_handler),
       network_state_handler_(network_state_handler),
       profile_pref_service_(profile_pref_service),
-      device_pref_service_(device_pref_service) {
+      device_pref_service_(device_pref_service),
+      is_enterprise_managed_(is_enterprise_managed) {
   if (network_connection_handler_) {
     network_connection_handler_->AddObserver(this);
   }
   if (network_configuration_handler_) {
     network_configuration_handler_->AddObserver(this);
   }
+  if (LoginState::IsInitialized()) {
+    LoginState::Get()->AddObserver(this);
+  }
 }
 
 NetworkMetadataStore::~NetworkMetadataStore() {
@@ -82,6 +87,40 @@
   if (network_configuration_handler_) {
     network_configuration_handler_->RemoveObserver(this);
   }
+  if (LoginState::IsInitialized()) {
+    LoginState::Get()->RemoveObserver(this);
+  }
+}
+
+void NetworkMetadataStore::LoggedInStateChanged() {
+  OwnSharedNetworksOnFirstUserLogin();
+}
+
+void NetworkMetadataStore::OwnSharedNetworksOnFirstUserLogin() {
+  if (is_enterprise_managed_ || !network_state_handler_ ||
+      !user_manager::UserManager::IsInitialized()) {
+    return;
+  }
+
+  const user_manager::UserManager* user_manager =
+      user_manager::UserManager::Get();
+
+  if (!user_manager->IsCurrentUserNew() ||
+      !user_manager->IsCurrentUserOwner()) {
+    return;
+  }
+
+  NET_LOG(EVENT) << "Taking ownership of shared networks.";
+  NetworkStateHandler::NetworkStateList networks;
+  network_state_handler_->GetNetworkListByType(NetworkTypePattern::WiFi(), true,
+                                               false, 0, &networks);
+  for (const chromeos::NetworkState* network : networks) {
+    if (network->IsPrivate()) {
+      continue;
+    }
+
+    SetIsCreatedByUser(network->guid());
+  }
 }
 
 void NetworkMetadataStore::ConnectSucceeded(const std::string& service_path) {
@@ -126,6 +165,10 @@
 void NetworkMetadataStore::OnConfigurationCreated(
     const std::string& service_path,
     const std::string& guid) {
+  SetIsCreatedByUser(guid);
+}
+
+void NetworkMetadataStore::SetIsCreatedByUser(const std::string& network_guid) {
   if (!user_manager::UserManager::IsInitialized())
     return;
 
@@ -137,7 +180,11 @@
     return;
   }
 
-  SetPref(guid, kOwner, base::Value(user->username_hash()));
+  SetPref(network_guid, kOwner, base::Value(user->username_hash()));
+
+  for (auto& observer : observers_) {
+    observer.OnNetworkCreated(network_guid);
+  }
 }
 
 void NetworkMetadataStore::UpdateExternalModifications(
diff --git a/chromeos/network/network_metadata_store.h b/chromeos/network/network_metadata_store.h
index a103cdfe..d401b72 100644
--- a/chromeos/network/network_metadata_store.h
+++ b/chromeos/network/network_metadata_store.h
@@ -10,6 +10,7 @@
 #include "base/component_export.h"
 #include "base/observer_list.h"
 #include "base/values.h"
+#include "chromeos/login/login_state/login_state.h"
 #include "chromeos/network/network_configuration_observer.h"
 #include "chromeos/network/network_connection_observer.h"
 #include "chromeos/network/network_metadata_observer.h"
@@ -32,14 +33,16 @@
 // networks.
 class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataStore
     : public NetworkConnectionObserver,
-      public NetworkConfigurationObserver {
+      public NetworkConfigurationObserver,
+      public LoginState::Observer {
  public:
   NetworkMetadataStore(
       NetworkConfigurationHandler* network_configuration_handler,
       NetworkConnectionHandler* network_connection_handler,
       NetworkStateHandler* network_state_handler,
       PrefService* profile_pref_service,
-      PrefService* device_pref_service);
+      PrefService* device_pref_service,
+      bool is_enterprise_managed);
 
   ~NetworkMetadataStore() override;
 
@@ -48,6 +51,9 @@
   // prior to using this class.
   static void RegisterPrefs(PrefRegistrySimple* registry);
 
+  // LoginState::Observer overrides.
+  void LoggedInStateChanged() override;
+
   // NetworkConnectionObserver::
   void ConnectSucceeded(const std::string& service_path) override;
   void ConnectFailed(const std::string& service_path,
@@ -87,6 +93,10 @@
   // will always return false.
   bool GetHasBadPassword(const std::string& network_guid);
 
+  // When the active user is the device owner and its the first login, this
+  // marks networks that were added in OOBE to the user's list.
+  void OwnSharedNetworksOnFirstUserLogin();
+
   // Manage observers.
   void AddObserver(NetworkMetadataObserver* observer);
   void RemoveObserver(NetworkMetadataObserver* observer);
@@ -106,12 +116,16 @@
   void UpdateExternalModifications(const std::string& network_guid,
                                    const std::string& field);
 
+  // Sets the owner metadata when there is an active user, otherwise a no-op.
+  void SetIsCreatedByUser(const std::string& network_guid);
+
   base::ObserverList<NetworkMetadataObserver> observers_;
   NetworkConfigurationHandler* network_configuration_handler_;
   NetworkConnectionHandler* network_connection_handler_;
   NetworkStateHandler* network_state_handler_;
   PrefService* profile_pref_service_;
   PrefService* device_pref_service_;
+  bool is_enterprise_managed_;
   base::WeakPtrFactory<NetworkMetadataStore> weak_ptr_factory_{this};
 };
 
diff --git a/chromeos/network/network_metadata_store_unittest.cc b/chromeos/network/network_metadata_store_unittest.cc
index bc4ff2d..6edcefc6 100644
--- a/chromeos/network/network_metadata_store_unittest.cc
+++ b/chromeos/network/network_metadata_store_unittest.cc
@@ -93,7 +93,8 @@
 
     metadata_store_ = std::make_unique<NetworkMetadataStore>(
         network_configuration_handler_, network_connection_handler_.get(),
-        network_state_handler_, user_prefs_.get(), device_prefs_.get());
+        network_state_handler_, user_prefs_.get(), device_prefs_.get(),
+        /*is_enterprise_enrolled=*/false);
     metadata_observer_ = std::make_unique<TestNetworkMetadataObserver>();
     metadata_store_->AddObserver(metadata_observer_.get());
   }
@@ -110,15 +111,30 @@
     NetworkHandler::Shutdown();
   }
 
-  void SetUp() override { LoginUser(primary_user_); }
+  void SetUp() override {
+    SetIsEnterpriseEnrolled(false);
+    LoginUser(primary_user_);
+  }
+
+  // This creates a new NetworkMetadataStore object.
+  void SetIsEnterpriseEnrolled(bool is_enterprise_enrolled) {
+    metadata_store_.reset(new NetworkMetadataStore(
+        network_configuration_handler_, network_connection_handler_.get(),
+        network_state_handler_, user_prefs_.get(), device_prefs_.get(),
+        is_enterprise_enrolled));
+    metadata_store_->AddObserver(metadata_observer_.get());
+  }
 
   void LoginUser(const user_manager::User* user) {
-    auto* user_manager = static_cast<user_manager::FakeUserManager*>(
+    UserManager()->UserLoggedIn(user->GetAccountId(), user->username_hash(),
+                                true /* browser_restart */,
+                                false /* is_child */);
+    UserManager()->SwitchActiveUser(user->GetAccountId());
+  }
+
+  user_manager::FakeUserManager* UserManager() {
+    return static_cast<user_manager::FakeUserManager*>(
         user_manager::UserManager::Get());
-    user_manager->UserLoggedIn(user->GetAccountId(), user->username_hash(),
-                               true /* browser_restart */,
-                               false /* is_child */);
-    user_manager->SwitchActiveUser(user->GetAccountId());
   }
 
   std::string ConfigureService(const std::string& shill_json_string) {
@@ -322,4 +338,61 @@
   ASSERT_FALSE(metadata_store()->GetIsConfiguredBySync(kGuid));
 }
 
+TEST_F(NetworkMetadataStoreTest, OwnOobeNetworks) {
+  UserManager()->LogoutAllUsers();
+  ConfigureService(kConfigWifi1Shared);
+  base::RunLoop().RunUntilIdle();
+
+  LoginUser(primary_user_);
+  ASSERT_FALSE(metadata_store()->GetIsCreatedByUser(kGuid));
+
+  UserManager()->set_is_current_user_new(true);
+  UserManager()->set_is_current_user_owner(true);
+  metadata_store()->LoggedInStateChanged();
+  ASSERT_TRUE(metadata_store()->GetIsCreatedByUser(kGuid));
+}
+
+TEST_F(NetworkMetadataStoreTest, OwnOobeNetworks_EnterpriseEnrolled) {
+  SetIsEnterpriseEnrolled(true);
+  UserManager()->LogoutAllUsers();
+  ConfigureService(kConfigWifi1Shared);
+  base::RunLoop().RunUntilIdle();
+
+  LoginUser(primary_user_);
+  ASSERT_FALSE(metadata_store()->GetIsCreatedByUser(kGuid));
+
+  UserManager()->set_is_current_user_new(true);
+  UserManager()->set_is_current_user_owner(true);
+  metadata_store()->LoggedInStateChanged();
+  ASSERT_FALSE(metadata_store()->GetIsCreatedByUser(kGuid));
+}
+
+TEST_F(NetworkMetadataStoreTest, OwnOobeNetworks_NotOwner) {
+  UserManager()->LogoutAllUsers();
+  ConfigureService(kConfigWifi1Shared);
+  base::RunLoop().RunUntilIdle();
+
+  LoginUser(primary_user_);
+  ASSERT_FALSE(metadata_store()->GetIsCreatedByUser(kGuid));
+
+  UserManager()->set_is_current_user_new(true);
+  UserManager()->set_is_current_user_owner(false);
+  metadata_store()->LoggedInStateChanged();
+  ASSERT_FALSE(metadata_store()->GetIsCreatedByUser(kGuid));
+}
+
+TEST_F(NetworkMetadataStoreTest, OwnOobeNetworks_NotFirstLogin) {
+  UserManager()->LogoutAllUsers();
+  ConfigureService(kConfigWifi1Shared);
+  base::RunLoop().RunUntilIdle();
+
+  LoginUser(primary_user_);
+  ASSERT_FALSE(metadata_store()->GetIsCreatedByUser(kGuid));
+
+  UserManager()->set_is_current_user_new(false);
+  UserManager()->set_is_current_user_owner(true);
+  metadata_store()->LoggedInStateChanged();
+  ASSERT_FALSE(metadata_store()->GetIsCreatedByUser(kGuid));
+}
+
 }  // namespace chromeos
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc
index 37c626c..f18b9b72 100644
--- a/chromeos/network/network_state_handler.cc
+++ b/chromeos/network/network_state_handler.cc
@@ -376,8 +376,10 @@
 const DeviceState* NetworkStateHandler::GetDeviceState(
     const std::string& device_path) const {
   const DeviceState* device = GetModifiableDeviceState(device_path);
-  if (device && !device->update_received())
+  if (device && !device->update_received()) {
+    NET_LOG(DEBUG) << "Device exists but update not received: " << device_path;
     return nullptr;
+  }
   return device;
 }
 
@@ -1464,7 +1466,7 @@
       key == shill::kNetworkTechnologyProperty ||
       (key == shill::kDeviceProperty && value_str == "/")) {
     // Uninteresting update. This includes 'Device' property changes to "/"
-    // (occurs before just a service is removed).
+    // (occurs just before a service is removed).
     // For non active networks do not log or send any notifications.
     if (!network->IsActive())
       return;
diff --git a/chromeos/services/assistant/BUILD.gn b/chromeos/services/assistant/BUILD.gn
index db65a32..1cb0029 100644
--- a/chromeos/services/assistant/BUILD.gn
+++ b/chromeos/services/assistant/BUILD.gn
@@ -18,6 +18,8 @@
   defines = [ "IS_ASSISTANT_SERVICE_IMPL" ]
 
   sources = [
+    "assistant_interaction_logger.cc",
+    "assistant_interaction_logger.h",
     "assistant_manager_service.h",
     "fake_assistant_manager_service_impl.cc",
     "fake_assistant_manager_service_impl.h",
diff --git a/chromeos/services/assistant/assistant_interaction_logger.cc b/chromeos/services/assistant/assistant_interaction_logger.cc
new file mode 100644
index 0000000..2114c1f
--- /dev/null
+++ b/chromeos/services/assistant/assistant_interaction_logger.cc
@@ -0,0 +1,121 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/services/assistant/assistant_interaction_logger.h"
+
+#include <utility>
+
+namespace chromeos {
+namespace assistant {
+
+namespace {
+
+std::string ResolutionToString(
+    chromeos::assistant::mojom::AssistantInteractionResolution resolution) {
+  std::stringstream result;
+  result << resolution;
+  return result.str();
+}
+
+#define LOG_INTERACTION()                      \
+  VLOG(AssistantInteractionLogger::kVLogLevel) \
+      << "Assistant: " << __FUNCTION__ << ": "
+
+}  // namespace
+
+bool AssistantInteractionLogger::IsLoggingEnabled() {
+  return VLOG_IS_ON(kVLogLevel);
+}
+
+AssistantInteractionLogger::AssistantInteractionLogger() = default;
+
+AssistantInteractionLogger::~AssistantInteractionLogger() = default;
+
+mojo::PendingRemote<mojom::AssistantInteractionSubscriber>
+AssistantInteractionLogger::BindNewPipeAndPassRemote() {
+  return receiver_.BindNewPipeAndPassRemote();
+}
+
+void AssistantInteractionLogger::OnInteractionStarted(
+    chromeos::assistant::mojom::AssistantInteractionMetadataPtr metadata) {
+  switch (metadata->type) {
+    case mojom::AssistantInteractionType::kText:
+      LOG_INTERACTION() << "Text interaction with query '" << metadata->query
+                        << "'";
+      break;
+    case mojom::AssistantInteractionType::kVoice:
+      LOG_INTERACTION() << "Voice interaction";
+      break;
+  }
+}
+
+void AssistantInteractionLogger::OnInteractionFinished(
+    chromeos::assistant::mojom::AssistantInteractionResolution resolution) {
+  LOG_INTERACTION() << "with resolution " << ResolutionToString(resolution);
+}
+
+void AssistantInteractionLogger::OnHtmlResponse(const std::string& response,
+                                                const std::string& fallback) {
+  // Displaying fallback instead of the response as the response is filled with
+  // HTML tags and rather large.
+  LOG_INTERACTION() << "with fallback '" << fallback << "'";
+}
+
+void AssistantInteractionLogger::OnSuggestionsResponse(
+    std::vector<chromeos::assistant::mojom::AssistantSuggestionPtr> response) {
+  std::stringstream suggestions;
+  for (const auto& suggestion : response)
+    suggestions << "'" << suggestion->text << "', ";
+  LOG_INTERACTION() << "{ " << suggestions.str() << " }";
+}
+
+void AssistantInteractionLogger::OnTextResponse(const std::string& response) {
+  LOG_INTERACTION() << "'" << response << "'";
+}
+
+void AssistantInteractionLogger::OnOpenUrlResponse(const ::GURL& url,
+                                                   bool in_background) {
+  LOG_INTERACTION() << "with url '" << url.possibly_invalid_spec() << "'";
+}
+
+void AssistantInteractionLogger::OnOpenAppResponse(
+    chromeos::assistant::mojom::AndroidAppInfoPtr app_info,
+    OnOpenAppResponseCallback callback) {
+  LOG_INTERACTION() << "with app '" << app_info->package_name << "'";
+  std::move(callback).Run(true);
+}
+
+void AssistantInteractionLogger::OnSpeechRecognitionStarted() {
+  LOG_INTERACTION();
+}
+
+void AssistantInteractionLogger::OnSpeechRecognitionIntermediateResult(
+    const std::string& high_confidence_text,
+    const std::string& low_confidence_text) {
+  // Not logged until we have a use for this (and this might spam the log).
+}
+
+void AssistantInteractionLogger::OnSpeechRecognitionEndOfUtterance() {
+  LOG_INTERACTION();
+}
+
+void AssistantInteractionLogger::OnSpeechRecognitionFinalResult(
+    const std::string& final_result) {
+  LOG_INTERACTION() << "with final result '" << final_result << "'";
+}
+
+void AssistantInteractionLogger::OnSpeechLevelUpdated(float speech_level) {
+  // Not logged until we have a use for this and this might spam the log.
+}
+
+void AssistantInteractionLogger::OnTtsStarted(bool due_to_error) {
+  LOG_INTERACTION() << (due_to_error ? "not" : "") << "due to error";
+}
+
+void AssistantInteractionLogger::OnWaitStarted() {
+  LOG_INTERACTION();
+}
+
+}  // namespace assistant
+}  // namespace chromeos
diff --git a/chromeos/services/assistant/assistant_interaction_logger.h b/chromeos/services/assistant/assistant_interaction_logger.h
new file mode 100644
index 0000000..f884e16
--- /dev/null
+++ b/chromeos/services/assistant/assistant_interaction_logger.h
@@ -0,0 +1,84 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_INTERACTION_LOGGER_H_
+#define CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_INTERACTION_LOGGER_H_
+
+#include <string>
+#include <vector>
+
+#include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+
+namespace chromeos {
+namespace assistant {
+
+// A subscriber that will log all Assistant interactions.
+// The interactions will be logged using
+//     VLOG(AssistantInteractionLogger::kVLogLevel)
+class AssistantInteractionLogger
+    : public mojom::AssistantInteractionSubscriber {
+ public:
+  // VLog level used for logging interactions.
+  constexpr static const int kVLogLevel = 1;
+
+  // Returns if the current logging level is high enough so that the traces
+  // will be printed. If not, there is no point in creating this class.
+  static bool IsLoggingEnabled();
+
+  AssistantInteractionLogger();
+  AssistantInteractionLogger(AssistantInteractionLogger&) = delete;
+  AssistantInteractionLogger& operator=(AssistantInteractionLogger&) = delete;
+  ~AssistantInteractionLogger() override;
+
+  mojo::PendingRemote<mojom::AssistantInteractionSubscriber>
+  BindNewPipeAndPassRemote();
+
+  // AssistantInteractionSubscriber implementation:
+  void OnInteractionStarted(
+      chromeos::assistant::mojom::AssistantInteractionMetadataPtr metadata)
+      override;
+
+  void OnInteractionFinished(
+      chromeos::assistant::mojom::AssistantInteractionResolution resolution)
+      override;
+
+  void OnHtmlResponse(const std::string& response,
+                      const std::string& fallback) override;
+
+  void OnSuggestionsResponse(
+      std::vector<chromeos::assistant::mojom::AssistantSuggestionPtr> response)
+      override;
+
+  void OnTextResponse(const std::string& response) override;
+
+  void OnOpenUrlResponse(const ::GURL& url, bool in_background) override;
+
+  void OnOpenAppResponse(chromeos::assistant::mojom::AndroidAppInfoPtr app_info,
+                         OnOpenAppResponseCallback callback) override;
+
+  void OnSpeechRecognitionStarted() override;
+
+  void OnSpeechRecognitionIntermediateResult(
+      const std::string& high_confidence_text,
+      const std::string& low_confidence_text) override;
+
+  void OnSpeechRecognitionEndOfUtterance() override;
+
+  void OnSpeechRecognitionFinalResult(const std::string& final_result) override;
+
+  void OnSpeechLevelUpdated(float speech_level) override;
+
+  void OnTtsStarted(bool due_to_error) override;
+
+  void OnWaitStarted() override;
+
+ private:
+  mojo::Receiver<AssistantInteractionSubscriber> receiver_{this};
+};
+
+}  // namespace assistant
+}  // namespace chromeos
+
+#endif  // CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_INTERACTION_LOGGER_H_
diff --git a/chromeos/services/assistant/public/mojom/assistant_notification.mojom b/chromeos/services/assistant/public/mojom/assistant_notification.mojom
index 6d3d724d..c5b41d9 100644
--- a/chromeos/services/assistant/public/mojom/assistant_notification.mojom
+++ b/chromeos/services/assistant/public/mojom/assistant_notification.mojom
@@ -68,4 +68,7 @@
 
   // If |true|, the notification will be removed on click.
   bool remove_on_click = true;
+
+  //  If |true|, the user can't remove the notification.
+  bool is_pinned = false;
 };
diff --git a/chromeos/services/assistant/service.cc b/chromeos/services/assistant/service.cc
index bc5830f..14bc921 100644
--- a/chromeos/services/assistant/service.cc
+++ b/chromeos/services/assistant/service.cc
@@ -27,6 +27,7 @@
 #include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
+#include "chromeos/services/assistant/assistant_interaction_logger.h"
 #include "chromeos/services/assistant/assistant_manager_service.h"
 #include "chromeos/services/assistant/assistant_manager_service_delegate_impl.h"
 #include "chromeos/services/assistant/fake_assistant_manager_service_impl.h"
@@ -517,6 +518,12 @@
   assistant_manager_service_ = CreateAndReturnAssistantManagerService();
   assistant_manager_service_->AddCommunicationErrorObserver(this);
   assistant_manager_service_->AddAndFireStateObserver(this);
+
+  if (AssistantInteractionLogger::IsLoggingEnabled()) {
+    interaction_logger_ = std::make_unique<AssistantInteractionLogger>();
+    assistant_manager_service_->AddAssistantInteractionSubscriber(
+        interaction_logger_->BindNewPipeAndPassRemote());
+  }
 }
 
 std::unique_ptr<AssistantManagerService>
diff --git a/chromeos/services/assistant/service.h b/chromeos/services/assistant/service.h
index 51bbca3..c3b2c0f7 100644
--- a/chromeos/services/assistant/service.h
+++ b/chromeos/services/assistant/service.h
@@ -55,8 +55,9 @@
 namespace chromeos {
 namespace assistant {
 
-class ServiceContext;
+class AssistantInteractionLogger;
 class ScopedAshSessionObserver;
+class ServiceContext;
 
 // |AssistantManagerService|'s state won't update if it's currently in the
 // process of starting up. This is the delay before we will try to update
@@ -201,6 +202,8 @@
 
   std::unique_ptr<signin::AccessTokenFetcher> access_token_fetcher_;
 
+  std::unique_ptr<AssistantInteractionLogger> interaction_logger_;
+
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<Service> weak_ptr_factory_{this};
diff --git a/chromeos/services/network_config/cros_network_config.cc b/chromeos/services/network_config/cros_network_config.cc
index 34fda40..71f2fe8 100644
--- a/chromeos/services/network_config/cros_network_config.cc
+++ b/chromeos/services/network_config/cros_network_config.cc
@@ -269,15 +269,14 @@
     const DeviceState* device =
         network_state_handler->GetDeviceState(network->device_path());
     if (!device) {
-      // When a device is removed (e.g. cellular modem unplugged) it's possible
-      // for the device object to disappear before networks on that device
-      // are cleaned up.  This fixes crbug/1001687.
-      NET_LOG(DEBUG) << "Cellular is not available.";
-      return nullptr;
-    }
-
-    if (device->IsSimLocked() || device->scanning())
+      // When a device is removed or SIM is replaced, the Shill Service may
+      // outlive the Device. Such services are not connectable.
+      NET_LOG(DEBUG) << "Cellular device is not available: "
+                     << network->device_path();
       result->connectable = false;
+    } else if (device->IsSimLocked() || device->scanning()) {
+      result->connectable = false;
+    }
   }
   result->connect_requested = network->connect_requested();
   bool technology_enabled = network->Matches(NetworkTypePattern::VPN()) ||
@@ -324,7 +323,7 @@
 
       const DeviceState* cellular_device =
           network_state_handler->GetDeviceState(network->device_path());
-      cellular->sim_locked = cellular_device->IsSimLocked();
+      cellular->sim_locked = cellular_device && cellular_device->IsSimLocked();
       result->type_state =
           mojom::NetworkTypeStateProperties::NewCellular(std::move(cellular));
       break;
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index 4c6f168d..148731b6 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -38,7 +38,7 @@
 <translation id="5332948983412042822">Elige una nueva ahora</translation>
 <translation id="5457599981699367932">Navegar como invitado</translation>
 <translation id="54609108002486618">Gestionado</translation>
-<translation id="5832805196449965646">Agregar un usuario</translation>
+<translation id="5832805196449965646">Agregar a una persona</translation>
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="6058625436358447366">Para finalizar, ingresa tu contraseña anterior y la nueva</translation>
 <translation id="6106186594183574873">Para finalizar, ingresa tu contraseña anterior</translation>
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 2162bee..102c7e4 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -277,6 +277,7 @@
       "//components/services/paint_preview_compositor:unit_tests",
       "//components/services/quarantine:unit_tests",
       "//components/services/storage:tests",
+      "//components/site_isolation:unit_tests",
       "//components/spellcheck/browser:unit_tests",
       "//components/spellcheck/renderer:unit_tests",
       "//components/subresource_filter/content/browser:unit_tests",
diff --git a/components/about_ui/resources/about_credits.js b/components/about_ui/resources/about_credits.js
index 3e1b49bc..b7c981d 100644
--- a/components/about_ui/resources/about_credits.js
+++ b/components/about_ui/resources/about_credits.js
@@ -18,7 +18,8 @@
       },
     });
 
-    // TODO remove an empty string argument once supported
+    // TODO(Jun.Kokatsu@microsoft.com): remove an empty string argument
+    // once supported.
     // https://github.com/w3c/webappsec-trusted-types/issues/278
     keyboardUtils.src = staticURLPolicy.createScriptURL('');
     document.body.appendChild(keyboardUtils);
diff --git a/components/arc/midis/arc_midis_bridge.cc b/components/arc/midis/arc_midis_bridge.cc
index 60de5dc0..94f0dc74 100644
--- a/components/arc/midis/arc_midis_bridge.cc
+++ b/components/arc/midis/arc_midis_bridge.cc
@@ -58,7 +58,7 @@
 
 void ArcMidisBridge::OnBootstrapMojoConnection(
     mojo::PendingReceiver<mojom::MidisServer> receiver,
-    mojom::MidisClientPtr client_ptr,
+    mojo::PendingRemote<mojom::MidisClient> client_remote,
     bool result) {
   if (!result) {
     LOG(ERROR) << "ArcMidisBridge had a failure in D-Bus with the daemon.";
@@ -70,14 +70,15 @@
     return;
   }
   DVLOG(1) << "ArcMidisBridge succeeded with Mojo bootstrapping.";
-  midis_host_remote_->Connect(std::move(receiver), std::move(client_ptr));
+  midis_host_remote_->Connect(std::move(receiver), std::move(client_remote));
 }
 
-void ArcMidisBridge::Connect(mojo::PendingReceiver<mojom::MidisServer> receiver,
-                             mojom::MidisClientPtr client_ptr) {
+void ArcMidisBridge::Connect(
+    mojo::PendingReceiver<mojom::MidisServer> receiver,
+    mojo::PendingRemote<mojom::MidisClient> client_remote) {
   if (midis_host_remote_.is_bound()) {
     DVLOG(1) << "Re-using bootstrap connection for MidisServer Connect.";
-    midis_host_remote_->Connect(std::move(receiver), std::move(client_ptr));
+    midis_host_remote_->Connect(std::move(receiver), std::move(client_remote));
     return;
   }
   DVLOG(1) << "Bootstrapping the Midis connection via D-Bus.";
@@ -102,7 +103,7 @@
           channel.TakeRemoteEndpoint().TakePlatformHandle().TakeFD(),
           base::BindOnce(&ArcMidisBridge::OnBootstrapMojoConnection,
                          weak_factory_.GetWeakPtr(), std::move(receiver),
-                         std::move(client_ptr)));
+                         std::move(client_remote)));
 }
 
 void ArcMidisBridge::OnMojoConnectionError() {
diff --git a/components/arc/midis/arc_midis_bridge.h b/components/arc/midis/arc_midis_bridge.h
index 501de45d..3b97a95e 100644
--- a/components/arc/midis/arc_midis_bridge.h
+++ b/components/arc/midis/arc_midis_bridge.h
@@ -13,6 +13,7 @@
 #include "components/arc/mojom/midis.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 
 namespace content {
@@ -36,12 +37,12 @@
 
   // Midis Mojo host interface
   void Connect(mojo::PendingReceiver<mojom::MidisServer> receiver,
-               mojom::MidisClientPtr client_ptr) override;
+               mojo::PendingRemote<mojom::MidisClient> client_remote) override;
 
  private:
   void OnBootstrapMojoConnection(
       mojo::PendingReceiver<mojom::MidisServer> receiver,
-      mojom::MidisClientPtr client_ptr,
+      mojo::PendingRemote<mojom::MidisClient> client_remote,
       bool result);
   void OnMojoConnectionError();
 
diff --git a/components/arc/mojom/midis.mojom b/components/arc/mojom/midis.mojom
index 54ecbf1..18d9e403 100644
--- a/components/arc/mojom/midis.mojom
+++ b/components/arc/mojom/midis.mojom
@@ -66,7 +66,8 @@
 // by the client).
 // Next Method ID: 1
 interface MidisHost {
-  Connect@0(pending_receiver<MidisServer> server, MidisClient client);
+  Connect@0(
+      pending_receiver<MidisServer> server, pending_remote<MidisClient> client);
 };
 
 // MidisInstance is implemented in the ARC MIDI JNI code that
diff --git a/components/autofill/core/browser/data_model/credit_card.cc b/components/autofill/core/browser/data_model/credit_card.cc
index 65c84a32..86e54707 100644
--- a/components/autofill/core/browser/data_model/credit_card.cc
+++ b/components/autofill/core/browser/data_model/credit_card.cc
@@ -904,6 +904,10 @@
   return true;
 }
 
+base::string16 CreditCard::NicknameAndLastFourDigitsForTesting() const {
+  return NicknameAndLastFourDigits();
+}
+
 base::string16 CreditCard::Expiration2DigitYearAsString() const {
   return data_util::Expiration2DigitYearAsString(expiration_year_);
 }
diff --git a/components/autofill/core/browser/data_model/credit_card.h b/components/autofill/core/browser/data_model/credit_card.h
index 555dc93..b73bd3e 100644
--- a/components/autofill/core/browser/data_model/credit_card.h
+++ b/components/autofill/core/browser/data_model/credit_card.h
@@ -292,10 +292,12 @@
   // Returns whether the card has a valid nickname.
   bool HasValidNickname() const;
 
+  // Should be used ONLY by tests.
+  base::string16 NicknameAndLastFourDigitsForTesting() const;
+
  private:
   FRIEND_TEST_ALL_PREFIXES(CreditCardTest, SetExpirationDateFromString);
   FRIEND_TEST_ALL_PREFIXES(CreditCardTest, SetExpirationYearFromString);
-  FRIEND_TEST_ALL_PREFIXES(CreditCardTest, NicknameAndLastFourDigitsStrings);
 
   base::string16 Expiration2DigitYearAsString() const;
 
diff --git a/components/autofill/core/browser/data_model/credit_card_unittest.cc b/components/autofill/core/browser/data_model/credit_card_unittest.cc
index 20f3d04..a324fca 100644
--- a/components/autofill/core/browser/data_model/credit_card_unittest.cc
+++ b/components/autofill/core/browser/data_model/credit_card_unittest.cc
@@ -219,7 +219,7 @@
   test::SetCreditCardInfo(&credit_card1, "John Dillinger", "", "01", "2020",
                           "1");
   credit_card1.SetNickname(valid_nickname);
-  EXPECT_EQ(valid_nickname, credit_card1.NicknameAndLastFourDigits());
+  EXPECT_EQ(valid_nickname, credit_card1.NicknameAndLastFourDigitsForTesting());
 
   // Case 2: Have everything.
   CreditCard credit_card2(base::GenerateGUID(), "https://www.example.com/");
@@ -229,7 +229,7 @@
   EXPECT_EQ(
       valid_nickname + UTF8ToUTF16(std::string("  ") +
                                    test::ObfuscatedCardDigitsAsUTF8("5100")),
-      credit_card2.NicknameAndLastFourDigits());
+      credit_card2.NicknameAndLastFourDigitsForTesting());
 }
 
 TEST(CreditCardTest, CardIdentifierStringsForAutofillDisplay) {
diff --git a/components/autofill/core/browser/form_data_importer.cc b/components/autofill/core/browser/form_data_importer.cc
index b810b94..29468de7 100644
--- a/components/autofill/core/browser/form_data_importer.cc
+++ b/components/autofill/core/browser/form_data_importer.cc
@@ -706,6 +706,15 @@
       // already a local card.
       imported_credit_card_record_type_ =
           ImportedCreditCardRecordType::LOCAL_CARD;
+
+      // If the card is a local card and it has a nickname stored in the local
+      // database, copy the nickname to the |candidate_credit_card| so that the
+      // nickname also shows in the Upstream bubble.
+      if (base::FeatureList::IsEnabled(
+              features::kAutofillEnableSurfacingServerCardNickname)) {
+        candidate_credit_card.SetNickname(card_copy.nickname());
+      }
+
       // If we should not return the local card, return that we merged it,
       // without setting |imported_credit_card|.
       if (!should_return_local_card)
diff --git a/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc b/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc
index 762d557..5efca8c 100644
--- a/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc
+++ b/components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.cc
@@ -47,7 +47,7 @@
       pref_service_(pref_service),
       had_user_interaction_(false),
       issuer_icon_id_(CreditCard::IconResourceId(card.network())),
-      card_label_(card.NetworkAndLastFourDigits()),
+      card_label_(card.CardIdentifierStringForAutofillDisplay()),
       card_sub_label_(card.AbbreviatedExpirationDateForDisplay(false)),
       card_last_four_digits_(card.LastFourDigits()),
       cardholder_name_(card.GetRawInfo(CREDIT_CARD_NAME_FULL)),
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager.cc b/components/autofill/core/browser/payments/credit_card_access_manager.cc
index 1d306ac..8cff31d 100644
--- a/components/autofill/core/browser/payments/credit_card_access_manager.cc
+++ b/components/autofill/core/browser/payments/credit_card_access_manager.cc
@@ -154,7 +154,7 @@
     return false;
 
   if (title)
-    title->assign(card->NetworkAndLastFourDigits());
+    title->assign(card->CardIdentifierStringForAutofillDisplay());
   if (body) {
     body->assign(l10n_util::GetStringUTF16(
         IDS_AUTOFILL_DELETE_CREDIT_CARD_SUGGESTION_CONFIRMATION_BODY));
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
index b507de3..3c13e1d3d 100644
--- a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
@@ -460,7 +460,7 @@
       card, &title, &body));
 
   // |title| and |body| should be updated appropriately.
-  EXPECT_EQ(title, card->NetworkAndLastFourDigits());
+  EXPECT_EQ(title, card->CardIdentifierStringForAutofillDisplay());
   EXPECT_EQ(body,
             l10n_util::GetStringUTF16(
                 IDS_AUTOFILL_DELETE_CREDIT_CARD_SUGGESTION_CONFIRMATION_BODY));
diff --git a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl.cc b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl.cc
index a5a81c6..84de592 100644
--- a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl.cc
+++ b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl.cc
@@ -41,7 +41,7 @@
   DCHECK(!callback.is_null());
   DCHECK(card_expiration_date_fix_flow_view);
 
-  card_label_ = card.NetworkAndLastFourDigits();
+  card_label_ = card.CardIdentifierStringForAutofillDisplay();
 
   if (card_expiration_date_fix_flow_view_)
     card_expiration_date_fix_flow_view_->ControllerGone();
diff --git a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl_unittest.cc b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl_unittest.cc
index b3834c9..b4fdd611 100644
--- a/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl_unittest.cc
+++ b/components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_controller_impl_unittest.cc
@@ -11,10 +11,12 @@
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view.h"
+#include "components/autofill/core/common/autofill_payments_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace autofill {
@@ -29,9 +31,9 @@
  public:
   CardExpirationDateFixFlowControllerImplGenericTest() {}
 
-  void ShowPrompt() {
+  void ShowPrompt(CreditCard credit_card = CreditCard()) {
     controller_->Show(
-        test_card_expiration_date_fix_flow_view_.get(), autofill::CreditCard(),
+        test_card_expiration_date_fix_flow_view_.get(), credit_card,
         base::BindOnce(
             &CardExpirationDateFixFlowControllerImplGenericTest::OnAccepted,
             weak_ptr_factory_.GetWeakPtr()));
@@ -106,4 +108,41 @@
       1);
 }
 
+// Tests to ensure the card nickname is shown correctly in the expiration fix
+// flow prompt. The param indicates whether the nickname experiment is enabled.
+class CardExpirationDateFixFlowControllerImplTestForNickname
+    : public CardExpirationDateFixFlowControllerImplTest,
+      public ::testing::WithParamInterface<bool> {
+ public:
+  CardExpirationDateFixFlowControllerImpl* GetController() {
+    return controller_.get();
+  }
+
+ protected:
+  CardExpirationDateFixFlowControllerImplTestForNickname() {
+    scoped_feature_list_.InitWithFeatureState(
+        features::kAutofillEnableSurfacingServerCardNickname, GetParam());
+  }
+
+  ~CardExpirationDateFixFlowControllerImplTestForNickname() override = default;
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(,
+                         CardExpirationDateFixFlowControllerImplTestForNickname,
+                         testing::Bool());
+
+TEST_P(CardExpirationDateFixFlowControllerImplTestForNickname,
+       CardIdentifierString) {
+  CreditCard card = test::GetCreditCard();
+  card.SetNickname(base::ASCIIToUTF16("nickname"));
+  ShowPrompt(card);
+
+  EXPECT_EQ(GetController()->GetCardLabel(),
+            GetParam() ? card.NicknameAndLastFourDigitsForTesting()
+                       : card.NetworkAndLastFourDigits());
+}
+
 }  // namespace autofill
diff --git a/components/browser_ui/share/DEPS b/components/browser_ui/share/DEPS
index 7d3ee13..b7c84e1 100644
--- a/components/browser_ui/share/DEPS
+++ b/components/browser_ui/share/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+components/dom_distiller/core/android",
   "+content/public/android",
+  "+content/public/test/android/javatests",
   "+ui/android",
 ]
diff --git a/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareImageFileUtilsTest.java b/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareImageFileUtilsTest.java
index 79298ba..9385dcb3 100644
--- a/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareImageFileUtilsTest.java
+++ b/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareImageFileUtilsTest.java
@@ -20,6 +20,7 @@
 import android.support.test.filters.SmallTest;
 
 import androidx.core.content.FileProvider;
+import androidx.core.util.ObjectsCompat;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -34,6 +35,8 @@
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.DisabledTest;
+import org.chromium.content_public.browser.test.util.Criteria;
+import org.chromium.content_public.browser.test.util.CriteriaHelper;
 import org.chromium.ui.base.Clipboard;
 import org.chromium.ui.test.util.DummyUiActivityTestCase;
 
@@ -132,6 +135,13 @@
                 getActivity(), TEST_IMAGE_DATA, fileExtension, imageCallback);
         imageCallback.waitForCallback(0, 1, WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
         Clipboard.getInstance().setImageUri(imageCallback.getImageUri());
+        CriteriaHelper.pollInstrumentationThread(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                return ObjectsCompat.equals(
+                        Clipboard.getInstance().getImageUri(), imageCallback.getImageUri());
+            }
+        });
         return imageCallback.getImageUri();
     }
 
diff --git a/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java b/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java
index 6bd64e4..f26655eb 100644
--- a/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java
+++ b/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java
@@ -145,8 +145,6 @@
 
     /** The builder for {@link ShareParams} objects. */
     public static class Builder {
-        private boolean mShareDirectly;
-        private boolean mSaveLastUsed;
         private WindowAndroid mWindow;
         private String mTitle;
         private String mText;
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
index a7e3e7b4..10c7960 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
@@ -35,6 +35,7 @@
 import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
 
 import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.annotations.UsedByReflection;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference;
 import org.chromium.components.browser_ui.settings.ChromeBasePreference;
@@ -70,6 +71,7 @@
  * the websites with microphone permissions. When the user selects a site, SingleWebsiteSettings
  * is launched to allow the user to see or modify the settings for that particular website.
  */
+@UsedByReflection("site_settings_preferences.xml")
 public class SingleCategorySettings extends SiteSettingsPreferenceFragment
         implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener,
                    AddExceptionPreference.SiteAddedCallback, View.OnClickListener,
diff --git a/components/content_settings/browser/tab_specific_content_settings.cc b/components/content_settings/browser/tab_specific_content_settings.cc
index 2bfbf4b..1d2bc55 100644
--- a/components/content_settings/browser/tab_specific_content_settings.cc
+++ b/components/content_settings/browser/tab_specific_content_settings.cc
@@ -749,7 +749,7 @@
 
   PrefService* prefs = delegate_->GetPrefs();
   if (prefs &&
-      prefs->GetBoolean(
+      !prefs->GetBoolean(
           security_state::prefs::kStricterMixedContentTreatmentEnabled)) {
     auto* render_frame_host = navigation_handle->GetRenderFrameHost();
     mojo::AssociatedRemote<content_settings::mojom::ContentSettingsAgent>
diff --git a/components/download/public/common/auto_resumption_handler.cc b/components/download/public/common/auto_resumption_handler.cc
index 9cfdb60..4adcc8c 100644
--- a/components/download/public/common/auto_resumption_handler.cc
+++ b/components/download/public/common/auto_resumption_handler.cc
@@ -303,6 +303,9 @@
   if (download_item->GetBytesWasted() > auto_resumption_size_limit)
     return false;
 
+  if (download_item->GetTargetFilePath().empty())
+    return false;
+
   int interrupt_reason = download_item->GetLastReason();
   DCHECK_NE(interrupt_reason, download::DOWNLOAD_INTERRUPT_REASON_NONE);
   return interrupt_reason ==
diff --git a/components/download/public/common/auto_resumption_handler_unittest.cc b/components/download/public/common/auto_resumption_handler_unittest.cc
index f728dd5..33eb059f 100644
--- a/components/download/public/common/auto_resumption_handler_unittest.cc
+++ b/components/download/public/common/auto_resumption_handler_unittest.cc
@@ -58,7 +58,8 @@
   void SetDownloadState(MockDownloadItem* download,
                         DownloadItem::DownloadState state,
                         bool paused,
-                        bool metered) {
+                        bool metered,
+                        bool has_target_file_path = true) {
     ON_CALL(*download, GetGuid())
         .WillByDefault(ReturnRefOfCopy(base::GenerateGUID()));
     ON_CALL(*download, GetURL())
@@ -66,6 +67,10 @@
     ON_CALL(*download, GetState()).WillByDefault(Return(state));
     ON_CALL(*download, IsPaused()).WillByDefault(Return(paused));
     ON_CALL(*download, AllowMetered()).WillByDefault(Return(metered));
+    ON_CALL(*download, GetTargetFilePath())
+        .WillByDefault(ReturnRefOfCopy(
+            has_target_file_path ? base::FilePath(FILE_PATH_LITERAL("a.txt"))
+                                 : base::FilePath()));
     auto last_reason =
         state == DownloadItem::INTERRUPTED
             ? download::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED
@@ -224,4 +229,17 @@
   auto_resumption_handler_->OnStartScheduledTask(std::move(callback));
   task_runner_->FastForwardUntilNoTasksRemain();
 }
+
+TEST_F(AutoResumptionHandlerTest, DownloadWithoutTargetPathNotAutoResumed) {
+  SetNetworkConnectionType(ConnectionType::CONNECTION_WIFI);
+  auto item = std::make_unique<NiceMock<MockDownloadItem>>();
+  SetDownloadState(item.get(), DownloadItem::INTERRUPTED, false, false, false);
+  auto_resumption_handler_->OnDownloadStarted(item.get());
+  task_runner_->FastForwardUntilNoTasksRemain();
+
+  EXPECT_CALL(*item.get(), Resume(_)).Times(0);
+  TaskFinishedCallback callback;
+  auto_resumption_handler_->OnStartScheduledTask(std::move(callback));
+  task_runner_->FastForwardUntilNoTasksRemain();
+}
 }  // namespace download
diff --git a/components/feed/core/v2/feed_store.h b/components/feed/core/v2/feed_store.h
index e0363db2..c74ab1b 100644
--- a/components/feed/core/v2/feed_store.h
+++ b/components/feed/core/v2/feed_store.h
@@ -95,10 +95,6 @@
   void WriteMetadata(feedstore::Metadata metadata,
                      base::OnceCallback<void(bool)> callback);
 
-  // TODO(iwells): implement this
-  // Deletes old records that are no longer needed
-  // void RemoveOldData(base::OnceCallback<void(bool)> callback);
-
   bool IsInitializedForTesting() const;
 
   leveldb_proto::ProtoDatabase<feedstore::Record>* GetDatabaseForTesting() {
@@ -151,11 +147,6 @@
       bool read_ok,
       std::unique_ptr<feedstore::Record> record);
 
-  // TODO(iwells): implement
-  // bool OldRecordFilter(const std::string& key);
-  // void OnRemoveOldDataFinished(base::OnceCallback<void(bool)> callback,
-  //                             bool success);
-
   base::OnceClosure initialize_callback_;
   leveldb_proto::Enums::InitStatus database_status_;
   std::unique_ptr<leveldb_proto::ProtoDatabase<feedstore::Record>> database_;
diff --git a/components/flags_ui/BUILD.gn b/components/flags_ui/BUILD.gn
index 7d37afb..b89290b 100644
--- a/components/flags_ui/BUILD.gn
+++ b/components/flags_ui/BUILD.gn
@@ -12,6 +12,8 @@
     "flags_storage.h",
     "flags_ui_constants.cc",
     "flags_ui_constants.h",
+    "flags_ui_metrics.cc",
+    "flags_ui_metrics.h",
     "flags_ui_pref_names.cc",
     "flags_ui_pref_names.h",
     "pref_service_flags_storage.cc",
diff --git a/components/flags_ui/flags_ui_metrics.cc b/components/flags_ui/flags_ui_metrics.cc
new file mode 100644
index 0000000..5ff37150
--- /dev/null
+++ b/components/flags_ui/flags_ui_metrics.cc
@@ -0,0 +1,77 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/flags_ui/flags_ui_metrics.h"
+
+#include <set>
+#include <string>
+
+#include "base/logging.h"
+#include "base/metrics/histogram_functions.h"
+#include "base/metrics/metrics_hashes.h"
+#include "base/notreached.h"
+#include "base/strings/string_util.h"
+
+namespace flags_ui {
+
+namespace {
+
+// Records a set of feature switches (prefixed with "--").
+void ReportAboutFlagsHistogramSwitches(const std::string& uma_histogram_name,
+                                       const std::set<std::string>& switches) {
+  for (const std::string& flag : switches) {
+    int uma_id = testing::kBadSwitchFormatHistogramId;
+    if (base::StartsWith(flag, "--", base::CompareCase::SENSITIVE)) {
+      // Skip '--' before switch name.
+      std::string switch_name(flag.substr(2));
+
+      // Kill value, if any.
+      const size_t value_pos = switch_name.find('=');
+      if (value_pos != std::string::npos)
+        switch_name.resize(value_pos);
+
+      uma_id = GetSwitchUMAId(switch_name);
+    } else {
+      NOTREACHED() << "ReportAboutFlagsHistogram(): flag '" << flag
+                   << "' has incorrect format.";
+    }
+    DVLOG(1) << "ReportAboutFlagsHistogram(): histogram='" << uma_histogram_name
+             << "' '" << flag << "', uma_id=" << uma_id;
+    base::UmaHistogramSparse(uma_histogram_name, uma_id);
+  }
+}
+
+// Records a set of FEATURE_VALUE_TYPE features (suffixed with ":enabled" or
+// "disabled", depending on their state).
+void ReportAboutFlagsHistogramFeatures(const std::string& uma_histogram_name,
+                                       const std::set<std::string>& features) {
+  for (const std::string& feature : features) {
+    int uma_id = GetSwitchUMAId(feature);
+    DVLOG(1) << "ReportAboutFlagsHistogram(): histogram='" << uma_histogram_name
+             << "' '" << feature << "', uma_id=" << uma_id;
+    base::UmaHistogramSparse(uma_histogram_name, uma_id);
+  }
+}
+
+}  // namespace
+
+base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name) {
+  return static_cast<base::HistogramBase::Sample>(
+      base::HashMetricName(switch_name));
+}
+
+void ReportAboutFlagsHistogram(const std::string& uma_histogram_name,
+                               const std::set<std::string>& switches,
+                               const std::set<std::string>& features) {
+  ReportAboutFlagsHistogramSwitches(uma_histogram_name, switches);
+  ReportAboutFlagsHistogramFeatures(uma_histogram_name, features);
+}
+
+namespace testing {
+
+const base::HistogramBase::Sample kBadSwitchFormatHistogramId = 0;
+
+}  // namespace testing
+
+}  // namespace flags_ui
diff --git a/components/flags_ui/flags_ui_metrics.h b/components/flags_ui/flags_ui_metrics.h
new file mode 100644
index 0000000..792a32f
--- /dev/null
+++ b/components/flags_ui/flags_ui_metrics.h
@@ -0,0 +1,35 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_FLAGS_UI_FLAGS_UI_METRICS_H_
+#define COMPONENTS_FLAGS_UI_FLAGS_UI_METRICS_H_
+
+#include <set>
+#include <string>
+
+#include "base/metrics/histogram_base.h"
+
+namespace flags_ui {
+
+// Returns the UMA id for the specified switch name.
+base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name);
+
+// Sends stats (as UMA histogram) about a set of command line |flags| in
+// a histogram, with an enum value for each flag in |switches| and |features|,
+// based on the hash of the flag name.
+void ReportAboutFlagsHistogram(const std::string& uma_histogram_name,
+                               const std::set<std::string>& switches,
+                               const std::set<std::string>& features);
+
+namespace testing {
+
+// This value is reported as switch histogram ID if switch name has unknown
+// format.
+extern const base::HistogramBase::Sample kBadSwitchFormatHistogramId;
+
+}  // namespace testing
+
+}  // namespace flags_ui
+
+#endif  // COMPONENTS_FLAGS_UI_FLAGS_UI_WITCHES_H_
diff --git a/components/flags_ui/resources/flags.html b/components/flags_ui/resources/flags.html
index 52ae93a..191373b 100644
--- a/components/flags_ui/resources/flags.html
+++ b/components/flags_ui/resources/flags.html
@@ -89,7 +89,7 @@
                     jsvalues="title: is_default ? '' : '$i18n{experiment-enabled}';
                         id:internal_name + '_name'"></h3>
                 <p>
-                  <span jsvalues=".innerHTML:description"></span> –
+                  <span jsvalues=".textContent:description"></span> –
                   <span class="platforms" jscontent="supported_platforms.join(', ')"></span>
                 </p>
                 <div jsdisplay="origin_list_value!==null">
@@ -136,7 +136,7 @@
                     jsvalues="title: is_default ? '' : '$i18n{experiment-enabled}';
                         id:internal_name + '_name'"></h3>
                 <p>
-                  <span jsvalues=".innerHTML:description"></span> –
+                  <span jsvalues=".textContent:description"></span> –
                   <span class="platforms" jscontent="supported_platforms.join(', ')"></span>
                 </p>
                 <div jsdisplay="origin_list_value!==null">
@@ -193,7 +193,7 @@
                 <h3 class="experiment-name"
                     jscontent="name"></h3>
                 <p>
-                  <span jsvalues=".innerHTML:description"></span>
+                  <span jsvalues=".textContent:description"></span>
                   <span class="platforms" jscontent="supported_platforms.join(', ')"></span>
                 </p>
                 <a class="permalink"
diff --git a/components/flags_ui/resources/flags.js b/components/flags_ui/resources/flags.js
index 880dff21..7030f4a1 100644
--- a/components/flags_ui/resources/flags.js
+++ b/components/flags_ui/resources/flags.js
@@ -184,9 +184,9 @@
  * @param {string} text The text that should be announced.
 */
 function announceStatus(text) {
-  $('screen-reader-status-message').innerHTML = '';
+  $('screen-reader-status-message').textContent = '';
   setTimeout(function() {
-    $('screen-reader-status-message').innerHTML = text;
+    $('screen-reader-status-message').textContent = text;
   }, 100);
 }
 
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn
index 427e98f..359867e 100644
--- a/components/metrics/BUILD.gn
+++ b/components/metrics/BUILD.gn
@@ -124,6 +124,7 @@
     "ukm_demographic_metrics_provider.h",
     "unsent_log_store.cc",
     "unsent_log_store.h",
+    "unsent_log_store_metrics.cc",
     "unsent_log_store_metrics.h",
     "unsent_log_store_metrics_impl.cc",
     "unsent_log_store_metrics_impl.h",
diff --git a/components/metrics/log_store.h b/components/metrics/log_store.h
index 4965879..744ef67b 100644
--- a/components/metrics/log_store.h
+++ b/components/metrics/log_store.h
@@ -42,6 +42,10 @@
   // Discards the staged log.
   virtual void DiscardStagedLog() = 0;
 
+  // Marks the staged log as sent, DiscardStagedLog() shall still be called if
+  // the staged log needs discarded.
+  virtual void MarkStagedLogAsSent() = 0;
+
   // Saves any unsent logs to persistent storage.
   virtual void PersistUnsentLogs() const = 0;
 
diff --git a/components/metrics/metrics_log_store.cc b/components/metrics/metrics_log_store.cc
index 026bcaf..adf7124 100644
--- a/components/metrics/metrics_log_store.cc
+++ b/components/metrics/metrics_log_store.cc
@@ -38,6 +38,8 @@
 void MetricsLogStore::RegisterPrefs(PrefRegistrySimple* registry) {
   registry->RegisterListPref(prefs::kMetricsInitialLogs);
   registry->RegisterListPref(prefs::kMetricsOngoingLogs);
+  registry->RegisterDictionaryPref(prefs::kMetricsInitialLogsMetadata);
+  registry->RegisterDictionaryPref(prefs::kMetricsOngoingLogsMetadata);
 }
 
 MetricsLogStore::MetricsLogStore(PrefService* local_state,
@@ -47,6 +49,7 @@
       initial_log_queue_(std::make_unique<UnsentLogStoreMetricsImpl>(),
                          local_state,
                          prefs::kMetricsInitialLogs,
+                         prefs::kMetricsInitialLogsMetadata,
                          kInitialLogsSaveLimit,
                          kStorageByteLimitPerLogType,
                          0,
@@ -54,6 +57,7 @@
       ongoing_log_queue_(std::make_unique<UnsentLogStoreMetricsImpl>(),
                          local_state,
                          prefs::kMetricsOngoingLogs,
+                         prefs::kMetricsOngoingLogsMetadata,
                          kOngoingLogsSaveLimit,
                          kStorageByteLimitPerLogType,
                          max_ongoing_log_size,
@@ -71,11 +75,13 @@
                                MetricsLog::LogType log_type) {
   switch (log_type) {
     case MetricsLog::INITIAL_STABILITY_LOG:
-      initial_log_queue_.StoreLog(log_data);
+      // TODO(crbug.com/1076564): Pass the log's sample count.
+      initial_log_queue_.StoreLog(log_data, base::nullopt);
       break;
     case MetricsLog::ONGOING_LOG:
     case MetricsLog::INDEPENDENT_LOG:
-      ongoing_log_queue_.StoreLog(log_data);
+      // TODO(crbug.com/1076564): Pass the log's sample count.
+      ongoing_log_queue_.StoreLog(log_data, base::nullopt);
       break;
   }
 }
@@ -124,6 +130,14 @@
   DCHECK(!has_staged_log());
 }
 
+void MetricsLogStore::MarkStagedLogAsSent() {
+  DCHECK(has_staged_log());
+  if (initial_log_queue_.has_staged_log())
+    initial_log_queue_.MarkStagedLogAsSent();
+  else
+    ongoing_log_queue_.MarkStagedLogAsSent();
+}
+
 void MetricsLogStore::PersistUnsentLogs() const {
   DCHECK(unsent_logs_loaded_);
   if (!unsent_logs_loaded_)
diff --git a/components/metrics/metrics_log_store.h b/components/metrics/metrics_log_store.h
index 361a09c2..5e11b12 100644
--- a/components/metrics/metrics_log_store.h
+++ b/components/metrics/metrics_log_store.h
@@ -46,6 +46,7 @@
   const std::string& staged_log_signature() const override;
   void StageNextLog() override;
   void DiscardStagedLog() override;
+  void MarkStagedLogAsSent() override;
   void PersistUnsentLogs() const override;
   void LoadPersistedUnsentLogs() override;
 
diff --git a/components/metrics/metrics_pref_names.cc b/components/metrics/metrics_pref_names.cc
index 63250e1..38dffd3 100644
--- a/components/metrics/metrics_pref_names.cc
+++ b/components/metrics/metrics_pref_names.cc
@@ -28,6 +28,12 @@
 // count info, etc.
 const char kMetricsInitialLogs[] = "user_experience_metrics.initial_logs2";
 
+// An dictionary of information about the unsent initial logs, it was
+// recorded when the unsent log is persisted and will be written into the
+// metrics at the next browser starts up.
+const char kMetricsInitialLogsMetadata[] =
+    "user_experience_metrics.unsent_log_metadata.initial_logs";
+
 // Low entropy source values. The new source (with suffix "3") was created
 // because the old source (with suffix "2") is biased in the wild. Clients which
 // have an old source still incorporate it into the high entropy source, to
@@ -50,6 +56,11 @@
 // user activities.
 const char kMetricsOngoingLogs[] = "user_experience_metrics.ongoing_logs2";
 
+// An dictionary that is same as kUnsentLogMetkMetricsInitialLogsMetadata,
+// but for the ongoing logs.
+const char kMetricsOngoingLogsMetadata[] =
+    "user_experience_metrics.unsent_log_metadata.ongoing_logs";
+
 // Boolean that indicates a cloned install has been detected and the metrics
 // client id and low entropy source should be reset.
 const char kMetricsResetIds[] = "user_experience_metrics.reset_metrics_ids";
diff --git a/components/metrics/metrics_pref_names.h b/components/metrics/metrics_pref_names.h
index ae1376cb..43414a6 100644
--- a/components/metrics/metrics_pref_names.h
+++ b/components/metrics/metrics_pref_names.h
@@ -14,10 +14,12 @@
 extern const char kMetricsClientID[];
 extern const char kMetricsDefaultOptIn[];
 extern const char kMetricsInitialLogs[];
+extern const char kMetricsInitialLogsMetadata[];
 extern const char kMetricsLowEntropySource[];
 extern const char kMetricsOldLowEntropySource[];
 extern const char kMetricsMachineId[];
 extern const char kMetricsOngoingLogs[];
+extern const char kMetricsOngoingLogsMetadata[];
 extern const char kMetricsResetIds[];
 
 // For finding out whether metrics and crash reporting is enabled use the
diff --git a/components/metrics/reporting_service.cc b/components/metrics/reporting_service.cc
index 4b1f804..e002d2f 100644
--- a/components/metrics/reporting_service.cc
+++ b/components/metrics/reporting_service.cc
@@ -192,6 +192,9 @@
     }
 
     if (upload_succeeded || discard_log) {
+      if (upload_succeeded)
+        log_store()->MarkStagedLogAsSent();
+
       log_store()->DiscardStagedLog();
       // Store the updated list to disk now that the removed log is uploaded.
       log_store()->PersistUnsentLogs();
diff --git a/components/metrics/reporting_service_unittest.cc b/components/metrics/reporting_service_unittest.cc
index b05815ec..180b0ac 100644
--- a/components/metrics/reporting_service_unittest.cc
+++ b/components/metrics/reporting_service_unittest.cc
@@ -56,6 +56,7 @@
     logs_.pop_front();
     staged_log_hash_.clear();
   }
+  void MarkStagedLogAsSent() override {}
   void PersistUnsentLogs() const override {}
   void LoadPersistedUnsentLogs() override {}
 
diff --git a/components/metrics/unsent_log_store.cc b/components/metrics/unsent_log_store.cc
index 70d82f63..1951b2d 100644
--- a/components/metrics/unsent_log_store.cc
+++ b/components/metrics/unsent_log_store.cc
@@ -4,6 +4,7 @@
 
 #include "components/metrics/unsent_log_store.h"
 
+#include <cmath>
 #include <memory>
 #include <string>
 #include <utility>
@@ -28,6 +29,9 @@
 const char kLogSignatureKey[] = "signature";
 const char kLogTimestampKey[] = "timestamp";
 const char kLogDataKey[] = "data";
+const char kLogUnsentCountKey[] = "unsent_samples_count";
+const char kLogSentCountKey[] = "sent_samples_count";
+const char kLogPersistedSizeInKbKey[] = "unsent_persisted_size_in_kb";
 
 std::string EncodeToBase64(const std::string& to_convert) {
   DCHECK(to_convert.data());
@@ -44,15 +48,17 @@
 
 }  // namespace
 
-UnsentLogStore::LogInfo::LogInfo() {}
-UnsentLogStore::LogInfo::LogInfo(
-  const UnsentLogStore::LogInfo& other) = default;
-UnsentLogStore::LogInfo::~LogInfo() {}
+UnsentLogStore::LogInfo::LogInfo() = default;
+UnsentLogStore::LogInfo::LogInfo(const UnsentLogStore::LogInfo& other) =
+    default;
+UnsentLogStore::LogInfo::~LogInfo() = default;
 
-void UnsentLogStore::LogInfo::Init(UnsentLogStoreMetrics* metrics,
-                                  const std::string& log_data,
-                                  const std::string& log_timestamp,
-                                  const std::string& signing_key) {
+void UnsentLogStore::LogInfo::Init(
+    UnsentLogStoreMetrics* metrics,
+    const std::string& log_data,
+    const std::string& log_timestamp,
+    const std::string& signing_key,
+    base::Optional<base::HistogramBase::Count> samples_count) {
   DCHECK(!log_data.empty());
 
   if (!compression::GzipCompress(log_data, &compressed_log_data)) {
@@ -75,18 +81,21 @@
   }
 
   timestamp = log_timestamp;
+  this->samples_count = samples_count;
 }
 
 UnsentLogStore::UnsentLogStore(std::unique_ptr<UnsentLogStoreMetrics> metrics,
-                             PrefService* local_state,
-                             const char* pref_name,
-                             size_t min_log_count,
-                             size_t min_log_bytes,
-                             size_t max_log_size,
-                             const std::string& signing_key)
+                               PrefService* local_state,
+                               const char* log_data_pref_name,
+                               const char* metadata_pref_name,
+                               size_t min_log_count,
+                               size_t min_log_bytes,
+                               size_t max_log_size,
+                               const std::string& signing_key)
     : metrics_(std::move(metrics)),
       local_state_(local_state),
-      pref_name_(pref_name),
+      log_data_pref_name_(log_data_pref_name),
+      metadata_pref_name_(metadata_pref_name),
       min_log_count_(min_log_count),
       min_log_bytes_(min_log_bytes),
       max_log_size_(max_log_size != 0 ? max_log_size : static_cast<size_t>(-1)),
@@ -148,8 +157,15 @@
   staged_log_index_ = -1;
 }
 
+void UnsentLogStore::MarkStagedLogAsSent() {
+  DCHECK(has_staged_log());
+  DCHECK_LT(static_cast<size_t>(staged_log_index_), list_.size());
+  if (list_[staged_log_index_].samples_count.has_value())
+    total_samples_sent_ += list_[staged_log_index_].samples_count.value();
+}
+
 void UnsentLogStore::PersistUnsentLogs() const {
-  ListPrefUpdate update(local_state_, pref_name_);
+  ListPrefUpdate update(local_state_, log_data_pref_name_);
   // TODO(crbug.com/859477): Verify that the preference has been properly
   // registered.
   CHECK(update.Get());
@@ -157,14 +173,17 @@
 }
 
 void UnsentLogStore::LoadPersistedUnsentLogs() {
-  ReadLogsFromPrefList(*local_state_->GetList(pref_name_));
+  ReadLogsFromPrefList(*local_state_->GetList(log_data_pref_name_));
+  RecordMetaDataMertics();
 }
 
-void UnsentLogStore::StoreLog(const std::string& log_data) {
-  list_.push_back(LogInfo());
+void UnsentLogStore::StoreLog(
+    const std::string& log_data,
+    base::Optional<base::HistogramBase::Count> samples_count) {
+  list_.emplace_back();
   list_.back().Init(metrics_.get(), log_data,
                     base::NumberToString(base::Time::Now().ToTimeT()),
-                    signing_key_);
+                    signing_key_, samples_count);
 }
 
 const std::string& UnsentLogStore::GetLogAtIndex(size_t index) {
@@ -173,8 +192,10 @@
   return list_[index].compressed_log_data;
 }
 
-std::string UnsentLogStore::ReplaceLogAtIndex(size_t index,
-                                              const std::string& new_log_data) {
+std::string UnsentLogStore::ReplaceLogAtIndex(
+    size_t index,
+    const std::string& new_log_data,
+    base::Optional<base::HistogramBase::Count> samples_count) {
   DCHECK_GE(index, 0U);
   DCHECK_LT(index, list_.size());
 
@@ -185,7 +206,8 @@
   old_timestamp.swap(list_[index].timestamp);
 
   list_[index] = LogInfo();
-  list_[index].Init(metrics_.get(), new_log_data, old_timestamp, signing_key_);
+  list_[index].Init(metrics_.get(), new_log_data, old_timestamp, signing_key_,
+                    samples_count);
   return old_log_data;
 }
 
@@ -194,7 +216,11 @@
     DiscardStagedLog();
   }
   list_.clear();
-  local_state_->ClearPref(pref_name_);
+  local_state_->ClearPref(log_data_pref_name_);
+  // The |total_samples_sent_| isn't cleared intentionally because it is still
+  // meaningful.
+  if (metadata_pref_name_)
+    local_state_->ClearPref(metadata_pref_name_);
 }
 
 void UnsentLogStore::ReadLogsFromPrefList(const base::ListValue& list_value) {
@@ -257,6 +283,8 @@
     ++saved_log_count;
   }
   int dropped_logs_num = start - 1;
+  base::HistogramBase::Count unsent_samples_count = 0;
+  size_t unsent_persisted_size = 0;
 
   for (size_t i = start; i < list_.size(); ++i) {
     size_t log_size = list_[i].compressed_log_data.length();
@@ -273,9 +301,56 @@
                           EncodeToBase64(list_[i].compressed_log_data));
     dict_value->SetString(kLogTimestampKey, list_[i].timestamp);
     list_value->Append(std::move(dict_value));
+
+    if (list_[i].samples_count.has_value()) {
+      unsent_samples_count += list_[i].samples_count.value();
+    }
+    unsent_persisted_size += log_size;
   }
   if (dropped_logs_num > 0)
     metrics_->RecordDroppedLogsNum(dropped_logs_num);
+
+  WriteToMetricsPref(unsent_samples_count, total_samples_sent_,
+                     unsent_persisted_size);
+}
+
+void UnsentLogStore::WriteToMetricsPref(
+    base::HistogramBase::Count unsent_samples_count,
+    base::HistogramBase::Count sent_samples_count,
+    size_t unsent_persisted_size) const {
+  if (metadata_pref_name_ == nullptr)
+    return;
+
+  DictionaryPrefUpdate update(local_state_, metadata_pref_name_);
+  base::DictionaryValue* pref_data = update.Get();
+  pref_data->SetKey(kLogUnsentCountKey, base::Value(unsent_samples_count));
+  pref_data->SetKey(kLogSentCountKey, base::Value(sent_samples_count));
+  // Round up to kb.
+  pref_data->SetKey(
+      kLogPersistedSizeInKbKey,
+      base::Value(static_cast<int>(std::ceil(unsent_persisted_size / 1024.0))));
+}
+
+void UnsentLogStore::RecordMetaDataMertics() {
+  if (metadata_pref_name_ == nullptr)
+    return;
+
+  const base::DictionaryValue* value =
+      local_state_->GetDictionary(metadata_pref_name_);
+  if (!value)
+    return;
+
+  auto unsent_samples_count = value->FindIntKey(kLogUnsentCountKey);
+  auto sent_samples_count = value->FindIntKey(kLogSentCountKey);
+  auto unsent_persisted_size_in_kb =
+      value->FindIntKey(kLogPersistedSizeInKbKey);
+
+  if (unsent_samples_count && sent_samples_count &&
+      unsent_persisted_size_in_kb) {
+    metrics_->RecordLastUnsentLogMetadataMetrics(
+        unsent_samples_count.value(), sent_samples_count.value(),
+        unsent_persisted_size_in_kb.value());
+  }
 }
 
 }  // namespace metrics
diff --git a/components/metrics/unsent_log_store.h b/components/metrics/unsent_log_store.h
index b4f11a6..596a77b 100644
--- a/components/metrics/unsent_log_store.h
+++ b/components/metrics/unsent_log_store.h
@@ -11,8 +11,11 @@
 #include <string>
 #include <vector>
 
+#include "base/gtest_prod_util.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/metrics/histogram_base.h"
+#include "base/optional.h"
 #include "base/values.h"
 #include "components/metrics/log_store.h"
 
@@ -26,10 +29,14 @@
 class UnsentLogStore : public LogStore {
  public:
   // Constructs an UnsentLogStore that stores data in |local_state| under the
-  // preference |pref_name|.
+  // preference |log_data_pref_name|.
   // Calling code is responsible for ensuring that the lifetime of |local_state|
   // is longer than the lifetime of UnsentLogStore.
   //
+  // The optional |metadata_pref_name| is the preference that is used to store
+  // the unsent logs info while the unset logs are persisted. That info will be
+  // recorded as UMA metrics in next browser startup.
+  //
   // When saving logs to disk, stores either the first |min_log_count| logs, or
   // at least |min_log_bytes| bytes of logs, whichever is greater.
   //
@@ -40,12 +47,13 @@
   // data, which will be uploaded with the log and used to validate data
   // integrity.
   UnsentLogStore(std::unique_ptr<UnsentLogStoreMetrics> metrics,
-                PrefService* local_state,
-                const char* pref_name,
-                size_t min_log_count,
-                size_t min_log_bytes,
-                size_t max_log_size,
-                const std::string& signing_key);
+                 PrefService* local_state,
+                 const char* log_data_pref_name,
+                 const char* metadata_pref_name,
+                 size_t min_log_count,
+                 size_t min_log_bytes,
+                 size_t max_log_size,
+                 const std::string& signing_key);
   ~UnsentLogStore();
 
   // LogStore:
@@ -56,18 +64,24 @@
   const std::string& staged_log_signature() const override;
   void StageNextLog() override;
   void DiscardStagedLog() override;
+  void MarkStagedLogAsSent() override;
   void PersistUnsentLogs() const override;
   void LoadPersistedUnsentLogs() override;
 
-  // Adds a log to the list.
-  void StoreLog(const std::string& log_data);
+  // Adds a UMA log to the list, |samples_count| is the total number of samples
+  // in the log (if available).
+  void StoreLog(const std::string& log_data,
+                base::Optional<base::HistogramBase::Count> samples_count);
 
   // Gets log data at the given index in the list.
   const std::string& GetLogAtIndex(size_t index);
 
   // Replaces the compressed log at |index| in the store with given log data
   // reusing the same timestamp from the original log, and returns old log data.
-  std::string ReplaceLogAtIndex(size_t index, const std::string& new_log_data);
+  std::string ReplaceLogAtIndex(
+      size_t index,
+      const std::string& new_log_data,
+      base::Optional<base::HistogramBase::Count> samples_count);
 
   // Deletes all logs, in memory and on disk.
   void Purge();
@@ -79,12 +93,22 @@
   size_t size() const { return list_.size(); }
 
  private:
+  FRIEND_TEST_ALL_PREFIXES(UnsentLogStoreTest, UnsentLogMetadataMetrics);
+
   // Writes the list to the ListValue.
   void WriteLogsToPrefList(base::ListValue* list) const;
 
   // Reads the list from the ListValue.
   void ReadLogsFromPrefList(const base::ListValue& list);
 
+  // Writes the unsent log info to the |metadata_pref_name_| preference.
+  void WriteToMetricsPref(base::HistogramBase::Count unsent_samples_count,
+                          base::HistogramBase::Count sent_samples_count,
+                          size_t persisted_size) const;
+
+  // Records the info in |metadata_pref_name_| as UMA metrics.
+  void RecordMetaDataMertics();
+
   // An object for recording UMA metrics.
   std::unique_ptr<UnsentLogStoreMetrics> metrics_;
 
@@ -94,7 +118,11 @@
   PrefService* local_state_;
 
   // The name of the preference to serialize logs to/from.
-  const char* pref_name_;
+  const char* log_data_pref_name_;
+
+  // The name of the preference to store the unsent logs info, it could be
+  // nullptr if the metadata isn't desired.
+  const char* metadata_pref_name_;
 
   // We will keep at least this |min_log_count_| logs or |min_log_bytes_| bytes
   // of logs, whichever is greater, when writing to disk.  These apply after
@@ -124,7 +152,8 @@
     void Init(UnsentLogStoreMetrics* metrics,
               const std::string& log_data,
               const std::string& log_timestamp,
-              const std::string& signing_key);
+              const std::string& signing_key,
+              base::Optional<base::HistogramBase::Count> samples_count);
 
     // Compressed log data - a serialized protobuf that's been gzipped.
     std::string compressed_log_data;
@@ -140,6 +169,9 @@
 
     // The timestamp of when the log was created as a time_t value.
     std::string timestamp;
+
+    // The total number of samples in this log if applicable.
+    base::Optional<base::HistogramBase::Count> samples_count;
   };
   // A list of all of the stored logs, stored with SHA1 hashes to check for
   // corruption while they are stored in memory.
@@ -149,6 +181,9 @@
   // staged, the index will be -1.
   int staged_log_index_;
 
+  // The total number of samples that have been sent from this LogStore.
+  base::HistogramBase::Count total_samples_sent_ = 0;
+
   DISALLOW_COPY_AND_ASSIGN(UnsentLogStore);
 };
 
diff --git a/components/metrics/unsent_log_store_metrics.cc b/components/metrics/unsent_log_store_metrics.cc
new file mode 100644
index 0000000..426f4fc
--- /dev/null
+++ b/components/metrics/unsent_log_store_metrics.cc
@@ -0,0 +1,30 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/metrics/unsent_log_store_metrics.h"
+
+namespace metrics {
+
+// static
+const base::Feature UnsentLogStoreMetrics::kRecordLastUnsentLogMetadataMetrics =
+    {"RecordLastUnsentLogMetadataMetrics", base::FEATURE_DISABLED_BY_DEFAULT};
+
+UnsentLogStoreMetrics::UnsentLogStoreMetrics() = default;
+UnsentLogStoreMetrics::~UnsentLogStoreMetrics() = default;
+
+void UnsentLogStoreMetrics::RecordLogReadStatus(LogReadStatus status) {}
+
+void UnsentLogStoreMetrics::RecordCompressionRatio(size_t compressed_size,
+                                                   size_t original_size) {}
+
+void UnsentLogStoreMetrics::RecordDroppedLogSize(size_t size) {}
+
+void UnsentLogStoreMetrics::RecordDroppedLogsNum(int dropped_logs_num) {}
+
+void UnsentLogStoreMetrics::RecordLastUnsentLogMetadataMetrics(
+    int unsent_samples_count,
+    int sent_samples_count,
+    int persisted_size_in_kb) {}
+
+}  // namespace metrics
diff --git a/components/metrics/unsent_log_store_metrics.h b/components/metrics/unsent_log_store_metrics.h
index 4e32406..013a0651 100644
--- a/components/metrics/unsent_log_store_metrics.h
+++ b/components/metrics/unsent_log_store_metrics.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_METRICS_UNSENT_LOG_STORE_METRICS_H_
 #define COMPONENTS_METRICS_UNSENT_LOG_STORE_METRICS_H_
 
+#include "base/feature_list.h"
 #include "base/macros.h"
 #include "components/metrics/unsent_log_store.h"
 
@@ -31,17 +32,25 @@
     END_RECALL_STATUS  // Number of bins to use to create the histogram.
   };
 
-  UnsentLogStoreMetrics() {}
-  virtual ~UnsentLogStoreMetrics() {}
+  UnsentLogStoreMetrics();
+  virtual ~UnsentLogStoreMetrics();
 
-  virtual void RecordLogReadStatus(LogReadStatus status) {}
+  virtual void RecordLogReadStatus(LogReadStatus status);
 
-  virtual void RecordCompressionRatio(
-    size_t compressed_size, size_t original_size) {}
+  virtual void RecordCompressionRatio(size_t compressed_size,
+                                      size_t original_size);
 
-  virtual void RecordDroppedLogSize(size_t size) {}
+  virtual void RecordDroppedLogSize(size_t size);
 
-  virtual void RecordDroppedLogsNum(int dropped_logs_num) {}
+  virtual void RecordDroppedLogsNum(int dropped_logs_num);
+
+  virtual void RecordLastUnsentLogMetadataMetrics(int unsent_samples_count,
+                                                  int sent_samples_count,
+                                                  int persisted_size_in_kb);
+
+  // The feature to record the unsent log info metrics, refer to
+  // UnsentLogStoreMetricsImpl::RecordLastUnsentLogMetadataMetrics.
+  static const base::Feature kRecordLastUnsentLogMetadataMetrics;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(UnsentLogStoreMetrics);
diff --git a/components/metrics/unsent_log_store_unittest.cc b/components/metrics/unsent_log_store_unittest.cc
index 02bc9a0..1019915 100644
--- a/components/metrics/unsent_log_store_unittest.cc
+++ b/components/metrics/unsent_log_store_unittest.cc
@@ -23,6 +23,8 @@
 namespace {
 
 const char kTestPrefName[] = "TestPref";
+const char kTestMetaDataPrefName[] = "TestMetaDataPref";
+
 const size_t kLogCountLimit = 3;
 const size_t kLogByteLimit = 1000;
 
@@ -52,6 +54,7 @@
  public:
   UnsentLogStoreTest() {
     prefs_.registry()->RegisterListPref(kTestPrefName);
+    prefs_.registry()->RegisterDictionaryPref(kTestMetaDataPrefName);
   }
 
  protected:
@@ -61,15 +64,38 @@
   DISALLOW_COPY_AND_ASSIGN(UnsentLogStoreTest);
 };
 
+class TestUnsentLogStoreMetrics : public UnsentLogStoreMetrics {
+ public:
+  TestUnsentLogStoreMetrics() = default;
+
+  void RecordLastUnsentLogMetadataMetrics(int unsent_samples_count,
+                                          int sent_samples_count,
+                                          int persisted_size_in_kb) override {
+    unsent_samples_count_ = unsent_samples_count;
+    sent_samples_count_ = sent_samples_count;
+    persisted_size_in_kb_ = persisted_size_in_kb;
+  }
+
+  int unsent_samples_count() const { return unsent_samples_count_; }
+  int sent_samples_count() const { return sent_samples_count_; }
+  int persisted_size_in_kb() const { return persisted_size_in_kb_; }
+
+ private:
+  int unsent_samples_count_ = 0;
+  int sent_samples_count_ = 0;
+  int persisted_size_in_kb_ = 0;
+};
+
 class TestUnsentLogStore : public UnsentLogStore {
  public:
   TestUnsentLogStore(PrefService* service, size_t min_log_bytes)
       : UnsentLogStore(std::make_unique<UnsentLogStoreMetricsImpl>(),
                        service,
                        kTestPrefName,
+                       nullptr,
                        kLogCountLimit,
                        min_log_bytes,
-                       0,
+                       /* max_log_size= */ 0,
                        std::string()) {}
   TestUnsentLogStore(PrefService* service,
                      size_t min_log_bytes,
@@ -77,10 +103,22 @@
       : UnsentLogStore(std::make_unique<UnsentLogStoreMetricsImpl>(),
                        service,
                        kTestPrefName,
+                       nullptr,
                        kLogCountLimit,
                        min_log_bytes,
-                       0,
+                       /* max_log_size = */ 0,
                        signing_key) {}
+  TestUnsentLogStore(std::unique_ptr<UnsentLogStoreMetrics> metrics,
+                     PrefService* service,
+                     size_t max_log_size)
+      : UnsentLogStore(std::move(metrics),
+                       service,
+                       kTestPrefName,
+                       kTestMetaDataPrefName,
+                       kLogCountLimit,
+                       /* min_log_bytes= */ 1,
+                       max_log_size,
+                       std::string()) {}
 
   // Stages and removes the next log, while testing it's value.
   void ExpectNextLog(const std::string& expected_log) {
@@ -112,7 +150,7 @@
 TEST_F(UnsentLogStoreTest, SingleElementLogList) {
   TestUnsentLogStore unsent_log_store(&prefs_, kLogByteLimit);
 
-  unsent_log_store.StoreLog("Hello world!");
+  unsent_log_store.StoreLog("Hello world!", base::nullopt);
   unsent_log_store.PersistUnsentLogs();
 
   TestUnsentLogStore result_unsent_log_store(&prefs_, kLogByteLimit);
@@ -139,7 +177,7 @@
 
   size_t log_count = kLogCountLimit * 5;
   for (size_t i = 0; i < log_count; ++i)
-    unsent_log_store.StoreLog("x");
+    unsent_log_store.StoreLog("x", base::nullopt);
 
   unsent_log_store.PersistUnsentLogs();
 
@@ -170,13 +208,13 @@
       (log_count - 4) * Compress(blank_log).length();
   TestUnsentLogStore unsent_log_store(&prefs_, min_log_bytes);
 
-  unsent_log_store.StoreLog("one");
-  unsent_log_store.StoreLog("two");
-  unsent_log_store.StoreLog(first_kept);
+  unsent_log_store.StoreLog("one", base::nullopt);
+  unsent_log_store.StoreLog("two", base::nullopt);
+  unsent_log_store.StoreLog(first_kept, base::nullopt);
   for (size_t i = unsent_log_store.size(); i < log_count - 1; ++i) {
-    unsent_log_store.StoreLog(blank_log);
+    unsent_log_store.StoreLog(blank_log, base::nullopt);
   }
-  unsent_log_store.StoreLog(last_kept);
+  unsent_log_store.StoreLog(last_kept, base::nullopt);
   unsent_log_store.PersistUnsentLogs();
 
   TestUnsentLogStore result_unsent_log_store(&prefs_, kLogByteLimit);
@@ -200,7 +238,7 @@
 
   TestUnsentLogStore unsent_log_store(&prefs_, kLogByteLimit);
   for (size_t i = 0; i < log_count; ++i) {
-    unsent_log_store.StoreLog(log_data);
+    unsent_log_store.StoreLog(log_data, base::nullopt);
   }
   unsent_log_store.PersistUnsentLogs();
 
@@ -225,9 +263,9 @@
   std::string log_data = GenerateLogWithMinCompressedSize(log_size);
   for (size_t i = 0; i < log_count; ++i) {
     if (i == log_count - kLogCountLimit)
-      unsent_log_store.StoreLog(target_log);
+      unsent_log_store.StoreLog(target_log, base::nullopt);
     else
-      unsent_log_store.StoreLog(log_data);
+      unsent_log_store.StoreLog(log_data, base::nullopt);
   }
 
   unsent_log_store.PersistUnsentLogs();
@@ -248,13 +286,13 @@
   std::string tmp;
 
   EXPECT_FALSE(unsent_log_store.has_staged_log());
-  unsent_log_store.StoreLog("one");
+  unsent_log_store.StoreLog("one", base::nullopt);
   EXPECT_FALSE(unsent_log_store.has_staged_log());
-  unsent_log_store.StoreLog("two");
+  unsent_log_store.StoreLog("two", base::nullopt);
   unsent_log_store.StageNextLog();
   EXPECT_TRUE(unsent_log_store.has_staged_log());
   EXPECT_EQ(unsent_log_store.staged_log(), Compress("two"));
-  unsent_log_store.StoreLog("three");
+  unsent_log_store.StoreLog("three", base::nullopt);
   EXPECT_EQ(unsent_log_store.staged_log(), Compress("two"));
   EXPECT_EQ(unsent_log_store.size(), 3U);
   unsent_log_store.DiscardStagedLog();
@@ -275,9 +313,9 @@
   // a log is staged.
   TestUnsentLogStore unsent_log_store(&prefs_, kLogByteLimit);
 
-  unsent_log_store.StoreLog("one");
+  unsent_log_store.StoreLog("one", base::nullopt);
   unsent_log_store.StageNextLog();
-  unsent_log_store.StoreLog("two");
+  unsent_log_store.StoreLog("two", base::nullopt);
   unsent_log_store.DiscardStagedLog();
   unsent_log_store.PersistUnsentLogs();
 
@@ -293,7 +331,7 @@
   const std::string foo_hash = base::SHA1HashString(kFooText);
 
   TestUnsentLogStore unsent_log_store(&prefs_, kLogByteLimit);
-  unsent_log_store.StoreLog(kFooText);
+  unsent_log_store.StoreLog(kFooText, base::nullopt);
   unsent_log_store.StageNextLog();
 
   EXPECT_EQ(Compress(kFooText), unsent_log_store.staged_log());
@@ -304,7 +342,7 @@
   const char kFooText[] = "foo";
 
   TestUnsentLogStore unsent_log_store(&prefs_, kLogByteLimit);
-  unsent_log_store.StoreLog(kFooText);
+  unsent_log_store.StoreLog(kFooText, base::nullopt);
   unsent_log_store.StageNextLog();
 
   EXPECT_EQ(Compress(kFooText), unsent_log_store.staged_log());
@@ -330,7 +368,7 @@
   TestUnsentLogStore unsent_log_store_different_key(&prefs_, kLogByteLimit,
     key);
 
-  unsent_log_store_different_key.StoreLog(kFooText);
+  unsent_log_store_different_key.StoreLog(kFooText, base::nullopt);
   unsent_log_store_different_key.StageNextLog();
 
   EXPECT_EQ(Compress(kFooText), unsent_log_store_different_key.staged_log());
@@ -345,4 +383,72 @@
   EXPECT_EQ(expected_signature_base64, actual_signature_base64);
 }
 
+TEST_F(UnsentLogStoreTest, UnsentLogMetadataMetrics) {
+  std::unique_ptr<TestUnsentLogStoreMetrics> metrics =
+      std::make_unique<TestUnsentLogStoreMetrics>();
+  TestUnsentLogStoreMetrics* m = metrics.get();
+  TestUnsentLogStore unsent_log_store(std::move(metrics), &prefs_,
+                                      kLogByteLimit * 10);
+
+  // Prepare 4 logs.
+  const char kFooText[] = "foo";
+  const base::HistogramBase::Count kFooSampleCount = 3;
+
+  // The |foobar_log| whose compressed size is over 1kb will be staged first, so
+  // the persisted_size_in_kb shall be reduced by 1kb afterwards.
+  std::string foobar_log = GenerateLogWithMinCompressedSize(1024);
+  const base::HistogramBase::Count kFooBarSampleCount = 5;
+
+  // The |oversize_log| shall not be persisted.
+  std::string oversize_log =
+      GenerateLogWithMinCompressedSize(kLogByteLimit * 10 + 1);
+  const base::HistogramBase::Count kOversizeLogSampleCount = 50;
+
+  // The log without the SampleCount will not be counted to metrics.
+  const char kNoSampleLog[] = "no sample log";
+
+  unsent_log_store.StoreLog(
+      oversize_log,
+      base::make_optional<base::HistogramBase::Count>(kOversizeLogSampleCount));
+  unsent_log_store.StoreLog(kNoSampleLog, base::nullopt);
+  unsent_log_store.StoreLog(
+      kFooText, base::Optional<base::HistogramBase::Count>(kFooSampleCount));
+  // The foobar_log will be staged first.
+  unsent_log_store.StoreLog(
+      foobar_log,
+      base::Optional<base::HistogramBase::Count>(kFooBarSampleCount));
+
+  unsent_log_store.PersistUnsentLogs();
+
+  unsent_log_store.RecordMetaDataMertics();
+  // The |oversize_log| was ignored, the kNoSampleLog won't be counted to
+  // metrics,
+  EXPECT_EQ(kFooSampleCount + kFooBarSampleCount, m->unsent_samples_count());
+  EXPECT_EQ(0, m->sent_samples_count());
+  EXPECT_EQ(2, m->persisted_size_in_kb());
+
+  // Pretend to send log.
+  unsent_log_store.StageNextLog();
+  unsent_log_store.MarkStagedLogAsSent();
+  unsent_log_store.DiscardStagedLog();
+  unsent_log_store.PersistUnsentLogs();
+  unsent_log_store.RecordMetaDataMertics();
+
+  // The |foobar_log| shall be sent.
+  EXPECT_EQ(kFooSampleCount, m->unsent_samples_count());
+  EXPECT_EQ(kFooBarSampleCount, m->sent_samples_count());
+  EXPECT_EQ(1, m->persisted_size_in_kb());
+
+  // Pretend |kFooText| upload failure.
+  unsent_log_store.StageNextLog();
+  unsent_log_store.DiscardStagedLog();
+  unsent_log_store.PersistUnsentLogs();
+  unsent_log_store.RecordMetaDataMertics();
+
+  // Verify the failed upload wasn't added to the sent samples count.
+  EXPECT_EQ(0, m->unsent_samples_count());
+  EXPECT_EQ(kFooBarSampleCount, m->sent_samples_count());
+  EXPECT_EQ(1, m->persisted_size_in_kb());
+}
+
 }  // namespace metrics
diff --git a/components/net_log/resources/net_export.html b/components/net_log/resources/net_export.html
index 14aabfc..17e2e19 100644
--- a/components/net_log/resources/net_export.html
+++ b/components/net_log/resources/net_export.html
@@ -43,7 +43,9 @@
 
       <div class="section-container">
         Click the button to start logging future network activity to a file on
-        disk.
+        disk. The log includes details of network activity from all of Chrome,
+        including incognito and non-incognito tabs, visited URLs, and
+        information about the network configuration.
         <a href="https://dev.chromium.org/for-testers/providing-network-details"
            target="_blank">
         See the Chromium website for more detailed instructions.</a>
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java b/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java
index b953551..e8bd598 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java
@@ -16,7 +16,6 @@
 import org.chromium.components.payments.Address;
 import org.chromium.components.payments.ErrorStrings;
 import org.chromium.components.payments.PayerData;
-import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentCurrencyAmount;
 import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentDetailsModifier;
 import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentItem;
 import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentMethodData;
@@ -26,7 +25,6 @@
 import java.io.IOException;
 import java.io.StringWriter;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -56,11 +54,6 @@
     public static final String EXTRA_PAYMENT_OPTIONS_REQUEST_SHIPPING = "requestShipping";
     public static final String EXTRA_PAYMENT_OPTIONS_SHIPPING_TYPE = "shippingType";
     public static final String EXTRA_SHIPPING_OPTIONS = "shippingOptions";
-    public static final String EXTRA_SHIPPING_OPTION_ID = "shippingOptionId";
-    public static final String EXTRA_SHIPPING_OPTION_LABEL = "label";
-    public static final String EXTRA_SHIPPING_OPTION_SELECTED = "selected";
-    public static final String EXTRA_SHIPPING_OPTION_AMOUNT_CURRENCY = "amountCurrency";
-    public static final String EXTRA_SHIPPING_OPTION_AMOUNT_VALUE = "amountValue";
 
     // Deprecated parameters sent to the payment app for backward compatibility.
     public static final String EXTRA_DEPRECATED_CERTIFICATE_CHAIN = "certificateChain";
@@ -190,7 +183,7 @@
         }
 
         String selectedShippingOptionId = requestedPaymentOptions.requestShipping
-                ? getStringOrEmpty(data, EXTRA_SHIPPING_OPTION_ID)
+                ? getStringOrEmpty(data, PaymentShippingOption.EXTRA_SHIPPING_OPTION_ID)
                 : "";
         if (requestedPaymentOptions.requestShipping
                 && TextUtils.isEmpty(selectedShippingOptionId)) {
@@ -376,11 +369,12 @@
         extras.putParcelable(EXTRA_METHOD_DATA, methodDataBundle);
 
         if (modifiers != null) {
-            extras.putString(EXTRA_MODIFIERS, serializeModifiers(modifiers.values()));
+            extras.putString(
+                    EXTRA_MODIFIERS, PaymentDetailsModifier.serializeModifiers(modifiers.values()));
         }
 
         if (total != null) {
-            String serializedTotalAmount = serializeTotalAmount(total.amount);
+            String serializedTotalAmount = total.amount.serialize();
             extras.putString(EXTRA_TOTAL,
                     serializedTotalAmount == null ? EMPTY_JSON_DATA : serializedTotalAmount);
         }
@@ -391,7 +385,8 @@
 
         // ShippingOptions are populated only when shipping is requested.
         if (paymentOptions != null && paymentOptions.requestShipping) {
-            Parcelable[] serializedShippingOptionList = buildShippingOptionList(shippingOptions);
+            Parcelable[] serializedShippingOptionList =
+                    PaymentShippingOption.buildPaymentShippingOptionList(shippingOptions);
             extras.putParcelableArray(EXTRA_SHIPPING_OPTIONS, serializedShippingOptionList);
         }
 
@@ -441,22 +436,6 @@
         return result;
     }
 
-    private static Parcelable[] buildShippingOptionList(
-            List<PaymentShippingOption> shippingOptions) {
-        Parcelable[] result = new Parcelable[shippingOptions.size()];
-        int index = 0;
-        for (PaymentShippingOption option : shippingOptions) {
-            Bundle bundle = new Bundle();
-            bundle.putString(EXTRA_SHIPPING_OPTION_ID, option.id);
-            bundle.putString(EXTRA_SHIPPING_OPTION_LABEL, option.label);
-            bundle.putString(EXTRA_SHIPPING_OPTION_AMOUNT_CURRENCY, option.amountCurrency);
-            bundle.putString(EXTRA_SHIPPING_OPTION_AMOUNT_VALUE, option.amountValue);
-            bundle.putBoolean(EXTRA_SHIPPING_OPTION_SELECTED, option.selected);
-            result[index++] = bundle;
-        }
-        return result;
-    }
-
     private static Bundle buildPaymentOptionsBundle(PaymentOptions paymentOptions) {
         Bundle bundle = new Bundle();
         bundle.putBoolean(
@@ -483,7 +462,7 @@
             if (total != null) {
                 // total {{{
                 json.name("total");
-                serializeTotal(total, json);
+                total.serializeAndRedact(json);
                 // }}} total
             }
 
@@ -504,87 +483,6 @@
         return stringWriter.toString();
     }
 
-    private static String serializeTotalAmount(PaymentCurrencyAmount totalAmount) {
-        StringWriter stringWriter = new StringWriter();
-        JsonWriter json = new JsonWriter(stringWriter);
-        try {
-            // {{{
-            json.beginObject();
-            json.name("currency").value(totalAmount.currency);
-            json.name("value").value(totalAmount.value);
-            json.endObject();
-            // }}}
-        } catch (IOException e) {
-            return null;
-        }
-        return stringWriter.toString();
-    }
-
-    private static void serializeTotal(PaymentItem item, JsonWriter json) throws IOException {
-        // item {{{
-        json.beginObject();
-        // Sanitize the total name, because the payment app does not need it to complete the
-        // transaction. Matches the behavior of:
-        // https://w3c.github.io/payment-handler/#total-attribute
-        json.name("label").value("");
-
-        // amount {{{
-        json.name("amount").beginObject();
-        json.name("currency").value(item.amount.currency);
-        json.name("value").value(item.amount.value);
-        json.endObject();
-        // }}} amount
-
-        json.endObject();
-        // }}} item
-    }
-
-    private static String serializeModifiers(Collection<PaymentDetailsModifier> modifiers) {
-        StringWriter stringWriter = new StringWriter();
-        JsonWriter json = new JsonWriter(stringWriter);
-        try {
-            json.beginArray();
-            for (PaymentDetailsModifier modifier : modifiers) {
-                checkNotNull(modifier, "PaymentDetailsModifier");
-                serializeModifier(modifier, json);
-            }
-            json.endArray();
-        } catch (IOException e) {
-            return EMPTY_JSON_DATA;
-        }
-        return stringWriter.toString();
-    }
-
-    private static void serializeModifier(PaymentDetailsModifier modifier, JsonWriter json)
-            throws IOException {
-        // {{{
-        json.beginObject();
-
-        // total {{{
-        if (modifier.total != null) {
-            json.name("total");
-            serializeTotal(modifier.total, json);
-        } else {
-            json.name("total").nullValue();
-        }
-        // }}} total
-
-        // TODO(https://crbug.com/754779): The supportedMethods field was already changed from array
-        // to string but we should keep backward-compatibility for now.
-        // supportedMethods {{{
-        json.name("supportedMethods").beginArray();
-        json.value(modifier.methodData.supportedMethod);
-        json.endArray();
-        // }}} supportedMethods
-
-        // data {{{
-        json.name("data").value(modifier.methodData.stringifiedData);
-        // }}}
-
-        json.endObject();
-        // }}}
-    }
-
     private static String getStringOrEmpty(Intent data, String key) {
         return data.getExtras().getString(key, /*defaultValue =*/"");
     }
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelperType.java b/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelperType.java
index d711d73..acd9d6b 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelperType.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelperType.java
@@ -4,8 +4,16 @@
 
 package org.chromium.components.payments.intent;
 
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.util.JsonWriter;
+
 import androidx.annotation.Nullable;
 
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Collection;
+import java.util.List;
 /**
  * The types that corresponds to the types in org.chromium.payments.mojom. The fields of these types
  * are the subset of those in the mojom types. The subset is minimally selected based on the need of
@@ -19,6 +27,8 @@
  *         ready to pay” parameters</a>
  */
 public final class WebPaymentIntentHelperType {
+    private static final String EMPTY_JSON_DATA = "{}";
+
     /**
      * The class that corresponds to mojom.PaymentCurrencyAmount, with minimally required fields.
      */
@@ -29,6 +39,33 @@
             this.currency = currency;
             this.value = value;
         }
+
+        /**
+         * Serializes this object into the provided json writer.
+         * @param json The json object to which the seri
+         */
+        public void serialize(JsonWriter json) throws IOException {
+            // {{{
+            json.beginObject();
+            json.name("currency").value(currency);
+            json.name("value").value(value);
+            json.endObject();
+            // }}}
+        }
+        /**
+         * [Serializes this object
+         * @return The serialized payment currency amount.
+         */
+        public String serialize() {
+            StringWriter stringWriter = new StringWriter();
+            JsonWriter json = new JsonWriter(stringWriter);
+            try {
+                serialize(json);
+            } catch (IOException e) {
+                return null;
+            }
+            return stringWriter.toString();
+        }
     }
 
     /** The class that corresponds mojom.PaymentItem, with minimally required fields. */
@@ -37,6 +74,27 @@
         public PaymentItem(PaymentCurrencyAmount amount) {
             this.amount = amount;
         }
+        /**
+         * Serializes this object into the provided json writer after adding an empty string for the
+         * redacted "label" field.
+         * @param  json  The json writer used for serialization
+         */
+        public void serializeAndRedact(JsonWriter json) throws IOException {
+            // item {{{
+            json.beginObject();
+            // Redact the total label, because the payment app does not need it to complete the
+            // transaction. Matches the behavior of:
+            // https://w3c.github.io/payment-handler/#total-attribute
+            json.name("label").value("");
+
+            // amount {{{
+            json.name("amount");
+            amount.serialize(json);
+            // }}} amount
+
+            json.endObject();
+            // }}} item
+        }
     }
 
     /** The class that corresponds mojom.PaymentDetailsModifier, with minimally required fields. */
@@ -47,6 +105,56 @@
             this.total = total;
             this.methodData = methodData;
         }
+
+        /**
+         * Serializes payment details modifiers.
+         * @param  modifiers The collection of details modifiers to serialize.
+         * @return The serialized payment details modifiers
+         */
+        public static String serializeModifiers(Collection<PaymentDetailsModifier> modifiers) {
+            StringWriter stringWriter = new StringWriter();
+            JsonWriter json = new JsonWriter(stringWriter);
+            try {
+                json.beginArray();
+                for (PaymentDetailsModifier modifier : modifiers) {
+                    checkNotNull(modifier, "PaymentDetailsModifier");
+                    modifier.serialize(json);
+                }
+                json.endArray();
+            } catch (IOException e) {
+                return EMPTY_JSON_DATA;
+            }
+            return stringWriter.toString();
+        }
+
+        private void serialize(JsonWriter json) throws IOException {
+            // {{{
+            json.beginObject();
+
+            // total {{{
+            if (total != null) {
+                json.name("total");
+                total.serializeAndRedact(json);
+            } else {
+                json.name("total").nullValue();
+            }
+            // }}} total
+
+            // TODO(https://crbug.com/754779): The supportedMethods field was already changed from
+            // array to string but we should keep backward-compatibility for now. supportedMethods
+            // {{{
+            json.name("supportedMethods").beginArray();
+            json.value(methodData.supportedMethod);
+            json.endArray();
+            // }}} supportedMethods
+
+            // data {{{
+            json.name("data").value(methodData.stringifiedData);
+            // }}}
+
+            json.endObject();
+            // }}}
+        }
     }
 
     /** The class that corresponds mojom.PaymentMethodData, with minimally required fields. */
@@ -61,6 +169,12 @@
 
     /** The class that mirrors mojom.PaymentShippingOption. */
     public static final class PaymentShippingOption {
+        public static final String EXTRA_SHIPPING_OPTION_ID = "shippingOptionId";
+        public static final String EXTRA_SHIPPING_OPTION_LABEL = "label";
+        public static final String EXTRA_SHIPPING_OPTION_SELECTED = "selected";
+        public static final String EXTRA_SHIPPING_OPTION_AMOUNT_CURRENCY = "amountCurrency";
+        public static final String EXTRA_SHIPPING_OPTION_AMOUNT_VALUE = "amountValue";
+
         public final String id;
         public final String label;
         public final String amountCurrency;
@@ -74,6 +188,31 @@
             this.amountValue = amountValue;
             this.selected = selected;
         }
+
+        private Bundle asBundle() {
+            Bundle bundle = new Bundle();
+            bundle.putString(EXTRA_SHIPPING_OPTION_ID, id);
+            bundle.putString(EXTRA_SHIPPING_OPTION_LABEL, label);
+            bundle.putString(EXTRA_SHIPPING_OPTION_AMOUNT_CURRENCY, amountCurrency);
+            bundle.putString(EXTRA_SHIPPING_OPTION_AMOUNT_VALUE, amountValue);
+            bundle.putBoolean(EXTRA_SHIPPING_OPTION_SELECTED, selected);
+            return bundle;
+        }
+
+        /**
+         * Create a parcelable array of payment shipping options.
+         * @param  shippingOptions The list of available shipping options
+         * @return The parcelable array of shipping options passed to the native payment app.
+         */
+        public static Parcelable[] buildPaymentShippingOptionList(
+                List<PaymentShippingOption> shippingOptions) {
+            Parcelable[] result = new Parcelable[shippingOptions.size()];
+            int index = 0;
+            for (PaymentShippingOption option : shippingOptions) {
+                result[index++] = option.asBundle();
+            }
+            return result;
+        }
     }
 
     /** The class that mirrors mojom.PaymentOptions. */
@@ -93,4 +232,7 @@
             this.shippingType = shippingType;
         }
     }
+    private static void checkNotNull(Object value, String name) {
+        if (value == null) throw new IllegalArgumentException(name + " should not be null.");
+    }
 }
diff --git a/components/policy/core/common/policy_bundle.cc b/components/policy/core/common/policy_bundle.cc
index 4c4600172..5a8f92f4 100644
--- a/components/policy/core/common/policy_bundle.cc
+++ b/components/policy/core/common/policy_bundle.cc
@@ -34,6 +34,8 @@
 }
 
 void PolicyBundle::CopyFrom(const PolicyBundle& other) {
+  DCHECK_NE(this, &other);
+
   Clear();
   for (auto it = other.begin(); it != other.end(); ++it) {
     policy_bundle_[it->first] = it->second->DeepCopy();
@@ -41,6 +43,8 @@
 }
 
 void PolicyBundle::MergeFrom(const PolicyBundle& other) {
+  DCHECK_NE(this, &other);
+
   // Iterate over both |this| and |other| in order; skip what's extra in |this|,
   // add what's missing, and merge the namespaces in common.
   auto it_this = policy_bundle_.begin();
diff --git a/components/policy/core/common/policy_map.cc b/components/policy/core/common/policy_map.cc
index 22825fa..8ed7e32 100644
--- a/components/policy/core/common/policy_map.cc
+++ b/components/policy/core/common/policy_map.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/callback.h"
+#include "base/optional.h"
 #include "base/stl_util.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
@@ -43,11 +44,12 @@
     PolicySource source,
     std::unique_ptr<base::Value> value,
     std::unique_ptr<ExternalDataFetcher> external_data_fetcher)
-    : level(level),
-      scope(scope),
-      source(source),
-      external_data_fetcher(std::move(external_data_fetcher)),
-      value_(std::move(value)) {}
+    : Entry(level,
+            scope,
+            source,
+            value ? base::make_optional<base::Value>(std::move(*value))
+                  : base::nullopt,
+            std::move(external_data_fetcher)) {}
 
 PolicyMap::Entry::Entry(
     PolicyLevel level,
@@ -55,12 +57,11 @@
     PolicySource source,
     base::Optional<base::Value> value,
     std::unique_ptr<ExternalDataFetcher> external_data_fetcher)
-    : Entry(level,
-            scope,
-            source,
-            value.has_value() ? std::make_unique<base::Value>(std::move(*value))
-                              : nullptr,
-            std::move(external_data_fetcher)) {}
+    : level(level),
+      scope(scope),
+      source(source),
+      external_data_fetcher(std::move(external_data_fetcher)),
+      value_(std::move(value)) {}
 
 PolicyMap::Entry::~Entry() = default;
 
@@ -68,7 +69,9 @@
 PolicyMap::Entry& PolicyMap::Entry::operator=(Entry&&) noexcept = default;
 
 PolicyMap::Entry PolicyMap::Entry::DeepCopy() const {
-  Entry copy(level, scope, source, value_ ? value_->CreateDeepCopy() : nullptr,
+  Entry copy(level, scope, source,
+             value_ ? base::make_optional<base::Value>(value_->Clone())
+                    : base::nullopt,
              external_data_fetcher
                  ? std::make_unique<ExternalDataFetcher>(*external_data_fetcher)
                  : nullptr);
@@ -83,6 +86,10 @@
   return copy;
 }
 
+void PolicyMap::Entry::set_value(std::unique_ptr<base::Value> val) {
+  value_ = val ? base::make_optional(std::move(*val)) : base::nullopt;
+}
+
 bool PolicyMap::Entry::has_higher_priority_than(
     const PolicyMap::Entry& other) const {
   return std::tie(level, scope, source) >
@@ -277,6 +284,8 @@
 }
 
 void PolicyMap::CopyFrom(const PolicyMap& other) {
+  DCHECK_NE(this, &other);
+
   Clear();
   for (const auto& it : other)
     Set(it.first, it.second.DeepCopy());
@@ -289,6 +298,8 @@
 }
 
 void PolicyMap::MergeFrom(const PolicyMap& other) {
+  DCHECK_NE(this, &other);
+
   for (const auto& policy_and_entry : other) {
     Entry* current_policy = GetMutableUntrusted(policy_and_entry.first);
     Entry other_policy = policy_and_entry.second.DeepCopy();
@@ -310,12 +321,13 @@
         higher_policy.source != conflicting_policy.source &&
         conflicting_policy.source == POLICY_SOURCE_ENTERPRISE_DEFAULT;
     if (!overwriting_default_policy) {
-      higher_policy.AddConflictingPolicy(std::move(conflicting_policy));
-      higher_policy.AddWarning(
+      auto warning =
           (current_policy->value() &&
            *policy_and_entry.second.value() == *current_policy->value())
               ? IDS_POLICY_CONFLICT_SAME_VALUE
-              : IDS_POLICY_CONFLICT_DIFF_VALUE);
+              : IDS_POLICY_CONFLICT_DIFF_VALUE;
+      higher_policy.AddConflictingPolicy(std::move(conflicting_policy));
+      higher_policy.AddWarning(warning);
     }
 
     if (other_is_higher_priority)
diff --git a/components/policy/core/common/policy_map.h b/components/policy/core/common/policy_map.h
index 6130fd3..ba9a716 100644
--- a/components/policy/core/common/policy_map.h
+++ b/components/policy/core/common/policy_map.h
@@ -63,12 +63,10 @@
     // Returns a copy of |this|.
     Entry DeepCopy() const;
 
-    base::Value* value() { return value_.get(); }
-    const base::Value* value() const { return value_.get(); }
+    base::Value* value() { return base::OptionalOrNullptr(value_); }
+    const base::Value* value() const { return base::OptionalOrNullptr(value_); }
 
-    void set_value(std::unique_ptr<base::Value> val) {
-      value_ = std::move(val);
-    }
+    void set_value(std::unique_ptr<base::Value> val);
 
     // Returns true if |this| has higher priority than |other|. The priority of
     // the fields are |level| > |scope| > |source|.
@@ -123,7 +121,7 @@
     base::string16 GetLocalizedWarnings(L10nLookupFunction lookup) const;
 
    private:
-    std::unique_ptr<base::Value> value_;
+    base::Optional<base::Value> value_;
     bool ignored_ = false;
     std::string error_strings_;
     std::set<int> error_message_ids_;
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 4d6392a1..fb263a6 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -7351,13 +7351,13 @@
       'id': 711,
       'caption': '''Enables experimental policies''',
       'tags': [],
-      'desc': '''Allows <ph name="PRODUCT_NAME">$1<ex>google Chrome</ex></ph>load experimental policies.
+      'desc': '''Allows <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to load experimental policies.
 
         WARNING: Experimental policies are unsupported and subject to change or be removed without notice in future version of the browser!
 
         An experimental policy may not be finished or still have known or unknown defects. It may be changed or even removed without any notification. By enabling experimental policies, you could lose browser data or compromise your security or privacy.
 
-        If a policy is not in the list and it's not officially released, its value will be ignored on Chrome Beta and Chrome Stable.
+        If a policy is not in the list and it's not officially released, its value will be ignored on Beta and Stable channel.
 
         If a policy is in the list and it's not officially released, its value will be applied.
 
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index c78bb99..48f94d0 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -3147,9 +3147,6 @@
       Ist die Richtlinie auf "0" gesetzt, ist die Speicherung der Authentifikationsdaten deaktiviert. Dadurch kann sich die Anmeldung von Nutzern deutlich verlangsamen, da bei jeder Anmeldung bereichsspezifische Daten abgerufen werden müssen.
 
       Auch für vorübergehende Nutzer werden Bereichsdaten im Cache gespeichert. Wenn die Bereiche vorübergehender Nutzer nicht verfolgt werden sollen, sollte der Cache deaktiviert werden.</translation>
-<translation id="5700097087679928356">Wenn die Richtlinie auf "0" gesetzt ist (Standardeinstellung), kann generell auf die Entwicklertools und die JavaScript-Konsole zugegriffen werden. Für Erweiterungen, die über die Unternehmensrichtlinie installiert wurden, ist der Zugriff aber nicht möglich. Ist die Richtlinie auf "1" gesetzt, können die Entwicklertools und die JavaScript-Konsole in allen Kontexten aufgerufen und verwendet werden, also auch von Erweiterungen, die über die Unternehmensrichtlinie installiert wurden. Wenn die Richtlinie auf "2" gesetzt ist, kann nicht auf die Entwicklertools zugegriffen werden und Websiteelemente können nicht mehr geprüft werden.
-
-      Alle Tastenkombinationen und Einträge im Menü oder Kontextmenü, mit denen die Entwicklertools oder die JavaScript-Konsole aufgerufen werden, werden deaktiviert.</translation>
 <translation id="570062449808736508">Wenn für diese Richtlinie kein leerer String angegeben ist, wird WebView URL-Einschränkungen des Contentanbieters des angegebenen Befugnisnamens erkennen.</translation>
 <translation id="5708969689202733975">Zulässige Modi für das schnelle Entsperren konfigurieren</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 3783d20..8a6713e 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -3146,9 +3146,6 @@
       Si se establece en 0, se desactiva el almacenamiento en caché de los datos de autenticación. Esta acción puede ralentizar significativamente el acceso de los usuarios afiliados, dado que deben obtenerse los datos específicos del dominio en cada acceso.
 
       Ten en cuenta que se almacenan en caché incluso los datos de dominio de usuarios ocasionales. Si no quieres registrar el dominio de usuarios ocasionales, desactiva el almacenamiento en caché.</translation>
-<translation id="5700097087679928356">Si estableces la política con el valor "0" (la opción predeterminada), podrás acceder a las herramientas para desarrolladores y la Consola de JavaScript, pero no podrás hacerlo en el contexto de extensiones instaladas por una política empresarial. Si estableces la política con el valor "1", podrás acceder a las herramientas para desarrolladores y la Consola de JavaScript en todos los contextos, incluido el de las extensiones instaladas por una política empresarial. Si estableces la política con el valor "2", no podrás acceder a las herramientas para desarrolladores ni inspeccionar elementos de sitios web.
-
-      Esta configuración también desactivará las combinaciones de teclas y las entradas del menú contextual o de cualquier menú.</translation>
 <translation id="570062449808736508">Cuando esta política se establece con una string no vacía, WebView leerá las restricciones de URL del proveedor de contenido con el nombre de la autoridad proporcionado.</translation>
 <translation id="5708969689202733975">Configurar los modos de desbloqueo rápido permitidos</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 7c42424..a104e98 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -3235,9 +3235,6 @@
       Si se le asigna el valor 0, no se almacenarán datos de autenticación en la memoria caché. Esto puede ralentizar el inicio de sesión de los usuarios afiliados, ya que será necesario obtener datos de cada dominio cada vez que inicien sesión.
 
       Ten en cuenta que los datos de dominio se almacenan en caché incluso para los usuarios en modo efímero. Para evitar el rastreo del dominio de los usuarios en modo efímero, debe desactivarse la memoria caché.</translation>
-<translation id="5700097087679928356">Si se asigna el valor "0" (predeterminado) a esta política, podrás acceder a las herramientas para desarrolladores y a la consola de JavaScript, pero no en extensiones instaladas por política de empresa. Si se le asigna el valor "1", podrás acceder a las herramientas para desarrolladores y a la consola de JavaScript sin excepciones, incluso en extensiones instaladas por política de empresa. Si se le asigna el valor "2", no podrás acceder a las herramientas para desarrolladores ni tampoco podrás inspeccionar los elementos de los sitios web.
-
-      Este ajuste también desactiva las combinaciones de teclas y las entradas de menús o menús contextuales que permiten abrir las herramientas para desarrolladores y la consola de JavaScript.</translation>
 <translation id="570062449808736508">Si esta política se asigna a una cadena no vacía, WebView leerá las restricciones de URL del proveedor de contenido con el nombre de autoridad especificado.</translation>
 <translation id="5708969689202733975">Configurar los modos de desbloqueo rápido permitidos</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index eec3420..e26862a5 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -3231,9 +3231,6 @@
       Si cette règle est définie sur 0, la mise en cache des données d'authentification est désactivée. Cela peut considérablement ralentir la connexion des utilisateurs affiliés, car les données spécifiques à un domaine doivent être récupérées à chaque connexion.
 
       Notez que les données de domaine sont mises en cache même pour les utilisateurs éphémères. Le cache doit être désactivé si le suivi du domaine des utilisateurs éphémères doit être empêché.</translation>
-<translation id="5700097087679928356">Si cette règle est définie sur 0 (valeur par défaut), vous pouvez accéder aux outils pour les développeurs et à la Console JavaScript, sauf si des extensions ont été installées dans le cadre des règles de l'entreprise. Si cette règle est définie sur 1, vous pouvez accéder à ces outils et à cette console dans tous les cas, y compris si des extensions ont été installées dans le cadre des règles de l'entreprise. Si cette règle est définie sur 2, vous ne pouvez pas accéder à ces outils ni examiner des éléments de sites Web.
-
-      En outre, les raccourcis clavier, ainsi que les options de menu ou de menu contextuel permettant d'ouvrir ces outils ou cette console sont désactivées.</translation>
 <translation id="570062449808736508">Lorsque ce règlement est défini sur une chaîne non vide, WebView lit les restrictions d'URL depuis le fournisseur de contenu portant le nom de l'autorité indiquée.</translation>
 <translation id="5708969689202733975">Configurer les modes de déverrouillage rapide autorisés</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index ae61ef39..72f36d3 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -3158,9 +3158,6 @@
       Jika kebijakan ini disetel ke 0, penyimpanan data autentikasi ke cache akan dinonaktifkan. Hal ini akan memperlambat login pengguna terafiliasi secara signifikan karena data khusus area harus diambil setiap kali login.
 
       Perhatikan bahwa data area disimpan dalam cache bahkan untuk pengguna singkat. Cache harus dinonaktifkan jika pelacakan area pengguna singkat ingin dicegah.</translation>
-<translation id="5700097087679928356">Jika kebijakan ditetapkan ke 0 (default), Anda akan dapat mengakses alat developer dan konsol JavaScript, tetapi bukan dalam konteks ekstensi yang diinstal oleh kebijakan perusahaan. Jika kebijakan ditetapkan ke 1, Anda akan dapat mengakses alat developer dan konsol JavaScript di semua konteks, termasuk yang memiliki ekstensi yang diinstal oleh kebijakan perusahaan. Jika kebijakan ditetapkan ke 2, Anda tidak akan dapat mengakses alat developer, dan Anda tidak dapat memeriksa elemen situs.
-
-      Setelan ini juga akan menonaktifkan pintasan keyboard dan entri menu atau menu konteks untuk membuka alat developer atau konsol JavaScript.</translation>
 <translation id="570062449808736508">Jika kebijakan ini disetel ke string yang tidak kosong, WebView akan membaca batasan URL dari penyedia konten dengan nama otoritas yang diberikan.</translation>
 <translation id="5708969689202733975">Mengonfigurasi mode buka kunci cepat yang diizinkan</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 20fa7df..1d4a3c3 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -3119,9 +3119,6 @@
       Se la norma viene impostata su 0, la memorizzazione nella cache dei dati di autenticazione viene disattivata. Ciò può rallentare significativamente l'accesso degli utenti affiliati, poiché i dati specifici dell'area di autenticazione devono essere recuperati a ogni accesso.
 
       Tieni presente che i dati relativi all'area di autenticazione vengono memorizzati nella cache anche per gli utenti temporanei. Per impedire che i dati di autenticazione degli utenti temporanei vengano tracciati è necessario disattivare la cache.</translation>
-<translation id="5700097087679928356">Se il criterio è impostato su 0 (valore predefinito), è possibile accedere agli strumenti per sviluppatori e alla console JavaScript, ma non se ci sono estensioni installate in base alle norme aziendali. Se il criterio è impostato su 1, è possibile accedere agli strumenti per sviluppatori e alla console JavaScript in ogni caso, anche se ci sono estensioni installate in base alle norme aziendali. Se il criterio è impostato su 2, non è possibile accedere agli strumenti per sviluppatori e non è possibile esaminare gli elementi del sito web.
-
-      Questa impostazione disattiva anche le scorciatoie da tastiera e le voci dei menu o dei menu contestuali per aprire gli strumenti per sviluppatori o la console JavaScript.</translation>
 <translation id="570062449808736508">Se per questa norma viene impostata una stringa, WebView legge le limitazioni relative agli URL del fornitore di contenuti con il nome dell'autorità indicato.</translation>
 <translation id="5708969689202733975">Configura le modalità di sblocco rapido consentite</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 87734785..6edaeb6 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -354,6 +354,7 @@
 <translation id="1583248206450240930">デフォルトで <ph name="PRODUCT_FRAME_NAME" /> を使用する</translation>
 <translation id="1588240398285670601">ブラウザの設定</translation>
 <translation id="1599424828227887013">Android デバイスで指定の発行元に対してサイト分離を有効にする</translation>
+<translation id="159946228300522107">このポリシーを True に設定した場合、Chrome では初回実行時に最初に表示されたウィンドウが最大化されます。このポリシーを False に設定した場合、または未設定のままにした場合、画面サイズによっては、Chrome で最初に表示されたウィンドウが最大化されます。</translation>
 <translation id="1608755754295374538">ユーザー確認なしで音声キャプチャ デバイスへのアクセスが許可される URL</translation>
 <translation id="1615221548356595305">クライアント証明書が使用されているときでも、指定したホストで HTTP/2 接続の統合を許可する</translation>
 <translation id="1615855314789673708">Wilco DTC(診断およびテレメトリー用コントローラ)の設定を指定します。
@@ -413,6 +414,7 @@
         |url_list| に URL の正規表現を追加すると、リストの正規表現に一致するすべての URL がホワイトリストに登録されます。
         |app_list| にアプリの |app_id| と |app_type| を追加すると、そのアプリがホワイトリストに登録されます。
        </translation>
+<translation id="171511968762040550">このポリシーを True に設定するか未設定のままにした場合、ユーザーはブックマークを追加、削除、変更できます。このポリシーを False に設定した場合、ユーザーはブックマークを追加、削除、変更できません。既存のブックマークは引き続き使用できます。</translation>
 <translation id="1715151459541210849">「音声入力」のユーザー補助機能を有効にする</translation>
 <translation id="1717817358640580294">このポリシーが未設定の場合、Chrome クリーンアップで望ましくないソフトウェアが検出されると、SafeBrowsingExtendedReportingEnabled で設定されているポリシーに基づいて、スキャンに関するメタデータのレポートが Google に送信される可能性があります。ユーザーは望ましくないソフトウェアをクリーンアップするかどうかを選択できます。また、望ましくないソフトウェアの検出精度を向上するために、クリーンアップの結果を Google と共有するかどうかも選択できます。これらの結果には、Chrome のプライバシー ホワイトペーパーで説明されているとおり、ファイルのメタデータのほか自動インストールされた拡張機能とレジストリキーが含まれます。
 
@@ -767,6 +769,8 @@
 <translation id="2214880135980649323">このポリシーが有効に設定されている場合は、エンタープライズ ポリシーによってインストールされた拡張機能に対して Enterprise Hardware Platform API の使用が許可されます。
       このポリシーが無効に設定されているか未設定の場合は、どの拡張機能にも Enterprise Hardware Platform API の使用は許可されません。
       このポリシーは、ハングアウト サービス拡張機能のようなコンポーネント型拡張機能にも適用されます。</translation>
+<translation id="2215238871726750562">このポリシーを True に設定した場合、セッションの開始時にブラウザ ウィンドウが起動しなくなります。このポリシーを False にするか未設定のままにすれば、ウィンドウが起動します。注: 他のポリシーやコマンドライン フラグの設定によっては、ブラウザ ウィンドウが起動しない場合もあります。</translation>
+<translation id="2223582957891074498">このポリシーを True に設定した場合、キーボード ショートカットまたは拡張機能 API を使用したスクリーンショットが許可されません。このポリシーを False に設定した場合、スクリーンショットが許可されます。</translation>
 <translation id="2223598546285729819">デフォルトの通知設定</translation>
 <translation id="2231817271680715693">初回実行時にデフォルトのブラウザから閲覧履歴をインポートする</translation>
 <translation id="2236488539271255289">すべてのサイトに対してローカル データの設定を許可しない</translation>
@@ -799,6 +803,7 @@
 
       これが未設定の場合、スペルチェック サービスを使用するかどうかをユーザーが選択できます。</translation>
 <translation id="229322770310505679">ポリシーの最小単位グループの概念を有効にする</translation>
+<translation id="22941467117331786">このポリシーを True に設定した場合、アクティブなセッション中に画面がロックされていなければ、システムトレイに赤い大きなログアウト ボタンが表示されます。このポリシーを False に設定するか未設定のままにした場合、ボタンは表示されません。</translation>
 <translation id="2294382669900758280">Android アプリで再生中の動画は、このポリシーを <ph name="TRUE" /> に設定した場合でも考慮されません。</translation>
 <translation id="2299220924812062390">有効なプラグインのリストを指定する</translation>
 <translation id="2303795211377219696">クレジット カードの自動入力を有効にする</translation>
@@ -2465,6 +2470,7 @@
 <translation id="4802905909524200151"><ph name="TPM_FIRMWARE_UPDATE_TPM" /> ファームウェア アップデートの動作を設定する</translation>
 <translation id="4804828344300125154">ユーザーがログアウトするたびに再起動します。</translation>
 <translation id="4807950475297505572">十分な空き容量に達するまで、前回のログインから時間が経っているユーザーを順に削除する</translation>
+<translation id="4812270373673968774">このポリシーを [常に使用] に設定した場合、<ph name="PRODUCT_OS_NAME" /> シェルフが自動的に非表示になります。このポリシーを [使用しない] に設定した場合、シェルフが非表示になることがなくなります。このポリシーを設定した場合、ユーザーは設定を変更できません。設定しない場合、シェルフが自動的に非表示になるかどうかをユーザーが指定します。</translation>
 <translation id="4816674326202173458">企業ユーザーがメイン ユーザーとしてもセカンダリ ユーザーとしても操作できるようにする(管理対象ユーザー以外のユーザーに対するデフォルトの動作)</translation>
 <translation id="4826326557828204741">バッテリー電源での実行時、アイドル時間に到達したときに行う操作</translation>
 <translation id="4830531683854509779">SoC コンポーネントに関するハードウェアの統計情報を報告します。
@@ -2542,6 +2548,7 @@
 <translation id="4986560318567565414">代替ブラウザから Chrome への切り替えに使用するパスです。</translation>
 <translation id="4988291787868618635">アイドル時間に到達したときに行われる操作</translation>
 <translation id="500149597848135831">すべてのバリエーションを有効にします</translation>
+<translation id="5017369989680827157">このポリシーを True に設定するか未設定のままにした場合、ユーザーは UI で住所の自動入力を制御できます。このポリシーを False に設定した場合、住所情報が候補として表示されたり、自動入力されたりすることはありません。また、ユーザーがウェブの利用中に送信した住所情報が追加で保存されることもありません。</translation>
 <translation id="5023555740504506178">有効にするか、未設定のままにした場合(デフォルト)、ウェブページでは、画面共有 API(getDisplayMedia() や Desktop Capture extension API など)を使用して、キャプチャ対象(タブ、ウィンドウ、デスクトップ)の選択を促すメッセージを表示できます。
 
 
@@ -2581,6 +2588,7 @@
 <translation id="5073609397321802133">このポリシーを false に設定した場合、ユーザーは新しいタブページの背景をカスタイマイズできなくなります。既存のカスタムの背景は削除され、後からこのポリシーを true に設定しても元に戻すことはできません。
 
       このポリシーを true に設定するか、未設定のままにした場合、ユーザーは新しいタブページの背景をカスタイマイズできます。</translation>
+<translation id="5075190314377370852">このポリシーを True に設定した場合、ローカルにインストールされた CA 証明書によって正常に確認されたサーバー証明書に対し、<ph name="PRODUCT_NAME" /> は常に失効確認を行います。<ph name="PRODUCT_NAME" /> が失効のステータス情報を取得できない場合、<ph name="PRODUCT_NAME" /> ではその証明書は失効したものとして扱われます(強制エラー)。このポリシーを False に設定するか未設定のままにした場合、<ph name="PRODUCT_NAME" /> は既存のオンライン失効確認設定を使用します。</translation>
 <translation id="5075834892754086022">このポリシーを設定した場合、設定された PIN の最小桁数が適用されます(PIN の最小桁数として 1 より小さい値は指定できません。1 より小さい値は 1 として扱われます)。
 
           このポリシーが未設定の場合、PIN の最小桁数として 6 桁が適用されます。これがおすすめの最小桁数です。</translation>
@@ -2647,6 +2655,7 @@
       最小間隔は 30 秒、最大間隔は 24 時間です。
       この範囲外の値は、この範囲に収まるように調整されます。</translation>
 <translation id="5163002264923337812">古いウェブベースのログインフローを有効にする</translation>
+<translation id="516520353995300280">このポリシーを設定した場合、<ph name="SUBJECT_PUBLIC_KEY_INFO" /> ハッシュが指定された証明書チェーンにおいて、リストのレガシー認証局(CA)に対する Certificate Transparency(証明書の透明性)の開示要件の適用が無効になります。企業のホストでは、適切に公開されていないことを理由に通常であれば信頼できないものとして扱われる証明書を、引き続き使用できるようになります。適用を無効にするには、レガシー認証局(CA)として認識されている CA 証明書で <ph name="SUBJECT_PUBLIC_KEY_INFO" /> ハッシュが指定されている必要があります。レガシー CA は、<ph name="PRODUCT_NAME" /> でサポートされている 1 つ以上のオペレーティング システムによって公的に信頼されていますが、Android オープンソース プロジェクトまたは <ph name="PRODUCT_OS_NAME" /> では信頼されていません。<ph name="SUBJECT_PUBLIC_KEY_INFO" /> ハッシュは、ハッシュ アルゴリズム名とスラッシュに加え、指定された証明書の DER-エンコード済み <ph name="SUBJECT_PUBLIC_KEY_INFO" /> に適用されているハッシュ アルゴリズムの Base64 エンコードをリンクすることで指定します。Base64 エンコードの形式は、SPKI フィンガープリントの形式に一致します。認識されるハッシュ アルゴリズムは SHA256 だけです。その他は無視されます。ポリシーが未設定のまま、Certificate Transparency(証明書の透明性)による開示を必要とする証明書が開示されていない場合、<ph name="PRODUCT_NAME" /> はその証明書を信頼しません。</translation>
 <translation id="5168529971295111207">このポリシーのサポートは終了しました。代わりに ProxyMode を使用してください。
 
           <ph name="PRODUCT_NAME" /> が使用するプロキシ サーバーを指定できます。ユーザーはプロキシの設定を変更できません。
@@ -2788,6 +2797,7 @@
 
       ポリシーが未設定の場合、または空の文字列や無効なポートの範囲が設定されている場合は、WebRTC は使用可能なローカルの UDP ポートを使用することができます。</translation>
 <translation id="5290940294294002042">ユーザーが有効または無効にできるプラグインのリストを指定する</translation>
+<translation id="5293044154216294358">このポリシーを True に設定した場合、ユーザーが恐竜ゲームをプレイすることを許可します。このポリシーを False に設定した場合、ユーザーはデバイスがオフラインのときに恐竜のイースター エッグゲームをプレイできません。このポリシーを未設定のままにした場合、ユーザーは登録されている <ph name="PRODUCT_OS_NAME" /> ではゲームをプレイできませんが、他の環境ではプレイできます。</translation>
 <translation id="5306186200045823863">Symantec Corporation の古い PKI インフラストラクチャを信頼する</translation>
 <translation id="5307432759655324440">シークレット モードが利用可能かどうかを設定する</translation>
 <translation id="5311275381462687162">Cookie に関する以前の <ph name="ATTRIBUTE_SAMESITE_NAME" /> 動作のデフォルト設定</translation>
@@ -3070,6 +3080,7 @@
 
       注: このポリシーは、厳密に 1 GB より大きい RAM を搭載した Android デバイスの Chrome のみに適用されます。Android 以外のプラットフォームにこのポリシーを適用するには、IsolateOrigins を使用してください。
       </translation>
+<translation id="5595998409088126162">このポリシーを設定した場合、ブックマークのリストがセットアップされます。各ブックマークは、ブックマークの名前を定義する「<ph name="NAME" />」キーとブックマークの対象を定義する「<ph name="URL_LABEL" />」キーを含むディクショナリです。管理者は、ブックマークの定義で「<ph name="URL_LABEL" />」の代わりに「<ph name="CHILDREN" />」キーを追加して、サブフォルダをセットアップできます。このキーにもブックマークのリストを指定でき、さらにフォルダを指定することもできます。Chrome では、アドレスバーから 不完全な URL が送信されたときと同様に、不完全な URL が修正されます。たとえば「<ph name="GOOGLE_COM" />」は「<ph name="HTTPS_GOOGLE_COM" />」になります。ユーザーはブックマークが保存されるフォルダを変更できません(ブックマークバーでフォルダを非表示にすることはできます)。フォルダ名は「管理対象のブックマーク」ですが、希望するフォルダ名を値とする「<ph name="TOPLEVEL_NAME" />」キーを含むディクショナリを指定することで、フォルダ名をブックマークのリストに追加できます。管理対象のブックマークは、ユーザー アカウントと同期されず、拡張機能で変更することもできません。</translation>
 <translation id="5599461642204007579"><ph name="MS_AD_NAME" /> 管理設定</translation>
 <translation id="5618398258385745432">関連付けられている設定は、パスワード表示での再認証が導入される前は使用されていましたが、導入以降は、その設定、つまりこのポリシーは、Chrome の動作に適用されなくなりました。現在の Chrome の動作は、パスワード マネージャーの設定ページでパスワードの平文表示を無効にするようポリシーを設定した場合と同じになりました。つまり、設定ページにはプレースホルダのみが表示され、ユーザーが [表示] をクリックして(必要に応じて再認証を行って)初めて Chrome にパスワードが表示されます。ポリシーの元の説明は次のとおりです。
 
@@ -3356,6 +3367,7 @@
 <translation id="6099853574908182288">デフォルトのカラー印刷モード</translation>
 <translation id="6102342563050263313">URL フラグメントで指定されたテキストへのスクロールを有効にする</translation>
 <translation id="6107642964266628393">Chrome OS の更新を適用する方法と時間を制御します。</translation>
+<translation id="6110478331147706293">このポリシーを設定した場合、指定した URL 内のホスト名について、Certificate Transparency(証明書の透明性)の開示要件が無効になります。ホストに対して間違って発行された証明書は検出が難しくなりますが、適切に公開されていないことを理由に通常であれば信頼できないものとして扱われる証明書でも、引き続き使用できるようになります。ポリシーが未設定のまま、Certificate Transparency(証明書の透明性)による開示を必要とする証明書が開示されていない場合、<ph name="PRODUCT_NAME" /> はその証明書を信頼しません。URL のパターンは、https://www.chromium.org/administrators/url-blacklist-filter-format で示されている形式にします。ただし、スキーム、ポート、パスに関係なく特定のホスト名に対して証明書が有効になるため、<ph name="PRODUCT_NAME" /> で考慮されるのは URL のホスト名の部分のみです。ワイルドカードを使ったホストの指定はサポートされていません。</translation>
 <translation id="6111936128861357925">恐竜のイースター エッグゲームを許可する</translation>
 <translation id="6114416803310251055">廃止予定</translation>
 <translation id="6133088669883929098">すべてのサイトにキー生成の使用を許可する</translation>
@@ -3400,6 +3412,7 @@
 
           詳しい例については、<ph name="PROXY_HELP_URL" /> をご覧ください。</translation>
 <translation id="6178075938488052838">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> セッションを開始できるユーザーを管理します。このポリシーを設定しても、ユーザーが Android で他の Google アカウントにログインすることを防ぐことはできません。ログインを防ぐには、<ph name="ARC_POLICY_POLICY_NAME" /> の一部として Android 用の <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> ポリシーを設定してください。</translation>
+<translation id="6183327369896253878">このポリシーを設定した場合、<ph name="PRODUCT_OS_NAME" /> でランチャーバーに表示されるアプリケーション ID が固定され、ユーザーが変更できなくなります。Chrome アプリの場合は ID(「pjkljhegncpnkpknbcohdijeoejaedia」など)、Android アプリの場合はパッケージ名(「com.google.android.gm」など)、ウェブアプリの場合は <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> で使用する URL(「https://google.com/maps」など)を指定します。このポリシーが未設定の場合、ユーザーはランチャーの固定アプリのリストを変更できます。</translation>
 <translation id="6190022522129724693">デフォルトのポップアップ設定</translation>
 <translation id="6190367314942602985">ユーザー識別情報に関するレポートを作成</translation>
 <translation id="6195802366906945965">サーバー証明書の確認に組み込みの証明書確認機能を使用する</translation>
@@ -3518,6 +3531,7 @@
 
       このポリシーを設定する場合は、ユーザーによる <ph name="PRODUCT_NAME" /> へのログインが可能かどうかを指定できます。このポリシーを「False」に設定すると、chrome.identity API を使用するアプリや拡張機能が機能しなくなるため、代わりに SyncDisabled の使用をおすすめします。</translation>
 <translation id="6378076389057087301">音声操作を電源管理に関連付けるかどうかを指定する</translation>
+<translation id="6378393933102834628">このポリシーを True に設定した場合、アプリのショートカットが表示されます。このポリシーを False に設定した場合、このショートカットは表示されません。このポリシーを設定した場合、ユーザーは設定を変更できません。設定しない場合、アプリのショートカットの表示と非表示は、ユーザーがブックマーク バーのコンテキスト メニューから指定します。</translation>
 <translation id="637934607141010488">最近ログインしたデバイス ユーザーのリストを報告します。
 
       このポリシーが False に設定されている場合、ユーザーは報告されません。</translation>
@@ -3736,6 +3750,11 @@
 <translation id="6689792153960219308">ハードウェア ステータスを報告する</translation>
 <translation id="6698632841807204978">白黒印刷を有効にする</translation>
 <translation id="6699880231565102694">リモート アクセス ホストの 2 段階認証プロセスを有効にする</translation>
+<translation id="6703251016607733593">このポリシーを設定した場合、リストで指定された <ph name="SUBJECT_PUBLIC_KEY_INFO" /> ハッシュに対して、Certificate Transparency(証明書の透明性)の開示要件の適用が無効になります。企業のホストでは、適切に公開されていないことを理由に通常であれば信頼できないものとして扱われる証明書を、引き続き使用できるようになります。適用を無効にするには、ハッシュが次のいずれかの条件を満たしている必要があります。
+
+      * サーバー証明書の <ph name="SUBJECT_PUBLIC_KEY_INFO" /> で指定されている。
+
+      * 証明書チェーンの CA(認証局)証明書に出現する <ph name="SUBJECT_PUBLIC_KEY_INFO" /> で指定されている。CA 証明書に X.509v3 nameConstraints 拡張による制約が適用され、permittedSubtrees に directoryName nameConstraints が 1 つ以上存在し、その directoryName に organizationName 属性が含まれている。* 証明書チェーン内の CA 証明書に出現する <ph name="SUBJECT_PUBLIC_KEY_INFO" /> で指定されていて、その CA 証明書のサブジェクトに organizationName 属性が 1 つ以上含まれていること。さらに、サーバーの証明書にも同じ数の organizationName 属性が同じ順序で含まれ、それらの値がバイト単位で同一である。<ph name="SUBJECT_PUBLIC_KEY_INFO" /> ハッシュは、ハッシュ アルゴリズム名とスラッシュに加え、指定された証明書の DER-エンコード済み <ph name="SUBJECT_PUBLIC_KEY_INFO" /> に適用されているハッシュ アルゴリズムの Base64 エンコードをリンクすることで指定します。Base64 エンコードの形式は、SPKI フィンガープリントの形式に一致します。認識されるハッシュ アルゴリズムは SHA256 だけです。その他は無視されます。ポリシーが未設定のまま、Certificate Transparency(証明書の透明性)による開示を必要とする証明書が開示されていない場合、<ph name="PRODUCT_NAME" /> はその証明書を信頼しません。</translation>
 <translation id="6704515759227307131">このポリシーはサポートが終了しており、AdvancedProtectionAllowed に置き換えられました。
 
       このポリシーは、高度な保護機能プログラムに登録しているユーザーに対し、不正なソフトウェアがないかスキャンする目的で、ダウンロードしたコンテンツを Google に送信することを許可するかどうかを制御します。True に設定するか未設定のままにした場合、高度な保護機能プログラムに登録しているユーザーには、詳細なスキャンのためにファイルを Google に送信するかを確認するメッセージが表示されます。ユーザーが [スキャン] を選択した場合、ダウンロードしたコンテンツは Google に送信されます。False に設定した場合、ユーザーにメッセージは表示されず、ダウンロードしたコンテンツは Google に送信されません。</translation>
@@ -3746,6 +3765,7 @@
           ただし、<ph name="PRODUCT_NAME" /> 76 以降では、未設定の場合のデフォルトの動作は無効な場合と同じになります。
 
           さらに、<ph name="PRODUCT_NAME" /> 78 以降では、このポリシーは無視され、無効として扱われます。</translation>
+<translation id="672496466524161417">このポリシーを [なし] に設定するか未設定のままにした場合は、ユーザーが証明書を管理できます。このポリシーを 2 に設定した場合、ユーザーは証明書を管理できず、表示のみ可能となります。このポリシーを 1 に設定した場合、ユーザーはユーザー証明書を管理できますが、デバイス全体の証明書を管理することはできません。</translation>
 <translation id="6731757988219967594">アダルト コンテンツに基づいて最上位サイト(埋め込み iframe 以外)を除外する</translation>
 <translation id="6734521799274931721">Chrome OS でネットワーク ファイル共有を使用できるかどうかの設定</translation>
 <translation id="6735701345096330595">言語のスペルチェックを強制的に有効にする</translation>
@@ -4056,6 +4076,7 @@
 
       注: このポリシーは Google ドライブと内部ストレージには影響しません。ユーザーはダウンロード フォルダに保存されているファイルにアクセスできます。</translation>
 <translation id="7177857088692019405">ロックのクイック解除</translation>
+<translation id="7179187054027029272">このポリシーを True に設定するか未設定のままにした場合、適切な権限を持つユーザー、アプリ、拡張機能は、ウェブ コンテンツだけが表示される全画面モードに移行できます。このポリシーを False に設定した場合、ユーザー、アプリ、拡張機能は全画面モードに移行できません。</translation>
 <translation id="718126088895133062">このポリシーでは、このデバイスの <ph name="PLUGIN_VM_NAME" /> のライセンス ユーザー ID を指定します。</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
 <translation id="7187447094921703950">電力のピークシフト管理のポリシーを有効にします。
@@ -4626,6 +4647,7 @@
 <translation id="8140204717286305802">ネットワーク インターフェース(とそのタイプ)とハードウェア アドレスのリストをサーバーに報告します。
 
       このポリシーが False に設定されている場合、インターフェースのリストは報告されません。</translation>
+<translation id="8140907626566492348">このポリシーを True に設定するか未設定のままにした場合、<ph name="PRODUCT_NAME" /> のタブ全体にサービスに関するユーザー向け情報が表示されます。このポリシーを False に設定した場合、<ph name="PRODUCT_NAME" /> のタブ全体にサービス情報が表示されなくなります。このポリシーを設定した場合、「ようこそ」ページを表示するかどうかを制御できます。「ようこそ」ページでは、ユーザーは <ph name="PRODUCT_NAME" /> にログインしたり、<ph name="PRODUCT_NAME" /> をデフォルトのブラウザとして設定したりできます。また、サービスの機能に関する情報を表示することもできます。</translation>
 <translation id="8141795997560411818">このポリシーを設定しても、ユーザーが Android Google ドライブアプリを使用するのを阻止することはできません。Google ドライブへのアクセスを禁止するには、Android Google ドライブアプリのインストールも禁止する必要があります。</translation>
 <translation id="8142894094385450823">管理対象セッション向けに推奨する言語 / 地域を設定する</translation>
 <translation id="8146727383888924340">Chrome OS の登録特典の利用をユーザーに許可する</translation>
@@ -4646,6 +4668,7 @@
 
       このポリシーが無効に設定されているか未設定の場合は、ログイン時に通常のプロフィールが適用されます。</translation>
 <translation id="8158758865057576716"><ph name="PRODUCT_NAME" /> プロフィール データのローミング コピーの作成を有効にする。</translation>
+<translation id="8158897487095710470">このポリシーを True に設定した場合、<ph name="PRODUCT_NAME" /> にブックマーク バーが表示されます。このポリシーを False に設定した場合、ブックマーク バーは表示されません。このポリシーを設定した場合、ユーザーは設定を変更できません。ポリシーが設定されていない場合は、この機能を使用するかどうかをユーザーが指定します。</translation>
 <translation id="8159760979508295709">「カーソルによるハイライト表示」のユーザー補助機能を有効にします。
 
           この機能は、マウスカーソルの移動時にその周辺領域をハイライト表示します。
@@ -4811,6 +4834,7 @@
 <translation id="8424255554404582727">再起動のたびにデフォルトのディスプレイ回転方法を再適用する</translation>
 <translation id="8426231401662877819">画面を時計回りに 90 度回転</translation>
 <translation id="8433186206711564395">ネットワーク設定</translation>
+<translation id="843609873781525167">このポリシーを True に設定すると、<ph name="PRODUCT_NAME" /> で起動時にデフォルトのブラウザであるかが常に確認され、可能であれば自動的に登録されます。このポリシーを False に設定した場合、<ph name="PRODUCT_NAME" /> でデフォルトであるかどうかが確認されなくなり、このオプションに対するユーザー制御がオフになります。このポリシーを未設定のままにした場合は、<ph name="PRODUCT_NAME" /> でデフォルトに指定するかどうかをユーザーが制御でき、またデフォルトにしない場合はユーザー通知が表示されるかどうかを制御できます。注: <ph name="MS_WIN_NAME" /> 管理者の場合は、Windows 7 が稼働するマシンについてのみ、この設定をオンにできます。それ以後のバージョンについては、<ph name="PRODUCT_NAME" /> を <ph name="HTTPS_PROTOCOL" /> プロトコルと <ph name="HTTP_PROTOCOL" /> プロトコル(必要に応じて <ph name="FTP_PROTOCOL" /> プロトコルとその他のファイル形式)のハンドラにする、「デフォルトのアプリケーション関連付け」ファイルをデプロイする必要があります。Chrome ヘルプ(https://support.google.com/chrome?p=make_chrome_default_win)をご覧ください。</translation>
 <translation id="8445576299806775661">Chrome ではバージョンのメジャー アップデートのたびに、後から緊急のバージョン ロールバックが必要となった場合に備えて、ユーザーの閲覧データの特定部分のスナップショットを作成します。緊急のロールバックが実行され、対応するスナップショットが存在するバージョンに戻された場合は、スナップショットのデータが復元されます。これにより、ブックマークや自動入力データなどの設定が失われないように保護できます。
 
       このポリシーを設定しない場合は、デフォルト値の 3 が使用されます。
@@ -4891,6 +4915,7 @@
 
           このポリシーを設定しない場合、ユーザー補助機能のショートカットはデフォルトで有効になります。</translation>
 <translation id="8525526490824335042">Linux コンテナ</translation>
+<translation id="8537051350735478658">このポリシーを True に設定した場合、<ph name="PRODUCT_NAME" /> のアドレスバーで検索候補が有効になります。このポリシーを False に設定した場合、検索候補が無効になります。このポリシーを設定した場合、ユーザーは設定を変更できません。ポリシーを設定しない場合、検索候補は最初は有効ですが、ユーザーはいつでも無効にできます。</translation>
 <translation id="8544375438507658205"><ph name="PRODUCT_FRAME_NAME" /> のデフォルトの HTML レンダラ</translation>
 <translation id="8544465954173828789">スマートフォンから Chromebook への SMS メッセージの同期を許可する。</translation>
 <translation id="8548832052135586762">カラー印刷のみ、白黒印刷のみ、カラー印刷モードの制限なし、のいずれかに設定します。ポリシーが未設定の場合は、制限なしとして扱われます。</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 2cf2a1b..a746e47 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -3229,9 +3229,6 @@
       정책이 0으로 설정되면 인증 데이터 캐싱이 사용 중지됩니다. 로그인할 때마다 영역별 데이터를 가져와야 하므로 인증 데이터 캐싱이 사용 중지되면 연결된 사용자의 로그인 속도가 현저히 느려질 수 있습니다.
 
       영역 데이터는 임시 사용자의 경우에도 캐싱됩니다. 임시 사용자의 영역 추적을 방지해야 하는 경우 캐시를 사용 중지해야 합니다.</translation>
-<translation id="5700097087679928356">정책을 0(기본값)으로 설정하면 개발자 도구 및 자바스크립트 콘솔에 액세스할 수 있지만 기업 정책으로 설치한 확장 프로그램에서는 액세스할 수 없습니다. 정책을 1로 설정하면 기업 정책으로 설치한 확장 프로그램을 비롯하여 모든 상황에서 개발자 도구 및 자바스크립트 콘솔에 액세스할 수 있습니다. 정책을 2로 설정하면 개발자 도구에 액세스할 수 없으며 웹사이트 요소를 검사할 수 없습니다.
-
-      또한 이 설정은 개발자 도구 또는 자바스크립트 콘솔을 여는 단축키, 메뉴 항목, 컨텍스트 메뉴 항목의 사용을 중지합니다.</translation>
 <translation id="570062449808736508">웹 제한 권한 정책이 비어있지 않은 문자열로 설정된 경우 WebView는 주어진 권한 이름으로 콘텐츠 제공업체로부터 URL 제한을 읽습니다.</translation>
 <translation id="5708969689202733975">허용된 빠른 잠금 해제 모드를 설정합니다.</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 9305d73..21304a2a 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -3203,9 +3203,6 @@
       Als het beleid is ingesteld op 0, is de opslag van verificatiegegevens in het cachegeheugen uitgeschakeld. Dit kan ervoor zorgen dat gekoppelde gebruikers aanzienlijk minder snel kunnen inloggen, aangezien er realmspecifieke gegevens moeten worden opgehaald voor elke inlogbewerking.
 
       Houd er rekening mee dat er zelfs voor kortstondige gebruikers realmgegevens in het cachegeheugen worden opgeslagen. Als voorkomen moet worden dat de realm van kortstondige gebruikers wordt bijgehouden, moet het cachegeheugen uitgeschakeld worden.</translation>
-<translation id="5700097087679928356">Als je het beleid instelt op '0' (standaardinstelling), heb je toegang tot de tools voor ontwikkelaars en de JavaScript-console, maar niet in de context van extensies die via het organisatiebeleid zijn geïnstalleerd. Als je het beleid instelt op '1', heb je toegang tot de tools voor ontwikkelaars en de JavaScript-console in alle contexten, waaronder die van extensies die via het organisatiebeleid zijn geïnstalleerd. Als je het beleid instelt op '2', heb je geen toegang tot de tools voor ontwikkelaars en kun je website-elementen niet inspecteren.
-
-      Met deze instelling worden sneltoetsen en menu- en contextmenu-opties uitgeschakeld waarmee tools voor ontwikkelaars of de JavaScript-console kunnen worden geopend.</translation>
 <translation id="570062449808736508">Wanneer dit beleid is ingesteld op een niet-lege tekenreeks, leest de WebView de URL-beperkingen van de contentprovider met de opgegeven autoriteitsnaam.</translation>
 <translation id="5708969689202733975">Toegestane modi voor snel ontgrendelen configureren</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 52bdb7f..8bb52787 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -3122,9 +3122,6 @@
       Se esta política for definida como 0, o armazenamento em cache dos dados de autenticação será desativado. Isso pode desacelerar significativamente o login de usuários afiliados, já que os dados específicos do domínio precisam ser buscados a cada login.
 
       Observe que os dados de domínio são armazenados em cache até para usuários temporários. O cache precisa ser desativado se você quiser impedir o rastreamento de domínio de usuários temporários.</translation>
-<translation id="5700097087679928356">Se a política for definida como 0 (o padrão), você poderá acessar as ferramentas para desenvolvedores e o Console JavaScript, mas não no contexto de extensões instaladas pela política da empresa. Se ela for definida como 1, você poderá acessar as ferramentas para desenvolvedores e o Console JavaScript em todos os contextos, inclusive o das extensões instaladas pela política da empresa. Se a política for definida como 2, não será possível acessar as ferramentas para desenvolvedores nem inspecionar elementos de sites.
-
-      Essa definição também desativa atalhos de teclado e entradas do menu de contexto ou do menu para abrir as ferramentas para desenvolvedores e o Console JavaScript.</translation>
 <translation id="570062449808736508">Quando essa política estiver definida para uma string não vazia, o WebView lerá as restrições de URL do provedor de conteúdo com o nome de autoridade fornecido.</translation>
 <translation id="5708969689202733975">Configurar os modos de desbloqueio rápido permitidos</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 1f6aa87..07f1c07d 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -3158,9 +3158,6 @@
       Если задано значение 0, кеширование данных аутентификации отключено. Это может сильно замедлить вход в систему связанных пользователей, так как сведения об области потребуется получать при каждом входе.
 
       Обратите внимание, что данные об области кешируются даже для временных пользователей. Чтобы область временных пользователей не отслеживалась, кеширование требуется отключить.</translation>
-<translation id="5700097087679928356">Если для правила задано значение 0 (оно выбрано по умолчанию), то доступ к инструментам разработчика и консоли JavaScript будет разрешен для пользователей, но запрещен для расширений, установленных в соответствии с корпоративными правилами. Если задано значение 1, доступ к инструментам разработчика и консоли JavaScript будет разрешен всегда, в том числе для расширений, установленных в соответствии с корпоративными правилами. Если задано значение 2, доступ к инструментам разработчика будет запрещен и их нельзя будет использовать для просмотра кода элементов сайтов.
-
-      Кроме того, будут отключены быстрые клавиши, а также пункты меню и контекстного меню, открывающие инструменты разработчика или консоль JavaScript.</translation>
 <translation id="570062449808736508">Если для правила указано значение, WebView распознает ограничения, установленные для URL-адресов поставщиком контента с заданным центром сертификации.</translation>
 <translation id="5708969689202733975">Настроить разрешенные режимы быстрой разблокировки</translation>
 <translation id="5711016543513883877">
@@ -3991,7 +3988,7 @@
 <translation id="7027785306666625591">Настройка режима энергопотребления в <ph name="PRODUCT_OS_NAME" />
 
       Эти правила определяют режим работы <ph name="PRODUCT_OS_NAME" />, когда пользователь неактивен в течение определенного времени.</translation>
-<translation id="7032813174556919004">Отключить DNS поверх HTTPS</translation>
+<translation id="7032813174556919004">Отключить режим DNS-over-HTTPS</translation>
 <translation id="7037812781389976160">Управляет положением панели запуска <ph name="PRODUCT_OS_NAME" />.
 
       Если для правила задано значение "Снизу", панель запуска будет расположена внизу экрана.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 604ec24..ee9aecb 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -3133,9 +3133,6 @@
       หากตั้งค่านโยบายเป็น 0 ระบบจะปิดใช้การแคชข้อมูลการตรวจสอบสิทธิ์ การปิดแคชอาจทำให้การลงชื่อเข้าใช้ของผู้ใช้ที่เชื่อมโยงช้าลงอย่างมากเนื่องจากต้องเรียกข้อมูลที่เจาะจงขอบเขตทุกครั้งที่มีการลงชื่อเข้าใช้
 
       โปรดทราบว่าจะมีการแคชข้อมูลขอบเขตสำหรับผู้ใช้ชั่วคราวด้วย คุณควรปิดแคชหากไม่ต้องการให้มีการติดตามขอบเขตของผู้ใช้ชั่วคราว</translation>
-<translation id="5700097087679928356">การตั้งค่านโยบายเป็น 0 (ค่าเริ่มต้น) หมายความว่าคุณจะเข้าถึงเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์และคอนโซล JavaScript ได้ แต่เข้าถึงบริบทของส่วนขยายที่ติดตั้งโดยนโยบายระดับองค์กรไม่ได้ การตั้งค่านโยบายเป็น 1 หมายความว่าคุณจะเข้าถึงเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์และคอนโซล JavaScript ได้ในทุกบริบท ซึ่งรวมถึงส่วนขยายที่ติดตั้งโดยนโยบายระดับองค์กร การตั้งค่านโยบายเป็น 2 หมายความว่าคุณจะเข้าถึงเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ไม่ได้และตรวจสอบองค์ประกอบของเว็บไซต์ไม่ได้
-
-      การตั้งค่านี้ยังปิดแป้นพิมพ์ลัดและเมนูหรือรายการในเมนูตามบริบทเพื่อเปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์หรือคอนโซล JavaScript ด้วย</translation>
 <translation id="570062449808736508">หากมีการตั้งค่านโยบายนี้เป็นสตริงที่ไม่ว่างเปล่า WebView จะอ่านข้อจำกัด URL จากผู้ให้บริการเนื้อหาที่มีชื่อผู้ออกใบรับรองที่ระบุ</translation>
 <translation id="5708969689202733975">กำหนดค่าโหมดปลดล็อกด่วนที่ได้รับอนุญาต</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 9b5bda59..50ed8ba5 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -3204,9 +3204,6 @@
       Bu politika 0 değerine ayarlanırsa, kimlik doğrulama verisi önbelleğe alma devre dışı bırakılır. Her oturum açmada alana özgü verilerin getirilmesi gerektiği için bunu yapmak ilişkili kullanıcıların oturum açmasını önemli ölçüde yavaşlatabilir.
 
       Alan verilerinin geçici kullanıcılar için bile önbelleğe alındığını unutmayın. Geçici kullanıcıların alanının izlenmesini önlemek istiyorsanız önbellek kapatılmalıdır.</translation>
-<translation id="5700097087679928356">Politikanın 0 (varsayılan) değerine ayarlanması, geliştirici araçlarına ve JavaScript konsoluna erişebileceğiniz anlamına gelir. Ancak kurumsal politikaya göre yüklenen uzantıların bağlamında erişemezsiniz. Politikanın 1 değerine ayarlanması, kurumsal politikaya göre yüklenen uzantılar bağlamı dahil olmak üzere tüm bağlamlarda geliştirici araçlarına ve JavaScript konsoluna erişebilirsiniz anlamına gelir. Politikanın 2 değerine ayarlanması, geliştirici ayarlarına erişemezsiniz ve web sitesi öğelerini inceleyemezsiniz anlamına gelir.
-
-      Bu ayar ayrıca, klavye kısayollarını ve menüyü veya geliştirici ayarlarını ya da JavaScript konsolunu açan içerik menüsü girişlerini kapatır.</translation>
 <translation id="570062449808736508">Bu politika boş olmayan bir dizeye ayarlanırsa Web Görünümü, belirtilen yetkili adına sahip içerik sağlayıcıdan URL kısıtlamalarını okur.</translation>
 <translation id="5708969689202733975">İzin verilen hızlı kilit açma modlarını yapılandır</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 6d6c723b..535569f 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -3183,9 +3183,6 @@
       Якщо для цього правила встановлено значення 0, кешування даних автентифікації вимкнено. Це може значно сповільнити час входу пов’язаного користувача, оскільки дані про область потрібно завантажувати під час кожного входу.
 
       Зауважте, що дані про область кешуються навіть для тимчасових користувачів. Щоб область тимчасового користувача не відстежувалася, потрібно вимкнути кеш.</translation>
-<translation id="5700097087679928356">Якщо для цього правила вибрано значення 0 (значення за умовчанням), ви матимете доступ до інструментів розробника та Консолі JavaScript, але не до розширень, установлених згідно з корпоративними правилами. Якщо для нього вибрано значення 1, ви отримуєте повний доступ до інструментів розробника й консолі JavaScript, зокрема до розширень, установлених згідно з корпоративними правилами. Якщо для цього правила вибрано значення 2, ви не матимете доступу до інструментів розробника та не зможете перевіряти елементи веб-сайту.
-
-      Це налаштування також вимикає комбінації клавіш і пункти меню або контекстного меню, які відкривають інструменти розробника чи Консоль JavaScript.</translation>
 <translation id="570062449808736508">Якщо для цього правила вказано певне значення, WebView розпізнає обмеження URL-адрес від постачальника вмісту з указаним адміністративним ім’ям.</translation>
 <translation id="5708969689202733975">Налаштовувати дозволені режими швидкого розблокування</translation>
 <translation id="5711016543513883877">
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 4a386a7..b4f7ff8 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -355,6 +355,9 @@
 <translation id="1583248206450240930">Sử dụng <ph name="PRODUCT_FRAME_NAME" /> theo mặc định</translation>
 <translation id="1588240398285670601">Cài đặt của trình duyệt</translation>
 <translation id="1599424828227887013">Bật tính năng Cách ly trang web cho nguồn gốc đã chỉ định trên thiết bị Android</translation>
+<translation id="159946228300522107">Nếu bạn đặt chính sách này thành True, thì Chrome sẽ phóng to cửa sổ đầu tiên trong lần chạy đầu.
+
+      Nếu bạn đặt chính sách này thành False hoặc không đặt chính sách này, thì Chrome có thể phóng to cửa sổ đầu tiên, tùy thuộc vào kích thước màn hình.</translation>
 <translation id="1608755754295374538">Các URL sẽ được cấp quyền truy cập thiết bị ghi âm mà không cần phải hiển thị lời nhắc</translation>
 <translation id="1615221548356595305">Cho phép hợp nhất các đường kết nối HTTP/2 đối với những máy chủ này kể cả khi sử dụng chứng chỉ ứng dụng khách</translation>
 <translation id="1615855314789673708">Cung cấp cấu hình DTC (bộ điều khiển chẩn đoán và đo từ xa) wilco.
@@ -414,6 +417,9 @@
         Thêm biểu thức chính quy của URL vào |url_list| để đưa các URL khớp với bất kỳ biểu thức chính quy nào trong danh sách vào danh sách cho phép.
         Thêm một ứng dụng cùng với |app_id| và |app_type| tương ứng vào |app_list| để đưa ứng dụng đó vào danh sách cho phép.
        </translation>
+<translation id="171511968762040550">Nếu bạn đặt chính sách này thành True hoặc không đặt chính sách này, thì người dùng có thể thêm, xóa hoặc sửa đổi dấu trang.
+
+      Nếu bạn đặt chính sách này thành False, thì người dùng không thể thêm, xóa hoặc sửa đổi dấu trang. Người dùng vẫn có thể sử dụng dấu trang hiện có.</translation>
 <translation id="1715151459541210849">Bật tính năng hỗ trợ tiếp cận về đọc chính tả</translation>
 <translation id="1717817358640580294">Nếu bạn không đặt chính sách này và tính năng Làm sạch Chrome phát hiện phần mềm không mong muốn, thì tính năng này có thể báo cáo siêu dữ liệu về lần quét đó cho Google theo chính sách do SafeBrowsingExtendedReportingEnabled đặt. Sau đó, tính năng Làm sạch Chrome sẽ hỏi người dùng xem họ có muốn xóa phần mềm không mong muốn hay không. Người dùng có thể chọn chia sẻ kết quả của quá trình làm sạch với Google để hỗ trợ việc phát hiện phần mềm không mong muốn trong tương lai. Những kết quả này chứa siêu dữ liệu tệp, tiện ích tự động cài đặt và khóa sổ đăng ký như mô tả trong Báo cáo chính thức về quyền riêng tư của Chrome.
 
@@ -785,6 +791,12 @@
 <translation id="2214880135980649323">Khi đặt chính sách này thành bật, các tiện ích được cài đặt theo chính sách doanh nghiệp sẽ được phép sử dụng Enterprise Hardware Platform API.
       Khi không đặt hoặc đặt chính sách này thành tắt, thì không tiện ích nào được phép sử dụng Enterprise Hardware Platform API.
       Chính sách này cũng áp dụng cho các tiện ích thành phần, chẳng hạn như tiện ích Dịch vụ Hangout.</translation>
+<translation id="2215238871726750562">Nếu bạn đặt chính sách này thành True, thì cửa sổ trình duyệt sẽ không chạy khi bắt đầu phiên.
+
+      Nếu bạn đặt chính sách này thành False hoặc không đặt chính sách này, thì cửa sổ trình duyệt sẽ chạy.
+
+      Lưu ý: cửa sổ trình duyệt có thể không chạy do các chính sách hoặc cờ dòng lệnh khác.</translation>
+<translation id="2223582957891074498">Nếu bạn đặt chính sách này thành True, thì người dùng sẽ không chụp được ảnh màn hình bằng cách dùng phím tắt hoặc API tiện ích. Nếu bạn đặt chính sách này thành False, thì người dùng có thể chụp ảnh màn hình.</translation>
 <translation id="2223598546285729819">Cài đặt thông báo mặc định</translation>
 <translation id="2231817271680715693">Nhập lịch sử duyệt từ trình duyệt mặc định trong lần chạy đầu tiên</translation>
 <translation id="2236488539271255289">Không cho phép bất kỳ trang web nào lưu dữ liệu trên máy</translation>
@@ -819,6 +831,9 @@
 
       Nếu cài đặt này không được định cấu hình thì người dùng có thể chọn xem liệu dịch vụ kiểm tra lỗi chính tả có được sử dụng hay không.</translation>
 <translation id="229322770310505679">Cho phép dùng khái niệm về nhóm chính sách không thể phân chia</translation>
+<translation id="22941467117331786">Nếu bạn đặt chính sách này thành True, thì một nút đăng xuất màu đỏ có kích thước lớn sẽ hiển thị trên khay hệ thống trong các phiên đang hoạt động khi màn hình không khóa.
+
+      Nếu bạn đặt chính sách này thành False hoặc không đặt chính sách này, thì sẽ không có nút nào xuất hiện.</translation>
 <translation id="2294382669900758280">Video đang phát trong các ứng dụng Android không được xem xét ngay cả khi chính sách này được đặt thành <ph name="TRUE" />.</translation>
 <translation id="2299220924812062390">Chỉ định danh sách plugin được phép</translation>
 <translation id="2303795211377219696">Bật tính năng Tự động điền cho thẻ tín dụng</translation>
@@ -2522,6 +2537,9 @@
 <translation id="4802905909524200151">Định cấu hình hành vi của bản cập nhật chương trình cơ sở <ph name="TPM_FIRMWARE_UPDATE_TPM" /></translation>
 <translation id="4804828344300125154">Luôn khởi động lại khi đăng xuất người dùng.</translation>
 <translation id="4807950475297505572">Người dùng gần đây ít sử dụng nhất sẽ bị xóa cho tới khi có đủ dung lượng trống</translation>
+<translation id="4812270373673968774">Nếu bạn đặt chính sách này thành Luôn luôn, thì kệ <ph name="PRODUCT_OS_NAME" /> sẽ tự động ẩn. Nếu bạn đặt chính sách này thành Không bao giờ, thì kệ sẽ không bao giờ tự động ẩn.
+
+      Nếu bạn đặt chính sách này, thì người dùng sẽ không thể thay đổi được. Nếu bạn không đặt chính sách này, thì người dùng sẽ quyết định xem kệ có tự động ẩn hay không.</translation>
 <translation id="4816674326202173458">Cho phép người dùng doanh nghiệp trở thành người dùng vừa chính vừa phụ  (Hành vi mặc định cho người dùng không được quản lý)</translation>
 <translation id="4826326557828204741">Tác vụ sẽ thực hiện khi đạt độ trễ không hoạt động trong khi chạy bằng nguồn pin</translation>
 <translation id="4830531683854509779">Báo cáo thống kê phần cứng cho các thành phần SoC.
@@ -2603,6 +2621,9 @@
 <translation id="4986560318567565414">Đường dẫn tới Chrome để chuyển từ trình duyệt thay thế.</translation>
 <translation id="4988291787868618635">Hành động cần thực hiện khi đạt tới độ trễ khi không sử dụng</translation>
 <translation id="500149597848135831">Cho phép tất cả các biến</translation>
+<translation id="5017369989680827157">Nếu bạn đặt chính sách này thành True hoặc không đặt chính sách này, thì người dùng sẽ có quyền kiểm soát tính năng Tự động điền cho địa chỉ trong giao diện người dùng.
+
+      Nếu bạn đặt chính sách này thành False, thì tính năng Tự động điền sẽ không bao giờ gợi ý hoặc điền địa thông tin địa chỉ hay lưu thông tin địa chỉ bổ sung mà người dùng gửi trong khi duyệt web.</translation>
 <translation id="5023555740504506178">Nếu bạn bật hoặc không định cấu hình (mặc định), thì trang web có thể dùng
       các API chia sẻ màn hình (ví dụ: getDisplayMedia() hoặc API tiện ích Chụp màn hình)
       để nhắc người dùng chọn thẻ, cửa sổ hoặc màn hình cần chụp.
@@ -2649,6 +2670,9 @@
 <translation id="5073609397321802133">Nếu bạn đặt chính sách này thành false, thì trang Tab mới sẽ không cho phép người dùng tùy chỉnh nền. Các nền tùy chỉnh hiện có sẽ bị xóa vĩnh viễn ngay cả khi sau này, bạn đặt chính sách này thành true.
 
       Nếu bạn không đặt hoặc đặt chính sách này thành true, thì người dùng có thể tùy chỉnh nền trên trang Tab mới.</translation>
+<translation id="5075190314377370852">Nếu bạn đặt chính sách này thành True, thì <ph name="PRODUCT_NAME" /> sẽ luôn kiểm tra trạng thái thu hồi của các chứng chỉ máy chủ đã xác thực thành công, được ký theo chứng chỉ CA đã cài đặt trên máy. Nếu <ph name="PRODUCT_NAME" /> không lấy được thông tin về trạng thái thu hồi, thì <ph name="PRODUCT_NAME" /> sẽ coi những chứng chỉ này là đã thu hồi (không hợp lệ).
+
+      Nếu bạn đặt chính sách này thành False hoặc không đặt chính sách này, thì <ph name="PRODUCT_NAME" /> sẽ sử dụng tùy chọn kiểm tra trạng thái thu hồi trực tuyến hiện có.</translation>
 <translation id="5075834892754086022">Nếu bạn đặt chính sách này, độ dài tối thiểu đã định cấu hình của mã PIN sẽ được
           thực thi. (Độ dài tối thiểu tuyệt đối của mã PIN là 1; các giá trị nhỏ hơn 1
           sẽ được coi là 1.)
@@ -2718,6 +2742,11 @@
       tối thiểu là 30 giây và khoảng nghỉ tối đa là 24 giờ - các giá trị
       nằm ngoài phạm vi này sẽ được giới hạn trong phạm vi này.</translation>
 <translation id="5163002264923337812">Cho phép quy trình đăng nhập dựa trên web cũ</translation>
+<translation id="516520353995300280">Nếu bạn đặt chính sách này, thì hệ thống sẽ tắt tùy chọn thực thi các yêu cầu tiết lộ về Tính minh bạch của chứng chỉ cho danh sách Tổ chức phát hành chứng chỉ (CA) cũ đối với chuỗi chứng chỉ có hàm băm <ph name="SUBJECT_PUBLIC_KEY_INFO" /> đã chỉ định. Máy chủ doanh nghiệp có thể tiếp tục sử dụng các chứng chỉ không được tin cậy (vì các chứng chỉ này không được tiết lộ công khai đúng cách). Để tắt tùy chọn thực thi, hàm băm <ph name="SUBJECT_PUBLIC_KEY_INFO" /> phải xuất hiện trong một chứng chỉ CA được nhận dạng là CA cũ. Một hoặc nhiều hệ điều hành mà <ph name="PRODUCT_NAME" /> hỗ trợ sẽ tin cậy CA cũ một cách công khai. Tuy nhiên, CA cũ đó không được Dự án nguồn mở Android hoặc <ph name="PRODUCT_OS_NAME" /> tin cậy.
+
+      Hãy chỉ định một hàm băm <ph name="SUBJECT_PUBLIC_KEY_INFO" /> bằng cách liên kết tên thuật toán hàm băm, một dấu gạch chéo và phương thức mã hóa Base64 của thuật toán hàm băm đó, áp dụng cho <ph name="SUBJECT_PUBLIC_KEY_INFO" /> được mã hóa theo DER (Quy tắc mã hóa phân biệt) của chứng chỉ đã chỉ định. Định dạng mã hóa Base64 trùng khớp với định dạng của Vân tay số SPKI. Thuật toán hàm băm duy nhất mà hệ thống nhận dạng được là sha256. Các thuật toán hàm băm khác đều bị bỏ qua.
+
+      Không đặt chính sách này đồng nghĩa với việc nếu bạn không tiết lộ những chứng chỉ buộc phải tiết lộ thông qua Tính minh bạch của chứng chỉ, thì <ph name="PRODUCT_NAME" /> sẽ không tin cậy những chứng chỉ đó.</translation>
 <translation id="5168529971295111207">Chính sách này không được dùng nữa, thay vào đó hãy sử dụng ProxyMode.
 
           Cho phép bạn chỉ định máy chủ proxy mà <ph name="PRODUCT_NAME" /> sẽ sử dụng và ngăn người dùng thay đổi các tùy chọn cài đặt proxy.
@@ -2869,6 +2898,9 @@
 
       Nếu chưa đặt chính sách hoặc nếu chính sách được đặt thành chuỗi trống hoặc phạm vi cổng không hợp lệ thì WebRTC được phép sử dụng bất kỳ cổng UDP cục bộ khả dụng nào.</translation>
 <translation id="5290940294294002042">Chỉ định danh sách plugin mà người dùng có thể bật hoặc tắt</translation>
+<translation id="5293044154216294358">Nếu bạn đặt chính sách này thành True, thì người dùng có thể chơi trò chơi khủng long. Nếu bạn đặt chính sách này thành False, thì người dùng không thể chơi trò chơi ẩn có tên khủng long khi thiết bị không có kết nối mạng.
+
+      Nếu bạn không đặt chính sách này, thì người dùng không thể chơi trò chơi đó trên <ph name="PRODUCT_OS_NAME" /> đã đăng ký nhưng vẫn có thể chơi trong những trường hợp khác.</translation>
 <translation id="5306186200045823863">Cho phép tin cậy Cơ sở hạ tầng khóa công khai (PKI) cũ của Symantec Corporation</translation>
 <translation id="5307432759655324440">Tính khả dụng của chế độ ẩn danh</translation>
 <translation id="5311275381462687162">Tùy chọn cài đặt mặc định cho hành vi <ph name="ATTRIBUTE_SAMESITE_NAME" /> cũ của cookie</translation>
@@ -3159,6 +3191,9 @@
 
       LƯU Ý: Chính sách này chỉ áp dụng cho Chrome trên Android chạy trên các thiết bị có hơn 1GB RAM. Để áp dụng chính sách này trên các nền tảng không phải Android, hãy sử dụng IsolateOrigins.
       </translation>
+<translation id="5595998409088126162">Nếu bạn đặt chính sách này, thì danh sách dấu trang sẽ được thiết lập, trong đó mỗi dấu trang là một từ điển có khóa "<ph name="NAME" />" và "<ph name="URL_LABEL" />". Những khóa này lưu giữ tên và đích của dấu trang. Quản trị viên có thể thiết lập thư mục con bằng cách xác định một dấu trang không có khóa "<ph name="URL_LABEL" />" nhưng có khóa "<ph name="CHILDREN" />" bổ sung. Khóa này cũng có danh sách dấu trang và một số dấu trang trong đó cũng có thể là thư mục. Chrome sẽ sửa đổi các URL chưa hoàn chỉnh như thể các URL đó được gửi qua thanh địa chỉ. Ví dụ: "<ph name="GOOGLE_COM" />" trở thành "<ph name="HTTPS_GOOGLE_COM" />".
+
+      Người dùng không thể thay đổi thư mục có chứa dấu trang (nhưng họ có thể ẩn thư mục đó khỏi thanh dấu trang). Tên thư mục là "Dấu trang được quản lý" nhưng họ có thể thêm tên đó vào danh sách dấu trang, một từ điển chứa khóa "<ph name="TOPLEVEL_NAME" />" với giá trị là tên thư mục mong muốn. Dấu trang được quản lý không đồng bộ hóa với tài khoản người dùng và các tiện ích không có quyền sửa đổi các dấu trang đó.</translation>
 <translation id="5599461642204007579">Cài đặt quản lý <ph name="MS_AD_NAME" /></translation>
 <translation id="5618398258385745432">Sử dụng tùy chọn cài đặt được liên kết trước khi đưa vào xác thực lại việc xem mật khẩu. Vì khi đó, tùy chọn cài đặt và chính sách này theo đó không ảnh hưởng đến hoạt động của Chrome. Lúc này, hoạt động hiện tại của Chrome sẽ giống như thể chính sách đã được đặt thành tắt hiển thị mật khẩu ở dạng văn bản rõ ràng trong trang cài đặt của trình quản lý mật khẩu. Điều đó có nghĩa là trang cài đặt chỉ chứa một trình giữ chỗ và chỉ khi người dùng nhấp vào "Hiển thị" (và xác thực lại, nếu cần), thì Chrome mới hiển thị mật khẩu. Mô tả gốc của chính sách như sau.
 
@@ -3446,6 +3481,11 @@
 <translation id="6099853574908182288">Chế độ in màu mặc định</translation>
 <translation id="6102342563050263313">Bật tùy chọn cuộn đến những phần văn bản cụ thể trong URL</translation>
 <translation id="6107642964266628393">Kiểm soát cách thức và thời điểm áp dụng bản cập nhật Chrome OS.</translation>
+<translation id="6110478331147706293">Nếu bạn đặt chính sách này, thì hệ thống sẽ tắt các yêu cầu tiết lộ về Tính minh bạch của chứng chỉ cho các tên máy chủ trong URL đã chỉ định. Mặc dù điều này khiến việc phát hiện các chứng chỉ bị cấp sai trở nên khó khăn hơn, nhưng máy chủ có thể tiếp tục sử dụng các chứng chỉ lẽ ra không được tin cậy (vì các chứng chỉ này không được tiết lộ công khai theo cách thích hợp).
+
+      Không đặt chính sách này đồng nghĩa với việc nếu bạn không tiết lộ những chứng chỉ buộc phải tiết lộ thông qua Tính minh bạch của chứng chỉ, thì <ph name="PRODUCT_NAME" /> sẽ không tin cậy những chứng chỉ đó.
+
+      Mẫu URL tuân theo định dạng này (https://www.chromium.org/administrators/url-blacklist-filter-format). Tuy nhiên, vì tính hợp lệ của các chứng chỉ của một tên máy chủ cụ thể không phụ thuộc vào tên giao thức, cổng hoặc đường dẫn, nên <ph name="PRODUCT_NAME" /> chỉ xem xét phần tên máy chủ của URL. Không hỗ trợ máy chủ có ký tự đại diện.</translation>
 <translation id="6111936128861357925">Cho phép trò chơi trứng khủng long Phục sinh</translation>
 <translation id="6114416803310251055">không được chấp thuận</translation>
 <translation id="6133088669883929098">Cho phép tất cả các trang web sử dụng tạo khóa</translation>
@@ -3491,6 +3531,11 @@
           Để biết thêm ví dụ cụ thể, hãy truy cập:
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="6178075938488052838">Chính sách này kiểm soát những ai có thể bắt đầu phiên <ph name="PRODUCT_OS_NAME" />. Chính sách này không ngăn người dùng đăng nhập vào các tài khoản Google bổ sung trong Android. Nếu bạn muốn ngăn việc này, hãy định cấu hình chính sách <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> dành riêng cho Android như là một phần của <ph name="ARC_POLICY_POLICY_NAME" />.</translation>
+<translation id="6183327369896253878">Việc đặt chính sách này sẽ cố định mã nhận dạng của ứng dụng mà <ph name="PRODUCT_OS_NAME" /> hiển thị dưới dạng ứng dụng được ghim trong thanh trình chạy và người dùng không thể thay đổi được các mã nhận dạng đó.
+
+      Hãy chỉ định ứng dụng Chrome theo mã nhận dạng của ứng dụng, chẳng hạn như pjkljhegncpnkpknbcohdijeoejaedia; ứng dụng Android theo tên gói, chẳng hạn như com.google.android.gm; và ứng dụng web theo URL dùng trong <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" />, chẳng hạn như https://google.com/maps.
+
+      Nếu bạn không đặt chính sách này, thì người dùng có thể thay đổi danh sách ứng dụng được ghim trong trình chạy.</translation>
 <translation id="6190022522129724693">Cài đặt cửa sổ bật lên</translation>
 <translation id="6190367314942602985">Báo cáo thông tin nhận dạng người dùng</translation>
 <translation id="6195802366906945965">Xác định xem trình xác minh chứng chỉ tích hợp sẵn có được dùng để xác minh chứng chỉ máy chủ hay không</translation>
@@ -3614,6 +3659,9 @@
 
       Nếu đặt chính sách này, bạn có thể định cấu hình để cho phép hoặc không cho phép người dùng đăng nhập vào <ph name="PRODUCT_NAME" />. Việc đặt chính sách này thành 'False' sẽ ngăn các ứng dụng và tiện ích sử dụng API chrome.identity hoạt động, do đó, bạn nên sử dụng SyncDisabled.</translation>
 <translation id="6378076389057087301">Chỉ định xem hoạt động âm thanh có ảnh hưởng đến việc quản lý nguồn không</translation>
+<translation id="6378393933102834628">Nếu bạn đặt chính sách này thành True, thì lối tắt ứng dụng sẽ hiển thị. Nếu bạn đặt chính sách này thành False, thì lối tắt này sẽ không hiển thị.
+
+      Nếu bạn đặt chính sách này, thì người dùng sẽ không thể thay đổi được. Nếu bạn không đặt chính sách này, thì người dùng sẽ quyết định hiện hoặc ẩn lối tắt ứng dụng từ trình đơn ngữ cảnh trên thanh dấu trang.</translation>
 <translation id="637934607141010488">Danh sách báo cáo người dùng thiết bị đã đăng nhập gần đây.
 
       Nếu chính sách này được đặt thành sai, người dùng sẽ không được báo cáo.</translation>
@@ -3832,6 +3880,17 @@
 <translation id="6689792153960219308">Báo cáo trạng thái phần cứng</translation>
 <translation id="6698632841807204978">Bật chế độ in đen trắng</translation>
 <translation id="6699880231565102694">Bật xác thực hai bước cho máy chủ truy cập từ xa</translation>
+<translation id="6703251016607733593">Nếu bạn đặt chính sách này, thì hệ thống sẽ tắt tùy chọn thực thi các yêu cầu tiết lộ về Tính minh bạch của chứng chỉ cho danh sách hàm băm <ph name="SUBJECT_PUBLIC_KEY_INFO" />. Máy chủ doanh nghiệp có thể tiếp tục sử dụng các chứng chỉ không được tin cậy (vì các chứng chỉ này không được tiết lộ công khai đúng cách). Để tắt tùy chọn thực thi, hàm băm phải đáp ứng một trong các điều kiện sau:
+
+      * Có trong <ph name="SUBJECT_PUBLIC_KEY_INFO" /> của chứng chỉ máy chủ.
+
+      * Có trong <ph name="SUBJECT_PUBLIC_KEY_INFO" /> xuất hiện trong một chứng chỉ của Tổ chức phát hành chứng chỉ (CA) trong chuỗi chứng chỉ. Chứng chỉ CA chịu sự ràng buộc của tiện ích nameConstraints X.509v3, một hoặc nhiều directoryName nameConstraints xuất hiện trong permittedSubtrees và directoryName có thuộc tính organizationName.
+
+      * Có trong <ph name="SUBJECT_PUBLIC_KEY_INFO" /> xuất hiện trong một chứng chỉ CA trong chuỗi chứng chỉ, chứng chỉ CA đó có một hoặc nhiều thuộc tính organizationName trong Đối tượng của chứng chỉ, và chứng chỉ của máy chủ có cùng số lượng thuộc tính organizationName, theo cùng thứ tự và có các giá trị giống nhau theo từng byte.
+
+      Hãy chỉ định hàm băm <ph name="SUBJECT_PUBLIC_KEY_INFO" /> bằng cách liên kết tên thuật toán hàm băm, một dấu gạch chéo và phương thức mã hóa Base64 của thuật toán hàm băm đó, áp dụng cho <ph name="SUBJECT_PUBLIC_KEY_INFO" /> được mã hóa theo DER (Quy tắc mã hóa phân biệt) của chứng chỉ đã chỉ định. Định dạng mã hóa Base64 trùng khớp với định dạng của Vân tay số SPKI. Thuật toán hàm băm duy nhất mà hệ thống nhận dạng được là sha256. Các thuật toán hàm băm khác đều bị bỏ qua.
+
+      Không đặt chính sách này đồng nghĩa với việc nếu bạn không tiết lộ những chứng chỉ buộc phải tiết lộ thông qua Tính minh bạch của chứng chỉ, thì <ph name="PRODUCT_NAME" /> sẽ không tin cậy những chứng chỉ đó.</translation>
 <translation id="6704515759227307131">Chính sách này không còn dùng nữa và đã được thay thế bằng AdvancedProtectionAllowed.
 
       Chính sách này kiểm soát liệu người dùng đăng ký chương trình Bảo vệ nâng cao có được phép gửi các tệp đã tải xuống cho Google để quét tìm phần mềm độc hại hay không. Nếu bạn không đặt hoặc đặt thành True, thì người dùng đã đăng ký sẽ được nhắc gửi các tệp của họ cho Google để quét sâu. Nếu người dùng chọn 'Quét' thì tệp họ đã tải xuống sẽ được gửi cho Google. Nếu bạn đặt thành False, thì người dùng sẽ không được nhắc và các tệp họ đã tải xuống sẽ không được gửi cho Google.</translation>
@@ -3842,6 +3901,9 @@
           Kể từ <ph name="PRODUCT_NAME" /> 76, chính sách này sẽ tắt theo mặc định khi bạn không đặt.
 
           Kể từ <ph name="PRODUCT_NAME" /> 78, chính sách này sẽ bị bỏ qua và coi như là đã tắt.</translation>
+<translation id="672496466524161417">Nếu bạn đặt chính sách này thành None hoặc không đặt chính sách này, thì người dùng có thể quản lý chứng chỉ. Nếu bạn đặt chính sách này thành 2, thì người dùng chỉ có thể xem (nhưng không quản lý được) chứng chỉ.
+
+      Nếu bạn đặt chính sách này thành 1, thì người dùng có thể quản lý các chứng chỉ người dùng nhưng không quản lý được các chứng chỉ cho toàn bộ thiết bị.</translation>
 <translation id="6731757988219967594">Lọc các trang web cấp cao nhất (không phải iframe được nhúng) có nội dung người lớn</translation>
 <translation id="6734521799274931721">Kiểm soát khả năng sử dụng của ứng dụng Chia sẻ tệp trong mạng trên Chrome OS</translation>
 <translation id="6735701345096330595">Buộc bật tính năng kiểm tra chính tả ngôn ngữ</translation>
@@ -4163,6 +4225,9 @@
 
       Lưu ý: Chính sách này không ảnh hưởng đến Google Drive và bộ nhớ trong. Người dùng vẫn có thể truy cập vào các tệp lưu trong thư mục Tệp đã tải xuống.</translation>
 <translation id="7177857088692019405">Mở khóa nhanh</translation>
+<translation id="7179187054027029272">Nếu bạn đặt chính sách này thành True hoặc không đặt chính sách này, thì người dùng, ứng dụng và tiện ích có thể chuyển sang chế độ Toàn màn hình (trong đó chỉ hiển thị nội dung web) khi có các quyền thích hợp.
+
+      Nếu bạn đặt chính sách này thành False, thì người dùng, ứng dụng và tiện ích không thể chuyển sang chế độ Toàn màn hình.</translation>
 <translation id="718126088895133062">Chính sách này chỉ định mã người dùng cấp phép <ph name="PLUGIN_VM_NAME" /> cho thiết bị này.</translation>
 <translation id="7185078796915954712">TLS 1.3</translation>
 <translation id="7187447094921703950">Bật chính sách quản lý điện năng cho chế độ chuyển đổi điện năng cao điểm.
@@ -4747,6 +4812,11 @@
 <translation id="8140204717286305802">Danh sách báo cáo giao diện mạng chứa thông tin về loại và địa chỉ phần cứng đến máy chủ.
 
       Nếu chính sách được đặt giá trị thành sai, danh sách giao diện sẽ không được báo cáo.</translation>
+<translation id="8140907626566492348">Nếu bạn đặt chính sách này thành True hoặc không đặt chính sách này, thì <ph name="PRODUCT_NAME" /> có thể hiển thị cho người dùng thông tin sản phẩm dưới dạng nội dung toàn bộ thẻ.
+
+      Nếu bạn đặt chính sách này thành False, thì <ph name="PRODUCT_NAME" /> sẽ không hiển thị thông tin sản phẩm dưới dạng nội dung toàn bộ thẻ.
+
+      Việc đặt chính sách này sẽ kiểm soát cách trình bày trang chào mừng nhằm giúp người dùng đăng nhập vào <ph name="PRODUCT_NAME" />, đặt <ph name="PRODUCT_NAME" /> làm trình duyệt mặc định của người dùng hoặc thông báo cho người dùng về các tính năng của sản phẩm.</translation>
 <translation id="8141795997560411818">Chính sách này không ngăn người dùng sử dụng ứng dụng Google Drive trên Android. Nếu muốn ngăn việc truy cập vào Google Drive, bạn cũng phải không cho phép cài đặt ứng dụng Google Drive trên Android.</translation>
 <translation id="8142894094385450823">Đặt ngôn ngữ đề xuất cho phiên được quản lý</translation>
 <translation id="8146727383888924340">Cho phép người dùng đổi phiếu mua hàng thông qua Đăng ký Chrome OS</translation>
@@ -4767,6 +4837,9 @@
 
       Nếu chính sách được đặt ở trạng thái tắt hoặc không được đặt, việc đăng nhập sẽ dẫn tới cấu hình thông thường.</translation>
 <translation id="8158758865057576716">Bật tạo bản sao chuyển vùng cho dữ liệu hồ sơ của <ph name="PRODUCT_NAME" />.</translation>
+<translation id="8158897487095710470">Nếu bạn đặt chính sách này thành True, thì thanh dấu trang sẽ hiển trị trong <ph name="PRODUCT_NAME" />. Nếu bạn đặt chính sách này thành False, thì người dùng sẽ không thấy thanh dấu trang.
+
+      Nếu bạn đặt chính sách này, thì người dùng sẽ không thể thay đổi được. Nếu bạn không đặt chính sách này, thì người dùng sẽ quyết định có dùng chức năng này hay không.</translation>
 <translation id="8159760979508295709">Bật tính năng hỗ trợ tiếp cận về làm nổi bật con trỏ.
 
           Tính năng này giúp bạn đánh dấu vị trí xung quanh con trỏ chuột trong khi di chuyển.
@@ -4933,6 +5006,11 @@
 <translation id="8424255554404582727">Đặt chế độ xoay màn hình mặc định, được áp dụng lại mỗi lần khởi động lại</translation>
 <translation id="8426231401662877819">Xoay màn hình 90 độ theo chiều kim đồng hồ</translation>
 <translation id="8433186206711564395">Cài đặt mạng</translation>
+<translation id="843609873781525167">Nếu bạn đặt chính sách này thành True, thì <ph name="PRODUCT_NAME" /> sẽ luôn kiểm tra xem đây có phải là trình duyệt mặc định hay không khi khởi động và sẽ tự động đăng ký làm trình duyệt mặc định nếu có thể. Nếu bạn đặt chính sách này thành False, thì <ph name="PRODUCT_NAME" /> sẽ không thể kiểm tra xem đây có phải là trình duyệt mặc định hay không và sẽ tắt các tùy chọn kiểm soát của người dùng cho tùy chọn này.
+
+      Nếu bạn không đặt chính sách này, thì <ph name="PRODUCT_NAME" /> sẽ cho phép người dùng kiểm soát xem đây có phải là trình duyệt mặc định hay không; nếu không phải là trình duyệt mặc định, thì có hiển thị thông báo cho người dùng hay không.
+
+      Lưu ý: Đối với quản trị viên <ph name="MS_WIN_NAME" />, thao tác bật tùy chọn cài đặt này chỉ thực hiện được trên máy chạy Windows 7. Đối với các phiên bản mới, bạn phải triển khai tệp "liên kết ứng dụng mặc định" để đặt <ph name="PRODUCT_NAME" /> làm trình xử lý cho giao thức <ph name="HTTPS_PROTOCOL" /> và <ph name="HTTP_PROTOCOL" /> (và giao thức <ph name="FTP_PROTOCOL" /> cũng như các định dạng tệp khác (không bắt buộc)). Xem phần Trợ giúp về Chrome (https://support.google.com/chrome?p=make_chrome_default_win).</translation>
 <translation id="8445576299806775661">Sau mỗi lần cập nhật phiên bản trên quy mô lớn, Chrome sẽ chụp nhanh một số phần dữ liệu duyệt web của người dùng để sử dụng trong trường hợp khôi phục phiên bản khẩn cấp diễn ra sau đó. Nếu tiến hành khôi phục khẩn cấp đối với một phiên bản mà người dùng có ảnh chụp nhanh tương ứng, thì dữ liệu trong ảnh chụp nhanh đó sẽ được khôi phục. Điều này cho phép người dùng giữ lại những tùy chọn cài đặt như dấu trang và dữ liệu tự động điền.
 
       Nếu bạn không đặt chính sách này, thì giá trị mặc định là 3 sẽ được sử dụng
@@ -5013,6 +5091,9 @@
 
           Nếu không đặt chính sách này, thì phím tắt của tính năng hỗ trợ tiếp cận sẽ bật theo mặc định.</translation>
 <translation id="8525526490824335042">Vùng chứa Linux</translation>
+<translation id="8537051350735478658">Nếu bạn đặt chính sách này thành True, thì các đề xuất tìm kiếm sẽ bật trong thanh địa chỉ của <ph name="PRODUCT_NAME" />. Nếu bạn đặt chính sách này thành False, thì các đề xuất tìm kiếm này sẽ tắt.
+
+      Nếu bạn đặt chính sách này, thì người dùng sẽ không thể thay đổi được. Nếu bạn không đặt chính sách này, thì các đề xuất tìm kiếm sẽ bật lúc đầu nhưng người dùng có thể tắt bất cứ lúc nào.</translation>
 <translation id="8544375438507658205">Trình hiển thị HTML mặc định dành cho <ph name="PRODUCT_FRAME_NAME" /></translation>
 <translation id="8544465954173828789">Cho phép đồng bộ hóa Tin nhắn SMS từ điện thoại sang Chromebook.</translation>
 <translation id="8548832052135586762">Đặt chế độ in thành chỉ in màu, chỉ in đen trắng hoặc không có hạn chế về chế độ in màu. Khi bạn không đặt chính sách, thì sẽ không có hạn chế nào.</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 3c3dd08..13adb92 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -3114,9 +3114,6 @@
       如將這項政策設為 0,就代表關閉驗證資料快取功能,這可能會導致關聯使用者的登入速度大幅變慢,因為使用者每次登入,系統都必須擷取領域專屬資料。
 
       請注意,即使是針對暫時性使用者,系統也會快取領域資料。如要避免追蹤暫時性使用者的領域,你必須關閉這項快取功能。</translation>
-<translation id="5700097087679928356">如果將這項政策設為 0 (預測值),你將可存取開發人員工具和 JavaScript 控制台,但無法在由企業政策安裝的擴充功能中進行存取。如果將這項政策設為 1,你將可在所有情況下存取開發人員工具和 JavaScript 控制台,在由企業政策安裝的擴充功能中也能進行存取。如果將這項政策設為 2,你將無法存取開發人員工具,也無法檢查網站元素。
-      
-這項設定也會停用透過鍵盤快速鍵、選單項目或內容選單項目來開啟開發人員工具或 JavaScript 控制台的功能。</translation>
 <translation id="570062449808736508">如果將這項政策設為非空白字串,WebView 就會讀取內容提供者 (擁有指定授權單位名稱) 的網址限制設定。</translation>
 <translation id="5708969689202733975">設定允許的快速解鎖模式</translation>
 <translation id="5711016543513883877">
diff --git a/components/safe_browsing/content/password_protection/visual_utils.cc b/components/safe_browsing/content/password_protection/visual_utils.cc
index a205be5d..24405eb9 100644
--- a/components/safe_browsing/content/password_protection/visual_utils.cc
+++ b/components/safe_browsing/content/password_protection/visual_utils.cc
@@ -304,17 +304,19 @@
   return target;
 }
 
-bool IsVisualMatch(const SkBitmap& image, const VisualTarget& target) {
+base::Optional<VisionMatchResult> IsVisualMatch(const SkBitmap& image,
+                                                const VisualTarget& target) {
   VisualFeatures::BlurredImage blurred_image;
   if (!GetBlurredImage(image, &blurred_image))
-    return false;
+    return base::nullopt;
   std::string hash = GetHashFromBlurredImage(blurred_image);
   size_t hash_distance;
   bool has_hash_distance = GetHashDistance(hash, target.hash(), &hash_distance);
 
   VisualFeatures::ColorHistogram histogram;
   if (!GetHistogramForImage(image, &histogram))
-    return false;
+    return base::nullopt;
+
   opencv::PointDistribution point_distribution =
       HistogramBinsToPointDistribution(histogram.bins());
   base::Optional<double> color_distance = opencv::EMD(
@@ -337,11 +339,17 @@
     }
 
     if (is_match) {
-      return true;
+      VisionMatchResult result;
+      result.set_matched_target_digest(target.digest());
+      if (has_hash_distance)
+        result.set_vision_matched_phash_score(hash_distance);
+      if (color_distance.has_value())
+        result.set_vision_matched_emd_score(color_distance.value());
+      return result;
     }
   }
 
-  return false;
+  return base::nullopt;
 }
 
 }  // namespace visual_utils
diff --git a/components/safe_browsing/content/password_protection/visual_utils.h b/components/safe_browsing/content/password_protection/visual_utils.h
index b414715..e5bef7c 100644
--- a/components/safe_browsing/content/password_protection/visual_utils.h
+++ b/components/safe_browsing/content/password_protection/visual_utils.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+#include "base/optional.h"
 #include "components/safe_browsing/core/proto/client_model.pb.h"
 #include "components/safe_browsing/core/proto/csd.pb.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -40,8 +41,10 @@
 std::unique_ptr<SkBitmap> BlockMeanAverage(const SkBitmap& image,
                                            int block_size);
 
-// Returns whether the given |image| is a match for the |target|.
-bool IsVisualMatch(const SkBitmap& image, const VisualTarget& target);
+// Returns whether the given |image| is a match for the |target|. Returns
+// nullopt in the case of no match, and the VisionMatchResult if it is a match.
+base::Optional<VisionMatchResult> IsVisualMatch(const SkBitmap& image,
+                                                const VisualTarget& target);
 
 }  // namespace visual_utils
 }  // namespace safe_browsing
diff --git a/components/safe_browsing/content/password_protection/visual_utils_unittest.cc b/components/safe_browsing/content/password_protection/visual_utils_unittest.cc
index 1b36af63..752e65dbe 100644
--- a/components/safe_browsing/content/password_protection/visual_utils_unittest.cc
+++ b/components/safe_browsing/content/password_protection/visual_utils_unittest.cc
@@ -267,7 +267,7 @@
     VisualTarget target;
     target.set_hash(target_hash.data(), target_hash.size());
     target.mutable_match_config()->add_match_rule()->set_hash_distance(0.0);
-    EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+    EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
   }
 
   {
@@ -287,7 +287,7 @@
     target.set_hash(target_hash.data(), target_hash.size());
 
     target.mutable_match_config()->add_match_rule()->set_hash_distance(0.0);
-    EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+    EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
   }
 }
 
@@ -311,9 +311,9 @@
   VisualTarget target;
   target.set_hash(target_hash.data(), target_hash.size());
   target.mutable_match_config()->add_match_rule()->set_hash_distance(23.0);
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
   target.mutable_match_config()->add_match_rule()->set_hash_distance(24.0);
-  EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+  EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 }
 
 TEST_F(VisualUtilsTest, IsVisualMatchHashStrideComparison) {
@@ -329,11 +329,11 @@
   VisualTarget target;
   target.set_hash(target_hash.data(), target_hash.size());
   target.mutable_match_config()->add_match_rule()->set_hash_distance(0.0);
-  EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+  EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
   target_hash[0] = '\x00';
   target.set_hash(target_hash.data(), target_hash.size());
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 }
 
 TEST_F(VisualUtilsTest, IsVisualMatchHistogramOnly) {
@@ -353,7 +353,7 @@
     bin->set_quantized_b(7);
     bin->set_weight(1.0);
     target.mutable_match_config()->add_match_rule()->set_color_distance(0.0);
-    EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+    EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
   }
 
   {
@@ -370,10 +370,10 @@
 
     MatchRule* match_rule = target.mutable_match_config()->add_match_rule();
     match_rule->set_color_distance(0.5);
-    EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+    EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
     match_rule->set_color_distance(0.4);
-    EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+    EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
   }
 
   {
@@ -390,10 +390,10 @@
 
     MatchRule* match_rule = target.mutable_match_config()->add_match_rule();
     match_rule->set_color_distance(0.2);
-    EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+    EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
     match_rule->set_color_distance(0.1);
-    EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+    EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
   }
 }
 
@@ -413,21 +413,21 @@
   color_range->set_high(target_hue);
 
   // Blue hue present
-  EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+  EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
   // Color range too high
   color_range->set_low(target_hue + 1);
   color_range->set_high(target_hue + 1);
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 
   // Color range too low
   color_range->set_low(target_hue - 1);
   color_range->set_high(target_hue - 1);
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 
   // No blue hue present
   *bitmap_.getAddr32(0, 0) = kWhite;
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 }
 
 TEST_F(VisualUtilsTest, IsVisualMatchMultipleColorRanges) {
@@ -453,20 +453,20 @@
   color_range->set_high(green_hue);
 
   // Both hues present
-  EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+  EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
   // No blue hue present
   *bitmap_.getAddr32(0, 0) = kWhite;
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 
   // No green hue present
   *bitmap_.getAddr32(0, 0) = kBlue;
   *bitmap_.getAddr32(1, 0) = kWhite;
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 
   // Neither hue present
   *bitmap_.getAddr32(0, 0) = kWhite;
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 }
 
 TEST_F(VisualUtilsTest, IsVisualMatchMultipleMatchRules) {
@@ -495,20 +495,20 @@
   color_range->set_high(green_hue);
 
   // Both hues present
-  EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+  EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
   // No blue hue present
   *bitmap_.getAddr32(0, 0) = kWhite;
-  EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+  EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
   // No green hue present
   *bitmap_.getAddr32(0, 0) = kBlue;
   *bitmap_.getAddr32(1, 0) = kWhite;
-  EXPECT_TRUE(IsVisualMatch(bitmap_, target));
+  EXPECT_TRUE(IsVisualMatch(bitmap_, target).has_value());
 
   // Neither hue present
   *bitmap_.getAddr32(0, 0) = kWhite;
-  EXPECT_FALSE(IsVisualMatch(bitmap_, target));
+  EXPECT_FALSE(IsVisualMatch(bitmap_, target).has_value());
 }
 
 }  // namespace visual_utils
diff --git a/components/send_tab_to_self/send_tab_to_self_bridge.cc b/components/send_tab_to_self/send_tab_to_self_bridge.cc
index 167b145..28906d7 100644
--- a/components/send_tab_to_self/send_tab_to_self_bridge.cc
+++ b/components/send_tab_to_self/send_tab_to_self_bridge.cc
@@ -11,7 +11,6 @@
 #include "base/check_op.h"
 #include "base/guid.h"
 #include "base/memory/ptr_util.h"
-#include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
 #include "base/strings/string_util.h"
 #include "base/time/clock.h"
diff --git a/components/site_isolation/BUILD.gn b/components/site_isolation/BUILD.gn
index e079b243..6e877b2 100644
--- a/components/site_isolation/BUILD.gn
+++ b/components/site_isolation/BUILD.gn
@@ -27,8 +27,14 @@
 
 source_set("site_isolation") {
   sources = [
+    "features.cc",
+    "features.h",
+    "pref_names.cc",
+    "pref_names.h",
     "preloaded_isolated_origins.cc",
     "preloaded_isolated_origins.h",
+    "site_isolation_policy.cc",
+    "site_isolation_policy.h",
   ]
 
   if (use_internal_isolated_origins) {
@@ -41,7 +47,27 @@
   deps = [
     ":buildflags",
     "//base",
+    "//components/prefs",
+    "//components/user_prefs",
     "//content/public/browser",
     "//url",
   ]
 }
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "site_isolation_policy_unittest.cc" ]
+  deps = [
+    ":site_isolation",
+    "//base",
+    "//base/test:test_support",
+    "//build:branding_buildflags",
+    "//components/prefs",
+    "//components/prefs:test_support",
+    "//components/user_prefs",
+    "//components/variations",
+    "//content/public/browser",
+    "//content/test:test_support",
+    "//testing/gtest",
+  ]
+}
diff --git a/components/site_isolation/DEPS b/components/site_isolation/DEPS
index f7bd88748..aee55fd 100644
--- a/components/site_isolation/DEPS
+++ b/components/site_isolation/DEPS
@@ -1,6 +1,11 @@
 include_rules = [
   "+base",
   "+build",
+  "+components/prefs",
+  "+components/user_prefs",
+  "+components/variations",
   "+content/public/browser",
+  "+content/public/common",
+  "+content/public/test",
   "+url",
-]
\ No newline at end of file
+]
diff --git a/components/site_isolation/features.cc b/components/site_isolation/features.cc
new file mode 100644
index 0000000..7d180987b
--- /dev/null
+++ b/components/site_isolation/features.cc
@@ -0,0 +1,44 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/site_isolation/features.h"
+
+#include "build/build_config.h"
+
+namespace site_isolation {
+namespace features {
+
+// Controls a mode for dynamically process-isolating sites where the user has
+// entered a password.  This is intended to be used primarily when full site
+// isolation is turned off.  To check whether this mode is enabled, use
+// SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled() rather than
+// checking the feature directly, since that decision is influenced by other
+// factors as well.
+const base::Feature kSiteIsolationForPasswordSites {
+  "site-isolation-for-password-sites",
+// Enabled by default on Android; see https://crbug.com/849815.  Note that this
+// should not affect Android Webview, which does not include this code.
+#if defined(OS_ANDROID)
+      base::FEATURE_ENABLED_BY_DEFAULT
+#else
+      base::FEATURE_DISABLED_BY_DEFAULT
+#endif
+};
+
+// kSitePerProcessOnlyForHighMemoryClients is checked before kSitePerProcess,
+// and (if enabled) can restrict if kSitePerProcess feature is checked at all -
+// no check will be made on devices with low memory (these devices will have no
+// Site Isolation via kSitePerProcess trials and won't activate either the
+// control or the experiment group).  The threshold for what is considered a
+// "low memory" device is set (in MB) via a field trial param with the name
+// defined below ("site-per-process-low-memory-cutoff-mb") and compared against
+// base::SysInfo::AmountOfPhysicalMemoryMB().
+const base::Feature kSitePerProcessOnlyForHighMemoryClients{
+    "site-per-process-only-for-high-memory-clients",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+const char kSitePerProcessOnlyForHighMemoryClientsParamName[] =
+    "site-per-process-low-memory-cutoff-mb";
+
+}  // namespace features
+}  // namespace site_isolation
diff --git a/components/site_isolation/features.h b/components/site_isolation/features.h
new file mode 100644
index 0000000..4fb00df
--- /dev/null
+++ b/components/site_isolation/features.h
@@ -0,0 +1,20 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_SITE_ISOLATION_FEATURES_H_
+#define COMPONENTS_SITE_ISOLATION_FEATURES_H_
+
+#include "base/feature_list.h"
+
+namespace site_isolation {
+namespace features {
+
+extern const base::Feature kSiteIsolationForPasswordSites;
+extern const base::Feature kSitePerProcessOnlyForHighMemoryClients;
+extern const char kSitePerProcessOnlyForHighMemoryClientsParamName[];
+
+}  // namespace features
+}  // namespace site_isolation
+
+#endif  // COMPONENTS_SITE_ISOLATION_FEATURES_H_
diff --git a/components/site_isolation/pref_names.cc b/components/site_isolation/pref_names.cc
new file mode 100644
index 0000000..403cf01
--- /dev/null
+++ b/components/site_isolation/pref_names.cc
@@ -0,0 +1,17 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/site_isolation/pref_names.h"
+
+namespace site_isolation {
+namespace prefs {
+
+// A list of origins that were heuristically determined to need process
+// isolation. For example, an origin may be placed on this list in response to
+// the user typing a password on it.
+const char kUserTriggeredIsolatedOrigins[] =
+    "site_isolation.user_triggered_isolated_origins";
+
+}  // namespace prefs
+}  // namespace site_isolation
diff --git a/components/site_isolation/pref_names.h b/components/site_isolation/pref_names.h
new file mode 100644
index 0000000..ffdf32f2
--- /dev/null
+++ b/components/site_isolation/pref_names.h
@@ -0,0 +1,16 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_SITE_ISOLATION_PREF_NAMES_H_
+#define COMPONENTS_SITE_ISOLATION_PREF_NAMES_H_
+
+namespace site_isolation {
+namespace prefs {
+
+extern const char kUserTriggeredIsolatedOrigins[];
+
+}  // namespace prefs
+}  // namespace site_isolation
+
+#endif  // COMPONENTS_SITE_ISOLATION_PREF_NAMES_H
diff --git a/chrome/browser/site_isolation/site_isolation_policy.cc b/components/site_isolation/site_isolation_policy.cc
similarity index 88%
rename from chrome/browser/site_isolation/site_isolation_policy.cc
rename to components/site_isolation/site_isolation_policy.cc
index a91cfd0..9a91d30 100644
--- a/chrome/browser/site_isolation/site_isolation_policy.cc
+++ b/components/site_isolation/site_isolation_policy.cc
@@ -2,18 +2,22 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
+#include "components/site_isolation/site_isolation_policy.h"
 
+#include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/system/sys_info.h"
 #include "build/build_config.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/chrome_features.h"
-#include "chrome/common/pref_names.h"
 #include "components/prefs/pref_service.h"
+#include "components/site_isolation/features.h"
+#include "components/site_isolation/pref_names.h"
+#include "components/user_prefs/user_prefs.h"
+#include "content/public/browser/browser_context.h"
 #include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/site_isolation_policy.h"
 
+namespace site_isolation {
+
 // static
 bool SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled() {
   // If the user has explicitly enabled site isolation for password sites from
@@ -99,7 +103,8 @@
 }
 
 // static
-void SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(Profile* profile) {
+void SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(
+    content::BrowserContext* browser_context) {
   // If the user turned off password-triggered isolation, don't apply any
   // stored isolated origins, but also don't clear them from prefs, so that
   // they can be used if password-triggered isolation is re-enabled later.
@@ -108,7 +113,8 @@
 
   std::vector<url::Origin> origins;
   for (const auto& value :
-       *profile->GetPrefs()->GetList(prefs::kUserTriggeredIsolatedOrigins)) {
+       *user_prefs::UserPrefs::Get(browser_context)
+            ->GetList(prefs::kUserTriggeredIsolatedOrigins)) {
     origins.push_back(url::Origin::Create(GURL(value.GetString())));
   }
 
@@ -117,9 +123,11 @@
     using IsolatedOriginSource =
         content::ChildProcessSecurityPolicy::IsolatedOriginSource;
     policy->AddIsolatedOrigins(origins, IsolatedOriginSource::USER_TRIGGERED,
-                               /* browser_context = */ profile);
+                               browser_context);
   }
 
   UMA_HISTOGRAM_COUNTS_1000(
       "SiteIsolation.SavedUserTriggeredIsolatedOrigins.Size", origins.size());
 }
+
+}  // namespace site_isolation
diff --git a/chrome/browser/site_isolation/site_isolation_policy.h b/components/site_isolation/site_isolation_policy.h
similarity index 68%
rename from chrome/browser/site_isolation/site_isolation_policy.h
rename to components/site_isolation/site_isolation_policy.h
index 25dd216..ade65a8 100644
--- a/chrome/browser/site_isolation/site_isolation_policy.h
+++ b/components/site_isolation/site_isolation_policy.h
@@ -2,16 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_SITE_ISOLATION_SITE_ISOLATION_POLICY_H_
-#define CHROME_BROWSER_SITE_ISOLATION_SITE_ISOLATION_POLICY_H_
+#ifndef COMPONENTS_SITE_ISOLATION_SITE_ISOLATION_POLICY_H_
+#define COMPONENTS_SITE_ISOLATION_SITE_ISOLATION_POLICY_H_
 
 #include "base/macros.h"
 
-class Profile;
+namespace content {
+class BrowserContext;
+}
+
+namespace site_isolation {
 
 // A centralized place for making policy decisions about site isolation modes
-// at the chrome/ layer.  This supplements content::SiteIsolationPolicy with
-// features that are specific to chrome/.
+// which can be shared between content embedders. This supplements
+// content::SiteIsolationPolicy with features that may be useful to embedders.
 //
 // These methods can be called from any thread.
 class SiteIsolationPolicy {
@@ -26,10 +30,11 @@
   // Spectre-like attacks on such devices).
   static bool IsEnterprisePolicyApplicable();
 
-  // Reads and applies any isolated origins stored in user prefs associated
-  // with |profile|.  This is expected to be called on startup after user prefs
-  // have been loaded.
-  static void ApplyPersistedIsolatedOrigins(Profile* profile);
+  // Reads and applies any isolated origins stored in user prefs associated with
+  // |browser_context|.  This is expected to be called on startup after user
+  // prefs have been loaded.
+  static void ApplyPersistedIsolatedOrigins(
+      content::BrowserContext* browser_context);
 
   // Determines whether Site Isolation should be disabled because the device
   // does not have the minimum required amount of memory.
@@ -44,4 +49,6 @@
   DISALLOW_IMPLICIT_CONSTRUCTORS(SiteIsolationPolicy);
 };
 
-#endif  // CHROME_BROWSER_SITE_ISOLATION_SITE_ISOLATION_POLICY_H_
+}  // namespace site_isolation
+
+#endif  // COMPONENTS_SITE_ISOLATION_SITE_ISOLATION_POLICY_H_
diff --git a/chrome/browser/site_isolation/site_isolation_policy_unittest.cc b/components/site_isolation/site_isolation_policy_unittest.cc
similarity index 86%
rename from chrome/browser/site_isolation/site_isolation_policy_unittest.cc
rename to components/site_isolation/site_isolation_policy_unittest.cc
index 19a8f1f..47d16fdd 100644
--- a/chrome/browser/site_isolation/site_isolation_policy_unittest.cc
+++ b/components/site_isolation/site_isolation_policy_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/site_isolation/site_isolation_policy.h"
+#include "components/site_isolation/site_isolation_policy.h"
 
 #include "base/base_switches.h"
 #include "base/system/sys_info.h"
@@ -10,30 +10,29 @@
 #include "base/test/mock_entropy_provider.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_field_trial_list_resetter.h"
+#include "build/branding_buildflags.h"
 #include "build/build_config.h"
-#include "chrome/common/chrome_features.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chrome/test/base/testing_profile.h"
-#include "chrome/test/base/testing_profile_manager.h"
+#include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/scoped_user_pref_update.h"
+#include "components/prefs/testing_pref_service.h"
+#include "components/site_isolation/features.h"
+#include "components/site_isolation/pref_names.h"
 #include "components/site_isolation/preloaded_isolated_origins.h"
+#include "components/user_prefs/user_prefs.h"
 #include "components/variations/variations_switches.h"
 #include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/site_instance.h"
 #include "content/public/browser/site_isolation_policy.h"
+#include "content/public/common/content_client.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/test/browser_task_environment.h"
+#include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_utils.h"
-#include "google_apis/gaia/gaia_urls.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-#if BUILDFLAG(ENABLE_EXTENSIONS)
-#include "extensions/common/extension_urls.h"
-#endif
-
+namespace site_isolation {
 namespace {
 
 // Some command-line switches override field trials - the tests need to be
@@ -52,18 +51,65 @@
 
 }  // namespace
 
-class SiteIsolationPolicyTest : public testing::Test {
+// Base class for site isolation tests which handles setting a
+// ContentBrowserClient with logic for enabling/disabling site isolation.
+class BaseSiteIsolationTest : public testing::Test {
  public:
-  SiteIsolationPolicyTest() : manager_(TestingBrowserProcess::GetGlobal()) {}
+  BaseSiteIsolationTest() {
+    original_client_ = content::SetBrowserClientForTesting(&browser_client_);
+    SetEnableStrictSiteIsolation(
+        original_client_->ShouldEnableStrictSiteIsolation());
+  }
+
+  ~BaseSiteIsolationTest() override {
+    content::SetBrowserClientForTesting(original_client_);
+  }
 
  protected:
-  void SetUp() override { ASSERT_TRUE(manager_.SetUp()); }
+  void SetEnableStrictSiteIsolation(bool enable) {
+    browser_client_.strict_isolation_enabled_ = enable;
+  }
 
-  TestingProfileManager* manager() { return &manager_; }
+ private:
+  class SiteIsolationContentBrowserClient
+      : public content::ContentBrowserClient {
+   public:
+    bool ShouldEnableStrictSiteIsolation() override {
+      return strict_isolation_enabled_;
+    }
+
+    bool ShouldDisableSiteIsolation() override {
+      return SiteIsolationPolicy::
+          ShouldDisableSiteIsolationDueToMemoryThreshold();
+    }
+
+    std::vector<url::Origin> GetOriginsRequiringDedicatedProcess() override {
+      return GetBrowserSpecificBuiltInIsolatedOrigins();
+    }
+
+    bool strict_isolation_enabled_ = false;
+  };
+
+  SiteIsolationContentBrowserClient browser_client_;
+  content::ContentBrowserClient* original_client_ = nullptr;
+};
+
+class SiteIsolationPolicyTest : public BaseSiteIsolationTest {
+ public:
+  SiteIsolationPolicyTest() {
+    prefs_.registry()->RegisterListPref(prefs::kUserTriggeredIsolatedOrigins);
+    user_prefs::UserPrefs::Set(&browser_context_, &prefs_);
+  }
+
+ protected:
+  content::BrowserContext* browser_context() { return &browser_context_; }
+
+  PrefService* prefs() { return &prefs_; }
 
  private:
   content::BrowserTaskEnvironment task_environment_;
-  TestingProfileManager manager_;
+  content::TestBrowserContext browser_context_;
+  TestingPrefServiceSimple prefs_;
 
   DISALLOW_COPY_AND_ASSIGN(SiteIsolationPolicyTest);
 };
@@ -71,12 +117,13 @@
 // Helper class that enables site isolation for password sites.
 class PasswordSiteIsolationPolicyTest : public SiteIsolationPolicyTest {
  public:
-  PasswordSiteIsolationPolicyTest() {}
+  PasswordSiteIsolationPolicyTest() = default;
 
  protected:
   void SetUp() override {
-    feature_list_.InitWithFeatures({features::kSiteIsolationForPasswordSites},
-                                   {features::kSitePerProcess});
+    feature_list_.InitAndEnableFeature(
+        features::kSiteIsolationForPasswordSites);
+    SetEnableStrictSiteIsolation(false);
     SiteIsolationPolicyTest::SetUp();
   }
 
@@ -91,12 +138,10 @@
 // sites.
 TEST_F(PasswordSiteIsolationPolicyTest, ApplyPersistedIsolatedOrigins) {
   EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
-  TestingProfile* profile = manager()->CreateTestingProfile("Test");
 
   // Add foo.com and bar.com to stored isolated origins.
   {
-    ListPrefUpdate update(profile->GetPrefs(),
-                          prefs::kUserTriggeredIsolatedOrigins);
+    ListPrefUpdate update(prefs(), prefs::kUserTriggeredIsolatedOrigins);
     base::ListValue* list = update.Get();
     list->Append("http://foo.com");
     list->Append("https://bar.com");
@@ -110,11 +155,12 @@
   if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSitePerProcess)) {
     scoped_refptr<content::SiteInstance> foo_instance =
-        content::SiteInstance::CreateForURL(profile, GURL("http://foo.com/1"));
+        content::SiteInstance::CreateForURL(browser_context(),
+                                            GURL("http://foo.com/1"));
     EXPECT_FALSE(foo_instance->RequiresDedicatedProcess());
 
     scoped_refptr<content::SiteInstance> bar_instance =
-        content::SiteInstance::CreateForURL(profile,
+        content::SiteInstance::CreateForURL(browser_context(),
                                             GURL("https://baz.bar.com/2"));
     EXPECT_FALSE(bar_instance->RequiresDedicatedProcess());
   }
@@ -122,16 +168,17 @@
   // Apply isolated origins and ensure that they take effect for SiteInstances
   // in new BrowsingInstances.
   base::HistogramTester histograms;
-  SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(profile);
+  SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(browser_context());
   histograms.ExpectUniqueSample(
       "SiteIsolation.SavedUserTriggeredIsolatedOrigins.Size", 2, 1);
   {
     scoped_refptr<content::SiteInstance> foo_instance =
-        content::SiteInstance::CreateForURL(profile, GURL("http://foo.com/1"));
+        content::SiteInstance::CreateForURL(browser_context(),
+                                            GURL("http://foo.com/1"));
     EXPECT_TRUE(foo_instance->RequiresDedicatedProcess());
 
     scoped_refptr<content::SiteInstance> bar_instance =
-        content::SiteInstance::CreateForURL(profile,
+        content::SiteInstance::CreateForURL(browser_context(),
                                             GURL("https://baz.bar.com/2"));
     EXPECT_TRUE(bar_instance->RequiresDedicatedProcess());
   }
@@ -141,13 +188,13 @@
 // for password sites.
 class NoPasswordSiteIsolationPolicyTest : public SiteIsolationPolicyTest {
  public:
-  NoPasswordSiteIsolationPolicyTest() {}
+  NoPasswordSiteIsolationPolicyTest() = default;
 
  protected:
   void SetUp() override {
-    feature_list_.InitWithFeatures(
-        {},
-        {features::kSiteIsolationForPasswordSites, features::kSitePerProcess});
+    feature_list_.InitAndDisableFeature(
+        features::kSiteIsolationForPasswordSites);
+    SetEnableStrictSiteIsolation(false);
     SiteIsolationPolicyTest::SetUp();
   }
 
@@ -169,21 +216,20 @@
     return;
 
   EXPECT_FALSE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
-  TestingProfile* profile = manager()->CreateTestingProfile("Test");
 
   // Add foo.com to stored isolated origins.
   {
-    ListPrefUpdate update(profile->GetPrefs(),
-                          prefs::kUserTriggeredIsolatedOrigins);
+    ListPrefUpdate update(prefs(), prefs::kUserTriggeredIsolatedOrigins);
     base::ListValue* list = update.Get();
     list->Append("http://foo.com");
   }
 
   // Applying saved isolated origins should have no effect, since site
   // isolation for password sites is off.
-  SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(profile);
+  SiteIsolationPolicy::ApplyPersistedIsolatedOrigins(browser_context());
   scoped_refptr<content::SiteInstance> foo_instance =
-      content::SiteInstance::CreateForURL(profile, GURL("http://foo.com/"));
+      content::SiteInstance::CreateForURL(browser_context(),
+                                          GURL("http://foo.com/"));
   EXPECT_FALSE(foo_instance->RequiresDedicatedProcess());
 }
 
@@ -212,7 +258,7 @@
 
 // Helper class to run tests on a simulated 512MB low-end device.
 class SitePerProcessMemoryThresholdBrowserTest
-    : public testing::Test,
+    : public BaseSiteIsolationTest,
       public ::testing::WithParamInterface<
           SitePerProcessMemoryThresholdBrowserTestParams> {
  public:
@@ -236,15 +282,15 @@
 
     switch (GetParam().mode) {
       case SitePerProcessMode::kDisabled:
-        mode_feature_.InitAndDisableFeature(features::kSitePerProcess);
+        SetEnableStrictSiteIsolation(false);
         break;
       case SitePerProcessMode::kEnabled:
-        mode_feature_.InitAndEnableFeature(features::kSitePerProcess);
+        SetEnableStrictSiteIsolation(true);
         break;
       case SitePerProcessMode::kIsolatedOrigin:
         mode_feature_.InitAndEnableFeatureWithParameters(
-            features::kIsolateOrigins,
-            {{features::kIsolateOriginsFieldTrialParamName,
+            ::features::kIsolateOrigins,
+            {{::features::kIsolateOriginsFieldTrialParamName,
               GetTrialOrigin().Serialize()}});
         break;
     }
@@ -258,23 +304,9 @@
         switches::kEnableLowEndDeviceMode);
     EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB());
 
-    // Initializing the expected embedder origins at runtime is required for
-    // GetWebstoreLaunchURL(), which needs to have a proper ExtensionsClient
-    // initialized.
-#if !defined(OS_ANDROID)
-    expected_embedder_origins_.push_back(
-        url::Origin::Create(GaiaUrls::GetInstance()->gaia_url()));
-#endif
-#if BUILDFLAG(ENABLE_EXTENSIONS)
-    expected_embedder_origins_.push_back(
-        url::Origin::Create(extension_urls::GetWebstoreLaunchURL()));
-#endif
     // On Android official builds, we expect to isolate an additional set of
     // built-in origins.
-    auto built_in_origins =
-        site_isolation::GetBrowserSpecificBuiltInIsolatedOrigins();
-    std::move(std::begin(built_in_origins), std::end(built_in_origins),
-              std::back_inserter(expected_embedder_origins_));
+    expected_embedder_origins_ = GetBrowserSpecificBuiltInIsolatedOrigins();
   }
 
  protected:
@@ -441,7 +473,7 @@
 // initializes the test class's ScopedFeatureList using it.  Two derived
 // classes below control are used to initialize the feature to either enabled
 // or disabled state.
-class PasswordSiteIsolationFieldTrialTest : public testing::Test {
+class PasswordSiteIsolationFieldTrialTest : public BaseSiteIsolationTest {
  public:
   explicit PasswordSiteIsolationFieldTrialTest(bool should_enable)
       : field_trial_list_(std::make_unique<base::MockEntropyProvider>()) {
@@ -514,9 +546,9 @@
   // defaults to a 1900MB memory threshold, which is above the 512MB physical
   // memory that this test simulates.
 #if defined(OS_ANDROID)
-  EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_FALSE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 #else
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 #endif
 
   // Define a memory threshold at 768MB.  Since this is above the 512MB of
@@ -527,7 +559,7 @@
       features::kSitePerProcessOnlyForHighMemoryClients,
       {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}});
 
-  EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_FALSE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 
   // Simulate enabling password site isolation from command line.  (Note that
   // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine
@@ -539,7 +571,7 @@
 
   // This should override the memory threshold and enable password site
   // isolation.
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 }
 
 TEST_F(EnabledPasswordSiteIsolationFieldTrialTest, AboveThreshold) {
@@ -551,9 +583,9 @@
   // defaults to a 1900MB memory threshold, which is above the 512MB physical
   // memory that this test simulates.
 #if defined(OS_ANDROID)
-  EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_FALSE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 #else
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 #endif
 
   // Define a memory threshold at 128MB.  Since this is below the 512MB of
@@ -564,7 +596,7 @@
       features::kSitePerProcessOnlyForHighMemoryClients,
       {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}});
 
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 
   // Simulate disabling password site isolation from command line.  (Note that
   // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine
@@ -574,7 +606,7 @@
   base::test::ScopedFeatureList password_site_isolation_feature;
   password_site_isolation_feature.InitAndDisableFeature(
       features::kSiteIsolationForPasswordSites);
-  EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_FALSE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 }
 
 // This test verifies that when password-triggered site isolation is disabled
@@ -586,7 +618,7 @@
     return;
 
   // Password site isolation should be disabled at this point.
-  EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_FALSE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 
   // Simulate enabling password site isolation from command line.  (Note that
   // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine
@@ -598,7 +630,7 @@
 
   // If no memory threshold is defined, password site isolation should be
   // enabled.
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 
   // Define a memory threshold at 768MB.  This is above the 512MB of physical
   // memory that this test simulates, but password site isolation should still
@@ -609,7 +641,7 @@
       features::kSitePerProcessOnlyForHighMemoryClients,
       {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}});
 
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 }
 
 // Similar to the test above, but with device memory being above memory
@@ -619,7 +651,7 @@
   if (ShouldSkipBecauseOfConflictingCommandLineSwitches())
     return;
 
-  EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_FALSE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 
   base::test::ScopedFeatureList password_site_isolation_feature;
   password_site_isolation_feature.InitAndEnableFeature(
@@ -627,14 +659,14 @@
 
   // If no memory threshold is defined, password site isolation should be
   // enabled.
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 
   base::test::ScopedFeatureList memory_feature;
   memory_feature.InitAndEnableFeatureWithParameters(
       features::kSitePerProcessOnlyForHighMemoryClients,
       {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}});
 
-  EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
+  EXPECT_TRUE(SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled());
 }
 
 // Helper class to run tests with strict origin isolation initialized via
@@ -643,7 +675,7 @@
 // initializes the test class's ScopedFeatureList using it.  Two derived
 // classes below control are used to initialize the feature to either enabled
 // or disabled state.
-class StrictOriginIsolationFieldTrialTest : public testing::Test {
+class StrictOriginIsolationFieldTrialTest : public BaseSiteIsolationTest {
  public:
   explicit StrictOriginIsolationFieldTrialTest(bool should_enable)
       : field_trial_list_(std::make_unique<base::MockEntropyProvider>()) {
@@ -654,7 +686,7 @@
 
     std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
     feature_list->RegisterFieldTrialOverride(
-        features::kStrictOriginIsolation.name,
+        ::features::kStrictOriginIsolation.name,
         should_enable
             ? base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE
             : base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE,
@@ -740,7 +772,7 @@
   // same override path as well.)
   base::test::ScopedFeatureList strict_origin_isolation_feature;
   strict_origin_isolation_feature.InitAndDisableFeature(
-      features::kStrictOriginIsolation);
+      ::features::kStrictOriginIsolation);
   EXPECT_FALSE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled());
 }
 
@@ -761,7 +793,7 @@
   // same override path as well.)
   base::test::ScopedFeatureList strict_origin_isolation_feature;
   strict_origin_isolation_feature.InitAndEnableFeature(
-      features::kStrictOriginIsolation);
+      ::features::kStrictOriginIsolation);
 
   // If no memory threshold is defined, strict origin isolation should be
   // enabled.
@@ -785,7 +817,7 @@
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_ANDROID)
 class BuiltInIsolatedOriginsTest : public SiteIsolationPolicyTest {
  public:
-  BuiltInIsolatedOriginsTest() {}
+  BuiltInIsolatedOriginsTest() = default;
 
  protected:
   void SetUp() override {
@@ -902,3 +934,5 @@
   EXPECT_EQ(isolated_origins.size(), 0u);
 }
 #endif
+
+}  // namespace site_isolation
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index dc1a99bc..5d9baa85 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Bladsye in <ph name="SOURCE_LANGUAGE" /> sal van nou af in <ph name="TARGET_LANGUAGE" /> vertaal word.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> gebruik gewoonlik enkripsie om jou inligting te beskerm. Toe Google Chrome hierdie keer aan <ph name="SITE" /> probeer koppel het, het die webwerf ongewone en verkeerde eiebewyse teruggestuur. Dit kan gebeur wanneer 'n aanvaller probeer voorgee om <ph name="SITE" /> te wees, óf wanneer 'n Wi-Fi-aanmeldskerm die verbinding onderbreek het. Jou inligting is steeds veilig, want Google Chrome het die verbinding gestaak voordat enige data uitgeruil is.</translation>
 <translation id="1682696192498422849">Kort kant eerste</translation>
+<translation id="168693727862418163">Hierdie beleidwaarde kon nie teen die skema bekragtig word nie en sal geïgnoreer word.</translation>
 <translation id="168841957122794586">Die bedienersertifikaat bevat 'n swak kriptografiese sleutel.</translation>
 <translation id="1697532407822776718">Als is nou reg!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 9eda5be0..019df98 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">ከአሁን በኋላ በ<ph name="SOURCE_LANGUAGE" /> ያሉ ገጾች ወደ <ph name="TARGET_LANGUAGE" /> ይተረጎማሉ።</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> የእርስዎን መረጃ ለመጠበቅ በመደበኝነት ምስጠራ ይጠቀማል። Google Chrome አሁን ከ<ph name="SITE" /> ጋር ለመገናኘት ሲሞክር ድር ጣቢያው ያልተለመዱ እና ትክክል ያልሆኑ ምስክርነቶችን መልሷል። ይህ አንድ አጥቂ <ph name="SITE" />ን አስመስሎ ለመቅረብ ሲሞክር ነው ወይም አንድ የWi-Fi መግቢያ ገጽ ግንኙነቱን ሲያቋረጥ ሊከሰት ይችላል። Google Chrome ማንኛውም የውሂብ ልውውጥ ከመካሄዱ በፊት ግንኙነቱን ስላቋረጠው የእርስዎ መረጃ ደህንነት  አሁንም የተጠበቀ ነው።</translation>
 <translation id="1682696192498422849">አጭር ጠርዝ መጀመሪያ</translation>
+<translation id="168693727862418163">ይህ የመመሪያ እሴት ከዕቅዱ ጋር ሲተያይ ማረጋገጥ አልቻለም፣ እና ችላ ይባላል።</translation>
 <translation id="168841957122794586">የአገልጋይ እውቅና ማረጋገጫው ደካማ የሆነ ባለስውር መረጃ ቁልፍ ነው ያለው።</translation>
 <translation id="1697532407822776718">በቃ ጨርሰዋል!</translation>
 <translation id="1703835215927279855">ደብዳቤ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 37b9606..8ba047c 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">ستتم ترجمة الصفحات باللغة <ph name="SOURCE_LANGUAGE" /> إلى اللغة <ph name="TARGET_LANGUAGE" /> من الآن فصاعدًا.</translation>
 <translation id="1676269943528358898">‏يستخدم <ph name="SITE" /> التشفير عادة لحماية معلوماتك. عندما حاول Google Chrome الاتصال بموقع <ph name="SITE" /> هذه المرة، أرجَع موقع الويب بيانات اعتماد غير عادية وغير صحيحة. وقد يحدث هذا عندما يحاول أحد المهاجمين التظاهر بأنه موقع <ph name="SITE" />، أو إذا قاطعت شاشة تسجيل دخول Wi-Fi الاتصال. ولكن لا تزال معلوماتك آمنة نظرًا لأن Google Chrome أوقَف الاتصال قبل تبادل أي بيانات.</translation>
 <translation id="1682696192498422849">حافة قصيرة أولًا</translation>
+<translation id="168693727862418163">تعذّر على قيمة السياسة هذه التحقُّق باستخدام المخطط الخاص بها وسيتم تجاهلها.</translation>
 <translation id="168841957122794586">تحتوي شهادة الخادم على مفتاح ترميز ضعيف.</translation>
 <translation id="1697532407822776718">أنت الآن على أتم استعداد.</translation>
 <translation id="1703835215927279855">خطاب</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index 8a31415..1b792395 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642"><ph name="SOURCE_LANGUAGE" /> dilindəki səhifələr artıq <ph name="TARGET_LANGUAGE" /> dilinə tərcümə ediləcək.</translation>
 <translation id="1676269943528358898">Məlumatınızı qorumaq üçün <ph name="SITE" /> adətən şifrələmə istifadə edir. Chrome bu dəfə <ph name="SITE" /> üzərinə qoşulmağa çalışanda sayt qeyri-adi və yanlış kredensialları qaytarmağa başladı. Bu, hücum edən özünü <ph name="SITE" /> kimi apardıqda, və ya Wi-Fi tərəfindən bağlantı kəsintisi olduqda baş verir. Məlumatınız hələ də güvənlidir, çünki Chrome datanın mübadiləsindən öncə bağlantını kəsib.</translation>
 <translation id="1682696192498422849">Qısa kənar əvvəldə</translation>
+<translation id="168693727862418163">Bu siyasət dəyəri sxem əsasında doğrulanmadı və nəzərə alınmayacaq.</translation>
 <translation id="168841957122794586">Server sertifikatının kriptoqrafik açarı zəifdir.</translation>
 <translation id="1697532407822776718">Hər şey hazırdır!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index 433a954..629de2dc 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Цяпер старонкі на мове <ph name="SOURCE_LANGUAGE" /> будуць перакладацца на мову <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> звычайна выкарыстоўвае шыфраванне для абароны вашай інфармацыі. Пры спробе Google Chrome падключыцца да <ph name="SITE" />, вэб-сайт адправіў незнаёмыя і няправільныя ўліковыя даныя. Гэта можа адбывацца, калі зламыснік спрабуе выдаць сябе за <ph name="SITE" /> або экран уваходу ў сетцы Wi-Fi перарваў падключэнне. Ваша інфармацыя ўсё роўна абаронена, паколькі Google Chrome перарваў падключэнне да абмену данымі.</translation>
 <translation id="1682696192498422849">Спачатку кароткі край</translation>
+<translation id="168693727862418163">Не ўдалося пацвердзіць адпаведнасць значэння палітыкі схеме, таму яно будзе ігнаравацца.</translation>
 <translation id="168841957122794586">У сертыфіката сервера слабы крыптаграфічны ключ.</translation>
 <translation id="1697532407822776718">Усё гатова!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index fb247396..23d01c07 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">От сега нататък страниците на <ph name="SOURCE_LANGUAGE" /> ще се превеждат на <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Обикновено <ph name="SITE" /> използва шифроване за защита на информацията ви. Когато Google Chrome опита да установи връзка с/ъс <ph name="SITE" /> този път, уебсайтът върна необичайни и неправилни идентификационни данни. Това може да се случи, когато извършител на атака пробва да се представи за <ph name="SITE" /> или връзката е прекъсната от екран за вход в Wi-Fi. Информацията ви продължава да е защитена, тъй като Chrome спря връзката, преди да бъдат обменени данни.</translation>
 <translation id="1682696192498422849">Късата страна напред</translation>
+<translation id="168693727862418163">Стойността на това правило не бе потвърдена спрямо съответната схема и ще бъде пренебрегната.</translation>
 <translation id="168841957122794586">Сертификатът на сървъра съдържа слаб криптографски ключ.</translation>
 <translation id="1697532407822776718">Готово!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index f91b627..2c4b2d88 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Stranice na jeziku <ph name="SOURCE_LANGUAGE" /> od sada će se prevoditi na jezik <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Web lokacija <ph name="SITE" /> obično koristi šifriranje za zaštitu vaših informacija. Kada se ovog puta Google Chrome pokušao povezati na web lokaciju <ph name="SITE" />, web lokacija je vratila neobične i netačne akreditive. To se može dogoditi kada se napadač pokušava predstaviti kao web lokacija <ph name="SITE" />, ili je vezu omeo ekran za prijavu na WiFi. Vaši podaci su i dalje sigurni jer je Google Chrome obustavio vezu prije bilo kakve razmjene podataka.</translation>
 <translation id="1682696192498422849">Najprije kratka strana</translation>
+<translation id="168693727862418163">Vrijednost ovog pravila u odnosu na njegovu šemu nije potvrđena pa će biti zanemareno.</translation>
 <translation id="168841957122794586">Potvrda servera sadrži slab kriptografski ključ.</translation>
 <translation id="1697532407822776718">Sve je spremno!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 829ccf1..19ccd5c4 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">A partir d'ara, les pàgines en <ph name="SOURCE_LANGUAGE" /> es traduiran a <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> utilitza normalment l'encriptació per protegir la vostra informació. En aquesta ocasió, quan Google Chrome ha provat de connectar-se a <ph name="SITE" />, el lloc web ha enviat credencials poc comunes i incorrectes. Pot ser que un atacant estigui provant de fer-se passar per <ph name="SITE" /> o que una pantalla d'inici de sessió a la xarxa Wi-Fi hagi interromput la connexió. En qualsevol cas, la vostra informació continua estant segura, perquè Google Chrome ha aturat la connexió abans no s'intercanviés cap dada.</translation>
 <translation id="1682696192498422849">La vora curta primer</translation>
+<translation id="168693727862418163">No s'ha pogut validar el valor d'aquesta política comparant-lo amb l'esquema i, per tant, s'ignorarà.</translation>
 <translation id="168841957122794586">El certificat de servidor conté una clau criptogràfica dèbil.</translation>
 <translation id="1697532407822776718">Ja estàs a punt!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 96ca17f..5f0b8e7a 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Sider på <ph name="SOURCE_LANGUAGE" /> oversættes fremover til <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> bruger normalt kryptering til at beskytte dine oplysninger. Da Google Chrome forsøgte at oprette forbindelse til <ph name="SITE" /> denne gang, returnerede websitet usædvanlige og forkerte legitimationsoplysninger. Dette kan skyldes, at en hacker forsøger at udgive sig for at være <ph name="SITE" />, eller at en Wi-Fi-loginskærm har forstyrret forbindelsen. Dine oplysninger er stadig sikre, idet Google Chrome afbrød forbindelsen, inden der blev udvekslet data.</translation>
 <translation id="1682696192498422849">Kort kant først</translation>
+<translation id="168693727862418163">Politikkens værdi blev ikke bekræftet i forhold til dens skema, og den ignoreres derfor.</translation>
 <translation id="168841957122794586">Servercertifikatet indeholder en svag kryptografisk nøgle.</translation>
 <translation id="1697532407822776718">Fuldført</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 3156093..ebf12cc2 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Seiten auf <ph name="SOURCE_LANGUAGE" /> werden ab jetzt auf <ph name="TARGET_LANGUAGE" /> übersetzt.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> schützt Ihre Daten in der Regel durch Verschlüsselung. Als Google Chrome dieses Mal versuchte, eine Verbindung zu <ph name="SITE" /> herzustellen, gab die Website ungewöhnliche und falsche Anmeldedaten zurück. Entweder versucht ein Angreifer, sich als <ph name="SITE" /> auszugeben, oder die Verbindung wurde durch eine WLAN-Anmeldeseite unterbrochen. Da Google Chrome die Verbindung vor dem Austausch von Daten unterbrochen hat, sind Ihre Informationen weiterhin sicher.</translation>
 <translation id="1682696192498422849">Kurze Seite zuerst</translation>
+<translation id="168693727862418163">Die Richtlinienwertprüfung des Schemas ist fehlgeschlagen. Der Richtlinienwert wird ignoriert.</translation>
 <translation id="168841957122794586">Das Serverzertifikat weist einen schwachen kryptografischen Schlüssel auf.</translation>
 <translation id="1697532407822776718">Fertig!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 6083548..63c0368 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Από εδώ και στο εξής, οι σελίδες στα <ph name="SOURCE_LANGUAGE" /> θα μεταφράζονται στα <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Κανονικά, ο ιστότοπος <ph name="SITE" /> χρησιμοποιεί κρυπτογράφηση για να προστατεύει τα στοιχεία σας. Όταν το Google Chrome επιχείρησε πρόσφατα να συνδεθεί στο <ph name="SITE" />, ο ιστότοπος ανταποκρίθηκε δημιουργώντας ασυνήθιστα και εσφαλμένα διαπιστευτήρια. Αυτό μπορεί να συμβεί όταν κάποιος εισβολέας προσπαθεί να υποκριθεί ότι είναι ο ιστότοπος <ph name="SITE" /> ή όταν κάποια οθόνη σύνδεσης Wi-Fi έχει διακόψει τη σύνδεσή σας. Τα στοιχεία σας εξακολουθούν να είναι ασφαλή επειδή το Google Chrome διέκοψε τη σύνδεση πριν από την ανταλλαγή δεδομένων.</translation>
 <translation id="1682696192498422849">Πρώτα η μικρή πλευρά</translation>
+<translation id="168693727862418163">Αυτή η τιμή πολιτικής δεν επικυρώθηκε με επιτυχία έναντι του σχήματός της και θα παραβλεφθεί.</translation>
 <translation id="168841957122794586">Το πιστοποιητικό διακομιστή περιέχει ένα αδύναμο κρυπτογραφικό κλειδί.</translation>
 <translation id="1697532407822776718">Είστε έτοιμοι!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index bbd669f3..36c5b9a 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">De ahora en más, las páginas en <ph name="SOURCE_LANGUAGE" /> se traducirán al <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> suele utilizar la encriptación para proteger la información. Cuando Google Chrome intentó conectarse a <ph name="SITE" />, el sitio web devolvió credenciales incorrectas y poco comunes. Es posible que un atacante quiera suplantar a <ph name="SITE" /> o que una pantalla de acceso Wi-Fi haya interrumpido la conexión. Tu información permanece segura porque Google Chrome detuvo la conexión para evitar el intercambio de datos.</translation>
 <translation id="1682696192498422849">Borde corto primero</translation>
+<translation id="168693727862418163">El valor de esta política no se pudo validar con su esquema y, por lo tanto, se ignorará.</translation>
 <translation id="168841957122794586">El certificado del servidor contiene una clave criptográfica no segura.</translation>
 <translation id="1697532407822776718">¡Listo!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 021e276..c2ccb35 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">A partir de ahora, las páginas en <ph name="SOURCE_LANGUAGE" /> se traducirán al <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> utiliza normalmente el cifrado para proteger tu información. Cuando Google Chrome intentó establecer conexión con <ph name="SITE" />, el sitio web devolvió unas credenciales inusuales e incorrectas. Esto puede ocurrir si un atacante intenta suplantar la identidad de <ph name="SITE" /> o si una pantalla de inicio de sesión Wi-Fi interrumpe la conexión. Tu información sigue estando protegida, ya que Google Chrome detuvo la conexión antes de que se intercambiaran datos.</translation>
 <translation id="1682696192498422849">Borde corto primero</translation>
+<translation id="168693727862418163">No se ha podido validar el valor de esta política con su esquema y se ignorará.</translation>
 <translation id="168841957122794586">El certificado del servidor contiene una clave criptográfica no segura.</translation>
 <translation id="1697532407822776718">¡Listo!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index b672eee..bf0a81f 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Lehed keeles <ph name="SOURCE_LANGUAGE" /> tõlgitakse nüüd keelde <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Sait <ph name="SITE" /> kasutab teie teabe kaitsmiseks tavaliselt krüpteerimist. Kui Google Chrome püüdis seekord saidiga <ph name="SITE" /> ühendust luua, tagastas veebisait ebatavalised ja valed mandaadid. See võib juhtuda siis, kui ründaja proovib teeselda, et on sait <ph name="SITE" />, või WiFi sisselogimisekraan on ühenduse katkestanud. Teie teave on endiselt kaitstud, sest Google Chrome peatas ühenduse enne andmevahetust.</translation>
 <translation id="1682696192498422849">Lühem serv enne</translation>
+<translation id="168693727862418163">Seda reegli väärtust ei õnnestunud skeemiga võrdluses kinnitada ja seda eiratakse.</translation>
 <translation id="168841957122794586">Serveri sertifikaat sisaldab nõrka krüptograafilist võtit.</translation>
 <translation id="1697532407822776718">Kõik on valmis!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 907f6d5..685d2de 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642"><ph name="SOURCE_LANGUAGE" /> darabilten orriak <ph name="TARGET_LANGUAGE" /> hizkuntzara itzuliko dira.</translation>
 <translation id="1676269943528358898">Eskuarki, <ph name="SITE" /> webguneak enkriptatzea erabiltzen du informazioa babesteko. Google Chrome <ph name="SITE" /> webgunera konektatzen saiatu denean, webguneak kredentzial desegokiak eta ezohikoak bidali ditu. Erasotzaile bat <ph name="SITE" /> webgunearen plantak egiten ari delako gerta daiteke hori, edo Wi-Fi sarean saioa hasteko pantailak konexioa eten duelako. Zure informazioa seguru dago, datuak trukatu aurretik eten baitu Google Chrome-k konexioa.</translation>
 <translation id="1682696192498422849">Ertz laburra lehenbizi</translation>
+<translation id="168693727862418163">Ezin izan da balidatu gidalerroaren balioa haren eskemarekin, eta ez ikusi egingo zaio.</translation>
 <translation id="168841957122794586">Zerbitzariaren ziurtagiriak okerreko gako kriptografikoa du.</translation>
 <translation id="1697532407822776718">Prest zaude!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index d882589..9e020f43 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">از این به بعد، صفحه‌های <ph name="SOURCE_LANGUAGE" />، به <ph name="TARGET_LANGUAGE" /> ترجمه خواهند شد.</translation>
 <translation id="1676269943528358898">‏<ph name="SITE" /> معمولاً برای محافظت از اطلاعات شما از رمزگذاری استفاده می‌کند. اما این بار که Chrome تلاش کرد به <ph name="SITE" /> متصل شود، وب‌سایت اعتبارنامه‌ای نامعمول و نادرست را برگرداند. ممکن است مهاجمی در تلاش باشد خود را به‌جای <ph name="SITE" /> معرفی کند یا یک صفحه ورود به سیستم Wi-Fi در ارتباط اختلال ایجاد کرده باشد. اطلاعات شما همچنان ایمن است، زیرا Google Chrome قبل از هرگونه تبادل داده، اتصال را متوقف کرد.</translation>
 <translation id="1682696192498422849">ابتدا لبه کوتاه</translation>
+<translation id="168693727862418163">این مقدار خط‌مشی در رابطه با طرح آن تأیید نشده است و نادیده گرفته می‌شود.</translation>
 <translation id="168841957122794586">گواهی‌نامه سرور دارای یک کلید رمزنگاری ضعیف است.</translation>
 <translation id="1697532407822776718">همه چیز مرتب است.</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 4d4c83c7..0847de8 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Kielellä <ph name="SOURCE_LANGUAGE" /> kirjoitetut sivut käännetään tästä lähtien kielelle <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> suojaa tietosi normaalisti salauksen avulla. Kun Chrome yritti tällä kertaa yhdistää sivustoon <ph name="SITE" />, sivusto palautti epätavalliset ja virheelliset kirjautumistiedot. Hyökkääjä saattaa yrittää esiintyä sivustona <ph name="SITE" />, tai Wi-Fi-kirjautumisruutu on keskeyttänyt yhteyden. Tietosi ovat edelleen turvassa, sillä Google Chrome katkaisi yhteyden, ennen kuin mitään tietoja vaihdettiin.</translation>
 <translation id="1682696192498422849">Lyhyt reuna ensin</translation>
+<translation id="168693727862418163">Tämän käytännön arvon ei onnistunut vahvistamaan kaavaa ja se ohitetaan.</translation>
 <translation id="168841957122794586">Palvelinvarmenne sisältää heikon salausavaimen.</translation>
 <translation id="1697532407822776718">Kaikki on valmista.</translation>
 <translation id="1703835215927279855">Kirje</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 5553bf4..bd9599d 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Les pages en <ph name="SOURCE_LANGUAGE" /> seront désormais traduites en <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Un chiffrement est normalement utilisé sur le site <ph name="SITE" /> pour protéger vos informations. Lors de la dernière tentative de connexion de Google Chrome au site <ph name="SITE" />, des identifiants inhabituels et incorrects ont été retournés. Il est possible qu'un individu malveillant tente de se faire passer pour <ph name="SITE" /> ou qu'un écran de connexion Wi-Fi ait interrompu la connexion. Vos informations restent sécurisées, car nous avons arrêté la connexion avant l'échange des données.</translation>
 <translation id="1682696192498422849">Bord court en premier</translation>
+<translation id="168693727862418163">La valeur de la règle n'a pas été validée par rapport à son schéma et sera ignorée.</translation>
 <translation id="168841957122794586">Le certificat du serveur contient une clé de chiffrement faible.</translation>
 <translation id="1697532407822776718">Vous êtes prêt !</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index 9367159..cad6eceb 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">As páxinas en <ph name="SOURCE_LANGUAGE" /> traduciranse ao <ph name="TARGET_LANGUAGE" /> a partir de agora.</translation>
 <translation id="1676269943528358898">Normalmente, <ph name="SITE" /> encripta a túa información para protexela. Nesta ocasión, cando Google Chrome tentou conectar con <ph name="SITE" />, o sitio web devolveu credenciais estrañas e incorrectas. É posible que un atacante tentase facerse pasar por <ph name="SITE" /> ou que a pantalla de inicio de sesión de wifi interrompese a conexión. Non obstante, a túa información segue a salvo porque Google Chrome detivo a conexión antes de intercambiar datos.</translation>
 <translation id="1682696192498422849">Co bordo curto primeiro</translation>
+<translation id="168693727862418163">Non puido cotexarse o valor desta política co seu esquema para levar a cabo a súa validación, así que se ignorará.</translation>
 <translation id="168841957122794586">O certificado do servidor contén unha clave criptográfica non segura.</translation>
 <translation id="1697532407822776718">Listo!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 1e277c4a..411a6f9 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">હવેથી <ph name="SOURCE_LANGUAGE" />માં છે તે પેજનો અનુવાદ <ph name="TARGET_LANGUAGE" />માં થશે.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> સામાન્ય રીતે તમારી માહિતીને સુરક્ષિત રાખવા માટે એન્ક્રિપ્શનનો ઉપયોગ કરે છે. જ્યારે આ સમયે Google Chrome દ્વારા <ph name="SITE" />થી કનેક્ટ કરવાનો પ્રયાસ થયો, ત્યારે વેબસાઇટે અસામાન્ય અને ખોટા લૉગ ઇન વિગતને પાછા મોકલ્યાં. આવું ત્યારે થઈ શકે જ્યારે કોઈ હુમલાખોર <ph name="SITE" /> હોવાનો ડોળ કરવાનો પ્રયાસ કરી રહ્યો હોય અથવા કોઈ Wi-Fi સાઇન-ઇન સ્ક્રીને કનેક્શનમાં વિક્ષેપ પાડ્યો હોય. તમારી માહિતી હજી પણ સુરક્ષિત છે કારણ કે Google Chrome એ કોઈ પણ ડેટા વિનિમય થાય એ પહેલાં જ કનેક્શન રોકી દીધું.</translation>
 <translation id="1682696192498422849">પહેલાં ટૂંકી કિનારી</translation>
+<translation id="168693727862418163">આ પૉલિસીનું મૂલ્ય તેના સ્કીમા સામે માન્ય કરવામાં નિષ્ફળ ગયું છે અને તેને અવગણવામાં આવશે.</translation>
 <translation id="168841957122794586">સર્વર પ્રમાણપત્ર એક નબળી ક્રિપ્ટોગ્રાફિક કી ધરાવે છે.</translation>
 <translation id="1697532407822776718">તમારું બધું સેટ છે!</translation>
 <translation id="1703835215927279855">અક્ષર</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index ef1ec18..2a561e8 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">अब से <ph name="SOURCE_LANGUAGE" /> भाषा के पेज का अनुवाद <ph name="TARGET_LANGUAGE" /> भाषा में किया जाएगा.</translation>
 <translation id="1676269943528358898">आपकी जानकारी की सुरक्षा करने के लिए <ph name="SITE" /> आम तौर पर, सुरक्षित करने के तरीके (एन्क्रिप्शन) का उपयोग करती है. जब Google Chrome ने इस बार <ph name="SITE" /> से कनेक्ट करने की कोशिश की तो, वेबसाइट ने असामान्य और गलत क्रेडेंशियल वापस भेजे. ऐसा तब हो सकता है जब कोई हमलावर <ph name="SITE" /> होने का दावा करने की कोशिश कर रहा हो या किसी वाई-फ़ाई 'साइन इन स्क्रीन' की वजह से कनेक्शन में खराबी आ गई हो. आपकी जानकारी अभी भी सुरक्षित है क्योंकि किसी भी डेटा को एक्सचेंज करने से पहले ही Google Chrome ने कनेक्शन को रोक दिया था.</translation>
 <translation id="1682696192498422849">शॉर्ट एज फ़र्स्ट</translation>
+<translation id="168693727862418163">इस नीति का मान अपनी स्कीमा के हिसाब से काम नहीं कर सका और इसे अनदेखा किया जाएगा.</translation>
 <translation id="168841957122794586">सर्वर प्रमाणपत्र में कमज़ोर क्रिप्टोग्राफ़िक कुंजी है.</translation>
 <translation id="1697532407822776718">आप बिल्कुल तैयार हैं!</translation>
 <translation id="1703835215927279855">लेटर</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index 33389bf..98d68d4f6 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Odsad će se <ph name="SOURCE_LANGUAGE" /> prevoditi na <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> obično upotrebljava enkripciju radi zaštite vaših podataka. Prilikom ovog pokušaja povezivanja Google Chromea s web-lokacijom <ph name="SITE" /> ta je web-lokacija vratila neuobičajene i netočne vjerodajnice. To može značiti da se neki napadač pokušava predstaviti kao <ph name="SITE" /> ili je zaslon za prijavu na Wi-Fi prekinuo vezu. Vaši su podaci još uvijek sigurni jer je Google Chrome zaustavio povezivanje prije razmjene podataka.</translation>
 <translation id="1682696192498422849">Najprije kratki rub</translation>
+<translation id="168693727862418163">Ova vrijednost pravila nije uspjela potvrditi valjanost sheme i zanemarit će se.</translation>
 <translation id="168841957122794586">Certifikat poslužitelja sadrži slab kriptografski ključ!</translation>
 <translation id="1697532407822776718">Potpuno ste spremni!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 5a0ac2eb..1b91ee3 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">A(z) <ph name="SOURCE_LANGUAGE" /> nyelvű oldalak mostantól le lesznek fordítva <ph name="TARGET_LANGUAGE" /> nyelvre.</translation>
 <translation id="1676269943528358898">A(z) <ph name="SITE" /> webhely rendes esetben titkosítást alkalmaz az Ön adatainak védelme érdekében. Amikor a Google Chrome most csatlakozni próbált, a(z) <ph name="SITE" /> webhely szokatlan és helytelen hitelesítési adatokat küldött vissza. Ez olyankor fordulhat elő, amikor egy támadó megpróbálja magát kiadni a(z) <ph name="SITE" /> webhelynek, vagy valamilyen Wi-Fi-bejelentkezési képernyő megszakította a kapcsolatot. Adatai továbbra is biztonságban vannak, mivel a Google Chrome még azt megelőzően megszakította a kapcsolatot, hogy bármiféle adatcserére sor kerülhetett volna.</translation>
 <translation id="1682696192498422849">Rövid él először</translation>
+<translation id="168693727862418163">A házirend értéke nem egyezik a sémájával, ezért a rendszer figyelmen kívül hagyja.</translation>
 <translation id="168841957122794586">A szervertanúsítvány gyenge titkosítási kulcsot tartalmaz.</translation>
 <translation id="1697532407822776718">Máris elkészült!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index e3a4019..d02512c 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Այսուհետ <ph name="SOURCE_LANGUAGE" /> լեզվով էջերը կթարգմանվեն <ph name="TARGET_LANGUAGE" />:</translation>
 <translation id="1676269943528358898">Ձեր տվյալները պաշտպանելու համար <ph name="SITE" /> կայքը սովորաբար գաղտնագրում է օգտագործում: Google Chrome-ի՝ <ph name="SITE" /> կայքին կապակցվելու փորձի ժամանակ կայքը վերադարձրեց արտասովոր և սխալ մուտքային տվյալներ: Հնարավոր է, որ <ph name="SITE" /> կայքի անվան տակ նենգորդ է հանդես գալիս, կամ Wi-Fi մուտքի էկրանի կապն ընդհատվել է: Ձեր տվյալները, այնուամենայնիվ, ապահով են, քանի որ Google Chrome-ն ընդհատել էր կապը՝ նախքան տեղի կունենար տվյալների փոխանակում:</translation>
 <translation id="1682696192498422849">Կարճ եզրից սկսած</translation>
+<translation id="168693727862418163">Կանոնը կանտեսվի, քանի որ դրա արժեքը չի համապատասխանում սխեմային։</translation>
 <translation id="168841957122794586">Սերվերի վկայագիրը թույլ գաղտնագրման բանալի ունի:</translation>
 <translation id="1697532407822776718">Տեղակայումը բարեհաջող ավարտված է:</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index 312e5750..5634fac 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Mulai sekarang, halaman dalam bahasa <ph name="SOURCE_LANGUAGE" /> akan diterjemahkan ke dalam bahasa <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> biasanya menggunakan enkripsi untuk melindungi informasi Anda. Saat Google Chrome mencoba menyambung ke <ph name="SITE" /> kali ini, situs web mengembalikan kredensial yang salah dan tidak biasa. Hal ini dapat terjadi jika ada penyerang yang berpura-pura menjadi <ph name="SITE" />, atau layar masuk Wi-Fi mengganggu sambungan. Informasi Anda masih aman karena Google Chrome menghentikan sambungan sebelum terjadi pertukaran data apa pun.</translation>
 <translation id="1682696192498422849">Tepi pendek lebih dulu</translation>
+<translation id="168693727862418163">Nilai kebijakan ini gagal memvalidasi skemanya dan akan diabaikan.</translation>
 <translation id="168841957122794586">Sertifikat server berisi kunci kriptografis yang lemah.</translation>
 <translation id="1697532407822776718">Anda sudah siap!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index fbd121c..0cfb92f 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -179,6 +179,7 @@
 <translation id="1676269943528358898"><ph name="SITE" /> notast yfirleitt við dulkóðun til að vernda upplýsingarnar þínar. Þegar Google Chrome reyndi að tengjast <ph name="SITE" /> í þetta skiptið sendi vefsvæðið óvenjuleg
 og röng skilríki til baka. Þetta getur gerst þegar tölvuþrjótur reynir að þykjast vera <ph name="SITE" /> eða innskráningarskjár fyrir Wi-Fi hefur truflað tenginguna. Upplýsingarnar þínar eru enn öruggar vegna þess að Google Chrome sleit tengingunni áður en skipst var á gögnum.</translation>
 <translation id="1682696192498422849">Skammhlið fyrst</translation>
+<translation id="168693727862418163">Ekki tókst að staðfesta gildi þessarar reglu gagnvart skema hennar og hún verður hunsuð.</translation>
 <translation id="168841957122794586">Vottorð netþjónsins inniheldur ótraustan dulmálslykil.</translation>
 <translation id="1697532407822776718">Nú er allt tilbúið!</translation>
 <translation id="1703835215927279855">Bréf</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 91147f1..dfbc5ef 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">D'ora in poi, le pagine in <ph name="SOURCE_LANGUAGE" /> verranno tradotte in <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> in genere utilizza la crittografia per proteggere le tue informazioni. Questa volta, quando Google Chrome ha provato a connettersi a <ph name="SITE" />, il sito web ha restituito credenziali insolite e sbagliate. È possibile che un malintenzionato stia cercando di spacciarsi per il sito <ph name="SITE" /> oppure che una schermata di accesso alla rete Wi-Fi abbia interrotto la connessione. Le tue informazioni sono ancora al sicuro perché Google Chrome ha interrotto la connessione prima che avvenissero scambi di dati.</translation>
 <translation id="1682696192498422849">Prima il lato corto</translation>
+<translation id="168693727862418163">Impossibile convalidare il valore del criterio in base al relativo schema. Il valore verrà ignorato.</translation>
 <translation id="168841957122794586">Il certificato del server contiene una chiave crittografica debole.</translation>
 <translation id="1697532407822776718">Ecco fatto!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index b23437c..6eb0f3b 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642"><ph name="SOURCE_LANGUAGE" /> გვერდები ამიერიდან ითარგმნება შემდეგ ენაზე: <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> დაშიფვრას, ჩვეულებრივ, თქვენი ინფორმაციის დაცვის მიზნით იყენებს. Google Chrome-ის მიერ <ph name="SITE" />-თან დაკავშირების მცდელობისას, ვებსაიტმა ამჯერად უჩვეულო და არასწორი ავტორიზაციის მონაცემები გამოგზავნა. ეს შეიძლება მოხდეს მაშინ, როცა თავდამსხმელი თავს <ph name="SITE" />-ად ასაღებს, ან დაკავშირების შეფერხების მიზეზი Wi-Fi შესვლის ეკრანი გახდა. თქვენი ინფორმაცია დაცულია, რადგან Google Chrome-მა დაკავშირება მონაცემების მიმოცვლამდე შეწყვიტა.</translation>
 <translation id="1682696192498422849">ჯერ მოკლე კიდე</translation>
+<translation id="168693727862418163">წესების ამ მნიშვნელობის სქემის დადასტურება ვერ მოხერხდა, ამიტომ ის უგულებელყოფილი იქნება.</translation>
 <translation id="168841957122794586">სერვერის სერთიფიკატი შეიცავს სუსტ კრიპტოგრაფიულ გასაღებს.</translation>
 <translation id="1697532407822776718">ყველაფერი დაყენებულია!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index eb8fce22..6b60d22 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642"><ph name="SOURCE_LANGUAGE" /> тіліндегі беттер <ph name="TARGET_LANGUAGE" /> тіліне аударылатын болады.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> ақпаратыңызды қорғау үшін әдетте шифрлауды қолданады. Осы жолы Chrome <ph name="SITE" /> сайтына қосылуға әрекет еткенде, веб-сайт әдеттен тыс және қате тіркелгі деректерін жіберді. Бұл жағдай қаскүнем <ph name="SITE" /> болып көрінгісі келгенде немесе Wi-Fi кіру экраны байланысқа кедергі болғанда пайда болуы мүмкін. Ақпаратыңыз қауіпсіз күйде, себебі Google Chrome ешқандай дерек алмасу болмай тұрып байланысты үзді.</translation>
 <translation id="1682696192498422849">Алдымен қысқа беті</translation>
+<translation id="168693727862418163">Бұл саясат мәні осы схемаға қатысты тексерілмеді және ол еленбейді.</translation>
 <translation id="168841957122794586">Сервер сертификаты сенімсіз криптографиялық кілтті қамтиды.</translation>
 <translation id="1697532407822776718">Барлығын орнаттыңыз!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index f08aecb..2921413e 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -179,6 +179,7 @@
 <translation id="1671391448414634642">ទំព័រជា <ph name="SOURCE_LANGUAGE" /> នឹងត្រូវបាន​បកប្រែទៅជា <ph name="TARGET_LANGUAGE" /> ចាប់ពី​ពេលនេះតទៅ។</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> ជាធម្មតាប្រើការអ៊ិនគ្រីបដើម្បីការពារព័ត៌មានរបស់អ្នក។ នៅពេលដែល Google Chrome ព្យាយាមភ្ជាប់ទៅកាន់ <ph name="SITE" /> នៅពេលនេះ នោះគេហទំព័រនឹងផ្ញើត្រឡប់មកវិញនូវព័ត៌មានអត្តសញ្ញាណដែលមិនប្រក្រតី និងមិនត្រឹមត្រូវ។ វាអាចកើតឡើងនៅពេលដែលអ្នកវាយប្រហារកំពុងព្យាយាមក្លែងជា <ph name="SITE" /> ឬនៅពេលដែលអេក្រង់ចូល Wi-Fi បង្កការរំខានដល់ការតភ្ជាប់។ ព័ត៌មានរបស់អ្នកគឺនៅតែមានសុវត្ថិភាពដដែល ពីព្រោះ Google Chrome បានបញ្ឈប់ការតភ្ជាប់នោះ មុនពេលដែលមានការផ្តោះប្តូរទិន្នន័យ។</translation>
 <translation id="1682696192498422849">គែមខ្លី​មុនគេ</translation>
+<translation id="168693727862418163">តម្លៃគោលការណ៍នេះមិនត្រូវនឹងគំនូស​តាងរបស់វាទេ ហើយនឹងមិនត្រូវបានអើពើទេ។</translation>
 <translation id="168841957122794586">វិញ្ញាបនប័ត្រម៉ាស៊ីនមេផ្ទុកសោគ្រីបខ្សោយ។</translation>
 <translation id="1697532407822776718">អ្នកត្រូវបានកំណត់រួចអស់ហើយ!</translation>
 <translation id="1703835215927279855">សំបុត្រ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 218d5b4..d6e1be7 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">지금부터 <ph name="SOURCE_LANGUAGE" />로 된 페이지가 <ph name="TARGET_LANGUAGE" />로 번역됩니다.</translation>
 <translation id="1676269943528358898"><ph name="SITE" />에서는 사용자 정보를 보호하기 위해 일반적으로 암호화를 사용합니다. 이번에 Chrome에서 <ph name="SITE" />에 연결을 시도했을 때 웹사이트에서 비정상적이고 잘못된 사용자 인증 정보를 반환했습니다. 이는 공격자가 <ph name="SITE" />인 것처럼 가장하려고 하거나 Wi-Fi 로그인 화면이 연결을 방해했기 때문일 수 있습니다. 데이터 교환이 발생하기 전에 Chrome에서 연결을 중단했기 때문에 사용자 정보는 안전합니다.</translation>
 <translation id="1682696192498422849">짧은 쪽 먼저</translation>
+<translation id="168693727862418163">이 정책 값은 스키마에 대해 유효성이 확인되지 않았으므로 무시됩니다.</translation>
 <translation id="168841957122794586">서버 인증서에 안전성이 낮은 암호화 키가 포함되어 있습니다.</translation>
 <translation id="1697532407822776718">설정 완료</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index 77c1e19..c31fde4 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Мындан кийин <ph name="SOURCE_LANGUAGE" /> тилиндеги барактар <ph name="TARGET_LANGUAGE" /> тилине которулат.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> сайты маалыматыңызды коргоо үчүн адатта шифрлөөнү колдонот. Google Chrome бул жолу <ph name="SITE" /> сайтына туташууга аракет кылганда, вебсайт адаттан тышкары жана туура эмес эсептик дайындарды жөнөттү. Бул чабуулчу өзүн <ph name="SITE" /> катары көрсөткөнгө аракет кылып жатканда же Wi-Fi'дын кирүү экраны туташууну үзгүлтүккө учуратканда орун алышы мүмкүн. Google Chrome дайындар алмашылганга чейин туташууну үзүп койгондуктан, маалыматыңыздын коопсуздугу бузулган жок.</translation>
 <translation id="1682696192498422849">Биринчи туурасы боюнча</translation>
+<translation id="168693727862418163">Бул саясаттын мааниси схемасына дал келбей калды, андыктан этибарга алынбайт.</translation>
 <translation id="168841957122794586">Сервердин тастыктамасында чабал криптографиялык ачкыч камтылган.</translation>
 <translation id="1697532407822776718">Баары даяр!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 1a554ae5..30083152 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">ລະບົບຈະແປໜ້າ <ph name="SOURCE_LANGUAGE" /> ເປັນ <ph name="TARGET_LANGUAGE" /> ແຕ່ຕອນນີ້ເປັນຕົ້ນໄປ.</translation>
 <translation id="1676269943528358898">ໂດຍປົກກະຕິ <ph name="SITE" /> ໃຊ້ການເຂົ້າລະຫັດເພື່ອປົກປ້ອງຂໍ້ມູນຂອງທ່ານ. ເມື່ອ Google Chrome ພະຍາຍາມເຊື່ອມຕໍ່ກັບ <ph name="SITE" /> ໃນເທື່ອນີ້, ເວັບໄຊດັ່ງກ່າວໄດ້ສົ່ງຂໍ້ມູນປະຈຳຕົວທີ່ຜິດປົກກະຕິ ແລະບໍ່ຖືກຕ້ອງກັບຄືນມາ. ນີ້ອາດເກີດຂຶ້ນເມື່ອມີຜູ້ໂຈມຕີພະຍາຍາມປອມເປັນ <ph name="SITE" /> ຫຼືໜ້າຈໍການເຂົ້າສູ່ລະບົບ Wi-Fi ໄດ້ຂັດຈັງຫວະການເຊື່ອມຕໍ່. ຂໍ້ມູນຂອງທ່ານຍັງປອດໄພຢູ່ ເພາະວ່າ Google Chrome ໄດ້ຢຸດການເຊື່ອມຕໍ່ກ່ອນທີ່ຈະມີການແລກປ່ຽນຂໍ້ມູນ.</translation>
 <translation id="1682696192498422849">ດ້ານຂອບສັ້ນກ່ອນ</translation>
+<translation id="168693727862418163">ກວດຮັບຮອງຄ່ານະໂຍບາຍນີ້ທຽບກັບຮູບແບບຂອງມັນບໍ່ສຳເລັດ ແລະ ຈະຖືກລະເລີຍ.</translation>
 <translation id="168841957122794586">ໃບຢັ້ງຢືນເຊີບເວີມີລະຫັດ cryptographic ທີ່ອ່ອນ.</translation>
 <translation id="1697532407822776718">ທ່ານຕັ້ງຮຽບຮ້ອຍໝົດແລ້ວ!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 52b2128b..3854f03 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Turpmāk lapas, kas būs šādā valodā: <ph name="SOURCE_LANGUAGE" />, tiks tulkotas šādā valodā: <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Vietnē <ph name="SITE" /> informācijas aizsargāšanai parasti tiek izmantota šifrēšana. Kad pārlūkā Google Chrome tika mēģināts izveidot savienojumu ar vietni <ph name="SITE" />, šoreiz tā nosūtīja neparastus un nepareizus akreditācijas datus. Iespējams, tas notika, jo uzbrucējs mēģināja uzdoties par vietni <ph name="SITE" />, vai arī Wi-Fi pierakstīšanās ekrāns pārtrauc savienojumu. Jūsu informācija joprojām ir drošībā, jo pārlūks Google Chrome pārtrauca savienojumu, pirms tika veikta jebkādu datu apmaiņa.</translation>
 <translation id="1682696192498422849">Vispirms īsākā mala</translation>
+<translation id="168693727862418163">Šo politikas vērtību neizdevās apstiprināt, izmantojot tās shēmu, un tā tiks ignorēta.</translation>
 <translation id="168841957122794586">Servera sertifikāts ietver vāju kriptogrāfisko atslēgu.</translation>
 <translation id="1697532407822776718">Gatavs!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 0368a63..d9b34203 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Одооноос <ph name="SOURCE_LANGUAGE" /> хэл дээрх хуудсыг <ph name="TARGET_LANGUAGE" /> хэл рүү орчуулна.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> нь ихэвчлэн таны мэдээллийг хамгаалах зорилгоор шифр ашигладаг. Энэ удаад Google Chrome <ph name="SITE" />-тай холбогдохыг оролдоход тус вэб сайтаас хэвийн бус, буруу итгэмжлэл илгээлээ. Халдагч <ph name="SITE" /> юм шиг дүр үзүүлж байгаа эсвэл Wi-Fi-д нэвтрэх дэлгэц холболтод саад учруулсан байж болзошгүй. Google Chrome ямар нэгэн мэдээлэл солилцохоос өмнө холболтыг зогсоосон тул таны мэдээлэл аюулгүй.</translation>
 <translation id="1682696192498422849">Эхлээд богино зах</translation>
+<translation id="168693727862418163">Энэ бодлогын утгыг схемтэй нь тулгаж баталж чадаагүй тул үүнийг үл хэрэгсэнэ.</translation>
 <translation id="168841957122794586">Серверийн гэрчилгээний криптограф түлхүүр нь аюулгүй байдлын хувьд сул байна.</translation>
 <translation id="1697532407822776718">Тохируулга дууссан</translation>
 <translation id="1703835215927279855">Захидал</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 4e9d793..7c9391b 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Halaman dalam <ph name="SOURCE_LANGUAGE" /> akan diterjemah kepada <ph name="TARGET_LANGUAGE" /> bermula dari sekarang.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> biasanya menggunakan penyulitan untuk melindungi maklumat anda. Apabila Google Chrome cuba menyambung ke <ph name="SITE" /> pada kali ini, tapak web tersebut mengembalikan bukti kelayakan yang luar biasa dan salah. Hal ini boleh berlaku apabila penyerang sedang cuba menyamar sebagai <ph name="SITE" /> atau skrin log masuk Wi-Fi telah memutuskan sambungan. Maklumat anda masih selamat kerana Google Chrome menghentikan sambungan sebelum sebarang pertukaran data berlaku.</translation>
 <translation id="1682696192498422849">Sisi pendek dahulu</translation>
+<translation id="168693727862418163">Nilai dasar ini gagal disahkan dengan skemanya dan akan diabaikan.</translation>
 <translation id="168841957122794586">Sijil pelayan mengandungi kunci kriptografi yang lemah.</translation>
 <translation id="1697532407822776718">Anda telah bersedia!</translation>
 <translation id="1703835215927279855">Surat</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index 2bc07b1..6d4870e 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -179,6 +179,7 @@
 <translation id="1676269943528358898"><ph name="SITE" /> သည် သင်၏ အချက်အလက်များကို ကာကွယ်ပေးရန် ပုံမှန်အားဖြင့် လျှို့ဝှက်ကုဒ်သွင်းမှုကို အသုံးပြုပါသည်။ Google Chrome က <ph name="SITE" /> 
 အား ယခုဆက်သွယ်ရန် ကြိုးပမ်းစဉ်၊ ဝဘ်ဆိုက်သည် ပုံမှန် မဟုတ်သည့် မမှန်သည့် အထောက်အထားများကို ပြန်ပို့ပေးခဲ့သည်။ တိုက်ခိုက်သူ တစ်ဦးက <ph name="SITE" />ကြိုးစားနေသည်၊ သို့မဟုတ် ကြိုးမဲ့ လက်မှတ်ထိုး ဝင်ရေး မျက်နှာပြင် တစ်ခုက ချိတ်ဆက်မှုကို ဖြတ်တောက် ပစ်ခဲ့သည်။ မည်သည့် ဒေတာကိုမှ ဖလှယ်ခင် Chrome က ချိတ်ဆက်မှုကို ရပ်ပစ်ခဲ့၍ သင်၏ အချက်အလက်များ လုံခြုံစွာ ရှိနေကြပါသည်။</translation>
 <translation id="1682696192498422849">တိုသည့်အနားနှင့် စတင်ရန်</translation>
+<translation id="168693727862418163">ဤမူဝါဒသည် ၎င်း၏ စီမံချက်နှင့်တိုက်၍ အချက်အလက်များကို အတည်ပြု၍မရသောကြောင့် လျစ်လျူရှုသွားပါမည်။</translation>
 <translation id="168841957122794586">ဆာဗာ အသိမှတ်ပြုလက်မှတ်တွင် အားနည်းသည့် ကုဒ်ရေးခြင်းကီး ပါဝင်နေသည်!</translation>
 <translation id="1697532407822776718">သင်သည် အားလုံးကို သတ်မှတ်ပြီးသွားပြီ!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index bef4961..f249eb6 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Pagina's in het <ph name="SOURCE_LANGUAGE" /> worden vanaf nu vertaald naar het <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> gebruikt gewoonlijk versleuteling om je gegevens te beschermen. Toen Google Chrome deze keer probeerde verbinding te maken met <ph name="SITE" />, retourneerde de website ongewone en onjuiste inloggegevens. Dit kan gebeuren als een aanvaller probeert zich als <ph name="SITE" /> voor te doen of als een wifi-inlogscherm de verbinding heeft verbroken. Je gegevens zijn nog steeds beveiligd omdat Google Chrome de verbinding heeft beëindigd voordat er gegevens konden worden uitgewisseld.</translation>
 <translation id="1682696192498422849">Korte zijde eerst</translation>
+<translation id="168693727862418163">Deze beleidswaarde kan niet worden gevalideerd op basis van het bijbehorende schema en wordt genegeerd.</translation>
 <translation id="168841957122794586">Het servercertificaat bevat een zwakke cryptografische sleutel.</translation>
 <translation id="1697532407822776718">Je bent nu klaar!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 80fcc05..c90920ca 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Fra nå av oversettes sider på <ph name="SOURCE_LANGUAGE" /> til <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> bruker vanligvis kryptering for å beskytte informasjonen din. Da Chrome prøvde å koble til <ph name="SITE" /> denne gangen, sendte nettstedet tilbake uvanlig og feil legitimasjon. Dette kan skje hvis en angriper prøver å utgi seg for å være <ph name="SITE" />, eller hvis en Wi-Fi-påloggingsskjerm har avbrutt tilkoblingen. Informasjonen din er likevel sikker fordi Chrome stoppet tilkoblingen før det ble utvekslet noen data.</translation>
 <translation id="1682696192498422849">Kortsiden først</translation>
+<translation id="168693727862418163">Denne regelverdien kunne ikke valideres mot oppsettet og blir derfor ignorert.</translation>
 <translation id="168841957122794586">Tjenersertifikatet inneholder en svak kryptografisk nøkkel.</translation>
 <translation id="1697532407822776718">Da er alt klart!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 1961d9d..50c008e 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Od teraz strony, których językiem jest <ph name="SOURCE_LANGUAGE" />, będą tłumaczone na <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> zazwyczaj używa szyfrowania do ochrony Twoich informacji. Gdy tym razem Google Chrome próbował połączyć się ze stroną <ph name="SITE" />, odesłała ona nietypowe i nieprawidłowe dane logowania. Może się tak zdarzyć, gdy pod stronę <ph name="SITE" /> podszywa się atakująca osoba albo gdy ekran logowania do sieci Wi-Fi przerwie połączenie. Twoje informacje są nadal bezpieczne, bo połączenie w Google Chrome zakończyło się przed wymianą jakichkolwiek danych.</translation>
 <translation id="1682696192498422849">Najpierw krótsza krawędź</translation>
+<translation id="168693727862418163">Nie udało się zweryfikować tej wartości zasady względem jej schematu. Będzie ona ignorowana.</translation>
 <translation id="168841957122794586">Certyfikat serwera ma słaby klucz kryptograficzny.</translation>
 <translation id="1697532407822776718">Wszystko gotowe.</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index a6f2b0ca..06a53a99 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">As páginas em <ph name="SOURCE_LANGUAGE" /> serão traduzidas para <ph name="TARGET_LANGUAGE" /> a partir de agora.</translation>
 <translation id="1676269943528358898">Normalmente, o site <ph name="SITE" /> utiliza a encriptação para proteger as suas informações. Quando o Google Chrome tentou estabelecer ligação a <ph name="SITE" /> desta vez, o Website devolveu credenciais invulgares e incorretas. Isto pode acontecer quando um utilizador mal intencionado tenta simular ser <ph name="SITE" /> ou quando um ecrã de início de sessão Wi-Fi interrompe a ligação. As suas informações continuam seguras porque o Google Chrome interrompeu a ligação antes de qualquer troca de dados.</translation>
 <translation id="1682696192498422849">Margem estreita primeiro</translation>
+<translation id="168693727862418163">Ocorreu um erro na validação desta política em relação ao respetivo esquema e a mesma será ignorada.</translation>
 <translation id="168841957122794586">O certificado do servidor contém uma chave criptográfica fraca.</translation>
 <translation id="1697532407822776718">O processo está concluído!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 7b70563..19449e5 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Страницы на этом языке (<ph name="SOURCE_LANGUAGE" />) будут автоматически переводиться на <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">На сайте <ph name="SITE" /> для защиты ваших данных обычно используется шифрование. Однако учетные данные, которые мы получили от сайта <ph name="SITE" /> сейчас, отличаются от тех, которые он отправляет обычно. Вероятно, вредоносный сайт пытается выдать себя за <ph name="SITE" />, либо страница подключения к сети Wi-Fi прервала соединение. Ваша информация по-прежнему в безопасности, так как браузер Google Chrome разорвал соединение до того, как произошел обмен данными.</translation>
 <translation id="1682696192498422849">Начиная с короткого края</translation>
+<translation id="168693727862418163">Значение правила не соответствует схеме и будет проигнорировано.</translation>
 <translation id="168841957122794586">Сертификат сервера содержит ненадежный криптографический ключ.</translation>
 <translation id="1697532407822776718">Готово!</translation>
 <translation id="1703835215927279855">Letter</translation>
@@ -869,7 +870,7 @@
 <translation id="4708268264240856090">Соединение прервано</translation>
 <translation id="4712404868219726379">Windows Hello</translation>
 <translation id="4722547256916164131"><ph name="BEGIN_LINK" />Выполните диагностику сети в Windows<ph name="END_LINK" /></translation>
-<translation id="4726672564094551039">Повторно загрузить политики</translation>
+<translation id="4726672564094551039">Повторно загрузить правила</translation>
 <translation id="4728558894243024398">Платформа</translation>
 <translation id="4731638775147756694">Приложение заблокировано администратором.</translation>
 <translation id="4731967714531604179">Prc2 (конверт)</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index ad8a4e9..6042ae23 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Stránky v jazyku <ph name="SOURCE_LANGUAGE" /> budú odteraz prekladané do jazyka <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Web <ph name="SITE" /> zvyčajne chráni vaše informácie pomocou šifrovania. Keď sa Chrome tentokrát pokúsil pripojiť k webu <ph name="SITE" />, odoslal späť nezvyčajné a nesprávne poverenia. Môže sa to stať vtedy, keď sa za web <ph name="SITE" /> snaží vydávať útočník alebo keď pripojenie preruší prihlasovacia obrazovka siete Wi‑Fi. Vaše informácie sú stále zabezpečené, pretože Chrome zastavil pripojenie ešte pred výmenou dát.</translation>
 <translation id="1682696192498422849">Napred krátkym okrajom</translation>
+<translation id="168693727862418163">Túto hodnotu pravidla sa nepodarilo v jeho schéme overiť a bude ignorovaná.</translation>
 <translation id="168841957122794586">Certifikát servera obsahuje slabý kryptografický kľúč.</translation>
 <translation id="1697532407822776718">Všetko je nastavené!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index 8dd23d9..cfc0cbc 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Strani v jeziku <ph name="SOURCE_LANGUAGE" /> bodo odslej prevedene v jezik <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898">Spletno mesto <ph name="SITE" /> za zaščito vaših podatkov običajno uporablja šifriranje. Ko se je Google Chrome tokrat poskusil povezati s spletnim mestom <ph name="SITE" />, je to vrnilo nenavadne in nepravilne poverilnice. Do tega lahko pride, če se napadalec lažno predstavlja za spletno mesto <ph name="SITE" /> ali če je povezavo prekinil zaslon za prijavo v omrežje Wi-Fi. Vaši podatki so še vedno varni, saj je Google Chrome pred izmenjavo podatkov prekinil povezavo.</translation>
 <translation id="1682696192498422849">Najprej kratki rob</translation>
+<translation id="168693727862418163">Preverjanje vrednosti tega pravilnika v skladu z njegovo shemo ni uspelo in bo prezrta.</translation>
 <translation id="168841957122794586">Potrdilo strežnika vsebuje šibek šifrirni ključ.</translation>
 <translation id="1697532407822776718">Pripravljeni ste.</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index a5297b5..239514a 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Stranice na jeziku <ph name="SOURCE_LANGUAGE" /> se od sada prevode na <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> obično koristi šifrovanje da bi zaštitio informacije. Kada je Google Chrome ovog puta pokušao da se poveže sa <ph name="SITE" />, veb-sajt je vratio neobične i netačne akreditive. Ili napadač pokušava da se predstavi kao <ph name="SITE" /> ili je ekran za Wi-Fi prijavljivanje prekinuo vezu. Informacije su i dalje bezbedne zato što je Google Chrome prekinuo vezu pre nego što su razmenjeni bilo kakvi podaci.</translation>
 <translation id="1682696192498422849">Prvo kratka ivica</translation>
+<translation id="168693727862418163">Validacija šeme ove vrednosti za smernice nije uspela i zanemariće se.</translation>
 <translation id="168841957122794586">Sertifikat servera sadrži slab kriptografski ključ.</translation>
 <translation id="1697532407822776718">Spremni ste!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index e476399..42055fc 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Странице на језику <ph name="SOURCE_LANGUAGE" /> се од сада преводе на <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> обично користи шифровање да би заштитио информације. Када је Google Chrome овог пута покушао да се повеже са <ph name="SITE" />, веб-сајт је вратио необичне и нетачне акредитиве. Или нападач покушава да се представи као <ph name="SITE" /> или је екран за Wi-Fi пријављивање прекинуо везу. Информације су и даље безбедне зато што је Google Chrome прекинуо везу пре него што су размењени било какви подаци.</translation>
 <translation id="1682696192498422849">Прво кратка ивица</translation>
+<translation id="168693727862418163">Валидација шеме ове вредности за смернице није успела и занемариће се.</translation>
 <translation id="168841957122794586">Сертификат сервера садржи слаб криптографски кључ.</translation>
 <translation id="1697532407822776718">Спремни сте!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index a07b249..091b841 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">Sidor på <ph name="SOURCE_LANGUAGE" /> översätts till <ph name="TARGET_LANGUAGE" /> från och med nu.</translation>
 <translation id="1676269943528358898">På <ph name="SITE" /> används vanligtvis kryptering (SSL) för att skydda din information. När Chrome försökte ansluta till <ph name="SITE" /> den här gången skickade webbplatsen tillbaka ovanliga och felaktiga uppgifter. Sådant kan hända när en angripare utger sig för att vara <ph name="SITE" /> eller när anslutningen har avbrutits av en Wi-Fi-inloggningsskärm. Din information är fortfarande säker eftersom Chrome avbröt anslutningen innan någon data utbyttes.</translation>
 <translation id="1682696192498422849">Kortsidan först</translation>
+<translation id="168693727862418163">Principen ignoreras eftersom den inte gick att validera mot schemat.</translation>
 <translation id="168841957122794586">Servercertifikatet innehåller en svag kryptografisk nyckel.</translation>
 <translation id="1697532407822776718">Färdigt!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 41d42d2..8ee8c02 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642"><ph name="SOURCE_LANGUAGE" /> மொழியிலுள்ள பக்கங்கள் இப்போது முதல் <ph name="TARGET_LANGUAGE" /> மொழியில் மொழிபெயர்க்கப்படும்.</translation>
 <translation id="1676269943528358898">வழக்கமாக, <ph name="SITE" /> உங்கள் தகவலைப் பாதுகாப்பதற்காக என்க்ரிப்ஷனைப் பயன்படுத்துகிறது. இந்த முறை <ph name="SITE" /> உடன் இணைவதற்கு Google Chrome முயற்சித்தபோது வழக்கத்திற்கு மாறான மற்றும் தவறான நற்சான்றிதழ்களை இணையதளம் வழங்கியது. தாக்குபவர் தன்னை <ph name="SITE" /> ஆகக் காட்ட முயற்சிக்கும் போது அல்லது இணைப்பை வைஃபை உள்நுழைவுத் திரை குறுக்கிடும் போது இது ஏற்படலாம். இருப்பினும், தரவு எதுவும் பரிமாற்றப்படுவதற்கு முன் Google Chrome இணைப்பை நிறுத்தியதால் உங்கள் தகவல் பாதுகாப்பாகவே இருக்கிறது.</translation>
 <translation id="1682696192498422849">குறுகிய ஓரம் முதலில்</translation>
+<translation id="168693727862418163">இந்தக் கொள்கை, அதன் திட்டப்பணித் தரவை மதிப்பாய்வு செய்யத் தவறியதால் புறக்கணிக்கப்படும்.</translation>
 <translation id="168841957122794586">சேவையக சான்றிதழில் வலுவற்ற குறியீட்டாக்க விசை இருக்கிறது.</translation>
 <translation id="1697532407822776718">எல்லாவற்றையும் அமைத்துவிட்டீர்கள்!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index ec29b816..5239600 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642"><ph name="SOURCE_LANGUAGE" /> dilindeki sayfalar artık <ph name="TARGET_LANGUAGE" /> diline çevrilecek</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> normalde bilgilerinizi korumak için şifreleme kullanmaktadır. Google Chrome bu sefer <ph name="SITE" /> sitesine bağlanmayı denediğinde, web sitesi sıra dışı ve yanlış kimlik bilgileri döndürdü. Bir saldırgan <ph name="SITE" /> gibi davranmaya çalışıyor olabilir ya da bir Kablosuz oturum açma ekranı bağlantıyı kesmiştir. Google Chrome herhangi bir veri alışverişinden önce bağlantıyı durdurduğu için bilgileriniz hâlâ güvendedir.</translation>
 <translation id="1682696192498422849">Önce kısa kenar</translation>
+<translation id="168693727862418163">Bu politika değeri, şemasına göre doğrulanamadı, yok sayılacak.</translation>
 <translation id="168841957122794586">Sunucu sertifikasında zayıf bir şifreleme anahtarı var.</translation>
 <translation id="1697532407822776718">Artık hazırsınız!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index 407e878e..c74d11a3 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -179,6 +179,7 @@
 <translation id="1676269943528358898">‏<ph name="SITE" /> عام طور پر آپ کی معلومات کے تحفظ کیلئے مرموز کاری کا استعمال کرتی ہے۔ اس بار جب Google Chrome نے <ph name="SITE" /> سے منسلک ہونے کی کوشش کی تو ویب سائٹ
 نے خلاف معمول اور غلط اسناد واپس بھیجے۔ یہ اس وقت ہو سکتا ہے جب کوئی حملہ آور <ph name="SITE" /> بننے کا بھیس بنا رہا ہو یا ایک Wi-Fi سائن ان اسکرین نے کنکشن میں خلل ڈالا ہو۔ آپ کی معلومات اب بھی محفوظ ہے کیونکہ Google Chrome نے کسی ڈیٹا کا تبادلہ ہونے سے پہلے کنکشن روک دیا۔</translation>
 <translation id="1682696192498422849">چھوٹا کنارہ پہلے</translation>
+<translation id="168693727862418163">اس پالیسی کی قدر اس کے سکیما کو توثیق کرنے میں ناکام ہو گئی اور اسے نظر انداز کر دی جائے گی۔</translation>
 <translation id="168841957122794586">سرور سرٹیفکیٹ میں ایک ہفتے کی کرپٹوگرافک کلید شامل ہے۔</translation>
 <translation id="1697532407822776718">آپ بالکل ٹھیک ہیں!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 9bff705..c597ea1 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">从现在开始,<ph name="SOURCE_LANGUAGE" />网页一律会被翻译成<ph name="TARGET_LANGUAGE" />。</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> 通常会使用加密技术来保护您的信息。Google Chrome 此次尝试连接到 <ph name="SITE" /> 时,此网站发回了异常的错误凭据。这可能是因为有攻击者在试图冒充 <ph name="SITE" />,或 Wi-Fi 登录屏幕中断了此次连接。请放心,您的信息仍然是安全的,因为 Google Chrome 尚未进行任何数据交换便停止了连接。</translation>
 <translation id="1682696192498422849">短边先入</translation>
+<translation id="168693727862418163">此政策值未能根据其架构进行验证,因此会被忽略。</translation>
 <translation id="168841957122794586">服务器证书包含弱加密密钥。</translation>
 <translation id="1697532407822776718">搞定了!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index 961114cc..51163d7 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">從現在開始,來源語言為<ph name="SOURCE_LANGUAGE" />的網頁一律會翻譯成<ph name="TARGET_LANGUAGE" />。</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> 通常會透過加密方式保護您的資料。Google Chrome 這次嘗試連線至 <ph name="SITE" /> 時,該網站傳回異常且錯誤的憑證。這可能是因為有攻擊者試圖偽裝成 <ph name="SITE" />,或 Wi-Fi 登入畫面導致連線中斷。請放心,Google Chrome 未有交換任何資料並已終止連線,所以您的資料仍然安全。</translation>
 <translation id="1682696192498422849">先從短邊開始</translation>
+<translation id="168693727862418163">此政策的值未通過其綱要的驗證,因此會被忽略。</translation>
 <translation id="168841957122794586">伺服器憑證含有防護力薄弱的加密編譯金鑰。</translation>
 <translation id="1697532407822776718">大功告成!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index a874c3ab..0398691 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -178,6 +178,7 @@
 <translation id="1671391448414634642">從現在起,系統會將<ph name="SOURCE_LANGUAGE" />網頁翻譯成<ph name="TARGET_LANGUAGE" />。</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> 通常使用加密方式保護您的資訊。但 Google Chrome 這次嘗試連線到 <ph name="SITE" /> 時,該網站傳回了異常且錯誤的憑證。這可能是因為有攻擊者企圖偽裝成 <ph name="SITE" />,或是受到 Wi-Fi 登入畫面影響而造成連線中斷。不過請放心,Google Chrome 已及時停止連線,並未傳輸任何資料,因此您的資訊仍然安全無虞。</translation>
 <translation id="1682696192498422849">先從短邊開始</translation>
+<translation id="168693727862418163">這項政策的值未通過其結構定義的驗證,因此會遭到忽略。</translation>
 <translation id="168841957122794586">伺服器憑證含有防護力薄弱的加密編譯金鑰。</translation>
 <translation id="1697532407822776718">大功告成!</translation>
 <translation id="1703835215927279855">Letter</translation>
diff --git a/components/sync_sessions/sessions_global_id_mapper.cc b/components/sync_sessions/sessions_global_id_mapper.cc
index 573e4be..0b8a101 100644
--- a/components/sync_sessions/sessions_global_id_mapper.cc
+++ b/components/sync_sessions/sessions_global_id_mapper.cc
@@ -6,7 +6,6 @@
 
 #include <utility>
 
-#include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
 
 namespace sync_sessions {
@@ -18,14 +17,6 @@
 // When we clean up navigation tracking, delete this many global_ids.
 const int kNavigationTrackingCleanupAmount = 10;
 
-// Used to record conflict information into histogram Sync.GlobalIdConflict.
-enum SyncGlobalIdConflict {
-  CONFLICT = 0,
-  NO_CONFLICT_NEW_ID,
-  NO_CONFLICT_SAME_IDS,
-  CONFLICT_MAX,
-};
-
 }  // namespace
 
 SessionsGlobalIdMapper::SessionsGlobalIdMapper() = default;
@@ -64,17 +55,7 @@
 
   DCHECK_NE(0, unique_id);
 
-  auto g2u_iter = global_to_unique_.find(global_id);
-  if (g2u_iter == global_to_unique_.end()) {
-    global_to_unique_.insert(g2u_iter, std::make_pair(global_id, unique_id));
-    UMA_HISTOGRAM_ENUMERATION("Sync.GlobalIdConflict", NO_CONFLICT_NEW_ID,
-                              CONFLICT_MAX);
-  } else if (g2u_iter->second != unique_id) {
-    UMA_HISTOGRAM_ENUMERATION("Sync.GlobalIdConflict", CONFLICT, CONFLICT_MAX);
-  } else {
-    UMA_HISTOGRAM_ENUMERATION("Sync.GlobalIdConflict", NO_CONFLICT_SAME_IDS,
-                              CONFLICT_MAX);
-  }
+  global_to_unique_.emplace(global_id, unique_id);
 
   auto u2g_iter = unique_to_current_global_.find(unique_id);
   if (u2g_iter == unique_to_current_global_.end()) {
diff --git a/components/ukm/ukm_reporting_service.cc b/components/ukm/ukm_reporting_service.cc
index 0b23f3a..8beedce 100644
--- a/components/ukm/ukm_reporting_service.cc
+++ b/components/ukm/ukm_reporting_service.cc
@@ -62,12 +62,13 @@
                                          PrefService* local_state)
     : ReportingService(client, local_state, kMaxLogRetransmitSize),
       unsent_log_store_(std::make_unique<ukm::UnsentLogStoreMetricsImpl>(),
-                      local_state,
-                      prefs::kUkmUnsentLogStore,
-                      kMinUnsentLogCount,
-                      kMinUnsentLogBytes,
-                      kMaxLogRetransmitSize,
-                      client->GetUploadSigningKey()) {}
+                        local_state,
+                        prefs::kUkmUnsentLogStore,
+                        nullptr,
+                        kMinUnsentLogCount,
+                        kMinUnsentLogBytes,
+                        kMaxLogRetransmitSize,
+                        client->GetUploadSigningKey()) {}
 
 UkmReportingService::~UkmReportingService() {}
 
diff --git a/components/ukm/ukm_service.cc b/components/ukm/ukm_service.cc
index 337cf3fa..64484ac 100644
--- a/components/ukm/ukm_service.cc
+++ b/components/ukm/ukm_service.cc
@@ -156,7 +156,8 @@
 
     // Replace the compressed log in the store by its filtered version.
     const std::string old_compressed_log_data =
-        ukm_log_store->ReplaceLogAtIndex(index, reserialized_log_data);
+        ukm_log_store->ReplaceLogAtIndex(index, reserialized_log_data,
+                                         base::nullopt);
 
     // Reached here only if extensions were found in the log, so data should now
     // be different after filtering.
@@ -395,7 +396,7 @@
 
   std::string serialized_log;
   report.SerializeToString(&serialized_log);
-  reporting_service_.ukm_log_store()->StoreLog(serialized_log);
+  reporting_service_.ukm_log_store()->StoreLog(serialized_log, base::nullopt);
 }
 
 bool UkmService::ShouldRestrictToWhitelistedEntries() const {
diff --git a/components/ukm/ukm_service_unittest.cc b/components/ukm/ukm_service_unittest.cc
index 848bb2b4d..563cdf7 100644
--- a/components/ukm/ukm_service_unittest.cc
+++ b/components/ukm/ukm_service_unittest.cc
@@ -146,10 +146,10 @@
     EXPECT_GE(GetPersistedLogCount(), 1);
     metrics::UnsentLogStore result_unsent_log_store(
         std::make_unique<ukm::UnsentLogStoreMetricsImpl>(), &prefs_,
-        prefs::kUkmUnsentLogStore,
-        3,     // log count limit
-        1000,  // byte limit
-        0, std::string());
+        prefs::kUkmUnsentLogStore, /* meta_data_pref_name= */ nullptr,
+        /* min_log_count= */ 3, /* min_log_bytes= */ 1000,
+        /* max_log_size= */ 0,
+        /* signing_key= */ std::string());
 
     result_unsent_log_store.LoadPersistedUnsentLogs();
     result_unsent_log_store.StageNextLog();
@@ -313,7 +313,7 @@
   // Save the Report to the store.
   std::string serialized_log;
   report.SerializeToString(&serialized_log);
-  unsent_log_store->StoreLog(serialized_log);
+  unsent_log_store->StoreLog(serialized_log, base::nullopt);
 
   // Do extension purging.
   service.PurgeExtensions();
diff --git a/components/user_manager/fake_user_manager.cc b/components/user_manager/fake_user_manager.cc
index a1ecbc1..875a658 100644
--- a/components/user_manager/fake_user_manager.cc
+++ b/components/user_manager/fake_user_manager.cc
@@ -120,6 +120,11 @@
   }
 }
 
+void FakeUserManager::LogoutAllUsers() {
+  primary_user_ = nullptr;
+  active_user_ = nullptr;
+}
+
 void FakeUserManager::UserLoggedIn(const AccountId& account_id,
                                    const std::string& username_hash,
                                    bool browser_restart,
@@ -230,11 +235,11 @@
 }
 
 bool FakeUserManager::IsCurrentUserOwner() const {
-  return false;
+  return is_current_user_owner_;
 }
 
 bool FakeUserManager::IsCurrentUserNew() const {
-  return false;
+  return is_current_user_new_;
 }
 
 bool FakeUserManager::IsCurrentUserNonCryptohomeDataEphemeral() const {
diff --git a/components/user_manager/fake_user_manager.h b/components/user_manager/fake_user_manager.h
index 1641beeb..3a2b796 100644
--- a/components/user_manager/fake_user_manager.h
+++ b/components/user_manager/fake_user_manager.h
@@ -39,7 +39,15 @@
   virtual const user_manager::User* AddPublicAccountUser(
       const AccountId& account_id);
 
+  void LogoutAllUsers();
+
   void set_local_state(PrefService* local_state) { local_state_ = local_state; }
+  void set_is_current_user_new(bool is_current_user_new) {
+    is_current_user_new_ = is_current_user_new;
+  }
+  void set_is_current_user_owner(bool is_current_user_owner) {
+    is_current_user_owner_ = is_current_user_owner;
+  }
 
   // UserManager overrides.
   const UserList& GetUsers() const override;
@@ -170,6 +178,9 @@
   // stub. Always empty.
   gfx::ImageSkia empty_image_;
 
+  bool is_current_user_owner_ = false;
+  bool is_current_user_new_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(FakeUserManager);
 };
 
diff --git a/components/user_manager/known_user.cc b/components/user_manager/known_user.cc
index 32beb1d..a76a295 100644
--- a/components/user_manager/known_user.cc
+++ b/components/user_manager/known_user.cc
@@ -80,6 +80,10 @@
 // Key of the boolean flag telling if user is managed.
 const char kIsManaged[] = "is_managed";
 
+// Key of the last input method user used which is suitable for login/lock
+// screen.
+const char kLastInputMethod[] = "last_input_method";
+
 // List containing all the known user preferences keys.
 const char* kReservedKeys[] = {kCanonicalEmail,
                                kGAIAIdKey,
@@ -96,7 +100,9 @@
                                kIsEphemeral,
                                kChallengeResponseKeys,
                                kLastOnlineSignin,
-                               kOfflineSigninLimit};
+                               kOfflineSigninLimit,
+                               kIsManaged,
+                               kLastInputMethod};
 
 PrefService* GetLocalState() {
   if (!UserManager::IsInitialized())
@@ -659,6 +665,16 @@
   return false;
 }
 
+void SetUserLastInputMethod(const AccountId& account_id,
+                            const std::string& input_method) {
+  SetStringPref(account_id, kLastInputMethod, input_method);
+}
+
+bool GetUserLastInputMethod(const AccountId& account_id,
+                            std::string* input_method) {
+  return GetStringPref(account_id, kLastInputMethod, input_method);
+}
+
 void RemovePrefs(const AccountId& account_id) {
   PrefService* local_state = GetLocalState();
 
diff --git a/components/user_manager/known_user.h b/components/user_manager/known_user.h
index df34996..bc5e5fe 100644
--- a/components/user_manager/known_user.h
+++ b/components/user_manager/known_user.h
@@ -232,6 +232,13 @@
 
 bool USER_MANAGER_EXPORT GetIsManaged(const AccountId& account_id);
 
+void USER_MANAGER_EXPORT
+SetUserLastInputMethod(const AccountId& account_id,
+                       const std::string& input_method);
+
+bool USER_MANAGER_EXPORT GetUserLastInputMethod(const AccountId& account_id,
+                                                std::string* input_method);
+
 // Removes all user preferences associated with |account_id|.
 // Not exported as code should not be calling this outside this component
 void RemovePrefs(const AccountId& account_id);
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 54e373e..d928fac 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1367,6 +1367,8 @@
     "renderer_host/direct_manipulation_event_handler_win.h",
     "renderer_host/direct_manipulation_helper_win.cc",
     "renderer_host/direct_manipulation_helper_win.h",
+    "renderer_host/display_feature.cc",
+    "renderer_host/display_feature.h",
     "renderer_host/display_util.cc",
     "renderer_host/display_util.h",
     "renderer_host/dwrite_font_file_util_win.cc",
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 041b1ad4..264b6609 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -770,10 +770,11 @@
 }
 
 int BrowserMainLoop::PreCreateThreads() {
+  TRACE_EVENT0("startup", "BrowserMainLoop::PreCreateThreads");
+
   // Make sure no accidental call to initialize GpuDataManager earlier.
   DCHECK(!GpuDataManagerImpl::Initialized());
   if (parts_) {
-    TRACE_EVENT0("startup", "BrowserMainLoop::CreateThreads:PreCreateThreads");
 
     result_code_ = parts_->PreCreateThreads();
   }
@@ -786,7 +787,7 @@
   // but must be created on the main thread. The service ctor is
   // inexpensive and does not invoke the io_thread() accessor.
   {
-    TRACE_EVENT0("startup", "BrowserMainLoop::CreateThreads:PluginService");
+    TRACE_EVENT0("startup", "BrowserMainLoop::PluginService");
     PluginService::GetInstance()->Init();
   }
 #endif
@@ -966,8 +967,7 @@
 #endif
 
   if (parts_) {
-    TRACE_EVENT0("startup",
-                 "BrowserMainLoop::CreateThreads:PreMainMessageLoopRun");
+    TRACE_EVENT0("startup", "BrowserMainLoop::PreMainMessageLoopRun");
 
     parts_->PreMainMessageLoopRun();
   }
@@ -993,18 +993,12 @@
 }
 
 void BrowserMainLoop::RunMainMessageLoopParts() {
-  // Don't use the TRACE_EVENT0 macro because the tracing infrastructure doesn't
-  // expect synchronous events around the main loop of a thread.
-  TRACE_EVENT_ASYNC_BEGIN0("toplevel", "BrowserMain:MESSAGE_LOOP", this);
-
   bool ran_main_loop = false;
   if (parts_)
     ran_main_loop = parts_->MainMessageLoopRun(&result_code_);
 
   if (!ran_main_loop)
     MainMessageLoopRun();
-
-  TRACE_EVENT_ASYNC_END0("toplevel", "BrowserMain:MESSAGE_LOOP", this);
 }
 
 void BrowserMainLoop::ShutdownThreadsAndCleanUp() {
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index ddf319a..20b34f71 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -66,6 +66,7 @@
 #include "content/common/navigation_params.h"
 #include "content/common/navigation_params_mojom_traits.h"
 #include "content/common/navigation_params_utils.h"
+#include "content/common/state_transitions.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -750,15 +751,14 @@
       std::move(commit_params), browser_initiated,
       false /* from_begin_navigation */, false /* is_for_commit */, frame_entry,
       entry, std::move(navigation_ui_data), mojo::NullAssociatedRemote(),
-      mojo::NullRemote(), rfh_restored_from_back_forward_cache));
+      mojo::NullRemote(), rfh_restored_from_back_forward_cache,
+      initiator_routing_id));
 
   if (frame_entry) {
     navigation_request->blob_url_loader_factory_ =
         frame_entry->blob_url_loader_factory();
   }
 
-  navigation_request->initiator_routing_id_ = initiator_routing_id;
-
   if (navigation_request->common_params().url.SchemeIsBlob() &&
       !navigation_request->blob_url_loader_factory_) {
     // If this navigation entry came from session history then the blob factory
@@ -841,6 +841,14 @@
           frame_tree_node->pending_frame_policy(),
           std::vector<std::string>() /* force_enabled_origin_trials */);
 
+  // CreateRendererInitiated() should only be triggered when the navigation is
+  // initiated by a frame in the same process.
+  // TODO(https://crbug.com/1074464): Find a way to DCHECK that the routing ID
+  // is from the current RFH.
+  GlobalFrameRoutingId initiator_routing_id(
+      frame_tree_node->current_frame_host()->GetProcess()->GetID(),
+      begin_params->initiator_routing_id);
+
   std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest(
       frame_tree_node, std::move(common_params), std::move(begin_params),
       std::move(commit_params),
@@ -850,8 +858,8 @@
       nullptr, entry,
       nullptr,  // navigation_ui_data
       std::move(navigation_client), std::move(navigation_initiator),
-      nullptr  // rfh_restored_from_back_forward_cache
-      ));
+      nullptr,  // rfh_restored_from_back_forward_cache
+      initiator_routing_id));
   navigation_request->blob_url_loader_factory_ =
       std::move(blob_url_loader_factory);
   navigation_request->prefetched_signed_exchange_cache_ =
@@ -859,13 +867,6 @@
   navigation_request->web_bundle_handle_tracker_ =
       std::move(web_bundle_handle_tracker);
 
-  // CreateRendererInitiated() should only be triggered when the navigation is
-  // initiated by a frame in the same process.
-  // TODO(https://crbug.com/1074464): Find a way to DCHECK that the routing ID
-  // is from the current RFH.
-  navigation_request->initiator_routing_id_ = GlobalFrameRoutingId(
-      frame_tree_node->current_frame_host()->GetProcess()->GetID(),
-      navigation_request->begin_params()->initiator_routing_id);
   return navigation_request;
 }
 
@@ -933,9 +934,10 @@
       frame_tree_node, std::move(common_params), std::move(begin_params),
       std::move(commit_params), false /* browser_initiated */,
       false /* from_begin_navigation */, true /* is_for_commit */,
-      nullptr /* frame_navigation_entry */, nullptr /* navitation_entry */,
+      nullptr /* frame_navigation_entry */, nullptr /* navigation_entry */,
       nullptr /* navigation_ui_data */, mojo::NullAssociatedRemote(),
-      mojo::NullRemote(), nullptr /* rfh_restored_from_back_forward_cache */));
+      mojo::NullRemote(), nullptr, /* rfh_restored_from_back_forward_cache */
+      {} /* initiator_routing_id */));
 
   navigation_request->web_bundle_navigation_info_ =
       std::move(web_bundle_navigation_info);
@@ -960,7 +962,8 @@
     std::unique_ptr<NavigationUIData> navigation_ui_data,
     mojo::PendingAssociatedRemote<mojom::NavigationClient> navigation_client,
     mojo::PendingRemote<blink::mojom::NavigationInitiator> navigation_initiator,
-    RenderFrameHostImpl* rfh_restored_from_back_forward_cache)
+    RenderFrameHostImpl* rfh_restored_from_back_forward_cache,
+    GlobalFrameRoutingId initiator_routing_id)
     : frame_tree_node_(frame_tree_node),
       is_for_commit_(is_for_commit),
       common_params_(std::move(common_params)),
@@ -969,22 +972,34 @@
       browser_initiated_(browser_initiated),
       navigation_ui_data_(std::move(navigation_ui_data)),
       state_(NOT_STARTED),
-      restore_type_(RestoreType::NONE),
+      restore_type_(entry ? entry->restore_type() : RestoreType::NONE),
+      reload_type_(entry ? entry->reload_type() : ReloadType::NONE),
+      nav_entry_id_(entry ? entry->GetUniqueID() : 0),
       is_view_source_(false),
       bindings_(FrameNavigationEntry::kInvalidBindings),
       response_should_be_rendered_(true),
       associated_site_instance_type_(AssociatedSiteInstanceType::NONE),
       from_begin_navigation_(from_begin_navigation),
       has_stale_copy_in_cache_(false),
-      net_error_(net::OK),
       expected_render_process_host_id_(ChildProcessHost::kInvalidUniqueID),
+      initiator_csp_context_(std::make_unique<InitiatorCSPContext>(
+          std::move(common_params_->initiator_csp_info->initiator_csp),
+          std::move(common_params_->initiator_csp_info->initiator_self_source),
+          std::move(navigation_initiator))),
       devtools_navigation_token_(base::UnguessableToken::Create()),
       request_navigation_client_(mojo::NullAssociatedRemote()),
       commit_navigation_client_(mojo::NullAssociatedRemote()),
       navigation_handle_timing_(std::make_unique<NavigationHandleTiming>()),
       rfh_restored_from_back_forward_cache_(
           rfh_restored_from_back_forward_cache),
-      client_security_state_(network::mojom::ClientSecurityState::New()) {
+      // Store the old RenderFrameHost id at request creation to be used later.
+      previous_render_frame_host_id_(GlobalFrameRoutingId(
+          frame_tree_node->current_frame_host()->GetProcess()->GetID(),
+          frame_tree_node->current_frame_host()->GetRoutingID())),
+      initiator_routing_id_(initiator_routing_id),
+      client_security_state_(network::mojom::ClientSecurityState::New()),
+      previous_page_load_ukm_source_id_(
+          frame_tree_node_->current_frame_host()->GetPageUkmSourceId()) {
   DCHECK(browser_initiated_ || common_params_->initiator_origin.has_value());
   DCHECK(!IsRendererDebugURL(common_params_->url));
   DCHECK(common_params_->method == "POST" || !common_params_->post_data);
@@ -1067,14 +1082,6 @@
     commit_params_->is_browser_initiated = browser_initiated_;
   }
 
-  // Store the old RenderFrameHost id at request creation to be used later.
-  previous_render_frame_host_id_ = GlobalFrameRoutingId(
-      frame_tree_node->current_frame_host()->GetProcess()->GetID(),
-      frame_tree_node->current_frame_host()->GetRoutingID());
-
-  previous_page_load_ukm_source_id_ =
-      frame_tree_node_->current_frame_host()->GetPageUkmSourceId();
-
   // Update the load flags with cache information.
   UpdateLoadFlagsWithCacheFlags(&begin_params_->load_flags,
                                 common_params_->navigation_type,
@@ -1083,9 +1090,6 @@
   // Add necessary headers that may not be present in the
   // mojom::BeginNavigationParams.
   if (entry) {
-    nav_entry_id_ = entry->GetUniqueID();
-    restore_type_ = entry->restore_type();
-    reload_type_ = entry->reload_type();
     // TODO(altimin, crbug.com/933147): Remove this logic after we are done
     // with implementing back-forward cache.
     if (frame_tree_node->IsMainFrame() && entry->back_forward_cache_metrics()) {
@@ -1143,11 +1147,6 @@
 
   begin_params_->headers = headers.ToString();
 
-  initiator_csp_context_.reset(new InitiatorCSPContext(
-      std::move(common_params_->initiator_csp_info->initiator_csp),
-      std::move(common_params_->initiator_csp_info->initiator_self_source),
-      std::move(navigation_initiator)));
-
   navigation_entry_offset_ = EstimateHistoryOffset();
 
   commit_params_->is_browser_initiated = browser_initiated_;
@@ -1205,13 +1204,12 @@
 }
 
 void NavigationRequest::BeginNavigation() {
-  DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE);
   EnterChildTraceEvent("BeginNavigation", this);
   DCHECK(!loader_);
   DCHECK(!render_frame_host_);
   ScopedNavigationRequestCrashKeys crash_keys(this);
 
-  state_ = WILL_START_NAVIGATION;
+  SetState(WILL_START_NAVIGATION);
 
 #if defined(OS_ANDROID)
   base::WeakPtr<NavigationRequest> this_ptr(weak_factory_.GetWeakPtr());
@@ -1341,8 +1339,7 @@
 
 void NavigationRequest::SetWaitingForRendererResponse() {
   EnterChildTraceEvent("WaitingForRendererResponse", this);
-  DCHECK(state_ == NOT_STARTED);
-  state_ = WAITING_FOR_RENDERER_RESPONSE;
+  SetState(WAITING_FOR_RENDERER_RESPONSE);
 }
 
 void NavigationRequest::StartNavigation(bool is_for_commit) {
@@ -1398,7 +1395,7 @@
   }
 
   DCHECK(!IsNavigationStarted());
-  state_ = WILL_START_REQUEST;
+  SetState(WILL_START_REQUEST);
   navigation_handle_id_ = CreateUniqueHandleID();
 
   modified_request_headers_.Clear();
@@ -1464,7 +1461,7 @@
 
   // Reset the state of the NavigationRequest, and the navigation_handle_id.
   StopCommitTimeout();
-  state_ = NOT_STARTED;
+  SetState(NOT_STARTED);
   processing_navigation_throttle_ = false;
   navigation_handle_id_ = 0;
 
@@ -1978,7 +1975,7 @@
   DCHECK(response_head);
   DCHECK(response_head->parsed_headers);
   EnterChildTraceEvent("OnResponseStarted", this);
-  state_ = WILL_PROCESS_RESPONSE;
+  SetState(WILL_PROCESS_RESPONSE);
   response_head_ = std::move(response_head);
   response_body_ = std::move(response_body);
   ssl_info_ = response_head_->ssl_info;
@@ -2385,10 +2382,7 @@
     bool skip_throttles,
     const base::Optional<std::string>& error_page_content,
     bool collapse_frame) {
-  DCHECK(state_ == WILL_START_NAVIGATION || state_ == WILL_START_REQUEST ||
-         state_ == WILL_REDIRECT_REQUEST || state_ == WILL_PROCESS_RESPONSE ||
-         state_ == DID_COMMIT || state_ == CANCELING ||
-         state_ == WILL_FAIL_REQUEST);
+  CheckStateTransition(WILL_FAIL_REQUEST);
   DCHECK(!(status.error_code == net::ERR_ABORTED &&
            error_page_content.has_value()));
   ScopedNavigationRequestCrashKeys crash_keys(this);
@@ -2406,7 +2400,7 @@
   // TODO(https://crbug.com/757633): Check that ssl_info.has_value() if
   // net_error is a certificate error.
   EnterChildTraceEvent("OnRequestFailed", this, "error", status.error_code);
-  state_ = WILL_FAIL_REQUEST;
+  SetState(WILL_FAIL_REQUEST);
   processing_navigation_throttle_ = false;
 
   // Ensure the pending entry also gets discarded if it has no other active
@@ -2610,9 +2604,9 @@
             .application_cache_enabled) {
       // The final process id won't be available until
       // NavigationRequest::ReadyToCommitNavigation.
-      appcache_handle_.reset(new AppCacheNavigationHandle(
+      appcache_handle_ = std::make_unique<AppCacheNavigationHandle>(
           static_cast<ChromeAppCacheService*>(partition->GetAppCacheService()),
-          ChildProcessHost::kInvalidUniqueID));
+          ChildProcessHost::kInvalidUniqueID);
     }
   }
 
@@ -3528,7 +3522,7 @@
   DCHECK(processing_navigation_throttle_);
   processing_navigation_throttle_ = false;
   if (result.action() != NavigationThrottle::PROCEED)
-    state_ = CANCELING;
+    SetState(CANCELING);
 
   if (complete_callback_for_testing_ &&
       std::move(complete_callback_for_testing_).Run(result)) {
@@ -3556,7 +3550,7 @@
       GetDelegate()->DidRedirectNavigation(this);
     }
   } else {
-    state_ = CANCELING;
+    SetState(CANCELING);
   }
 
   if (complete_callback_for_testing_ &&
@@ -3579,7 +3573,7 @@
     result = NavigationThrottle::ThrottleCheckResult(
         NavigationThrottle::PROCEED, net_error_);
   } else {
-    state_ = CANCELING;
+    SetState(CANCELING);
   }
 
   if (complete_callback_for_testing_ &&
@@ -3606,7 +3600,7 @@
     if (render_frame_host_)
       ReadyToCommitNavigation(false);
   } else {
-    state_ = CANCELING;
+    SetState(CANCELING);
   }
 
   if (complete_callback_for_testing_ &&
@@ -3674,7 +3668,7 @@
 
   EnterChildTraceEvent("CancelDeferredNavigation", this);
   NavigationState old_state = state_;
-  state_ = CANCELING;
+  SetState(CANCELING);
   if (complete_callback_for_testing_ &&
       std::move(complete_callback_for_testing_).Run(result)) {
     return;
@@ -3705,7 +3699,7 @@
   DCHECK_EQ(state_, WILL_START_REQUEST);
 
   if (IsSelfReferentialURL()) {
-    state_ = CANCELING;
+    SetState(CANCELING);
     if (complete_callback_for_testing_ &&
         std::move(complete_callback_for_testing_)
             .Run(NavigationThrottle::CANCEL)) {
@@ -3744,7 +3738,7 @@
   UpdateSiteURL(post_redirect_process);
 
   if (IsSelfReferentialURL()) {
-    state_ = CANCELING;
+    SetState(CANCELING);
     if (complete_callback_for_testing_ &&
         std::move(complete_callback_for_testing_)
             .Run(NavigationThrottle::CANCEL)) {
@@ -3767,7 +3761,7 @@
 void NavigationRequest::WillFailRequest() {
   EnterChildTraceEvent("WillFailRequest", this);
 
-  state_ = WILL_FAIL_REQUEST;
+  SetState(WILL_FAIL_REQUEST);
   processing_navigation_throttle_ = true;
 
   // Notify each throttle of the request.
@@ -3838,10 +3832,10 @@
   if (params.base_url.spec() == kUnreachableWebDataURL ||
       net_error_ != net::OK) {
     EnterChildTraceEvent("DidCommitNavigation: error page", this);
-    state_ = DID_COMMIT_ERROR_PAGE;
+    SetState(DID_COMMIT_ERROR_PAGE);
   } else {
     EnterChildTraceEvent("DidCommitNavigation", this);
-    state_ = DID_COMMIT;
+    SetState(DID_COMMIT);
   }
 
   StopCommitTimeout();
@@ -3920,7 +3914,7 @@
   was_redirected_ = true;
   redirect_chain_.push_back(common_params_->url);
 
-  state_ = WILL_REDIRECT_REQUEST;
+  SetState(WILL_REDIRECT_REQUEST);
   processing_navigation_throttle_ = true;
 
 #if defined(OS_ANDROID)
@@ -3954,7 +3948,7 @@
 void NavigationRequest::ReadyToCommitNavigation(bool is_error) {
   EnterChildTraceEvent("ReadyToCommitNavigation", this);
 
-  state_ = READY_TO_COMMIT;
+  SetState(READY_TO_COMMIT);
   ready_to_commit_time_ = base::TimeTicks::Now();
   RestartCommitTimeout();
 
@@ -4634,4 +4628,46 @@
   return coop_status_;
 }
 
+#if 0 && DCHECK_IS_ON()
+// The DCHECK needs to be able to output values when it triggers.
+std::ostream& operator<<(std::ostream& o,
+                         const NavigationRequest::NavigationState& s) {
+  return o << static_cast<int>(s);
+}
+#endif  // DCHECK_IS_ON()
+
+void NavigationRequest::CheckStateTransition(NavigationState state) const {
+#if DCHECK_IS_ON()
+  static const base::NoDestructor<StateTransitions<NavigationState>>
+      transitions(StateTransitions<NavigationState>({
+          // See
+          // https://chromium.googlesource.com/chromium/src/+/HEAD/docs/navigation-request-navigation-state.svg
+          {NOT_STARTED,
+           {WAITING_FOR_RENDERER_RESPONSE, WILL_START_NAVIGATION,
+            WILL_START_REQUEST}},
+          {WAITING_FOR_RENDERER_RESPONSE, {WILL_START_NAVIGATION}},
+          {WILL_START_NAVIGATION, {WILL_START_REQUEST, WILL_FAIL_REQUEST}},
+          {WILL_START_REQUEST,
+           {WILL_REDIRECT_REQUEST, WILL_PROCESS_RESPONSE, READY_TO_COMMIT,
+            DID_COMMIT, CANCELING, WILL_FAIL_REQUEST, DID_COMMIT_ERROR_PAGE}},
+          {WILL_REDIRECT_REQUEST,
+           {WILL_REDIRECT_REQUEST, WILL_PROCESS_RESPONSE, CANCELING,
+            WILL_FAIL_REQUEST}},
+          {WILL_PROCESS_RESPONSE,
+           {READY_TO_COMMIT, CANCELING, WILL_FAIL_REQUEST}},
+          {READY_TO_COMMIT, {NOT_STARTED, DID_COMMIT, DID_COMMIT_ERROR_PAGE}},
+          {DID_COMMIT, {}},
+          {CANCELING, {READY_TO_COMMIT, WILL_FAIL_REQUEST}},
+          {WILL_FAIL_REQUEST, {READY_TO_COMMIT, CANCELING, WILL_FAIL_REQUEST}},
+          {DID_COMMIT_ERROR_PAGE, {}},
+      }));
+  DCHECK_STATE_TRANSITION(transitions, state_, state);
+#endif  // DCHECK_IS_ON()
+}
+
+void NavigationRequest::SetState(NavigationState state) {
+  CheckStateTransition(state);
+  state_ = state;
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index fc324ba7c..5d283996 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -109,6 +109,9 @@
       private network::mojom::CookieAccessObserver {
  public:
   // Keeps track of the various stages of a NavigationRequest.
+  // To see what state transitions are allowed, see |SetState|.
+  // See
+  // https://chromium.googlesource.com/chromium/src/+/HEAD/docs/navigation-request-navigation-state.svg
   enum NavigationState {
     // Initial state.
     NOT_STARTED = 0,
@@ -676,7 +679,8 @@
       mojo::PendingAssociatedRemote<mojom::NavigationClient> navigation_client,
       mojo::PendingRemote<blink::mojom::NavigationInitiator>
           navigation_initiator,
-      RenderFrameHostImpl* rfh_restored_from_back_forward_cache);
+      RenderFrameHostImpl* rfh_restored_from_back_forward_cache,
+      GlobalFrameRoutingId initiator_routing_id);
 
   // Checks if the response requests an isolated origin (using either origin
   // policy or the Origin-Isolation header), and if so opts in the origin to be
@@ -1008,7 +1012,15 @@
   // reaching the 'ReadyToCommit' stage.
   network::mojom::WebSandboxFlags ComputeSandboxFlagsToCommit();
 
-  FrameTreeNode* frame_tree_node_;
+  // DCHECK that tranistioning from the current state to |state| valid. This
+  // does nothing in non-debug builds.
+  void CheckStateTransition(NavigationState state) const;
+
+  // Set |state_| to |state| and also DCHECK that this state transition is
+  // valid.
+  void SetState(NavigationState state);
+
+  FrameTreeNode* const frame_tree_node_;
 
   // Value of |is_for_commit| supplied to the constructor.
   const bool is_for_commit_;
@@ -1058,11 +1070,11 @@
   // creation time.
   scoped_refptr<SiteInstanceImpl> source_site_instance_;
   scoped_refptr<SiteInstanceImpl> dest_site_instance_;
-  RestoreType restore_type_ = RestoreType::NONE;
-  ReloadType reload_type_ = ReloadType::NONE;
+  const RestoreType restore_type_;
+  const ReloadType reload_type_;
+  const int nav_entry_id_;
   bool is_view_source_;
   int bindings_;
-  int nav_entry_id_ = 0;
   bool entry_overrides_ua_ = false;
 
   // Set to true if SetIsOverridingUserAgent() is called.
@@ -1087,7 +1099,7 @@
   // IPC. When true, main frame navigations should not commit in a different
   // process (unless asked by the content/ embedder). When true, the renderer
   // process expects to be notified if the navigation is aborted.
-  bool from_begin_navigation_;
+  const bool from_begin_navigation_;
 
   // Holds objects received from OnResponseStarted while the WillProcessResponse
   // checks are performed by the NavigationHandle. Once the checks have been
@@ -1119,7 +1131,7 @@
   // The site URL of this navigation, as obtained from SiteInstance::GetSiteURL.
   GURL site_url_;
 
-  std::unique_ptr<InitiatorCSPContext> initiator_csp_context_;
+  const std::unique_ptr<InitiatorCSPContext> initiator_csp_context_;
 
   base::OnceClosure on_start_checks_complete_closure_;
 
@@ -1287,7 +1299,7 @@
   // The RenderFrameHost that was restored from the back-forward cache. This
   // will be null except for navigations that are restoring a page from the
   // back-forward cache.
-  RenderFrameHostImpl* rfh_restored_from_back_forward_cache_;
+  RenderFrameHostImpl* const rfh_restored_from_back_forward_cache_;
 
   // These are set to the values from the FrameNavigationEntry this
   // NavigationRequest is associated with (if any).
@@ -1299,14 +1311,14 @@
   base::Optional<net::IsolationInfo> isolation_info_;
 
   // This is used to store the current_frame_host id at request creation time.
-  GlobalFrameRoutingId previous_render_frame_host_id_;
+  const GlobalFrameRoutingId previous_render_frame_host_id_;
 
   // Routing id of the frame host that initiated the navigation, derived from
   // |begin_params()->initiator_routing_id|. This is best effort: it is only
   // defined for some renderer-initiated navigations (e.g., not drag and drop).
   // The frame with the corresponding routing ID may have been deleted before
   // the navigation begins.
-  GlobalFrameRoutingId initiator_routing_id_;
+  const GlobalFrameRoutingId initiator_routing_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
@@ -1341,7 +1353,7 @@
 #endif
 
   // UKM source associated with the page we are navigated away from.
-  ukm::SourceId previous_page_load_ukm_source_id_ = ukm::kInvalidSourceId;
+  const ukm::SourceId previous_page_load_ukm_source_id_;
 
   // If true, changes to the user-agent override require a reload. If false, a
   // reload is not necessary.
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 7b677cd..232b335 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -3410,9 +3410,6 @@
   if (!VerifyDownloadUrlParams(GetSiteInstance(), *blink_parameters))
     return;
 
-  mojo::PendingRemote<blink::mojom::Blob> blob_data_remote(
-      std::move(blink_parameters->data_url_blob), blink::mojom::Blob::Version_);
-
   net::NetworkTrafficAnnotationTag traffic_annotation =
       net::DefineNetworkTrafficAnnotation("renderer_initiated_download", R"(
         semantics {
@@ -3458,9 +3455,9 @@
       blink_parameters->initiator_origin.value_or(url::Origin()));
   parameters->set_download_source(download::DownloadSource::FROM_RENDERER);
 
-  if (blob_data_remote) {
+  if (blink_parameters->data_url_blob) {
     DataURLBlobReader::ReadDataURLFromBlob(
-        std::move(blob_data_remote),
+        std::move(blink_parameters->data_url_blob),
         base::BindOnce(&OnDataURLRetrieved, std::move(parameters)));
     return;
   }
@@ -4963,6 +4960,15 @@
     return;
   }
 
+  // TODO(crbug.com/1051639): We need to find a long term solution to when/how
+  // portals should work in sandboxed documents.
+  if (active_sandbox_flags_ != network::mojom::WebSandboxFlags::kNone) {
+    mojo::ReportBadMessage(
+        "RFHI::CreatePortal called in a sandboxed browsing context");
+    frame_host_associated_receiver_.reset();
+    return;
+  }
+
   // Note that we don't check |GetLastCommittedOrigin|, since that is inherited
   // by the initial empty document of a new frame.
   // TODO(1008989): Once issue 1008989 is fixed we could move this check into
diff --git a/content/browser/media/session/media_session_android.cc b/content/browser/media/session/media_session_android.cc
index 0df088b1..87c39df 100644
--- a/content/browser/media/session/media_session_android.cc
+++ b/content/browser/media/session/media_session_android.cc
@@ -38,9 +38,14 @@
       Java_MediaSessionImpl_create(env, reinterpret_cast<intptr_t>(this));
   j_media_session_ = JavaObjectWeakGlobalRef(env, j_media_session);
 
-  WebContentsAndroid* contents_android = GetWebContentsAndroid();
-  if (contents_android)
-    contents_android->SetMediaSession(j_media_session);
+  WebContentsImpl* contents =
+      static_cast<WebContentsImpl*>(media_session_->web_contents());
+  if (contents) {
+    web_contents_android_ = contents->GetWebContentsAndroid();
+    DCHECK(web_contents_android_);
+    web_contents_android_->SetMediaSession(j_media_session);
+    web_contents_android_->AddDestructionObserver(this);
+  }
 
   session->AddObserver(observer_receiver_.BindNewPipeAndPassRemote());
 }
@@ -55,9 +60,10 @@
 
   j_media_session_.reset();
 
-  WebContentsAndroid* contents_android = GetWebContentsAndroid();
-  if (contents_android)
-    contents_android->SetMediaSession(nullptr);
+  if (web_contents_android_) {
+    web_contents_android_->SetMediaSession(nullptr);
+    web_contents_android_->RemoveDestructionObserver(this);
+  }
 }
 
 // static
@@ -71,7 +77,7 @@
   MediaSessionImpl* session = MediaSessionImpl::Get(contents);
   DCHECK(session);
   return MediaSessionAndroid::JavaObjectGetter::GetJavaObject(
-      session->session_android());
+      session->GetMediaSessionAndroid());
 }
 
 void MediaSessionAndroid::MediaSessionInfoChanged(
@@ -173,6 +179,14 @@
   }
 }
 
+// The Java MediaSession is kept alive by the Java WebContents and will be
+// cleared when the WebContents is destroyed, so we destroy the corresponding
+// MediaSessionAndroid to ensure mediaSessionDestroyed is called.
+void MediaSessionAndroid::WebContentsAndroidDestroyed(
+    WebContentsAndroid* web_contents_android) {
+  media_session_->ClearMediaSessionAndroid();  // Deletes |this|.
+}
+
 void MediaSessionAndroid::Resume(
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& j_obj) {
@@ -228,14 +242,6 @@
       media_session::mojom::AudioFocusType::kGain);
 }
 
-WebContentsAndroid* MediaSessionAndroid::GetWebContentsAndroid() {
-  WebContentsImpl* contents =
-      static_cast<WebContentsImpl*>(media_session_->web_contents());
-  if (!contents)
-    return nullptr;
-  return contents->GetWebContentsAndroid();
-}
-
 ScopedJavaLocalRef<jobject> MediaSessionAndroid::GetJavaObject() {
   JNIEnv* env = base::android::AttachCurrentThread();
   return j_media_session_.get(env);
diff --git a/content/browser/media/session/media_session_android.h b/content/browser/media/session/media_session_android.h
index 2c7c2d95..b7fd9bd 100644
--- a/content/browser/media/session/media_session_android.h
+++ b/content/browser/media/session/media_session_android.h
@@ -11,20 +11,21 @@
 
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
+#include "content/browser/web_contents/web_contents_android.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/media_session/public/mojom/media_session.mojom.h"
 
 namespace content {
 
 class MediaSessionImpl;
-class WebContentsAndroid;
 
 // This class is interlayer between native MediaSession and Java
 // MediaSession. This class is owned by the native MediaSession and will
 // teardown Java MediaSession when the native MediaSession is destroyed.
 // Java MediaSessionObservers are also proxied via this class.
 class MediaSessionAndroid final
-    : public media_session::mojom::MediaSessionObserver {
+    : public media_session::mojom::MediaSessionObserver,
+      public WebContentsAndroid::DestructionObserver {
  public:
   // Helper class for calling GetJavaObject() in a static method, in order to
   // avoid leaking the Java object outside.
@@ -48,6 +49,12 @@
   void MediaSessionPositionChanged(
       const base::Optional<media_session::MediaPosition>& position) override;
 
+  // WebContentsAndroid::DestructionObserver overrides:
+  // TODO(crbug.com/1091229): Remove this when we correctly support media
+  // sessions in portals.
+  void WebContentsAndroidDestroyed(
+      WebContentsAndroid* web_contents_android) override;
+
   // MediaSession method wrappers.
   void Resume(JNIEnv* env, const base::android::JavaParamRef<jobject>& j_obj);
   void Suspend(JNIEnv* env, const base::android::JavaParamRef<jobject>& j_obj);
@@ -66,13 +73,14 @@
       const base::android::JavaParamRef<jobject>& j_obj);
 
  private:
-  WebContentsAndroid* GetWebContentsAndroid();
-
   base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
 
   // The linked Java object. The strong reference is hold by Java WebContensImpl
   // to avoid introducing a new GC root.
   JavaObjectWeakGlobalRef j_media_session_;
+  // WebContentsAndroid corresponding to the Java WebContentsImpl that holds a
+  // strong reference to |j_media_session_|.
+  WebContentsAndroid* web_contents_android_;
 
   MediaSessionImpl* const media_session_;
 
diff --git a/content/browser/media/session/media_session_impl.cc b/content/browser/media/session/media_session_impl.cc
index e26a08c..50dc90f7 100644
--- a/content/browser/media/session/media_session_impl.cc
+++ b/content/browser/media/session/media_session_impl.cc
@@ -225,6 +225,22 @@
   DCHECK(audio_focus_state_ == State::INACTIVE);
 }
 
+#if defined(OS_ANDROID)
+void MediaSessionImpl::ClearMediaSessionAndroid() {
+  session_android_.reset();
+}
+
+MediaSessionAndroid* MediaSessionImpl::GetMediaSessionAndroid() {
+  // |session_android_| can be null if a portal is activated, the java
+  // WebContents is destroyed and ClearMediaSessionAndroid is called.
+  // TODO(crbug.com/1091229): Remove this when we correctly support media
+  // sessions in portals.
+  if (!session_android_)
+    session_android_ = std::make_unique<MediaSessionAndroid>(this);
+  return session_android_.get();
+}
+#endif
+
 void MediaSessionImpl::WebContentsDestroyed() {
   // This should only work for tests. In production, all the players should have
   // already been removed before WebContents is destroyed.
@@ -831,7 +847,6 @@
 #if defined(OS_ANDROID)
   session_android_.reset(new MediaSessionAndroid(this));
 #endif  // defined(OS_ANDROID)
-
   if (web_contents && web_contents->GetMainFrame() &&
       web_contents->GetMainFrame()->GetView()) {
     focused_ = web_contents->GetMainFrame()->GetView()->HasFocus();
diff --git a/content/browser/media/session/media_session_impl.h b/content/browser/media/session/media_session_impl.h
index 6ec74d5..271de470e 100644
--- a/content/browser/media/session/media_session_impl.h
+++ b/content/browser/media/session/media_session_impl.h
@@ -85,11 +85,8 @@
   ~MediaSessionImpl() override;
 
 #if defined(OS_ANDROID)
-  static MediaSession* FromJavaMediaSession(
-      const base::android::JavaRef<jobject>& j_media_session);
-  MediaSessionAndroid* session_android() const {
-    return session_android_.get();
-  }
+  void ClearMediaSessionAndroid();
+  MediaSessionAndroid* GetMediaSessionAndroid();
 #endif  // defined(OS_ANDROID)
 
   void NotifyMediaSessionMetadataChange();
diff --git a/content/browser/portal/portal.cc b/content/browser/portal/portal.cc
index f12708b..82140cb 100644
--- a/content/browser/portal/portal.cc
+++ b/content/browser/portal/portal.cc
@@ -556,6 +556,17 @@
   outer_contents->GetDelegate()->NavigationStateChanged(source, changed_flags);
 }
 
+void Portal::CanDownload(const GURL& url,
+                         const std::string& request_method,
+                         base::OnceCallback<void(bool)> callback) {
+  // Downloads are not allowed in portals.
+  owner_render_frame_host()->AddMessageToConsole(
+      blink::mojom::ConsoleMessageLevel::kWarning,
+      base::StringPrintf("Download in a portal (from %s) was blocked.",
+                         url.spec().c_str()));
+  std::move(callback).Run(false);
+}
+
 base::UnguessableToken Portal::GetDevToolsFrameToken() const {
   return portal_contents_->GetMainFrame()->GetDevToolsFrameToken();
 }
diff --git a/content/browser/portal/portal.h b/content/browser/portal/portal.h
index 11237e9..b8ae679 100644
--- a/content/browser/portal/portal.h
+++ b/content/browser/portal/portal.h
@@ -105,6 +105,9 @@
   WebContents* GetResponsibleWebContents(WebContents* web_contents) override;
   void NavigationStateChanged(WebContents* source,
                               InvalidateTypes changed_flags) override;
+  void CanDownload(const GURL& url,
+                   const std::string& request_method,
+                   base::OnceCallback<void(bool)> callback) override;
 
   // Returns the token which uniquely identifies this Portal.
   const base::UnguessableToken& portal_token() const { return portal_token_; }
diff --git a/content/browser/portal/portal_browsertest.cc b/content/browser/portal/portal_browsertest.cc
index 146dcf7..87913ff 100644
--- a/content/browser/portal/portal_browsertest.cc
+++ b/content/browser/portal/portal_browsertest.cc
@@ -9,11 +9,13 @@
 #include "base/bind_helpers.h"
 #include "base/callback.h"
 #include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
+#include "components/download/public/common/download_item.h"
 #include "components/viz/host/host_frame_sink_manager.h"
 #include "content/browser/compositor/surface_utils.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
@@ -27,6 +29,8 @@
 #include "content/browser/renderer_host/render_widget_host_view_child_frame.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/common/frame.mojom-test-utils.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/download_manager.h"
 #include "content/public/browser/site_isolation_policy.h"
 #include "content/public/browser/web_contents_delegate.h"
 #include "content/public/common/content_switches.h"
@@ -40,11 +44,14 @@
 #include "content/public/test/navigation_handle_observer.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "content/shell/browser/shell.h"
+#include "content/shell/browser/shell_browser_context.h"
+#include "content/shell/browser/shell_content_browser_client.h"
 #include "content/test/content_browser_test_utils_internal.h"
 #include "content/test/portal/portal_activated_observer.h"
 #include "content/test/portal/portal_created_observer.h"
 #include "content/test/portal/portal_interceptor_for_testing.h"
 #include "content/test/test_render_frame_host_factory.h"
+#include "net/base/escape.h"
 #include "net/base/net_errors.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
@@ -54,6 +61,7 @@
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/input/focus_type.mojom.h"
 #include "third_party/blink/public/mojom/portal/portal.mojom.h"
+#include "url/gurl.h"
 #include "url/url_constants.h"
 
 using testing::_;
@@ -1949,4 +1957,130 @@
   deleted_observer.WaitUntilDeleted();
 }
 
+namespace {
+
+class DownloadObserver : public DownloadManager::Observer {
+ public:
+  DownloadObserver()
+      : manager_(BrowserContext::GetDownloadManager(
+            ShellContentBrowserClient::Get()->browser_context())) {
+    manager_->AddObserver(this);
+  }
+
+  ~DownloadObserver() override {
+    if (manager_)
+      manager_->RemoveObserver(this);
+  }
+
+  ::testing::AssertionResult DownloadObserved() {
+    if (download_url_.is_empty())
+      return ::testing::AssertionFailure() << "no download observed";
+    return ::testing::AssertionSuccess()
+           << "download observed: " << download_url_;
+  }
+
+  ::testing::AssertionResult AwaitDownload() {
+    if (download_url_.is_empty() && !dropped_download_) {
+      base::RunLoop run_loop;
+      quit_closure_ = run_loop.QuitClosure();
+      run_loop.Run();
+      quit_closure_.Reset();
+    }
+    return DownloadObserved();
+  }
+
+  // DownloadManager::Observer
+
+  void ManagerGoingDown(DownloadManager* manager) override {
+    DCHECK_EQ(manager_, manager);
+    manager_->RemoveObserver(this);
+    manager_ = nullptr;
+  }
+
+  void OnDownloadCreated(DownloadManager* manager,
+                         download::DownloadItem* item) override {
+    DCHECK_EQ(manager_, manager);
+    if (download_url_.is_empty()) {
+      download_url_ = item->GetURL();
+      if (!quit_closure_.is_null())
+        std::move(quit_closure_).Run();
+    }
+  }
+
+  void OnDownloadDropped(DownloadManager* manager) override {
+    DCHECK_EQ(manager_, manager);
+    dropped_download_ = true;
+    if (!quit_closure_.is_null())
+      std::move(quit_closure_).Run();
+  }
+
+ private:
+  DownloadManager* manager_;
+  bool dropped_download_ = false;
+  GURL download_url_;
+  base::OnceClosure quit_closure_;
+};
+
+}  // namespace
+
+IN_PROC_BROWSER_TEST_F(PortalBrowserTest, DownloadsBlockedInMainFrame) {
+  WebContentsImpl* web_contents_impl =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  ASSERT_TRUE(NavigateToURL(
+      web_contents_impl,
+      embedded_test_server()->GetURL("portal.test", "/title1.html")));
+  CreatePortalToUrl(web_contents_impl, embedded_test_server()->GetURL(
+                                           "portal.test", "/title2.html"));
+
+  GURL download_url = embedded_test_server()->GetURL(
+      "portal.test", "/set-header?Content-Disposition: attachment");
+
+  DownloadObserver download_observer;
+  EXPECT_TRUE(ExecJs(
+      web_contents_impl,
+      JsReplace("document.querySelector('portal').src = $1", download_url)));
+  EXPECT_FALSE(download_observer.AwaitDownload());
+}
+
+IN_PROC_BROWSER_TEST_F(PortalBrowserTest, DownloadsBlockedInSubframe) {
+  WebContentsImpl* web_contents_impl =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  ASSERT_TRUE(NavigateToURL(
+      web_contents_impl,
+      embedded_test_server()->GetURL("portal.test", "/title1.html")));
+  CreatePortalToUrl(web_contents_impl, embedded_test_server()->GetURL(
+                                           "portal.test", "/title2.html"));
+
+  GURL download_url = embedded_test_server()->GetURL(
+      "portal.test", "/set-header?Content-Disposition: attachment");
+  GURL iframe_url = embedded_test_server()->GetURL(
+      "portal.test", "/iframe?" + net::EscapeQueryParamValue(
+                                      download_url.spec(), /*use_plus=*/false));
+
+  DownloadObserver download_observer;
+  EXPECT_TRUE(ExecJs(
+      web_contents_impl,
+      JsReplace("document.querySelector('portal').src = $1", iframe_url)));
+  EXPECT_FALSE(download_observer.AwaitDownload());
+}
+
+IN_PROC_BROWSER_TEST_F(PortalBrowserTest, DownloadsBlockedViaDownloadLink) {
+  WebContentsImpl* web_contents_impl =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  ASSERT_TRUE(NavigateToURL(
+      web_contents_impl,
+      embedded_test_server()->GetURL("portal.test", "/title1.html")));
+  Portal* portal = CreatePortalToUrl(
+      web_contents_impl,
+      embedded_test_server()->GetURL("portal.test", "/title2.html"));
+
+  DownloadObserver download_observer;
+  EXPECT_TRUE(ExecJs(portal->GetPortalContents(),
+                     "let a = document.createElement('a');\n"
+                     "a.download = 'download.html';\n"
+                     "a.href = '/title3.html';\n"
+                     "a.click();\n"));
+  EXPECT_FALSE(download_observer.AwaitDownload());
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/display_feature.cc b/content/browser/renderer_host/display_feature.cc
new file mode 100644
index 0000000..3f3ca652
--- /dev/null
+++ b/content/browser/renderer_host/display_feature.cc
@@ -0,0 +1,18 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/renderer_host/display_feature.h"
+
+namespace content {
+
+bool DisplayFeature::operator==(const DisplayFeature& other) const {
+  return orientation == other.orientation && offset == other.offset &&
+         mask_length == other.mask_length;
+}
+
+bool DisplayFeature::operator!=(const DisplayFeature& other) const {
+  return !(*this == other);
+}
+
+}  // namespace content
diff --git a/content/browser/renderer_host/display_feature.h b/content/browser/renderer_host/display_feature.h
new file mode 100644
index 0000000..f8d1102
--- /dev/null
+++ b/content/browser/renderer_host/display_feature.h
@@ -0,0 +1,55 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_DISPLAY_FEATURE_H_
+#define CONTENT_BROWSER_RENDERER_HOST_DISPLAY_FEATURE_H_
+
+#include "build/build_config.h"
+#include "content/common/content_export.h"
+
+namespace content {
+
+// Information about a physical attribute of the screen which that creates a
+// Logical separator or divider (e.g. a fold or mask).
+// This is a visual example of a vertically oriented display feature that masks
+// content underneath
+//
+//    Orientation: vertical
+//
+//                 offset
+//                   |
+//         +---------|===|---------+
+//         |         |   |         |
+//         |         |   |         |
+//         |         |   |         |
+//         |         |   |         |
+//         |         |   |         |
+//         +---------|===|---------+
+//                      \
+//                      mask_length
+//
+// Note that the implicit height of the display feature is the entire height of
+// the screen on which it exists.
+struct CONTENT_EXPORT DisplayFeature {
+  enum class Orientation { kVertical, kHorizontal, kMaxValue = kHorizontal };
+
+  // The orientation of the display feature in relation to the screen.
+  Orientation orientation = Orientation::kVertical;
+
+  // The offset from the screen origin in either the x (for vertical
+  // orientation) or y (for horizontal orientation) direction.
+  int offset = 0;
+
+  // A display feature may mask content such that it is not physically
+  // displayed - this length along with the offset describes this area.
+  // A display feature that only splits content will have a 0 |mask_length|.
+  int mask_length = 0;
+
+  bool operator==(const DisplayFeature& other) const;
+  bool operator!=(const DisplayFeature& other) const;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_RENDERER_HOST_DISPLAY_FEATURE_H_
diff --git a/content/browser/renderer_host/frame_connector_delegate.cc b/content/browser/renderer_host/frame_connector_delegate.cc
index ab73d3d5..1df2484 100644
--- a/content/browser/renderer_host/frame_connector_delegate.cc
+++ b/content/browser/renderer_host/frame_connector_delegate.cc
@@ -50,7 +50,8 @@
       visual_properties.page_scale_factor,
       visual_properties.is_pinch_gesture_active,
       visual_properties.visible_viewport_size,
-      visual_properties.compositor_viewport);
+      visual_properties.compositor_viewport,
+      visual_properties.root_widget_window_segments);
 
   render_widget_host->SynchronizeVisualProperties();
 }
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index f93a015..f994ebc 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -46,6 +46,7 @@
 #include "content/browser/file_system/browser_file_system_helper.h"
 #include "content/browser/gpu/compositor_util.h"
 #include "content/browser/renderer_host/dip_util.h"
+#include "content/browser/renderer_host/display_feature.h"
 #include "content/browser/renderer_host/display_util.h"
 #include "content/browser/renderer_host/frame_token_message_queue.h"
 #include "content/browser/renderer_host/input/fling_scheduler.h"
@@ -908,6 +909,17 @@
     viewport = view_->GetVisibleViewportSize();
   visual_properties.visible_viewport_size = viewport;
 
+  // The root widget's window segments are computed here - child frames just
+  // use the value provided from the parent.
+  if (is_top_most_widget) {
+    const DisplayFeature* display_feature = view_->GetDisplayFeature();
+    visual_properties.root_widget_window_segments = ComputeRootWindowSegments(
+        visual_properties.visible_viewport_size, display_feature);
+  } else {
+    visual_properties.root_widget_window_segments =
+        properties_from_parent_local_root_.root_widget_window_segments;
+  }
+
   visual_properties.capture_sequence_number = view_->GetCaptureSequenceNumber();
 
   // TODO(ccameron): GetLocalSurfaceId is not synchronized with the device
@@ -1030,6 +1042,43 @@
   return true;
 }
 
+std::vector<gfx::Rect> RenderWidgetHostImpl::ComputeRootWindowSegments(
+    const gfx::Size& visible_viewport_size,
+    const DisplayFeature* display_feature) const {
+  std::vector<gfx::Rect> window_segments;
+
+  if (!display_feature) {
+    window_segments.emplace_back(visible_viewport_size);
+    return window_segments;
+  }
+
+  int display_feature_end =
+      display_feature->offset + display_feature->mask_length;
+  if (display_feature->orientation == DisplayFeature::Orientation::kVertical) {
+    // If the display feature is vertically oriented, it splits or masks
+    // the widget into two side-by-side segments. Note that in the masking
+    // scenario, there is an area of the widget that are not covered by the
+    // union of the window segments - this area's pixels will not be visible
+    // to the user.
+    window_segments.emplace_back(0, 0, display_feature->offset,
+                                 visible_viewport_size.height());
+    window_segments.emplace_back(
+        display_feature_end, 0,
+        visible_viewport_size.width() - display_feature_end,
+        visible_viewport_size.height());
+  } else {
+    // If the display feature is offset in the y direction, it splits or masks
+    // the widget into two stacked segments.
+    window_segments.emplace_back(0, 0, visible_viewport_size.width(),
+                                 display_feature->offset);
+    window_segments.emplace_back(
+        0, display_feature_end, visible_viewport_size.width(),
+        visible_viewport_size.height() - display_feature_end);
+  }
+
+  return window_segments;
+}
+
 void RenderWidgetHostImpl::GotFocus() {
   Focus();
   if (owner_delegate_)
@@ -2093,13 +2142,16 @@
     float page_scale_factor,
     bool is_pinch_gesture_active,
     const gfx::Size& visible_viewport_size,
-    const gfx::Rect& compositor_viewport) {
+    const gfx::Rect& compositor_viewport,
+    std::vector<gfx::Rect> root_widget_window_segments) {
   properties_from_parent_local_root_.page_scale_factor = page_scale_factor;
   properties_from_parent_local_root_.is_pinch_gesture_active =
       is_pinch_gesture_active;
   properties_from_parent_local_root_.visible_viewport_size =
       visible_viewport_size;
   properties_from_parent_local_root_.compositor_viewport = compositor_viewport;
+  properties_from_parent_local_root_.root_widget_window_segments =
+      std::move(root_widget_window_segments);
 }
 
 void RenderWidgetHostImpl::SetAutoResize(bool enable,
@@ -2403,7 +2455,9 @@
          old_visual_properties->page_scale_factor !=
              new_visual_properties.page_scale_factor ||
          old_visual_properties->is_pinch_gesture_active !=
-             new_visual_properties.is_pinch_gesture_active;
+             new_visual_properties.is_pinch_gesture_active ||
+         old_visual_properties->root_widget_window_segments !=
+             new_visual_properties.root_widget_window_segments;
 }
 
 void RenderWidgetHostImpl::AutoscrollStart(const gfx::PointF& position) {
@@ -3334,4 +3388,10 @@
   return root_view->GetVisibleViewportSize();
 }
 
+RenderWidgetHostImpl::MainFramePropagationProperties::
+    MainFramePropagationProperties() = default;
+
+RenderWidgetHostImpl::MainFramePropagationProperties::
+    ~MainFramePropagationProperties() = default;
+
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index e051cb5..6029262e 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -107,6 +107,7 @@
 class TimeoutMonitor;
 class TouchEmulator;
 class WebCursor;
+struct DisplayFeature;
 struct VisualProperties;
 struct ScreenInfo;
 struct TextInputState;
@@ -614,7 +615,8 @@
       float page_scale_factor,
       bool is_pinch_gesture_active,
       const gfx::Size& visible_viewport_size,
-      const gfx::Rect& compositor_viewport);
+      const gfx::Rect& compositor_viewport,
+      std::vector<gfx::Rect> root_widget_window_segments);
 
   // Indicates if the render widget host should track the render widget's size
   // as opposed to visa versa.
@@ -831,6 +833,14 @@
 
   bool IsMouseLocked() const;
 
+  // Computes logical segments of the |visible_viewport_size|, based on the
+  // optional DisplayFeature. These segments are in DIPs relative to the widget
+  // origin. If a DisplayFeature is not provided, a vector with a single rect,
+  // the size of the visible viewport will be returned.
+  std::vector<gfx::Rect> ComputeRootWindowSegments(
+      const gfx::Size& visible_viewport_size,
+      const DisplayFeature* display_feature) const;
+
   // The View associated with the RenderWidgetHost. The lifetime of this object
   // is associated with the lifetime of the Render process. If the Renderer
   // crashes, its View is destroyed and this pointer becomes NULL, even though
@@ -1121,6 +1131,9 @@
   // that the renderer receives updates in an atomic fashion along with a
   // synchronization token for the compositor in a LocalSurfaceIdAllocation.
   struct MainFramePropagationProperties {
+    MainFramePropagationProperties();
+    ~MainFramePropagationProperties();
+
     // The page-scale factor of the main-frame.
     float page_scale_factor = 1.f;
 
@@ -1131,6 +1144,10 @@
     gfx::Size visible_viewport_size;
 
     gfx::Rect compositor_viewport;
+
+    // The logical segments of the root widget, in DIPs relative to the root
+    // RenderWidgetHost.
+    std::vector<gfx::Rect> root_widget_window_segments;
   } properties_from_parent_local_root_;
 
   bool waiting_for_screen_rects_ack_ = false;
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index c6c4ceb..178da25 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/macros.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
+#include "base/stl_util.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
@@ -26,6 +27,7 @@
 #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
 #include "components/viz/test/begin_frame_args_test.h"
 #include "content/browser/gpu/compositor_util.h"
+#include "content/browser/renderer_host/display_feature.h"
 #include "content/browser/renderer_host/frame_token_message_queue.h"
 #include "content/browser/renderer_host/input/mock_input_router.h"
 #include "content/browser/renderer_host/input/touch_emulator.h"
@@ -191,6 +193,13 @@
     return local_surface_id_allocator_.GetCurrentLocalSurfaceIdAllocation();
   }
 
+  void SetInsets(const gfx::Insets& insets) override { insets_ = insets; }
+  gfx::Size GetVisibleViewportSize() override {
+    gfx::Rect requested_rect(GetRequestedRendererSize());
+    requested_rect.Inset(insets_);
+    return requested_rect.size();
+  }
+
   void ProcessAckedTouchEvent(
       const TouchEventWithLatencyInfo& touch,
       blink::mojom::InputEventResultState ack_result) override {
@@ -228,6 +237,7 @@
   blink::mojom::InputEventResultState ack_result_;
   viz::ParentLocalSurfaceIdAllocator local_surface_id_allocator_;
   ScreenInfo screen_info_;
+  gfx::Insets insets_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TestView);
@@ -1045,6 +1055,117 @@
   EXPECT_EQ(kScreenBounds, props.screen_info.available_rect);
 }
 
+TEST_F(RenderWidgetHostTest, RootWindowSegments) {
+  gfx::Rect screen_rect(0, 0, 800, 600);
+  ScreenInfo screen_info;
+  screen_info.device_scale_factor = 1.f;
+  screen_info.rect = screen_rect;
+  screen_info.available_rect = screen_rect;
+  screen_info.orientation_angle = 0;
+  screen_info.orientation_type = SCREEN_ORIENTATION_VALUES_PORTRAIT_PRIMARY;
+  view_->SetScreenInfo(screen_info);
+
+  // Set a vertical display feature which must result in two window segments,
+  // side-by-side.
+  const int kDisplayFeatureLength = 20;
+  DisplayFeature emulated_display_feature{
+      DisplayFeature::Orientation::kVertical,
+      /* offset */ screen_rect.width() / 2 - kDisplayFeatureLength / 2,
+      /* mask_length */ kDisplayFeatureLength};
+  view_->SetDisplayFeatureForTesting(emulated_display_feature);
+
+  // Flush initial state (Init ends up leaving a pending UpdateScreenRects ACK -
+  // we need this cleared so that the below call to SendScreenRects updates
+  // RenderWidgetHostImpl members).
+  host_->OnMessageReceived(
+      WidgetHostMsg_UpdateScreenRects_ACK(host_->GetRoutingID()));
+
+  view_->SetBounds(screen_rect);
+  host_->SendScreenRects();
+
+  sink_->ClearMessages();
+  ASSERT_EQ(0u, sink_->message_count());
+
+  // Run SynchronizeVisualProperties and validate the window segments sent to
+  // the renderer are correct.
+  EXPECT_TRUE(host_->SynchronizeVisualProperties());
+  ASSERT_EQ(1u, sink_->message_count());
+  const IPC::Message* msg = sink_->GetMessageAt(0);
+  ASSERT_EQ(WidgetMsg_UpdateVisualProperties::ID, msg->type());
+  WidgetMsg_UpdateVisualProperties::Param params;
+  WidgetMsg_UpdateVisualProperties::Read(msg, &params);
+  auto window_segments = std::get<0>(params).root_widget_window_segments;
+  EXPECT_EQ(window_segments.size(), 2u);
+  gfx::Rect expected_first_rect(0, 0, 390, 600);
+  EXPECT_EQ(window_segments[0], expected_first_rect);
+  gfx::Rect expected_second_rect(410, 0, 390, 600);
+  EXPECT_EQ(window_segments[1], expected_second_rect);
+  sink_->ClearMessages();
+  ASSERT_EQ(0u, sink_->message_count());
+
+  // Setting a bottom inset (simulating virtual keyboard displaying on Aura)
+  // should result in 'shorter' segments.
+  gfx::Insets insets(0, 0, 100, 0);
+  view_->SetInsets(insets);
+  expected_first_rect.Inset(insets);
+  expected_second_rect.Inset(insets);
+  host_->SynchronizeVisualPropertiesIgnoringPendingAck();
+  ASSERT_EQ(1u, sink_->message_count());
+  msg = sink_->GetMessageAt(0);
+  ASSERT_EQ(WidgetMsg_UpdateVisualProperties::ID, msg->type());
+  WidgetMsg_UpdateVisualProperties::Read(msg, &params);
+  auto inset_window_segments = std::get<0>(params).root_widget_window_segments;
+  EXPECT_EQ(inset_window_segments.size(), 2u);
+  EXPECT_EQ(inset_window_segments[0], expected_first_rect);
+  EXPECT_EQ(inset_window_segments[1], expected_second_rect);
+  sink_->ClearMessages();
+  ASSERT_EQ(0u, sink_->message_count());
+
+  view_->SetInsets(gfx::Insets(0, 0, 0, 0));
+
+  // Setting back to empty should result in a single rect. The previous call
+  // resized the widget and causes a pending ack. This is unrelated to what
+  // we're testing here so ignore the pending ack by using
+  // |SynchronizeVisualPropertiesIgnoringPendingAck()|.
+  view_->SetDisplayFeatureForTesting(base::nullopt);
+  host_->SynchronizeVisualPropertiesIgnoringPendingAck();
+  ASSERT_EQ(1u, sink_->message_count());
+  msg = sink_->GetMessageAt(0);
+  ASSERT_EQ(WidgetMsg_UpdateVisualProperties::ID, msg->type());
+  WidgetMsg_UpdateVisualProperties::Read(msg, &params);
+  auto single_window_segments = std::get<0>(params).root_widget_window_segments;
+  EXPECT_EQ(single_window_segments.size(), 1u);
+  EXPECT_EQ(single_window_segments[0], gfx::Rect(0, 0, 800, 600));
+  sink_->ClearMessages();
+  ASSERT_EQ(0u, sink_->message_count());
+
+  // Set a horizontal display feature which results in two window segments
+  // stacked on top of each other.
+  emulated_display_feature = {
+      DisplayFeature::Orientation::kHorizontal,
+      /* offset */ screen_rect.height() / 2 - kDisplayFeatureLength / 2,
+      /* mask_length */ kDisplayFeatureLength};
+  view_->SetDisplayFeatureForTesting(emulated_display_feature);
+  host_->SynchronizeVisualPropertiesIgnoringPendingAck();
+  ASSERT_EQ(1u, sink_->message_count());
+  msg = sink_->GetMessageAt(0);
+  ASSERT_EQ(WidgetMsg_UpdateVisualProperties::ID, msg->type());
+  WidgetMsg_UpdateVisualProperties::Read(msg, &params);
+  auto vertical_window_segments =
+      std::get<0>(params).root_widget_window_segments;
+  EXPECT_EQ(vertical_window_segments.size(), 2u);
+  expected_first_rect = gfx::Rect(0, 0, 800, 290);
+  EXPECT_EQ(vertical_window_segments[0], expected_first_rect);
+  expected_second_rect = gfx::Rect(0, 310, 800, 290);
+  EXPECT_EQ(vertical_window_segments[1], expected_second_rect);
+  sink_->ClearMessages();
+  ASSERT_EQ(0u, sink_->message_count());
+
+  // If the segments don't change, there should be no IPC message sent.
+  host_->SynchronizeVisualPropertiesIgnoringPendingAck();
+  EXPECT_EQ(0u, sink_->message_count());
+}
+
 TEST_F(RenderWidgetHostTest, ReceiveFrameTokenFromCrashedRenderer) {
   // The Renderer sends a monotonically increasing frame token.
   host_->DidProcessFrame(2);
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index 403a8c8..2a5c601 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -594,6 +594,15 @@
   return;
 }
 
+const DisplayFeature* RenderWidgetHostViewBase::GetDisplayFeature() {
+  return base::OptionalOrNullptr(display_feature_);
+}
+
+void RenderWidgetHostViewBase::SetDisplayFeatureForTesting(
+    base::Optional<DisplayFeature> display_feature) {
+  display_feature_ = std::move(display_feature);
+}
+
 void RenderWidgetHostViewBase::OnDidNavigateMainFrameToNewPage() {
 }
 
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 39f1c8d6..d224ea8 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -22,6 +22,7 @@
 #include "components/viz/common/surfaces/scoped_surface_id_allocator.h"
 #include "components/viz/common/surfaces/surface_id.h"
 #include "components/viz/host/hit_test/hit_test_query.h"
+#include "content/browser/renderer_host/display_feature.h"
 #include "content/browser/renderer_host/event_with_latency_info.h"
 #include "content/common/content_export.h"
 #include "content/common/content_to_visible_time_reporter.h"
@@ -70,6 +71,7 @@
 class TouchSelectionControllerClientManager;
 class WebCursor;
 class DelegatedFrameHost;
+struct DisplayFeature;
 struct TextInputState;
 
 // Basic implementation shared by concrete RenderWidgetHostView subclasses.
@@ -481,6 +483,13 @@
 
   virtual void OnAutoscrollStart();
 
+  // Gets the DisplayFeature whose offset and mask_length are expressed in DIPs
+  // relative to the view. See display_feature.h for more details.
+  virtual const DisplayFeature* GetDisplayFeature();
+
+  void SetDisplayFeatureForTesting(
+      base::Optional<DisplayFeature> display_feature);
+
   // Returns the associated RenderWidgetHostImpl.
   RenderWidgetHostImpl* host() const { return host_; }
 
@@ -600,6 +609,11 @@
 
   bool is_currently_scrolling_viewport_ = false;
 
+  // TODO(crbug.com/1039050) Remove this member that is set for testing once
+  // support for returning the actual DisplayFeature is added to the platform
+  // specific RenderWidgetHostView.
+  base::Optional<DisplayFeature> display_feature_;
+
  private:
   FRIEND_TEST_ALL_PREFIXES(
       BrowserSideFlingBrowserTest,
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
index e27673f..ed49166 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
@@ -34,6 +34,7 @@
 #include "content/test/test_content_browser_client.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/blink/public/common/features.h"
 #include "ui/gfx/geometry/size.h"
 
@@ -594,4 +595,108 @@
                    "window.matchMedia('(display-mode: standalone)').matches"));
 }
 
+// Validate that the root widget's window segments are correctly propagated
+// via the SynchronizeVisualProperties cascade.
+IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest,
+                       VisualPropertiesPropagation_RootWindowSegments) {
+  GURL main_url(embedded_test_server()->GetURL(
+      "a.com", "/cross_site_iframe_factory.html?a(b(c),a)"));
+  EXPECT_TRUE(NavigateToURL(shell(), main_url));
+
+  auto* web_contents = static_cast<WebContentsImpl*>(shell()->web_contents());
+
+  // Main frame/root view.
+  FrameTreeNode* root = web_contents->GetFrameTree()->root();
+  RenderWidgetHostImpl* root_widget =
+      root->current_frame_host()->GetRenderWidgetHost();
+  RenderWidgetHostViewBase* root_view = root_widget->GetView();
+  // Out-of-process child frame.
+  FrameTreeNode* oopchild = root->child_at(0);
+  auto* oopchild_rph = static_cast<RenderProcessHostImpl*>(
+      oopchild->current_frame_host()->GetProcess());
+  // Out-of-process descendant frame (child of the first oop-iframe).
+  FrameTreeNode* oopdescendant = oopchild->child_at(0);
+  auto* oopdescendant_rph = static_cast<RenderProcessHostImpl*>(
+      oopdescendant->current_frame_host()->GetProcess());
+
+  const gfx::Size root_view_size = root_view->GetVisibleViewportSize();
+  const int kDisplayFeatureLength = 10;
+  DisplayFeature emulated_display_feature{
+      DisplayFeature::Orientation::kVertical,
+      /* offset */ root_view_size.width() / 2 - kDisplayFeatureLength / 2,
+      /* mask_length */ kDisplayFeatureLength};
+  std::vector<gfx::Rect> expected_segments;
+  expected_segments.emplace_back(0, 0, emulated_display_feature.offset,
+                                 root_view_size.height());
+  expected_segments.emplace_back(
+      emulated_display_feature.offset + emulated_display_feature.mask_length, 0,
+      emulated_display_feature.offset, root_view_size.height());
+
+  {
+    base::RunLoop loop;
+
+    // Watch for visual properties changes, first to the child oop-iframe, then
+    // to the descendant (at which point we're done and can validate the
+    // values).
+    std::vector<gfx::Rect> oopchild_root_window_segments;
+    OutgoingVisualPropertiesIPCWatcher oopchild_watcher(
+        oopchild_rph, root,
+        base::BindLambdaForTesting([&](const VisualProperties& props) {
+          oopchild_root_window_segments = props.root_widget_window_segments;
+        }));
+
+    std::vector<gfx::Rect> oopdescendant_root_window_segments;
+    OutgoingVisualPropertiesIPCWatcher oopdescendant_watcher(
+        oopdescendant_rph, root,
+        base::BindLambdaForTesting([&](const VisualProperties& props) {
+          oopdescendant_root_window_segments =
+              props.root_widget_window_segments;
+          if (oopdescendant_root_window_segments == expected_segments)
+            loop.Quit();
+        }));
+
+    root_view->SetDisplayFeatureForTesting(emulated_display_feature);
+    root_widget->SynchronizeVisualProperties();
+
+    loop.Run();
+
+    // The child widgets must be informed of the changed window segments.
+    EXPECT_THAT(oopchild_root_window_segments,
+                ::testing::ContainerEq(expected_segments));
+    EXPECT_THAT(oopdescendant_root_window_segments,
+                ::testing::ContainerEq(expected_segments));
+  }
+
+  {
+    base::RunLoop loop;
+    std::vector<gfx::Rect> new_frame_root_window_segments;
+    OutgoingVisualPropertiesIPCWatcher oopdescendant_watcher(
+        oopdescendant_rph, root,
+        base::BindLambdaForTesting([&](const VisualProperties& props) {
+          new_frame_root_window_segments = props.root_widget_window_segments;
+          // This check is needed, since we'll get an IPC originating from
+          // RenderWidgetHostImpl immediately after the frame is added with the
+          // incorrect value (the segments are cascaded from the parent renderer
+          // when the frame is added in that process). So we need to wait for
+          // the outgoing VisualProperties triggered from the parent renderer
+          // and comes in via the CrossProcessFrameConnector, which can happen
+          // after NavigateFrameToURL completes.
+          if (new_frame_root_window_segments == expected_segments)
+            loop.Quit();
+        }));
+
+    // Creating a new local frame root (navigating a.com to c.com) should also
+    // propagate the property to the new local frame root. Note that we're
+    // re-using the existing RenderProcessHost from c.com (aka
+    // |oopdescendant_rph|).
+    GURL new_frame_url(embedded_test_server()->GetURL("c.com", "/title2.html"));
+    NavigateFrameToURL(root->child_at(1), new_frame_url);
+
+    loop.Run();
+
+    EXPECT_THAT(new_frame_root_window_segments,
+                ::testing::ContainerEq(expected_segments));
+  }
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc b/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc
index dc9f13fd..d8999ca3 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc
@@ -298,6 +298,7 @@
   visual_properties.local_frame_size = compositor_viewport_pixel_rect.size();
   visual_properties.capture_sequence_number = 123u;
   visual_properties.local_surface_id_allocation = local_surface_id_allocation;
+  visual_properties.root_widget_window_segments.emplace_back(1, 2, 3, 4);
 
   sink_->ClearMessages();
   test_frame_connector_->SynchronizeVisualProperties(frame_sink_id,
@@ -318,6 +319,9 @@
     EXPECT_EQ(local_surface_id_allocation,
               sent_visual_properties.local_surface_id_allocation);
     EXPECT_EQ(123u, sent_visual_properties.capture_sequence_number);
+    EXPECT_EQ(1u, sent_visual_properties.root_widget_window_segments.size());
+    EXPECT_EQ(gfx::Rect(1, 2, 3, 4),
+              sent_visual_properties.root_widget_window_segments[0]);
   }
 }
 
diff --git a/content/browser/resources/gpu/info_view.js b/content/browser/resources/gpu/info_view.js
index 84990708..3a31fd2 100644
--- a/content/browser/resources/gpu/info_view.js
+++ b/content/browser/resources/gpu/info_view.js
@@ -537,7 +537,7 @@
         throw new Error('Node ' + outputElementId + ' not found');
       }
 
-      peg.innerHTML = '';
+      peg.innerHTML = trustedTypes.emptyHTML;
       peg.appendChild(template);
     }
   };
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 3e55f2ee..8a77eaf 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1986,8 +1986,6 @@
   for (auto& observer : observers_)
     observer.DidActivatePortal(predecessor_web_contents, activation_time);
 
-  // This happens later than SwapWebContents so that the delegate can observe it
-  // happening after predecessor WebContents has been moved into a portal.
   GetDelegate()->WebContentsBecamePortal(predecessor_web_contents);
 }
 
diff --git a/content/browser/xr/metrics/webxr_session_tracker.cc b/content/browser/xr/metrics/webxr_session_tracker.cc
index 1914e7e..8bf3010 100644
--- a/content/browser/xr/metrics/webxr_session_tracker.cc
+++ b/content/browser/xr/metrics/webxr_session_tracker.cc
@@ -73,6 +73,7 @@
     case XRSessionFeature::HIT_TEST:
     case XRSessionFeature::LIGHT_ESTIMATION:
     case XRSessionFeature::ANCHORS:
+    case XRSessionFeature::CAMERA_ACCESS:
       // Not recording metrics for these features currently.
       // TODO(https://crbug.com/965729): Add metrics for the AR-related features
       // that are enabled by default.
@@ -110,6 +111,7 @@
     case XRSessionFeature::HIT_TEST:
     case XRSessionFeature::LIGHT_ESTIMATION:
     case XRSessionFeature::ANCHORS:
+    case XRSessionFeature::CAMERA_ACCESS:
       // Not recording metrics for these features currently.
       // TODO(https://crbug.com/965729): Add metrics for the AR-related features
       // that are enabled by default.
diff --git a/content/browser/xr/service/browser_xr_runtime_impl.cc b/content/browser/xr/service/browser_xr_runtime_impl.cc
index 4829904..3d05d04 100644
--- a/content/browser/xr/service/browser_xr_runtime_impl.cc
+++ b/content/browser/xr/service/browser_xr_runtime_impl.cc
@@ -163,6 +163,7 @@
     device::mojom::XRSessionFeature::DOM_OVERLAY,
     device::mojom::XRSessionFeature::LIGHT_ESTIMATION,
     device::mojom::XRSessionFeature::ANCHORS,
+    device::mojom::XRSessionFeature::CAMERA_ACCESS,
 };
 
 #if BUILDFLAG(ENABLE_OPENVR)
diff --git a/content/browser/xr/service/vr_service_impl.cc b/content/browser/xr/service/vr_service_impl.cc
index b6cc7c5..6dce9c2f 100644
--- a/content/browser/xr/service/vr_service_impl.cc
+++ b/content/browser/xr/service/vr_service_impl.cc
@@ -77,6 +77,20 @@
 VRServiceImpl::SessionRequestData::SessionRequestData(SessionRequestData&&) =
     default;
 
+VRServiceImpl::XrCompatibleCallback::XrCompatibleCallback(
+    device::mojom::VRService::MakeXrCompatibleCallback callback)
+    : callback(std::move(callback)) {}
+
+VRServiceImpl::XrCompatibleCallback::XrCompatibleCallback(
+    XrCompatibleCallback&& wrapper) {
+  this->callback = std::move(wrapper.callback);
+}
+
+VRServiceImpl::XrCompatibleCallback::~XrCompatibleCallback() {
+  if (!callback.is_null())
+    std::move(callback).Run(device::mojom::XrCompatibleResult::kNotCompatible);
+}
+
 VRServiceImpl::VRServiceImpl(content::RenderFrameHost* render_frame_host)
     : WebContentsObserver(
           content::WebContents::FromRenderFrameHost(render_frame_host)),
@@ -535,6 +549,31 @@
   }
 }
 
+void VRServiceImpl::MakeXrCompatible(
+    device::mojom::VRService::MakeXrCompatibleCallback callback) {
+  if (!initialization_complete_) {
+    pending_requests_.push_back(base::BindOnce(&VRServiceImpl::MakeXrCompatible,
+                                               base::Unretained(this),
+                                               std::move(callback)));
+    return;
+  }
+
+  xr_compatible_callbacks_.emplace_back(std::move(callback));
+
+  // Only request compatibility if there aren't any pending calls.
+  // OnMakeXrCompatibleComplete will run all callbacks.
+  if (xr_compatible_callbacks_.size() == 1)
+    runtime_manager_->MakeXrCompatible();
+}
+
+void VRServiceImpl::OnMakeXrCompatibleComplete(
+    device::mojom::XrCompatibleResult result) {
+  for (XrCompatibleCallback& wrapper : xr_compatible_callbacks_)
+    std::move(wrapper.callback).Run(result);
+
+  xr_compatible_callbacks_.clear();
+}
+
 void VRServiceImpl::OnExitPresent() {
   DVLOG(2) << __func__;
 
diff --git a/content/browser/xr/service/vr_service_impl.h b/content/browser/xr/service/vr_service_impl.h
index a17435d..9932a0c 100644
--- a/content/browser/xr/service/vr_service_impl.h
+++ b/content/browser/xr/service/vr_service_impl.h
@@ -62,6 +62,8 @@
       device::mojom::VRService::SupportsSessionCallback callback) override;
   void ExitPresent(ExitPresentCallback on_exited) override;
   void SetFramesThrottled(bool throttled) override;
+  void MakeXrCompatible(
+      device::mojom::VRService::MakeXrCompatibleCallback callback) override;
 
   void InitializationComplete();
 
@@ -76,6 +78,7 @@
       device::mojom::XRVisibilityState visibility_state);
   void OnDisplayInfoChanged();
   void RuntimesChanged();
+  void OnMakeXrCompatibleComplete(device::mojom::XrCompatibleResult result);
 
   base::WeakPtr<VRServiceImpl> GetWeakPtr() {
     return weak_ptr_factory_.GetWeakPtr();
@@ -103,6 +106,18 @@
     SessionRequestData& operator=(const SessionRequestData&) = delete;
   };
 
+  // Wrapper around MakeXrCompatibleCallback so that the callback gets executed
+  // on destruction if it hasn't already. Otherwise, mojom throws a DCHECK if
+  // the callback is not executed before being destroyed.
+  struct XrCompatibleCallback {
+    device::mojom::VRService::MakeXrCompatibleCallback callback;
+
+    explicit XrCompatibleCallback(
+        device::mojom::VRService::MakeXrCompatibleCallback callback);
+    XrCompatibleCallback(XrCompatibleCallback&& wrapper);
+    ~XrCompatibleCallback();
+  };
+
   // content::WebContentsObserver implementation
   void OnWebContentsFocused(content::RenderWidgetHost* host) override;
   void OnWebContentsLostFocus(content::RenderWidgetHost* host) override;
@@ -164,6 +179,8 @@
   bool in_focused_frame_ = false;
   bool frames_throttled_ = false;
 
+  std::vector<XrCompatibleCallback> xr_compatible_callbacks_;
+
   base::WeakPtrFactory<VRServiceImpl> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(VRServiceImpl);
diff --git a/content/browser/xr/service/xr_runtime_manager_impl.cc b/content/browser/xr/service/xr_runtime_manager_impl.cc
index bb096ac8a5..1774287 100644
--- a/content/browser/xr/service/xr_runtime_manager_impl.cc
+++ b/content/browser/xr/service/xr_runtime_manager_impl.cc
@@ -310,6 +310,13 @@
   std::move(callback).Run(true);
 }
 
+void XRRuntimeManagerImpl::MakeXrCompatible() {
+  // TODO(http://crbug.com/792657): Restart GPU on correct adapter if needed.
+  for (VRServiceImpl* service : services_)
+    service->OnMakeXrCompatibleComplete(
+        device::mojom::XrCompatibleResult::kAlreadyCompatible);
+}
+
 XRRuntimeManagerImpl::XRRuntimeManagerImpl(XRProviderList providers)
     : providers_(std::move(providers)) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/content/browser/xr/service/xr_runtime_manager_impl.h b/content/browser/xr/service/xr_runtime_manager_impl.h
index 57e5494..502b614 100644
--- a/content/browser/xr/service/xr_runtime_manager_impl.h
+++ b/content/browser/xr/service/xr_runtime_manager_impl.h
@@ -73,6 +73,8 @@
       device::mojom::XRSessionOptionsPtr options,
       device::mojom::VRService::SupportsSessionCallback callback);
 
+  void MakeXrCompatible();
+
   // XRRuntimeManager implementation
   BrowserXRRuntimeImpl* GetRuntime(device::mojom::XRDeviceId id) override;
   void ForEachRuntime(
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 2eafa7e1..ef16ed5a 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -215,7 +215,6 @@
     {wf::EnableWebXRAnchors, features::kWebXrIncubations, kEnableOnly},
     {wf::EnableWebXRCameraAccess, features::kWebXrIncubations, kEnableOnly},
     {wf::EnableWebXRLightEstimation, features::kWebXrIncubations, kEnableOnly},
-    {wf::EnableWebXRPlaneDetection, features::kWebXrIncubations, kEnableOnly},
     {wf::EnableUserActivationPostMessageTransfer,
      features::kUserActivationPostMessageTransfer, kUseFeatureState},
     {wf::EnableUserActivationSameOriginVisibility,
@@ -352,6 +351,9 @@
           {"CSSReducedFontLoadingInvalidations",
            blink::features::kCSSReducedFontLoadingInvalidations,
            kUseFeatureState},
+          {"CSSReducedFontLoadingLayoutInvalidations",
+           blink::features::kCSSReducedFontLoadingLayoutInvalidations,
+           kUseFeatureState},
           {"FeaturePolicyForClientHints",
            features::kFeaturePolicyForClientHints, kUseFeatureState},
           {"FlexGaps", blink::features::kFlexGaps, kEnableOnly},
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index 67a7ca6..0841ebf 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -187,6 +187,7 @@
     "service_worker/service_worker_utils.h",
     "skia_utils.cc",
     "skia_utils.h",
+    "state_transitions.h",
     "text_input_client_messages.h",
     "text_input_state.cc",
     "text_input_state.h",
diff --git a/content/common/common_param_traits_macros.h b/content/common/common_param_traits_macros.h
index 0701e83..1209aecf 100644
--- a/content/common/common_param_traits_macros.h
+++ b/content/common/common_param_traits_macros.h
@@ -56,6 +56,7 @@
   IPC_STRUCT_TRAITS_MEMBER(capture_sequence_number)
   IPC_STRUCT_TRAITS_MEMBER(zoom_level)
   IPC_STRUCT_TRAITS_MEMBER(page_scale_factor)
+  IPC_STRUCT_TRAITS_MEMBER(root_widget_window_segments)
   IPC_STRUCT_TRAITS_MEMBER(is_pinch_gesture_active)
 IPC_STRUCT_TRAITS_END()
 
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 10ad01fe..95992e1 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -204,6 +204,7 @@
   IPC_STRUCT_TRAITS_MEMBER(visible_viewport_size)
   IPC_STRUCT_TRAITS_MEMBER(min_size_for_auto_resize)
   IPC_STRUCT_TRAITS_MEMBER(max_size_for_auto_resize)
+  IPC_STRUCT_TRAITS_MEMBER(root_widget_window_segments)
   IPC_STRUCT_TRAITS_MEMBER(capture_sequence_number)
   IPC_STRUCT_TRAITS_MEMBER(zoom_level)
   IPC_STRUCT_TRAITS_MEMBER(page_scale_factor)
diff --git a/content/common/frame_visual_properties.h b/content/common/frame_visual_properties.h
index 24964d7..fc6c7ede 100644
--- a/content/common/frame_visual_properties.h
+++ b/content/common/frame_visual_properties.h
@@ -37,6 +37,7 @@
   gfx::Size visible_viewport_size;
   gfx::Size min_size_for_auto_resize;
   gfx::Size max_size_for_auto_resize;
+  std::vector<gfx::Rect> root_widget_window_segments;
 
   // The size of the compositor viewport, to match the sub-frame's surface.
   gfx::Rect compositor_viewport;
diff --git a/content/common/state_transitions.h b/content/common/state_transitions.h
new file mode 100644
index 0000000..cb979d4
--- /dev/null
+++ b/content/common/state_transitions.h
@@ -0,0 +1,91 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_COMMON_STATE_TRANSITIONS_H_
+#define CONTENT_COMMON_STATE_TRANSITIONS_H_
+
+#include <vector>
+
+#include "base/logging.h"
+#include "base/no_destructor.h"
+#include "base/stl_util.h"
+
+namespace content {
+
+// This class represents a set of state transitions where each state is a value
+// that supports copy, << and == (e.g. an enum element). It's intended to be
+// used in DCHECK-enabled builds to check that only valid transitions occur. Its
+// implementation favours convenience and simplicity over performance. To use it
+// follow this example:
+
+// #include "base/no_destructor.h"
+// #include "content/common/state_transitions.h"
+//
+// enum class State {
+//   kState1,
+//   kState2,
+//   kState3,
+// };
+//
+// #if DCHECK_IS_ON()
+// std::ostream& operator<<(std::ostream& o, const State& s) {
+//   return o << static_cast<int>(s);
+// }
+// #endif  // DCHECK_IS_ON()
+//
+// void DCheckStateTransition(State old_state, State new_state) {
+// #if DCHECK_IS_ON()
+//   static const base::NoDestructor<StateTransitions<LifecycleState>>
+//       transitions(
+//           StateTransitions<LifecycleState>(
+//               {{kState1, {kState2, kState3}},
+//               {kState2, {kState3}},
+//               {kState3, {}}}));
+//   DCHECK_STATE_TRANSITION(transitions, old_state, new_state);
+// #endif  // DCHECK_IS_ON()
+// }
+
+template <typename State>
+struct StateTransitions {
+ public:
+  // Represents a state and all of the states that are valid transitions from
+  // it.
+  struct StateTransition {
+    StateTransition(State source, std::vector<State> destinations)
+        : source(std::move(source)), destinations(std::move(destinations)) {}
+
+    const State source;
+    const std::vector<State> destinations;
+  };
+
+  explicit StateTransitions(std::vector<StateTransition> state_transitions)
+      : state_transitions(std::move(state_transitions)) {}
+
+  // Returns a list of states that are valid to transition to from |source|.
+  const std::vector<State>& GetValidTransitions(const State& source) const {
+    for (const StateTransition& state_transition : state_transitions) {
+      if (state_transition.source == source)
+        return state_transition.destinations;
+    }
+    static const base::NoDestructor<std::vector<State>> no_transitions;
+    return *no_transitions;
+  }
+
+  // Tests whether transitioning from |source| to |destination| is valid.
+  bool IsTransitionValid(const State& source, const State& destination) const {
+    return base::Contains(GetValidTransitions(source), destination);
+  }
+
+  const std::vector<StateTransition> state_transitions;
+};
+
+// DCHECK if transitioning from |old_state| to |new_state| is not valid
+// according to |transitions|.
+#define DCHECK_STATE_TRANSITION(transitions, old_state, new_state)   \
+  DCHECK((transitions)->IsTransitionValid((old_state), (new_state))) \
+      << "Invalid transition: " << old_state << " -> " << new_state
+
+}  // namespace content
+
+#endif  // CONTENT_COMMON_STATE_TRANSITIONS_H_
diff --git a/content/common/state_transitions_unittest.cc b/content/common/state_transitions_unittest.cc
new file mode 100644
index 0000000..e7edee2
--- /dev/null
+++ b/content/common/state_transitions_unittest.cc
@@ -0,0 +1,100 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/state_transitions.h"
+
+#include <ostream>
+#include <string>
+
+#include "base/test/gtest_util.h"
+#include "build/build_config.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+enum class State { kState1 = 0, kState2, kState3, kState4 };
+
+std::ostream& operator<<(std::ostream& o, const State& s) {
+  return o << static_cast<int>(s);
+}
+
+TEST(StateTransitionsTest, Constructor) {
+  // No expectations, just make sure the constructor works.
+  const StateTransitions<State> transitions({
+      {State::kState1, {State::kState2, State::kState3}},
+      {State::kState2, {State::kState3, State::kState4}},
+  });
+}
+
+TEST(StateTransitionsTest, GetValidTransitions) {
+  const StateTransitions<State> transitions({
+      {State::kState1, {State::kState2, State::kState3}},
+      {State::kState2, {State::kState3, State::kState4}},
+  });
+  EXPECT_THAT(transitions.GetValidTransitions(State::kState1),
+              testing::ElementsAre(State::kState2, State::kState3));
+  EXPECT_THAT(transitions.GetValidTransitions(State::kState2),
+              testing::ElementsAre(State::kState3, State::kState4));
+  EXPECT_THAT(transitions.GetValidTransitions(State::kState3),
+              testing::ElementsAre());
+  EXPECT_THAT(transitions.GetValidTransitions(State::kState4),
+              testing::ElementsAre());
+}
+
+TEST(StateTransitionsTest, IsTransitionValid) {
+  const StateTransitions<State> transitions({
+      {State::kState1, {State::kState2, State::kState3}},
+      {State::kState2, {State::kState3, State::kState4}},
+  });
+  ASSERT_TRUE(transitions.IsTransitionValid(State::kState1, State::kState2));
+  ASSERT_TRUE(transitions.IsTransitionValid(State::kState2, State::kState3));
+  ASSERT_FALSE(transitions.IsTransitionValid(State::kState1, State::kState4));
+  // kState3 was omitted from the definition.
+  ASSERT_FALSE(transitions.IsTransitionValid(State::kState3, State::kState4));
+}
+
+TEST(StateTransitionsTest, DCHECK_STATE_TRANSITION) {
+  const StateTransitions<State> transitions({
+      {State::kState1, {State::kState2, State::kState3}},
+      {State::kState2, {State::kState3, State::kState4}},
+  });
+  DCHECK_STATE_TRANSITION(&transitions, State::kState1, State::kState2);
+  DCHECK_STATE_TRANSITION(&transitions, State::kState2, State::kState3);
+
+#if DCHECK_IS_ON()
+  // EXPECT_DEATH is not defined on IOS.
+#ifndef OS_IOS
+  EXPECT_DEATH(
+      DCHECK_STATE_TRANSITION(&transitions, State::kState1, State::kState4),
+      "Check failed.*Invalid transition: 0 -> 3");
+  // kState3 was omitted from the definition.
+  EXPECT_DEATH(
+      DCHECK_STATE_TRANSITION(&transitions, State::kState3, State::kState4),
+      "Check failed.*Invalid transition: 2 -> 3");
+#endif  // !OS_IOS
+#endif  // DCHECK_IS_ON()
+}
+
+// Test that everything works OK with some other data type.
+TEST(StateTransitionsTest, NonEnum) {
+  const StateTransitions<std::string> transitions({
+      {"state1", {"state2", "state3"}},
+      {"state2", {"state3", "state4"}},
+  });
+  ASSERT_TRUE(transitions.IsTransitionValid("state1", "state2"));
+  ASSERT_TRUE(transitions.IsTransitionValid("state2", "state3"));
+  ASSERT_FALSE(transitions.IsTransitionValid("state1", "state4"));
+  // kState3 was omitted from the definition.
+  ASSERT_FALSE(transitions.IsTransitionValid("state3", "state4"));
+  DCHECK_STATE_TRANSITION(&transitions, "state1", "state2");
+  DCHECK_STATE_TRANSITION(&transitions, "state2", "state3");
+
+  // Try some states that are not in the specification at all.
+  ASSERT_FALSE(transitions.IsTransitionValid("foo", "state2"));
+  ASSERT_FALSE(transitions.IsTransitionValid("state1", "foo"));
+  ASSERT_FALSE(transitions.IsTransitionValid("foo", "bar"));
+}
+
+}  // namespace content
diff --git a/content/common/visual_properties.h b/content/common/visual_properties.h
index 82ffc7e..058fbee 100644
--- a/content/common/visual_properties.h
+++ b/content/common/visual_properties.h
@@ -122,6 +122,12 @@
   // It needs to be shared with subframes.
   float page_scale_factor = 1.f;
 
+  // The logical segments of the root widget, in widget-relative DIPs. This
+  // property is set by the root RenderWidget in the renderer process, then
+  // propagated to child local frame roots via RenderFrameProxy/
+  // CrossProcessFrameConnector.
+  std::vector<gfx::Rect> root_widget_window_segments;
+
   // Indicates whether a pinch gesture is currently active. Originates in the
   // main frame's renderer, and needs to be shared with subframes.
   bool is_pinch_gesture_active = false;
diff --git a/content/public/browser/download_manager_delegate.cc b/content/public/browser/download_manager_delegate.cc
index bea2e24b..3d9cfe5 100644
--- a/content/public/browser/download_manager_delegate.cc
+++ b/content/public/browser/download_manager_delegate.cc
@@ -8,6 +8,7 @@
 #include "base/bind_helpers.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "components/download/public/common/download_item.h"
+#include "content/public/browser/web_contents_delegate.h"
 
 namespace content {
 
@@ -69,11 +70,33 @@
     bool from_download_cross_origin_redirect,
     bool content_initiated,
     CheckDownloadAllowedCallback check_download_allowed_cb) {
-  // TODO: once hook up delegate callback, make sure sync run of it doesn't
-  // crash and test it
+  // TODO: Do this directly, if it doesn't crash.
 
   base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(check_download_allowed_cb), true));
+      FROM_HERE,
+      base::BindOnce(
+          [](const WebContents::Getter& web_contents_getter, const GURL& url,
+             const std::string& request_method,
+             CheckDownloadAllowedCallback check_download_allowed_cb) {
+            WebContents* contents = web_contents_getter.Run();
+            if (!contents) {
+              // The contents was closed.
+              std::move(check_download_allowed_cb).Run(false);
+              return;
+            }
+
+            WebContentsDelegate* delegate = contents->GetDelegate();
+            if (!delegate) {
+              // The default behavior is to allow it.
+              std::move(check_download_allowed_cb).Run(true);
+              return;
+            }
+
+            delegate->CanDownload(url, request_method,
+                                  std::move(check_download_allowed_cb));
+          },
+          web_contents_getter, url, request_method,
+          std::move(check_download_allowed_cb)));
 }
 
 download::QuarantineConnectionCallback
diff --git a/content/public/test/url_loader_interceptor.cc b/content/public/test/url_loader_interceptor.cc
index 2347c07..97c9f46 100644
--- a/content/public/test/url_loader_interceptor.cc
+++ b/content/public/test/url_loader_interceptor.cc
@@ -13,6 +13,7 @@
 #include "base/files/file_util.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
+#include "base/strings/strcat.h"
 #include "base/synchronization/lock.h"
 #include "base/test/bind_test_util.h"
 #include "base/threading/thread_restrictions.h"
@@ -533,6 +534,39 @@
   }
 }
 
+// static
+std::unique_ptr<URLLoaderInterceptor>
+URLLoaderInterceptor::ServeFilesFromDirectoryAtOrigin(
+    const std::string& relative_base_path,
+    const GURL& origin,
+    base::RepeatingCallback<void(const GURL&)> callback) {
+  return std::make_unique<URLLoaderInterceptor>(base::BindLambdaForTesting(
+      [=](content::URLLoaderInterceptor::RequestParams* params) -> bool {
+        // Ignore requests for other origins.
+        if (params->url_request.url.GetOrigin() != origin.GetOrigin())
+          return false;
+
+        // Remove the leading slash from the url path, so that it can be
+        // treated as a relative path by base::FilePath::AppendASCII.
+        auto path = base::TrimString(params->url_request.url.path_piece(), "/",
+                                     base::TRIM_LEADING);
+
+        // URLLoaderInterceptor insists that all files exist unless
+        // explicitly said to be failing.  Many browsertests fetch
+        // nonessential urls like favicons, so just ignore missing files
+        // entirely, to behave more like net::test::EmbeddedTestServer.
+        base::ScopedAllowBlockingForTesting allow_blocking;
+        auto full_path = GetDataFilePath(relative_base_path).AppendASCII(path);
+        if (!base::PathExists(full_path))
+          return false;
+
+        callback.Run(params->url_request.url);
+        content::URLLoaderInterceptor::WriteResponse(full_path,
+                                                     params->client.get());
+        return true;
+      }));
+}
+
 void URLLoaderInterceptor::WriteResponse(
     const std::string& headers,
     const std::string& body,
diff --git a/content/public/test/url_loader_interceptor.h b/content/public/test/url_loader_interceptor.h
index 51327f4..eee861ac 100644
--- a/content/public/test/url_loader_interceptor.h
+++ b/content/public/test/url_loader_interceptor.h
@@ -103,6 +103,14 @@
 
   ~URLLoaderInterceptor();
 
+  // Serves static data, similar to net::test::EmbeddedTestServer, for
+  // cases where you need a static origin, such as tests with origin trials.
+  // Optional callback will notify callers for any accessed urls.
+  static std::unique_ptr<URLLoaderInterceptor> ServeFilesFromDirectoryAtOrigin(
+      const std::string& relative_base_path,
+      const GURL& origin,
+      base::RepeatingCallback<void(const GURL&)> callback = base::DoNothing());
+
   // Helper methods for use when intercepting.
   // Writes the given response body, header, and SSL Info to |client|.
   static void WriteResponse(
diff --git a/content/renderer/loader/web_worker_fetch_context_impl.cc b/content/renderer/loader/web_worker_fetch_context_impl.cc
index ce1d1c8..505f87f 100644
--- a/content/renderer/loader/web_worker_fetch_context_impl.cc
+++ b/content/renderer/loader/web_worker_fetch_context_impl.cc
@@ -429,13 +429,12 @@
 
 std::unique_ptr<blink::WebURLLoaderFactory>
 WebWorkerFetchContextImpl::WrapURLLoaderFactory(
-    mojo::ScopedMessagePipeHandle url_loader_factory_handle) {
+    blink::CrossVariantMojoRemote<network::mojom::URLLoaderFactoryInterfaceBase>
+        url_loader_factory) {
   return std::make_unique<WebURLLoaderFactoryImpl>(
       resource_dispatcher_->GetWeakPtr(),
       base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>(
-          mojo::PendingRemote<network::mojom::URLLoaderFactory>(
-              std::move(url_loader_factory_handle),
-              network::mojom::URLLoaderFactory::Version_)));
+          std::move(url_loader_factory)));
 }
 
 std::unique_ptr<blink::CodeCacheLoader>
@@ -539,7 +538,8 @@
       ancestor_frame_id_, std::move(task_runner));
 }
 
-mojo::ScopedMessagePipeHandle
+blink::CrossVariantMojoReceiver<
+    blink::mojom::WorkerTimingContainerInterfaceBase>
 WebWorkerFetchContextImpl::TakePendingWorkerTimingReceiver(int request_id) {
   auto iter = worker_timing_container_receivers_.find(request_id);
   if (iter == worker_timing_container_receivers_.end()) {
@@ -547,7 +547,7 @@
   }
   auto receiver = std::move(iter->second);
   worker_timing_container_receivers_.erase(iter);
-  return receiver.PassPipe();
+  return std::move(receiver);
 }
 
 void WebWorkerFetchContextImpl::SetIsOfflineMode(bool is_offline_mode) {
diff --git a/content/renderer/loader/web_worker_fetch_context_impl.h b/content/renderer/loader/web_worker_fetch_context_impl.h
index 1ea853a..8a45725 100644
--- a/content/renderer/loader/web_worker_fetch_context_impl.h
+++ b/content/renderer/loader/web_worker_fetch_context_impl.h
@@ -111,7 +111,9 @@
   void InitializeOnWorkerThread(blink::AcceptLanguagesWatcher*) override;
   blink::WebURLLoaderFactory* GetURLLoaderFactory() override;
   std::unique_ptr<blink::WebURLLoaderFactory> WrapURLLoaderFactory(
-      mojo::ScopedMessagePipeHandle url_loader_factory_handle) override;
+      blink::CrossVariantMojoRemote<
+          network::mojom::URLLoaderFactoryInterfaceBase> url_loader_factory)
+      override;
   std::unique_ptr<blink::CodeCacheLoader> CreateCodeCacheLoader() override;
   void WillSendRequest(blink::WebURLRequest&) override;
   blink::mojom::ControllerServiceWorkerMode GetControllerServiceWorkerMode()
@@ -131,8 +133,9 @@
   std::unique_ptr<blink::WebSocketHandshakeThrottle>
   CreateWebSocketHandshakeThrottle(
       scoped_refptr<base::SingleThreadTaskRunner> task_runner) override;
-  mojo::ScopedMessagePipeHandle TakePendingWorkerTimingReceiver(
-      int request_id) override;
+  blink::CrossVariantMojoReceiver<
+      blink::mojom::WorkerTimingContainerInterfaceBase>
+  TakePendingWorkerTimingReceiver(int request_id) override;
   void SetIsOfflineMode(bool is_offline_mode) override;
 
   // blink::mojom::ServiceWorkerWorkerClient implementation:
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index 6bee908..13de149 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -303,6 +303,13 @@
   SynchronizeVisualProperties();
 }
 
+void RenderFrameProxy::OnRootWindowSegmentsChanged(
+    std::vector<gfx::Rect> root_widget_window_segments) {
+  pending_visual_properties_.root_widget_window_segments =
+      std::move(root_widget_window_segments);
+  SynchronizeVisualProperties();
+}
+
 void RenderFrameProxy::OnPageScaleFactorChanged(float page_scale_factor,
                                                 bool is_pinch_gesture_active) {
   DCHECK(ancestor_render_widget_);
@@ -516,6 +523,8 @@
           pending_visual_properties_.visible_viewport_size ||
       sent_visual_properties_->compositor_viewport !=
           pending_visual_properties_.compositor_viewport ||
+      sent_visual_properties_->root_widget_window_segments !=
+          pending_visual_properties_.root_widget_window_segments ||
       capture_sequence_number_changed;
 
   if (synchronized_props_changed) {
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index d8e0e4f6..04e2e88 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -139,6 +139,8 @@
   // a result.
   void OnScreenInfoChanged(const ScreenInfo& screen_info);
   void OnZoomLevelChanged(double zoom_level);
+  void OnRootWindowSegmentsChanged(
+      std::vector<gfx::Rect> root_widget_window_segments);
   void OnPageScaleFactorChanged(float page_scale_factor,
                                 bool is_pinch_gesture_active);
   void OnVisibleViewportSizeChanged(const gfx::Size& visible_viewport_size);
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 8f50719..f5b9808 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -753,6 +753,20 @@
   if (for_frame()) {
     SetZoomLevel(visual_properties.zoom_level);
 
+    if (root_widget_window_segments_ !=
+        visual_properties.root_widget_window_segments) {
+      root_widget_window_segments_ =
+          visual_properties.root_widget_window_segments;
+
+      // TODO(crbug.com/1039050) Set this on WebWidget, so Blink can expose the
+      // values to JavaScript and CSS.
+
+      // Propagate changes down to child local root RenderWidgets in other frame
+      // trees/processes.
+      for (auto& observer : render_frame_proxies_)
+        observer.OnRootWindowSegmentsChanged(root_widget_window_segments_);
+    }
+
     bool capture_sequence_number_changed =
         visual_properties.capture_sequence_number !=
         last_capture_sequence_number_;
@@ -3070,6 +3084,7 @@
   proxy->OnScreenInfoChanged(GetOriginalScreenInfo());
   proxy->OnZoomLevelChanged(zoom_level_);
   proxy->OnVisibleViewportSizeChanged(visible_viewport_size_);
+  proxy->OnRootWindowSegmentsChanged(root_widget_window_segments_);
 }
 
 void RenderWidget::UnregisterRenderFrameProxy(RenderFrameProxy* proxy) {
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index 6f9a457..570168ce 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -884,6 +884,11 @@
   gfx::Rect widget_screen_rect_;
   gfx::Rect window_screen_rect_;
 
+  // Stored during the SynchronizeVisualProperties cascade. See VisualProperties
+  // for a more detailed explanation of how when this value is computed and
+  // propagated.
+  std::vector<gfx::Rect> root_widget_window_segments_;
+
   scoped_refptr<WidgetInputHandlerManager> widget_input_handler_manager_;
 
   // The time spent in input handlers this frame. Used to throttle input acks.
diff --git a/content/renderer/service_worker/service_worker_fetch_context_impl.cc b/content/renderer/service_worker/service_worker_fetch_context_impl.cc
index 1282704b..b6dc30a 100644
--- a/content/renderer/service_worker/service_worker_fetch_context_impl.cc
+++ b/content/renderer/service_worker/service_worker_fetch_context_impl.cc
@@ -100,13 +100,12 @@
 
 std::unique_ptr<blink::WebURLLoaderFactory>
 ServiceWorkerFetchContextImpl::WrapURLLoaderFactory(
-    mojo::ScopedMessagePipeHandle url_loader_factory_handle) {
+    blink::CrossVariantMojoRemote<network::mojom::URLLoaderFactoryInterfaceBase>
+        url_loader_factory) {
   return std::make_unique<WebURLLoaderFactoryImpl>(
       resource_dispatcher_->GetWeakPtr(),
       base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>(
-          mojo::PendingRemote<network::mojom::URLLoaderFactory>(
-              std::move(url_loader_factory_handle),
-              network::mojom::URLLoaderFactory::Version_)));
+          std::move(url_loader_factory)));
 }
 
 blink::WebURLLoaderFactory*
@@ -205,7 +204,8 @@
   return blink::WebString::FromUTF8(renderer_preferences_.accept_languages);
 }
 
-mojo::ScopedMessagePipeHandle
+blink::CrossVariantMojoReceiver<
+    blink::mojom::WorkerTimingContainerInterfaceBase>
 ServiceWorkerFetchContextImpl::TakePendingWorkerTimingReceiver(int request_id) {
   // No receiver exists because requests from service workers are never handled
   // by a service worker.
diff --git a/content/renderer/service_worker/service_worker_fetch_context_impl.h b/content/renderer/service_worker/service_worker_fetch_context_impl.h
index 0eb6cc7..d7f7634c 100644
--- a/content/renderer/service_worker/service_worker_fetch_context_impl.h
+++ b/content/renderer/service_worker/service_worker_fetch_context_impl.h
@@ -60,7 +60,9 @@
   void InitializeOnWorkerThread(blink::AcceptLanguagesWatcher*) override;
   blink::WebURLLoaderFactory* GetURLLoaderFactory() override;
   std::unique_ptr<blink::WebURLLoaderFactory> WrapURLLoaderFactory(
-      mojo::ScopedMessagePipeHandle url_loader_factory_handle) override;
+      blink::CrossVariantMojoRemote<
+          network::mojom::URLLoaderFactoryInterfaceBase> url_loader_factory)
+      override;
   blink::WebURLLoaderFactory* GetScriptLoaderFactory() override;
   void WillSendRequest(blink::WebURLRequest&) override;
   blink::mojom::ControllerServiceWorkerMode GetControllerServiceWorkerMode()
@@ -71,8 +73,9 @@
   CreateWebSocketHandshakeThrottle(
       scoped_refptr<base::SingleThreadTaskRunner> task_runner) override;
   blink::WebString GetAcceptLanguages() const override;
-  mojo::ScopedMessagePipeHandle TakePendingWorkerTimingReceiver(
-      int request_id) override;
+  blink::CrossVariantMojoReceiver<
+      blink::mojom::WorkerTimingContainerInterfaceBase>
+  TakePendingWorkerTimingReceiver(int request_id) override;
   void SetIsOfflineMode(bool) override;
   blink::mojom::SubresourceLoaderUpdater* GetSubresourceLoaderUpdater()
       override;
diff --git a/content/renderer/service_worker/service_worker_network_provider_for_frame.cc b/content/renderer/service_worker/service_worker_network_provider_for_frame.cc
index bf68b2b4..cc1f91e 100644
--- a/content/renderer/service_worker/service_worker_network_provider_for_frame.cc
+++ b/content/renderer/service_worker/service_worker_network_provider_for_frame.cc
@@ -175,14 +175,13 @@
   context()->DispatchNetworkQuiet();
 }
 
-mojo::ScopedMessagePipeHandle
+blink::CrossVariantMojoReceiver<
+    blink::mojom::WorkerTimingContainerInterfaceBase>
 ServiceWorkerNetworkProviderForFrame::TakePendingWorkerTimingReceiver(
     int request_id) {
   if (!context())
     return {};
-  auto worker_timing_receiver =
-      context()->TakePendingWorkerTimingReceiver(request_id);
-  return worker_timing_receiver.PassPipe();
+  return context()->TakePendingWorkerTimingReceiver(request_id);
 }
 
 void ServiceWorkerNetworkProviderForFrame::NotifyExecutionReady() {
diff --git a/content/renderer/service_worker/service_worker_network_provider_for_frame.h b/content/renderer/service_worker/service_worker_network_provider_for_frame.h
index 9fb21f3..81624c1b 100644
--- a/content/renderer/service_worker/service_worker_network_provider_for_frame.h
+++ b/content/renderer/service_worker/service_worker_network_provider_for_frame.h
@@ -52,8 +52,9 @@
       override;
   int64_t ControllerServiceWorkerID() override;
   void DispatchNetworkQuiet() override;
-  mojo::ScopedMessagePipeHandle TakePendingWorkerTimingReceiver(
-      int request_id) override;
+  blink::CrossVariantMojoReceiver<
+      blink::mojom::WorkerTimingContainerInterfaceBase>
+  TakePendingWorkerTimingReceiver(int request_id) override;
 
   ServiceWorkerProviderContext* context() { return context_.get(); }
 
diff --git a/content/renderer/worker/dedicated_worker_host_factory_client.cc b/content/renderer/worker/dedicated_worker_host_factory_client.cc
index 55f6de7..1739221 100644
--- a/content/renderer/worker/dedicated_worker_host_factory_client.cc
+++ b/content/renderer/worker/dedicated_worker_host_factory_client.cc
@@ -110,7 +110,7 @@
 void DedicatedWorkerHostFactoryClient::OnWorkerHostCreated(
     mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>
         browser_interface_broker) {
-  worker_->OnWorkerHostCreated(browser_interface_broker.PassPipe());
+  worker_->OnWorkerHostCreated(std::move(browser_interface_broker));
 }
 
 void DedicatedWorkerHostFactoryClient::OnScriptLoadStarted(
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 5a4c4a6..a05a1e03 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1985,6 +1985,7 @@
     "../common/page_state_serialization_unittest.cc",
     "../common/service_manager/service_manager_connection_impl_unittest.cc",
     "../common/service_worker/service_worker_utils_unittest.cc",
+    "../common/state_transitions_unittest.cc",
     "../common/tab_switch_time_recorder_unittest.cc",
     "../common/unique_name_helper_unittest.cc",
     "../common/webplugininfo_unittest.cc",
diff --git a/content/test/data/accessibility/aria/aria-controls-expected-win.txt b/content/test/data/accessibility/aria/aria-controls-expected-win.txt
index 62995b0..c692e31 100644
--- a/content/test/data/accessibility/aria/aria-controls-expected-win.txt
+++ b/content/test/data/accessibility/aria/aria-controls-expected-win.txt
@@ -1 +1,7 @@
-#<skip - Not Implemented>
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE n_relations=0
+++ROLE_SYSTEM_MENUBAR IA2_STATE_HORIZONTAL n_relations=0
+++++ROLE_SYSTEM_MENUITEM name='File' n_relations=1
+++++ROLE_SYSTEM_MENUITEM name='Edit' n_relations=0
+++ROLE_SYSTEM_MENUPOPUP name='File' n_relations=1
+++++ROLE_SYSTEM_MENUITEM name='New' n_relations=0
+++++ROLE_SYSTEM_MENUITEM name='Open' n_relations=0
\ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-controls.html b/content/test/data/accessibility/aria/aria-controls.html
index d8bf3b47..5bd1cd6 100644
--- a/content/test/data/accessibility/aria/aria-controls.html
+++ b/content/test/data/accessibility/aria/aria-controls.html
@@ -3,6 +3,7 @@
 @MAC-DENY:AXValue*
 @MAC-ALLOW:AXLinkedUIElements*
 @MAC-DENY:AXLinkedUIElements=[]
+@WIN-ALLOW:n_relations*
 -->
 <!DOCTYPE html>
 <html>
diff --git a/content/test/data/android/auto_downloads_permissions.html b/content/test/data/android/auto_downloads_permissions.html
new file mode 100644
index 0000000..36ef327
--- /dev/null
+++ b/content/test/data/android/auto_downloads_permissions.html
@@ -0,0 +1,16 @@
+<html>
+This page triggers two file downloads.
+<script>
+    var count = 0;
+function triggerDownload() {
+    var a = document.createElement('a');
+    a.download = "test-image" + count + ".png";
+    count++;
+    a.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAABC0lEQVQYlTXPPUsCYQDA8b/e04tdQR5ZBpE3NAR6S0SDVDZKDQ2BY9TUy1foE0TQ1Edo6hOEkyUG0QuBRtQgl0hnenVdnZD5eLbU7xv8Avy5X16KhrQBg47EtpziXO6qBhAEeNEm0qr7VdBcLxt2mlnNbhVu0NMAgdj1wvjOoX2xdSt0L7MGgx2GGid8yLrJvJMUkbKfOF8N68bUIqcz2wQR7GUcYvJIr1dFQijvkh89xGV6BPPMwvMF/nQXJMgWiM+KLPX2tc0HNa/HUxDv2owpx7xV+023Hiwpdt7yhmcjj9/NdrIhn8LrPVmotctWVd01Nt27wH9T3YhHU5O+sT/6SuVZKa4cNGoAv/ZMas7pC/KaAAAAAElFTkSuQmCC";
+    a.click();
+}
+
+triggerDownload();
+triggerDownload();
+</script>
+</html>
\ No newline at end of file
diff --git a/content/test/data/android/midi_permissions.html b/content/test/data/android/midi_permissions.html
new file mode 100644
index 0000000..791a5b5
--- /dev/null
+++ b/content/test/data/android/midi_permissions.html
@@ -0,0 +1,11 @@
+<html>
+<script>
+var error_message = "";
+navigator.requestMIDIAccess({sysex: true}).then(
+  _ => { document.title = "pass" },
+  _ => {
+    document.title = "fail";
+  });
+</script>
+Page that requests midi access.
+</html>
diff --git a/content/test/data/appcache/simple_page.manifest b/content/test/data/appcache/simple_page.manifest
index f271363..e272ea9 100644
--- a/content/test/data/appcache/simple_page.manifest
+++ b/content/test/data/appcache/simple_page.manifest
@@ -5,3 +5,6 @@
 
 NETWORK:
 *
+
+ORIGIN-TRIAL:
+AseQL1+xng7ZqEbO0mynsp3rl7CUC0u7b79iWgwSIpIjhJfUp/W+O9K2dL8kvdUjOeLssX0mToI2Bvjn0af0Hw0AAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDgwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2Mzg1NjU2Mn0=
diff --git a/content/test/data/appcache/simple_page_with_manifest.html b/content/test/data/appcache/simple_page_with_manifest.html
index bb120eb..449c2a4 100644
--- a/content/test/data/appcache/simple_page_with_manifest.html
+++ b/content/test/data/appcache/simple_page_with_manifest.html
@@ -1,6 +1,12 @@
 <!doctype html>
 <html manifest="simple_page.manifest">
 <meta charset="utf-8">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py --version=2 http://127.0.0.1:8080 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AseQL1+xng7ZqEbO0mynsp3rl7CUC0u7b79iWgwSIpIjhJfUp/W+O9K2dL8kvdUjOeLssX0mToI2Bvjn0af0Hw0AAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDgwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2Mzg1NjU2Mn0=">
+
 <title>OK</title>
 <script>
 'use strict';
diff --git a/content/test/data/media/getusermedia.html b/content/test/data/media/getusermedia.html
index 9ae5ef4..15296225 100644
--- a/content/test/data/media/getusermedia.html
+++ b/content/test/data/media/getusermedia.html
@@ -43,7 +43,7 @@
         JSON.stringify(constraints));
     navigator.mediaDevices.getUserMedia(constraints)
         .then(stream => {
-          window.document.title = 'Granted:1';
+          window.document.title = 'Granted';
           detectVideoInLocalView1(stream).then(() => {
             stream.getVideoTracks()[0].stop();
             detectVideoStopped('local-view-1')
@@ -51,7 +51,7 @@
           });
         })
         .catch(() => {
-          window.document.title = 'Denied:1';
+          window.document.title = 'Denied';
           failTest();
         });
   }
diff --git a/device/vr/public/mojom/vr_service.mojom b/device/vr/public/mojom/vr_service.mojom
index de65ab0..395c7f6 100644
--- a/device/vr/public/mojom/vr_service.mojom
+++ b/device/vr/public/mojom/vr_service.mojom
@@ -60,6 +60,7 @@
   HIT_TEST = 7,
   LIGHT_ESTIMATION = 8, // Experimental feature.
   ANCHORS = 9,  // Experimental feature.
+  CAMERA_ACCESS = 10, // Experimental feature.
 };
 
 // These values are persisted to logs. Entries should not be renumbered and
@@ -655,6 +656,19 @@
   RequestSessionError failure_reason;
 };
 
+// Return value for VRService.MakeXrCompatible() to indicate whether the GPU
+// process is compatible with the active VR headset.
+enum XrCompatibleResult {
+  // Compatibility results where the GPU process was not restarted.
+  kAlreadyCompatible,
+  kNotCompatible,
+
+  // Compatibility results where the GPU was restarted. Context lost and
+  // restored for existing WebGL contexts must be handled before using for XR.
+  kCompatibleAfterRestart,    // XR compatible, GPU process was restarted.
+  kNotCompatibleAfterRestart, // Not XR compatible, GPU process was restarted.
+};
+
 // Interface for requesting XRDevice interfaces and registering for
 // notifications that the XRDevice has changed. Implemented in the browser
 // process and consumed in the renderer process.
@@ -681,6 +695,17 @@
   // renderer can (and may) still decide to submit frames and that should not be
   // treated as illegal or clear the throttled state.
   SetFramesThrottled(bool throttled);
+
+  // Request for the GPU process to be compatible with the active VR headset.
+  // This will trigger the initialization of the XR process if it isn't already
+  // initialized and then restart the GPU process if it's not using the same GPU
+  // as the VR headset. The Sync attribute is needed because there are two ways
+  // for WebXR to trigger this - WebGLRenderingContext.makeXRCompatible()
+  // which returns a promise and is asynchronous, and
+  // HTMLCanvasElement.getContext('webgl', { xrCompatible: true }) which is
+  // synchronous and must return a context that is already xr compatible.
+  [Sync]
+  MakeXrCompatible() => (XrCompatibleResult xr_compatible_result);
 };
 
 // Any metrics that must be recorded throughout the duration of an XR session
diff --git a/docs/clang_tidy.md b/docs/clang_tidy.md
index 6b1ca7d0..112d7b02e 100644
--- a/docs/clang_tidy.md
+++ b/docs/clang_tidy.md
@@ -30,13 +30,70 @@
 
 ### Adding a new check
 
-If you'd like to propose the addition of a new check, please send an email to
-cxx@chromium.org describing why you think the check is helpful. If the proposed
-check is approved, you may turn it on, though please note that this is only
+New checks require review from cxx@chromium.org. If you propose a check and it
+gets approved, you may turn it on, though please note that this is only
 provisional approval: we get signal from users clicking "Not Useful" on
 comments. If feedback is overwhelmingly "users don't find this useful," the
 check may be removed.
 
+Traditionally, petitions to add checks include [an
+evaluation](https://docs.google.com/document/d/1i1KmXtDD4j_qjhmAdGlJ6UkYXByVX1Kp952Zusdcl5k/edit?usp=sharing)
+of the check under review. Crucially, this includes two things:
+
+- a count of how many times this check fires across Chromium
+- a random sample (>30) of places where the check fires across Chromium
+
+It's expected that the person proposing the check has manually surveyed every
+clang-tidy diagnostic in the sample, noting any bugs, odd behaviors, or
+interesting patterns they've noticed. If clang-tidy emits FixIts, these are
+expected to be considered by the evaluation, too.
+
+An example of a previous proposal email thread is
+[here](https://groups.google.com/a/chromium.org/g/cxx/c/iZ6-Y9ZhC3Q/m/g-8HzqmbAAAJ).
+
+#### Evaluating: running clang-tidy across Chromium
+
+Running clang-tidy requires some setup. First, you'll need to sync clang-tidy,
+which requires adding `checkout_clang_tidy` to your `.gclient` file:
+
+```
+solutions = [
+  {
+    'custom_vars': {
+      'checkout_clang_tidy': True,
+    },
+  }
+]
+```
+
+Your next run of `gclient runhooks` should cause clang-tidy to be synced.
+
+To run clang-tidy across all of Chromium, you'll need a checkout of Chromium's
+[build/](https://chromium.googlesource.com/chromium/tools/build) repository.
+Once you have that and a Chromium `out/` dir with an `args.gn`, running
+clang-tidy across all of Chromium is a single command:
+
+```
+$ cd ${chromium}/src
+$ ${chromium_build}/scripts/slave/recipes/tricium_clang_tidy_wrapper.resources/tricium_clang_tidy.py \
+    --base_path $PWD \
+    --out_dir out/Linux \
+    --findings_file all_findings.json \
+    --clang_tidy_binary $PWD/third_party/llvm-build/Release+Asserts/bin/clang-tidy \
+    --all
+```
+
+All clang-tidy checks are run on Linux builds of Chromium, so please set up your
+`args.gn` to build Linux.
+
+`all_findings.json` is where all of clang-tidy's findings will be dumped. The
+format of this file is detailed in `tricium_clang_tidy.py`.
+
+**Note** that the above command will use Chromium's top-level `.clang-tidy` file
+(or `.clang-tidy` files scattered throughout `third_party/`, depending on the
+files we lint. In order to test a *new* check, you'll have to add it to
+Chromium's top-level `.clang-tidy` file.
+
 ### Ignoring a check
 
 If a check is invalid on a particular piece of code, clang-tidy supports `//
diff --git a/docs/design/sandbox.md b/docs/design/sandbox.md
index 47bf871..a73501f8 100644
--- a/docs/design/sandbox.md
+++ b/docs/design/sandbox.md
@@ -463,6 +463,14 @@
 modified while a target is running, but different targets can have different
 rules.
 
+### Diagnostics
+
+In Chromium, the policies associated with active processes can be viewed at
+chrome://sandbox. Tracing of the `sandbox` category will output the policy used
+when a process is launched. Tracing can be enabled using chrome://tracing or by
+using the `--trace-startup=-*,disabled-by-default-sandbox` command line flag.
+Trace output can be investigated with `//tools/win/trace-sandbox-viewer.py`.
+
 ## Target bootstrapping
 
 Targets do not start executing with the restrictions specified by policy. They
diff --git a/docs/navigation-request-navigation-state.gv b/docs/navigation-request-navigation-state.gv
new file mode 100644
index 0000000..30f40975
--- /dev/null
+++ b/docs/navigation-request-navigation-state.gv
@@ -0,0 +1,17 @@
+// Generated with https://crrev.com/c/2220116 and:
+//   python3 tools/state_transitions/state_graph.py content/browser/frame_host/navigation_request.cc NavigationState
+//
+// See tools/state_transitions/README.md
+digraph createflow {
+  NOT_STARTED -> {WAITING_FOR_RENDERER_RESPONSE, WILL_START_NAVIGATION, WILL_START_REQUEST};
+  WAITING_FOR_RENDERER_RESPONSE -> {WILL_START_NAVIGATION};
+  WILL_START_NAVIGATION -> {WILL_START_REQUEST, WILL_FAIL_REQUEST};
+  WILL_START_REQUEST -> {WILL_REDIRECT_REQUEST, WILL_PROCESS_RESPONSE, READY_TO_COMMIT, DID_COMMIT, CANCELING, WILL_FAIL_REQUEST, DID_COMMIT_ERROR_PAGE};
+  WILL_REDIRECT_REQUEST -> {WILL_REDIRECT_REQUEST, WILL_PROCESS_RESPONSE, CANCELING, WILL_FAIL_REQUEST};
+  WILL_PROCESS_RESPONSE -> {READY_TO_COMMIT, CANCELING, WILL_FAIL_REQUEST};
+  READY_TO_COMMIT -> {NOT_STARTED, DID_COMMIT, DID_COMMIT_ERROR_PAGE};
+  DID_COMMIT -> {};
+  CANCELING -> {READY_TO_COMMIT, WILL_FAIL_REQUEST};
+  WILL_FAIL_REQUEST -> {READY_TO_COMMIT, CANCELING, WILL_FAIL_REQUEST};
+  DID_COMMIT_ERROR_PAGE -> {};
+}
diff --git a/docs/navigation-request-navigation-state.svg b/docs/navigation-request-navigation-state.svg
new file mode 100644
index 0000000..373aa43
--- /dev/null
+++ b/docs/navigation-request-navigation-state.svg
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.43.0 (0)
+ -->
+<!-- Title: createflow Pages: 1 -->
+<svg width="621pt" height="692pt"
+ viewBox="0.00 0.00 621.28 692.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 688)">
+<title>createflow</title>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-688 617.28,-688 617.28,4 -4,4"/>
+<!-- NOT_STARTED -->
+<g id="node1" class="node">
+<title>NOT_STARTED</title>
+<ellipse fill="none" stroke="black" cx="387.28" cy="-666" rx="72.59" ry="18"/>
+<text text-anchor="middle" x="387.28" y="-662.3" font-family="Times,serif" font-size="14.00">NOT_STARTED</text>
+</g>
+<!-- WAITING_FOR_RENDERER_RESPONSE -->
+<g id="node2" class="node">
+<title>WAITING_FOR_RENDERER_RESPONSE</title>
+<ellipse fill="none" stroke="black" cx="170.28" cy="-594" rx="170.07" ry="18"/>
+<text text-anchor="middle" x="170.28" y="-590.3" font-family="Times,serif" font-size="14.00">WAITING_FOR_RENDERER_RESPONSE</text>
+</g>
+<!-- NOT_STARTED&#45;&gt;WAITING_FOR_RENDERER_RESPONSE -->
+<g id="edge1" class="edge">
+<title>NOT_STARTED&#45;&gt;WAITING_FOR_RENDERER_RESPONSE</title>
+<path fill="none" stroke="black" d="M344.93,-651.34C312.21,-640.78 266.51,-626.04 230.06,-614.28"/>
+<polygon fill="black" stroke="black" points="231.12,-610.95 220.53,-611.21 228.97,-617.61 231.12,-610.95"/>
+</g>
+<!-- WILL_START_NAVIGATION -->
+<g id="node3" class="node">
+<title>WILL_START_NAVIGATION</title>
+<ellipse fill="none" stroke="black" cx="211.28" cy="-522" rx="125.38" ry="18"/>
+<text text-anchor="middle" x="211.28" y="-518.3" font-family="Times,serif" font-size="14.00">WILL_START_NAVIGATION</text>
+</g>
+<!-- NOT_STARTED&#45;&gt;WILL_START_NAVIGATION -->
+<g id="edge2" class="edge">
+<title>NOT_STARTED&#45;&gt;WILL_START_NAVIGATION</title>
+<path fill="none" stroke="black" d="M384.18,-647.98C379.74,-628.18 369.73,-595.7 349.28,-576 332.54,-559.87 310.37,-548.51 288.7,-540.58"/>
+<polygon fill="black" stroke="black" points="289.73,-537.23 279.14,-537.28 287.45,-543.85 289.73,-537.23"/>
+</g>
+<!-- WILL_START_REQUEST -->
+<g id="node4" class="node">
+<title>WILL_START_REQUEST</title>
+<ellipse fill="none" stroke="black" cx="309.28" cy="-450" rx="109.38" ry="18"/>
+<text text-anchor="middle" x="309.28" y="-446.3" font-family="Times,serif" font-size="14.00">WILL_START_REQUEST</text>
+</g>
+<!-- NOT_STARTED&#45;&gt;WILL_START_REQUEST -->
+<g id="edge3" class="edge">
+<title>NOT_STARTED&#45;&gt;WILL_START_REQUEST</title>
+<path fill="none" stroke="black" d="M386.29,-647.67C384.94,-629.54 381.89,-600.38 375.28,-576 366.23,-542.54 361.77,-534.49 345.28,-504 340.26,-494.7 334,-485.01 328.13,-476.49"/>
+<polygon fill="black" stroke="black" points="330.83,-474.26 322.21,-468.11 325.12,-478.29 330.83,-474.26"/>
+</g>
+<!-- WAITING_FOR_RENDERER_RESPONSE&#45;&gt;WILL_START_NAVIGATION -->
+<g id="edge4" class="edge">
+<title>WAITING_FOR_RENDERER_RESPONSE&#45;&gt;WILL_START_NAVIGATION</title>
+<path fill="none" stroke="black" d="M180.42,-575.7C185.14,-567.64 190.85,-557.89 196.07,-548.98"/>
+<polygon fill="black" stroke="black" points="199.23,-550.5 201.27,-540.1 193.19,-546.96 199.23,-550.5"/>
+</g>
+<!-- WILL_START_NAVIGATION&#45;&gt;WILL_START_REQUEST -->
+<g id="edge5" class="edge">
+<title>WILL_START_NAVIGATION&#45;&gt;WILL_START_REQUEST</title>
+<path fill="none" stroke="black" d="M235.01,-504.05C247.77,-494.94 263.68,-483.58 277.49,-473.71"/>
+<polygon fill="black" stroke="black" points="279.68,-476.45 285.78,-467.79 275.61,-470.75 279.68,-476.45"/>
+</g>
+<!-- WILL_FAIL_REQUEST -->
+<g id="node5" class="node">
+<title>WILL_FAIL_REQUEST</title>
+<ellipse fill="none" stroke="black" cx="248.28" cy="-234" rx="100.98" ry="18"/>
+<text text-anchor="middle" x="248.28" y="-230.3" font-family="Times,serif" font-size="14.00">WILL_FAIL_REQUEST</text>
+</g>
+<!-- WILL_START_NAVIGATION&#45;&gt;WILL_FAIL_REQUEST -->
+<g id="edge6" class="edge">
+<title>WILL_START_NAVIGATION&#45;&gt;WILL_FAIL_REQUEST</title>
+<path fill="none" stroke="black" d="M202.34,-503.79C190.63,-480.22 170.74,-436.23 163.28,-396 160.37,-380.27 162.18,-375.96 163.28,-360 165.51,-327.77 156.49,-315.6 173.28,-288 181.1,-275.16 193.32,-264.6 205.65,-256.37"/>
+<polygon fill="black" stroke="black" points="207.54,-259.32 214.16,-251.04 203.82,-253.38 207.54,-259.32"/>
+</g>
+<!-- WILL_START_REQUEST&#45;&gt;WILL_FAIL_REQUEST -->
+<g id="edge7" class="edge">
+<title>WILL_START_REQUEST&#45;&gt;WILL_FAIL_REQUEST</title>
+<path fill="none" stroke="black" d="M236.15,-436.63C213.11,-428.91 190.09,-416.37 176.28,-396 146.06,-351.42 191.36,-292.09 222.67,-259.33"/>
+<polygon fill="black" stroke="black" points="225.38,-261.57 229.89,-251.98 220.38,-256.67 225.38,-261.57"/>
+</g>
+<!-- WILL_REDIRECT_REQUEST -->
+<g id="node6" class="node">
+<title>WILL_REDIRECT_REQUEST</title>
+<ellipse fill="none" stroke="black" cx="309.28" cy="-378" rx="124.28" ry="18"/>
+<text text-anchor="middle" x="309.28" y="-374.3" font-family="Times,serif" font-size="14.00">WILL_REDIRECT_REQUEST</text>
+</g>
+<!-- WILL_START_REQUEST&#45;&gt;WILL_REDIRECT_REQUEST -->
+<g id="edge8" class="edge">
+<title>WILL_START_REQUEST&#45;&gt;WILL_REDIRECT_REQUEST</title>
+<path fill="none" stroke="black" d="M309.28,-431.7C309.28,-423.98 309.28,-414.71 309.28,-406.11"/>
+<polygon fill="black" stroke="black" points="312.78,-406.1 309.28,-396.1 305.78,-406.1 312.78,-406.1"/>
+</g>
+<!-- WILL_PROCESS_RESPONSE -->
+<g id="node7" class="node">
+<title>WILL_PROCESS_RESPONSE</title>
+<ellipse fill="none" stroke="black" cx="347.28" cy="-306" rx="124.28" ry="18"/>
+<text text-anchor="middle" x="347.28" y="-302.3" font-family="Times,serif" font-size="14.00">WILL_PROCESS_RESPONSE</text>
+</g>
+<!-- WILL_START_REQUEST&#45;&gt;WILL_PROCESS_RESPONSE -->
+<g id="edge9" class="edge">
+<title>WILL_START_REQUEST&#45;&gt;WILL_PROCESS_RESPONSE</title>
+<path fill="none" stroke="black" d="M393.64,-438.51C419.25,-430.92 444.7,-417.99 460.28,-396 469.54,-382.95 468.87,-373.5 460.28,-360 450.48,-344.57 434.86,-333.55 418.33,-325.72"/>
+<polygon fill="black" stroke="black" points="419.65,-322.47 409.08,-321.68 416.85,-328.89 419.65,-322.47"/>
+</g>
+<!-- READY_TO_COMMIT -->
+<g id="node8" class="node">
+<title>READY_TO_COMMIT</title>
+<ellipse fill="none" stroke="black" cx="364.28" cy="-90" rx="98.58" ry="18"/>
+<text text-anchor="middle" x="364.28" y="-86.3" font-family="Times,serif" font-size="14.00">READY_TO_COMMIT</text>
+</g>
+<!-- WILL_START_REQUEST&#45;&gt;READY_TO_COMMIT -->
+<g id="edge10" class="edge">
+<title>WILL_START_REQUEST&#45;&gt;READY_TO_COMMIT</title>
+<path fill="none" stroke="black" d="M241.08,-435.81C214.36,-427.89 184.99,-415.42 163.28,-396 130.4,-366.58 119.28,-351.13 119.28,-307 119.28,-307 119.28,-307 119.28,-233 119.28,-156.7 209.33,-120.72 280.24,-104.22"/>
+<polygon fill="black" stroke="black" points="281.11,-107.61 290.11,-102.02 279.59,-100.78 281.11,-107.61"/>
+</g>
+<!-- DID_COMMIT -->
+<g id="node9" class="node">
+<title>DID_COMMIT</title>
+<ellipse fill="none" stroke="black" cx="228.28" cy="-18" rx="67.69" ry="18"/>
+<text text-anchor="middle" x="228.28" y="-14.3" font-family="Times,serif" font-size="14.00">DID_COMMIT</text>
+</g>
+<!-- WILL_START_REQUEST&#45;&gt;DID_COMMIT -->
+<g id="edge11" class="edge">
+<title>WILL_START_REQUEST&#45;&gt;DID_COMMIT</title>
+<path fill="none" stroke="black" d="M223.72,-438.78C190.73,-431.31 154.48,-418.38 127.28,-396 92.9,-367.71 81.28,-351.53 81.28,-307 81.28,-307 81.28,-307 81.28,-161 81.28,-102.7 141.84,-60.74 185.22,-38.16"/>
+<polygon fill="black" stroke="black" points="186.84,-41.27 194.19,-33.64 183.69,-35.02 186.84,-41.27"/>
+</g>
+<!-- CANCELING -->
+<g id="node10" class="node">
+<title>CANCELING</title>
+<ellipse fill="none" stroke="black" cx="454.28" cy="-162" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="454.28" y="-158.3" font-family="Times,serif" font-size="14.00">CANCELING</text>
+</g>
+<!-- WILL_START_REQUEST&#45;&gt;CANCELING -->
+<g id="edge12" class="edge">
+<title>WILL_START_REQUEST&#45;&gt;CANCELING</title>
+<path fill="none" stroke="black" d="M394.1,-438.55C423.72,-431.03 455.08,-418.13 477.28,-396 534.42,-339.07 528.5,-291.55 500.28,-216 496.24,-205.16 488.87,-195.08 481.19,-186.67"/>
+<polygon fill="black" stroke="black" points="483.64,-184.16 474.15,-179.45 478.63,-189.05 483.64,-184.16"/>
+</g>
+<!-- DID_COMMIT_ERROR_PAGE -->
+<g id="node11" class="node">
+<title>DID_COMMIT_ERROR_PAGE</title>
+<ellipse fill="none" stroke="black" cx="473.28" cy="-18" rx="128.88" ry="18"/>
+<text text-anchor="middle" x="473.28" y="-14.3" font-family="Times,serif" font-size="14.00">DID_COMMIT_ERROR_PAGE</text>
+</g>
+<!-- WILL_START_REQUEST&#45;&gt;DID_COMMIT_ERROR_PAGE -->
+<g id="edge13" class="edge">
+<title>WILL_START_REQUEST&#45;&gt;DID_COMMIT_ERROR_PAGE</title>
+<path fill="none" stroke="black" d="M404.52,-441.08C439.66,-433.9 477.61,-420.57 505.28,-396 531.08,-373.1 527.72,-357.87 534.28,-324 542.13,-283.55 543.71,-223.29 525.28,-144 517.02,-108.43 499.63,-69.99 487.24,-45.27"/>
+<polygon fill="black" stroke="black" points="490.27,-43.5 482.6,-36.19 484.03,-46.68 490.27,-43.5"/>
+</g>
+<!-- WILL_FAIL_REQUEST&#45;&gt;WILL_FAIL_REQUEST -->
+<g id="edge26" class="edge">
+<title>WILL_FAIL_REQUEST&#45;&gt;WILL_FAIL_REQUEST</title>
+<path fill="none" stroke="black" d="M315.72,-247.39C343.52,-248.27 367.03,-243.81 367.03,-234 367.03,-225.42 349.03,-220.93 325.91,-220.53"/>
+<polygon fill="black" stroke="black" points="325.69,-217.03 315.72,-220.61 325.75,-224.03 325.69,-217.03"/>
+</g>
+<!-- WILL_FAIL_REQUEST&#45;&gt;READY_TO_COMMIT -->
+<g id="edge27" class="edge">
+<title>WILL_FAIL_REQUEST&#45;&gt;READY_TO_COMMIT</title>
+<path fill="none" stroke="black" d="M262.05,-216.15C282.37,-191.28 320.52,-144.57 344.04,-115.79"/>
+<polygon fill="black" stroke="black" points="346.92,-117.78 350.54,-107.82 341.5,-113.36 346.92,-117.78"/>
+</g>
+<!-- WILL_FAIL_REQUEST&#45;&gt;CANCELING -->
+<g id="edge28" class="edge">
+<title>WILL_FAIL_REQUEST&#45;&gt;CANCELING</title>
+<path fill="none" stroke="black" d="M288.28,-217.46C321.04,-205.87 367.47,-190.09 402.95,-178.5"/>
+<polygon fill="black" stroke="black" points="404.22,-181.77 412.65,-175.35 402.06,-175.11 404.22,-181.77"/>
+</g>
+<!-- WILL_REDIRECT_REQUEST&#45;&gt;WILL_FAIL_REQUEST -->
+<g id="edge14" class="edge">
+<title>WILL_REDIRECT_REQUEST&#45;&gt;WILL_FAIL_REQUEST</title>
+<path fill="none" stroke="black" d="M259.6,-361.28C242.11,-353.09 224.33,-341.1 214.28,-324 202.41,-303.78 214.12,-278.65 226.93,-260.26"/>
+<polygon fill="black" stroke="black" points="230.05,-261.93 233.21,-251.82 224.43,-257.75 230.05,-261.93"/>
+</g>
+<!-- WILL_REDIRECT_REQUEST&#45;&gt;WILL_REDIRECT_REQUEST -->
+<g id="edge15" class="edge">
+<title>WILL_REDIRECT_REQUEST&#45;&gt;WILL_REDIRECT_REQUEST</title>
+<path fill="none" stroke="black" d="M392.15,-391.44C424.48,-392.08 451.42,-387.6 451.42,-378 451.42,-369.41 429.87,-364.92 402.17,-364.53"/>
+<polygon fill="black" stroke="black" points="402.14,-361.03 392.15,-364.56 402.16,-368.03 402.14,-361.03"/>
+</g>
+<!-- WILL_REDIRECT_REQUEST&#45;&gt;WILL_PROCESS_RESPONSE -->
+<g id="edge16" class="edge">
+<title>WILL_REDIRECT_REQUEST&#45;&gt;WILL_PROCESS_RESPONSE</title>
+<path fill="none" stroke="black" d="M318.68,-359.7C323.05,-351.64 328.34,-341.89 333.18,-332.98"/>
+<polygon fill="black" stroke="black" points="336.3,-334.56 338,-324.1 330.15,-331.22 336.3,-334.56"/>
+</g>
+<!-- WILL_REDIRECT_REQUEST&#45;&gt;CANCELING -->
+<g id="edge17" class="edge">
+<title>WILL_REDIRECT_REQUEST&#45;&gt;CANCELING</title>
+<path fill="none" stroke="black" d="M410.81,-367.45C437.63,-359.75 463.69,-346.52 480.28,-324 509.76,-284 486.61,-223.18 469.13,-188.88"/>
+<polygon fill="black" stroke="black" points="472.17,-187.15 464.39,-179.95 465.98,-190.43 472.17,-187.15"/>
+</g>
+<!-- WILL_PROCESS_RESPONSE&#45;&gt;WILL_FAIL_REQUEST -->
+<g id="edge18" class="edge">
+<title>WILL_PROCESS_RESPONSE&#45;&gt;WILL_FAIL_REQUEST</title>
+<path fill="none" stroke="black" d="M323.57,-288.23C310.59,-279.06 294.33,-267.56 280.24,-257.6"/>
+<polygon fill="black" stroke="black" points="281.99,-254.55 271.8,-251.63 277.95,-260.26 281.99,-254.55"/>
+</g>
+<!-- WILL_PROCESS_RESPONSE&#45;&gt;READY_TO_COMMIT -->
+<g id="edge19" class="edge">
+<title>WILL_PROCESS_RESPONSE&#45;&gt;READY_TO_COMMIT</title>
+<path fill="none" stroke="black" d="M359.59,-287.78C365.93,-277.84 373.01,-264.8 376.28,-252 388.01,-206.13 379.04,-150.7 371.58,-118.3"/>
+<polygon fill="black" stroke="black" points="374.9,-117.13 369.14,-108.24 368.09,-118.78 374.9,-117.13"/>
+</g>
+<!-- WILL_PROCESS_RESPONSE&#45;&gt;CANCELING -->
+<g id="edge20" class="edge">
+<title>WILL_PROCESS_RESPONSE&#45;&gt;CANCELING</title>
+<path fill="none" stroke="black" d="M371.09,-288.27C383.55,-278.68 398.44,-265.81 409.28,-252 424.24,-232.96 436.29,-208.16 444.14,-189.57"/>
+<polygon fill="black" stroke="black" points="447.42,-190.81 447.96,-180.23 440.94,-188.16 447.42,-190.81"/>
+</g>
+<!-- READY_TO_COMMIT&#45;&gt;NOT_STARTED -->
+<g id="edge21" class="edge">
+<title>READY_TO_COMMIT&#45;&gt;NOT_STARTED</title>
+<path fill="none" stroke="black" d="M436.16,-102.53C466.28,-110.25 500.07,-123.01 525.28,-144 587.95,-196.18 613.28,-223.45 613.28,-305 613.28,-523 613.28,-523 613.28,-523 613.28,-598.7 521.25,-635.61 454.65,-652.41"/>
+<polygon fill="black" stroke="black" points="453.5,-649.09 444.61,-654.84 455.15,-655.89 453.5,-649.09"/>
+</g>
+<!-- READY_TO_COMMIT&#45;&gt;DID_COMMIT -->
+<g id="edge22" class="edge">
+<title>READY_TO_COMMIT&#45;&gt;DID_COMMIT</title>
+<path fill="none" stroke="black" d="M332.74,-72.76C313.19,-62.7 287.94,-49.7 267.16,-39.01"/>
+<polygon fill="black" stroke="black" points="268.75,-35.89 258.26,-34.43 265.55,-42.12 268.75,-35.89"/>
+</g>
+<!-- READY_TO_COMMIT&#45;&gt;DID_COMMIT_ERROR_PAGE -->
+<g id="edge23" class="edge">
+<title>READY_TO_COMMIT&#45;&gt;DID_COMMIT_ERROR_PAGE</title>
+<path fill="none" stroke="black" d="M389.84,-72.59C404.39,-63.25 422.81,-51.41 438.64,-41.25"/>
+<polygon fill="black" stroke="black" points="440.61,-44.14 447.13,-35.8 436.83,-38.25 440.61,-44.14"/>
+</g>
+<!-- CANCELING&#45;&gt;WILL_FAIL_REQUEST -->
+<g id="edge24" class="edge">
+<title>CANCELING&#45;&gt;WILL_FAIL_REQUEST</title>
+<path fill="none" stroke="black" d="M418.88,-176.91C388.2,-187.83 343.33,-203.13 307.26,-214.99"/>
+<polygon fill="black" stroke="black" points="305.76,-211.8 297.35,-218.24 307.94,-218.45 305.76,-211.8"/>
+</g>
+<!-- CANCELING&#45;&gt;READY_TO_COMMIT -->
+<g id="edge25" class="edge">
+<title>CANCELING&#45;&gt;READY_TO_COMMIT</title>
+<path fill="none" stroke="black" d="M433.41,-144.76C421.65,-135.62 406.78,-124.05 393.84,-113.99"/>
+<polygon fill="black" stroke="black" points="395.71,-111.01 385.67,-107.63 391.42,-116.54 395.71,-111.01"/>
+</g>
+</g>
+</svg>
diff --git a/extensions/browser/api/declarative_net_request/constants.cc b/extensions/browser/api/declarative_net_request/constants.cc
index 79fa69c6..692e1c2 100644
--- a/extensions/browser/api/declarative_net_request/constants.cc
+++ b/extensions/browser/api/declarative_net_request/constants.cc
@@ -65,6 +65,15 @@
     "one of these keys must be specified with a non-empty list.";
 const char kErrorInvalidHeaderName[] =
     "Rule with id * must specify a valid header name to be modified.";
+const char kErrorInvalidHeaderValue[] =
+    "Rule with id * specifies an invalid header value.";
+const char kErrorNoHeaderValueSpecified[] =
+    "Rule with id * must provide a value for a header to be appended/set.";
+const char kErrorHeaderValuePresent[] =
+    "Rule with id * must not provide a header value for a header to be "
+    "removed.";
+const char kErrorCannotAppendRequestHeader[] =
+    "Rule with id * must not specify a request header to be appended.";
 const char kErrorListNotPassed[] = "Rules file must contain a list.";
 
 const char kRuleCountExceeded[] =
diff --git a/extensions/browser/api/declarative_net_request/constants.h b/extensions/browser/api/declarative_net_request/constants.h
index 4c80dae..8b54d660 100644
--- a/extensions/browser/api/declarative_net_request/constants.h
+++ b/extensions/browser/api/declarative_net_request/constants.h
@@ -56,7 +56,11 @@
   ERROR_NO_HEADERS_SPECIFIED,
   ERROR_EMPTY_REQUEST_HEADERS_LIST,
   ERROR_EMPTY_RESPONSE_HEADERS_LIST,
-  ERROR_INVALID_HEADER_NAME
+  ERROR_INVALID_HEADER_NAME,
+  ERROR_INVALID_HEADER_VALUE,
+  ERROR_HEADER_VALUE_NOT_SPECIFIED,
+  ERROR_HEADER_VALUE_PRESENT,
+  ERROR_APPEND_REQUEST_HEADER_UNSUPPORTED
 };
 
 // Describes the ways in which updating dynamic rules can fail.
@@ -143,6 +147,10 @@
 extern const char kErrorRegexesTooLarge[];
 extern const char kErrorNoHeaderListsSpecified[];
 extern const char kErrorInvalidHeaderName[];
+extern const char kErrorInvalidHeaderValue[];
+extern const char kErrorNoHeaderValueSpecified[];
+extern const char kErrorHeaderValuePresent[];
+extern const char kErrorCannotAppendRequestHeader[];
 
 extern const char kErrorListNotPassed[];
 
diff --git a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
index ff9430d0..885a67c 100644
--- a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
+++ b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
@@ -165,6 +165,9 @@
 
     switch (header_info.operation) {
       case dnr_api::HeaderOperation::HEADER_OPERATION_NONE:
+      case dnr_api::HEADER_OPERATION_APPEND:
+      case dnr_api::HEADER_OPERATION_SET:
+        // TODO(crbug.com/1081544): Add indexing for append/set operations.
         NOTREACHED();
         break;
       case dnr_api::HEADER_OPERATION_REMOVE:
diff --git a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
index 24c08e4..a352dd0 100644
--- a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
@@ -466,12 +466,12 @@
 
   // Modify headers rules.
   std::vector<dnr_api::ModifyHeaderInfo> request_headers_1;
-  request_headers_1.push_back(
-      CreateModifyHeaderInfo(dnr_api::HEADER_OPERATION_REMOVE, "cookie"));
+  request_headers_1.push_back(CreateModifyHeaderInfo(
+      dnr_api::HEADER_OPERATION_REMOVE, "cookie", base::nullopt));
 
   std::vector<dnr_api::ModifyHeaderInfo> response_headers_1;
-  response_headers_1.push_back(
-      CreateModifyHeaderInfo(dnr_api::HEADER_OPERATION_REMOVE, "set-cookie"));
+  response_headers_1.push_back(CreateModifyHeaderInfo(
+      dnr_api::HEADER_OPERATION_REMOVE, "set-cookie", base::nullopt));
 
   rules_to_index.push_back(CreateIndexedRule(
       23, kMinValidPriority, flat_rule::OptionFlag_IS_CASE_INSENSITIVE,
@@ -482,8 +482,8 @@
       std::move(request_headers_1), std::move(response_headers_1)));
 
   std::vector<dnr_api::ModifyHeaderInfo> request_headers_2;
-  request_headers_2.push_back(
-      CreateModifyHeaderInfo(dnr_api::HEADER_OPERATION_REMOVE, "referer"));
+  request_headers_2.push_back(CreateModifyHeaderInfo(
+      dnr_api::HEADER_OPERATION_REMOVE, "referer", base::nullopt));
 
   rules_to_index.push_back(CreateIndexedRule(
       24, kMinValidPriority, flat_rule::OptionFlag_IS_CASE_INSENSITIVE,
@@ -544,8 +544,8 @@
 
   // Modify headers rule.
   std::vector<dnr_api::ModifyHeaderInfo> request_headers;
-  request_headers.push_back(
-      CreateModifyHeaderInfo(dnr_api::HEADER_OPERATION_REMOVE, "referer"));
+  request_headers.push_back(CreateModifyHeaderInfo(
+      dnr_api::HEADER_OPERATION_REMOVE, "referer", base::nullopt));
   rules_to_index.push_back(CreateIndexedRule(
       21, kMinValidPriority, flat_rule::OptionFlag_IS_CASE_INSENSITIVE,
       flat_rule::ElementType_SUBDOCUMENT, flat_rule::ActivationType_NONE,
diff --git a/extensions/browser/api/declarative_net_request/indexed_rule.cc b/extensions/browser/api/declarative_net_request/indexed_rule.cc
index 2181175b..330459e4 100644
--- a/extensions/browser/api/declarative_net_request/indexed_rule.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_rule.cc
@@ -436,6 +436,25 @@
   for (const auto& header_info : headers) {
     if (!net::HttpUtil::IsValidHeaderName(header_info.header))
       return ParseResult::ERROR_INVALID_HEADER_NAME;
+
+    // Ensure that request headers cannot be appended.
+    if (are_request_headers &&
+        header_info.operation == dnr_api::HEADER_OPERATION_APPEND) {
+      return ParseResult::ERROR_APPEND_REQUEST_HEADER_UNSUPPORTED;
+    }
+
+    if (header_info.value) {
+      if (!net::HttpUtil::IsValidHeaderValue(*header_info.value))
+        return ParseResult::ERROR_INVALID_HEADER_VALUE;
+
+      // Check that a remove operation must not specify a value.
+      if (header_info.operation == dnr_api::HEADER_OPERATION_REMOVE)
+        return ParseResult::ERROR_HEADER_VALUE_PRESENT;
+    } else if (header_info.operation == dnr_api::HEADER_OPERATION_APPEND ||
+               header_info.operation == dnr_api::HEADER_OPERATION_SET) {
+      // Check that an append or set operation must specify a value.
+      return ParseResult::ERROR_HEADER_VALUE_NOT_SPECIFIED;
+    }
   }
 
   return ParseResult::SUCCESS;
diff --git a/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc b/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
index 1821cdd4..04a1ff6 100644
--- a/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
@@ -766,6 +766,7 @@
   struct RawHeaderInfo {
     dnr_api::HeaderOperation operation;
     std::string header;
+    base::Optional<std::string> value;
   };
 
   using RawHeaderInfoList = std::vector<RawHeaderInfo>;
@@ -785,7 +786,8 @@
       // Raise an error if the request or response headers list is specified,
       // but empty.
       {RawHeaderInfoList(),
-       RawHeaderInfoList({{dnr_api::HEADER_OPERATION_REMOVE, "set-cookie"}}),
+       RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_REMOVE, "set-cookie", base::nullopt}}),
        ParseResult::ERROR_EMPTY_REQUEST_HEADERS_LIST},
 
       {base::nullopt, RawHeaderInfoList(),
@@ -794,21 +796,51 @@
       // Raise an error if a header list contains an empty or invalid header
       // name.
       {base::nullopt,
-       RawHeaderInfoList({{dnr_api::HEADER_OPERATION_REMOVE, ""}}),
+       RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_REMOVE, "", base::nullopt}}),
        ParseResult::ERROR_INVALID_HEADER_NAME},
 
       {base::nullopt,
-       RawHeaderInfoList({{dnr_api::HEADER_OPERATION_REMOVE, "<<invalid>>"}}),
+       RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_REMOVE, "<<invalid>>", base::nullopt}}),
        ParseResult::ERROR_INVALID_HEADER_NAME},
 
-      // Parsing should succeed if only one non-empty header list is specified.
-      {RawHeaderInfoList({{dnr_api::HEADER_OPERATION_REMOVE, "cookie"}}),
+      // Raise an error if a header list contains an invalid header value.
+      {base::nullopt,
+       RawHeaderInfoList({{dnr_api::HEADER_OPERATION_APPEND, "set-cookie",
+                           "invalid\nvalue"}}),
+       ParseResult::ERROR_INVALID_HEADER_VALUE},
+
+      // Raise an error if a header value is specified for a remove rule.
+      {RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_REMOVE, "cookie", "remove"}}),
+       base::nullopt, ParseResult::ERROR_HEADER_VALUE_PRESENT},
+
+      // Raise an error if no header value is specified for an append or set
+      // rule.
+      {RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_SET, "cookie", base::nullopt}}),
+       base::nullopt, ParseResult::ERROR_HEADER_VALUE_NOT_SPECIFIED},
+
+      {base::nullopt,
+       RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_APPEND, "set-cookie", base::nullopt}}),
+       ParseResult::ERROR_HEADER_VALUE_NOT_SPECIFIED},
+
+      // Raise an error if a rule specifies a request header to be appended.
+      {RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_APPEND, "cookie", "cookie-value"}}),
+       base::nullopt, ParseResult::ERROR_APPEND_REQUEST_HEADER_UNSUPPORTED},
+
+      {RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_REMOVE, "cookie", base::nullopt},
+            {dnr_api::HEADER_OPERATION_SET, "referer", ""}}),
        base::nullopt, ParseResult::SUCCESS},
 
-      // Parsing should succeed if both header lists are specified and
-      // non-empty.
-      {RawHeaderInfoList({{dnr_api::HEADER_OPERATION_REMOVE, "referer"}}),
-       RawHeaderInfoList({{dnr_api::HEADER_OPERATION_REMOVE, "set-cookie"}}),
+      {RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_REMOVE, "referer", base::nullopt}}),
+       RawHeaderInfoList(
+           {{dnr_api::HEADER_OPERATION_APPEND, "set-cookie", "abcd"}}),
        ParseResult::SUCCESS},
   };
 
@@ -821,11 +853,11 @@
     if (cases[i].request_headers) {
       rule.action.request_headers = std::make_unique<ModifyHeaderInfoList>();
       for (auto header : *cases[i].request_headers) {
-        rule.action.request_headers->push_back(
-            CreateModifyHeaderInfo(header.operation, header.header));
+        rule.action.request_headers->push_back(CreateModifyHeaderInfo(
+            header.operation, header.header, header.value));
 
-        expected_request_headers.push_back(
-            CreateModifyHeaderInfo(header.operation, header.header));
+        expected_request_headers.push_back(CreateModifyHeaderInfo(
+            header.operation, header.header, header.value));
       }
     }
 
@@ -833,11 +865,11 @@
     if (cases[i].response_headers) {
       rule.action.response_headers = std::make_unique<ModifyHeaderInfoList>();
       for (auto header : *cases[i].response_headers) {
-        rule.action.response_headers->push_back(
-            CreateModifyHeaderInfo(header.operation, header.header));
+        rule.action.response_headers->push_back(CreateModifyHeaderInfo(
+            header.operation, header.header, header.value));
 
-        expected_response_headers.push_back(
-            CreateModifyHeaderInfo(header.operation, header.header));
+        expected_response_headers.push_back(CreateModifyHeaderInfo(
+            header.operation, header.header, header.value));
       }
     }
 
diff --git a/extensions/browser/api/declarative_net_request/parse_info.cc b/extensions/browser/api/declarative_net_request/parse_info.cc
index 3069695..7c0c147 100644
--- a/extensions/browser/api/declarative_net_request/parse_info.cc
+++ b/extensions/browser/api/declarative_net_request/parse_info.cc
@@ -137,6 +137,18 @@
     case ParseResult::ERROR_INVALID_HEADER_NAME:
       return ErrorUtils::FormatErrorMessage(kErrorInvalidHeaderName,
                                             base::NumberToString(*rule_id));
+    case ParseResult::ERROR_INVALID_HEADER_VALUE:
+      return ErrorUtils::FormatErrorMessage(kErrorInvalidHeaderValue,
+                                            base::NumberToString(*rule_id));
+    case ParseResult::ERROR_HEADER_VALUE_NOT_SPECIFIED:
+      return ErrorUtils::FormatErrorMessage(kErrorNoHeaderValueSpecified,
+                                            base::NumberToString(*rule_id));
+    case ParseResult::ERROR_HEADER_VALUE_PRESENT:
+      return ErrorUtils::FormatErrorMessage(kErrorHeaderValuePresent,
+                                            base::NumberToString(*rule_id));
+    case ParseResult::ERROR_APPEND_REQUEST_HEADER_UNSUPPORTED:
+      return ErrorUtils::FormatErrorMessage(kErrorCannotAppendRequestHeader,
+                                            base::NumberToString(*rule_id));
     case ParseResult::ERROR_REGEX_TOO_LARGE:
       // These rules are ignored while indexing and so won't cause an error.
       break;
diff --git a/extensions/browser/api/declarative_net_request/test_utils.cc b/extensions/browser/api/declarative_net_request/test_utils.cc
index c16fcfd6..74f984de 100644
--- a/extensions/browser/api/declarative_net_request/test_utils.cc
+++ b/extensions/browser/api/declarative_net_request/test_utils.cc
@@ -238,18 +238,6 @@
     case ParseResult::ERROR_INVALID_REGEX_FILTER:
       output << "ERROR_INVALID_REGEX_FILTER";
       break;
-    case ParseResult::ERROR_NO_HEADERS_SPECIFIED:
-      output << "ERROR_NO_HEADERS_SPECIFIED";
-      break;
-    case ParseResult::ERROR_EMPTY_REQUEST_HEADERS_LIST:
-      output << "ERROR_EMPTY_REQUEST_HEADERS_LIST";
-      break;
-    case ParseResult::ERROR_EMPTY_RESPONSE_HEADERS_LIST:
-      output << "ERROR_EMPTY_RESPONSE_HEADERS_LIST";
-      break;
-    case ParseResult::ERROR_INVALID_HEADER_NAME:
-      output << "ERROR_INVALID_HEADER_NAME";
-      break;
     case ParseResult::ERROR_REGEX_TOO_LARGE:
       output << "ERROR_REGEX_TOO_LARGE";
       break;
@@ -265,6 +253,30 @@
     case ParseResult::ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE:
       output << "ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE";
       break;
+    case ParseResult::ERROR_NO_HEADERS_SPECIFIED:
+      output << "ERROR_NO_HEADERS_SPECIFIED";
+      break;
+    case ParseResult::ERROR_EMPTY_REQUEST_HEADERS_LIST:
+      output << "ERROR_EMPTY_REQUEST_HEADERS_LIST";
+      break;
+    case ParseResult::ERROR_EMPTY_RESPONSE_HEADERS_LIST:
+      output << "ERROR_EMPTY_RESPONSE_HEADERS_LIST";
+      break;
+    case ParseResult::ERROR_INVALID_HEADER_NAME:
+      output << "ERROR_INVALID_HEADER_NAME";
+      break;
+    case ParseResult::ERROR_INVALID_HEADER_VALUE:
+      output << "ERROR_INVALID_HEADER_VALUE";
+      break;
+    case ParseResult::ERROR_HEADER_VALUE_NOT_SPECIFIED:
+      output << "ERROR_HEADER_VALUE_NOT_SPECIFIED";
+      break;
+    case ParseResult::ERROR_HEADER_VALUE_PRESENT:
+      output << "ERROR_HEADER_VALUE_PRESENT";
+      break;
+    case ParseResult::ERROR_APPEND_REQUEST_HEADER_UNSUPPORTED:
+      output << "ERROR_APPEND_REQUEST_HEADER_UNSUPPORTED";
+      break;
   }
   return output;
 }
@@ -358,18 +370,25 @@
 
 dnr_api::ModifyHeaderInfo CreateModifyHeaderInfo(
     dnr_api::HeaderOperation operation,
-    std::string header) {
+    std::string header,
+    base::Optional<std::string> value) {
   dnr_api::ModifyHeaderInfo header_info;
 
   header_info.operation = operation;
   header_info.header = header;
 
+  if (value)
+    header_info.value = std::make_unique<std::string>(*value);
+
   return header_info;
 }
 
 bool EqualsForTesting(const dnr_api::ModifyHeaderInfo& lhs,
                       const dnr_api::ModifyHeaderInfo& rhs) {
-  return lhs.operation == rhs.operation && lhs.header == rhs.header;
+  bool are_values_equal = lhs.value && rhs.value ? *lhs.value == *rhs.value
+                                                 : lhs.value == rhs.value;
+  return lhs.operation == rhs.operation && lhs.header == rhs.header &&
+         are_values_equal;
 }
 
 RulesetManagerObserver::RulesetManagerObserver(RulesetManager* manager)
diff --git a/extensions/browser/api/declarative_net_request/test_utils.h b/extensions/browser/api/declarative_net_request/test_utils.h
index cd3a94ae..378ca7a 100644
--- a/extensions/browser/api/declarative_net_request/test_utils.h
+++ b/extensions/browser/api/declarative_net_request/test_utils.h
@@ -78,7 +78,8 @@
 
 api::declarative_net_request::ModifyHeaderInfo CreateModifyHeaderInfo(
     api::declarative_net_request::HeaderOperation operation,
-    std::string header);
+    std::string header,
+    base::Optional<std::string> value);
 
 bool EqualsForTesting(
     const api::declarative_net_request::ModifyHeaderInfo& lhs,
diff --git a/extensions/common/api/declarative_net_request.idl b/extensions/common/api/declarative_net_request.idl
index ea5a0b9..fd25367 100644
--- a/extensions/common/api/declarative_net_request.idl
+++ b/extensions/common/api/declarative_net_request.idl
@@ -37,6 +37,10 @@
   // TODO(crbug.com/947591): Add documentation once implementation is complete.
   [nodoc]
   enum HeaderOperation {
+    // Adds a new entry for the specified header. This operation is not
+    // supported for request headers.
+    append,
+    set,
     remove
   };
 
@@ -234,6 +238,7 @@
   dictionary ModifyHeaderInfo {
     DOMString header;
     HeaderOperation operation;
+    DOMString? value;
   };
 
   [noinline_doc]
diff --git a/gpu/vulkan/vulkan_device_queue.cc b/gpu/vulkan/vulkan_device_queue.cc
index 77127965..241fdbe 100644
--- a/gpu/vulkan/vulkan_device_queue.cc
+++ b/gpu/vulkan/vulkan_device_queue.cc
@@ -75,6 +75,9 @@
   for (size_t i = 0; i < info.physical_devices.size(); ++i) {
     const auto& device_info = info.physical_devices[i];
     const auto& device_properties = device_info.properties;
+    if (device_properties.apiVersion < info.used_api_version)
+      continue;
+
     const VkPhysicalDevice& device = device_info.device;
     for (size_t n = 0; n < device_info.queue_families.size(); ++n) {
       if ((device_info.queue_families[n].queueFlags & queue_flags) !=
@@ -172,12 +175,6 @@
     }
   }
 
-  if (vk_physical_device_properties_.apiVersion < info.used_api_version) {
-    LOG(ERROR) << "Physical device doesn't support version."
-               << info.used_api_version;
-    return false;
-  }
-
   crash_keys::vulkan_device_api_version.Set(
       VkVersionToString(vk_physical_device_properties_.apiVersion));
   crash_keys::vulkan_device_driver_version.Set(base::StringPrintf(
diff --git a/gpu/vulkan/vulkan_instance.cc b/gpu/vulkan/vulkan_instance.cc
index 9b1810b2..c68a852d 100644
--- a/gpu/vulkan/vulkan_instance.cc
+++ b/gpu/vulkan/vulkan_instance.cc
@@ -305,20 +305,22 @@
     // API version instead of just testing to see if
     // vkGetPhysicalDeviceFeatures2 is non-null.
     static_assert(kVulkanRequiredApiVersion >= VK_API_VERSION_1_1, "");
-    VkPhysicalDeviceSamplerYcbcrConversionFeatures ycbcr_conversion_features = {
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES};
-    VkPhysicalDeviceProtectedMemoryFeatures protected_memory_feature = {
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES};
-    VkPhysicalDeviceFeatures2 features_2 = {
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};
-    features_2.pNext = &ycbcr_conversion_features;
-    ycbcr_conversion_features.pNext = &protected_memory_feature;
+    if (info.properties.apiVersion >= kVulkanRequiredApiVersion) {
+      VkPhysicalDeviceSamplerYcbcrConversionFeatures ycbcr_conversion_features =
+          {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES};
+      VkPhysicalDeviceProtectedMemoryFeatures protected_memory_feature = {
+          VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES};
+      VkPhysicalDeviceFeatures2 features_2 = {
+          VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};
+      features_2.pNext = &ycbcr_conversion_features;
+      ycbcr_conversion_features.pNext = &protected_memory_feature;
 
-    vkGetPhysicalDeviceFeatures2(device, &features_2);
-    info.features = features_2.features;
-    info.feature_sampler_ycbcr_conversion =
-        ycbcr_conversion_features.samplerYcbcrConversion;
-    info.feature_protected_memory = protected_memory_feature.protectedMemory;
+      vkGetPhysicalDeviceFeatures2(device, &features_2);
+      info.features = features_2.features;
+      info.feature_sampler_ycbcr_conversion =
+          ycbcr_conversion_features.samplerYcbcrConversion;
+      info.feature_protected_memory = protected_memory_feature.protectedMemory;
+    }
 
     count = 0;
     vkGetPhysicalDeviceQueueFamilyProperties(device, &count, nullptr);
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg
index a79cb8e..8f19ca9 100644
--- a/infra/config/generated/commit-queue.cfg
+++ b/infra/config/generated/commit-queue.cfg
@@ -461,6 +461,7 @@
       >
       builders: <
         name: "chromium/try/fuchsia_arm64"
+        experiment_percentage: 3
       >
       builders: <
         name: "chromium/try/fuchsia_x64"
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md
index d3ac896..057e867d 100644
--- a/infra/config/generated/cq-builders.md
+++ b/infra/config/generated/cq-builders.md
@@ -37,8 +37,6 @@
 
 * [fuchsia-x64-cast](https://ci.chromium.org/p/chromium/builders/try/fuchsia-x64-cast) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+fuchsia-x64-cast)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+fuchsia-x64-cast))
 
-* [fuchsia_arm64](https://ci.chromium.org/p/chromium/builders/try/fuchsia_arm64) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+fuchsia_arm64)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+fuchsia_arm64))
-
 * [fuchsia_x64](https://ci.chromium.org/p/chromium/builders/try/fuchsia_x64) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+fuchsia_x64)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+fuchsia_x64))
 
 * [ios-simulator](https://ci.chromium.org/p/chromium/builders/try/ios-simulator) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+ios-simulator)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+ios-simulator))
@@ -339,6 +337,9 @@
 * [fuchsia-compile-x64-dbg](https://ci.chromium.org/p/chromium/builders/try/fuchsia-compile-x64-dbg) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+fuchsia-compile-x64-dbg)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+fuchsia-compile-x64-dbg))
   * Experiment percentage: 50
 
+* [fuchsia_arm64](https://ci.chromium.org/p/chromium/builders/try/fuchsia_arm64) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+fuchsia_arm64)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+fuchsia_arm64))
+  * Experiment percentage: 3
+
 * [ios-simulator-code-coverage](https://ci.chromium.org/p/chromium/builders/try/ios-simulator-code-coverage) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+ios-simulator-code-coverage)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+ios-simulator-code-coverage))
   * Experiment percentage: 3
 
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star
index e7b7e2f..84019cb 100644
--- a/infra/config/subprojects/chromium/try.star
+++ b/infra/config/subprojects/chromium/try.star
@@ -362,9 +362,14 @@
     tryjob = try_.job(),
 )
 
+# The fuchsia_arm64 builder will now run tests as well as compiles.
+# The experiment percentage is used to ramp up the test load while
+# monitoring stability and capacity.  crbug.com/1042511
 try_.chromium_linux_builder(
     name = 'fuchsia_arm64',
-    tryjob = try_.job(),
+    tryjob = try_.job(
+      experiment_percentage=3,
+    ),
 )
 
 try_.chromium_linux_builder(
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index 76ee411..8a0af5a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -376,6 +376,7 @@
 <translation id="5869029295770560994">OK</translation>
 <translation id="5871497086027727873">1件の項目を移動しました</translation>
 <translation id="5897956970858271241">コピーしたリンクにアクセス</translation>
+<translation id="5899314093904173337">近くのユーザーと共有するには、カメラまたは QR スキャンアプリで、この QR コードをスキャンしてもらいます</translation>
 <translation id="5911030830365207728">Google 翻訳</translation>
 <translation id="5913600720976431809">ページ翻訳のオプション</translation>
 <translation id="5938160824633642847">デバイスの空き容量が少なくなっています。空き容量を増やしてからもう一度お試しください。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 75affdb..dbb0517a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -376,6 +376,7 @@
 <translation id="5869029295770560994">OK</translation>
 <translation id="5871497086027727873">1 dấu trang đã được di chuyển</translation>
 <translation id="5897956970858271241">Truy cập vào liên kết đã sao chép</translation>
+<translation id="5899314093904173337">Để chia sẻ với những người ở gần, hãy cho phép họ quét mã QR này bằng máy ảnh hoặc ứng dụng quét mã QR</translation>
 <translation id="5911030830365207728">Google Dịch</translation>
 <translation id="5913600720976431809">Các tùy chọn dịch trang</translation>
 <translation id="5938160824633642847">Thiết bị của bạn gần hết không gian lưu trữ. Hãy giải phóng dung lượng và thử lại.</translation>
diff --git a/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm b/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm
index 03d2104..e67e31f 100644
--- a/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm
+++ b/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm
@@ -21,19 +21,6 @@
 NSString* const kSendTabToSelfActivityType =
     @"com.google.chrome.sendTabToSelfActivity";
 
-const char kClickResultHistogramName[] = "SendTabToSelf.ShareMenu.ClickResult";
-
-// TODO(crbug.com/970886): Move to a directory accessible on all platforms.
-// State of the send tab to self option in the context menu.
-// These values are persisted to logs. Entries should not be renumbered and
-// numeric values should never be reused.
-enum class SendTabToSelfClickResult {
-  kShowItem = 0,
-  kClickItem = 1,
-  kShowDeviceList = 2,
-  kMaxValue = kShowDeviceList,
-};
-
 }  // namespace
 
 @interface SendTabToSelfActivity ()
@@ -48,8 +35,6 @@
 
 - (instancetype)initWithData:(ShareToData*)data
                      handler:(id<BrowserCommands>)handler {
-  base::UmaHistogramEnumeration(kClickResultHistogramName,
-                                SendTabToSelfClickResult::kShowItem);
   if (self = [super init]) {
     _data = data;
     _handler = handler;
diff --git a/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm b/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm
index 87328ab..6160ad8f 100644
--- a/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm
+++ b/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm
@@ -76,10 +76,10 @@
                     atIndex:(int)atIndex
                      reason:(ActiveWebStateChangeReason)reason {
   DCHECK_EQ(_webStateList, webStateList);
-  if (!newWebState)
-    return;
-  infobars::InfoBarManager* infoBarManager =
-      InfoBarManagerImpl::FromWebState(newWebState);
+  infobars::InfoBarManager* infoBarManager = nullptr;
+  if (newWebState) {
+    infoBarManager = InfoBarManagerImpl::FromWebState(newWebState);
+  }
   _infoBarContainer->ChangeInfoBarManager(infoBarManager);
 }
 
diff --git a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm
index 273dc0c..31fdb75c 100644
--- a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm
+++ b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm
@@ -6,7 +6,6 @@
 
 #include "base/check.h"
 #include "base/mac/foundation_util.h"
-#include "base/metrics/histogram_functions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/send_tab_to_self/send_tab_to_self_model.h"
@@ -38,24 +37,6 @@
 NSString* const kSendTabToSelfModalSendButton =
     @"kSendTabToSelfModalSendButton";
 
-// Per histograms.xml this records whether the user has clicked the item when it
-// is shown.
-const char kClickResultHistogramName[] = "SendTabToSelf.ShareMenu.ClickResult";
-// Per histograms.xml this records how many valid devices are shown when user
-// trigger to see the device list.
-const char kDeviceCountHistogramName[] = "SendTabToSelf.ShareMenu.DeviceCount";
-
-// TODO(crbug.com/970886): Move to a directory accessible on all platforms.
-// State of the send tab to self option in the context menu.
-// These values are persisted to logs. Entries should not be renumbered and
-// numeric values should never be reused.
-enum class SendTabToSelfClickResult {
-  kShowItem = 0,
-  kClickItem = 1,
-  kShowDeviceList = 2,
-  kMaxValue = kShowDeviceList,
-};
-
 }  // namespace
 
 typedef NS_ENUM(NSInteger, SectionIdentifier) {
@@ -182,14 +163,6 @@
       toSectionWithIdentifier:SectionIdentifierActionButton];
 }
 
-- (void)viewDidAppear:(BOOL)animated {
-  [super viewDidAppear:animated];
-  base::UmaHistogramEnumeration(kClickResultHistogramName,
-                                SendTabToSelfClickResult::kShowDeviceList);
-  base::UmaHistogramCounts100(kDeviceCountHistogramName,
-                              _target_device_list.size());
-}
-
 #pragma mark - UITableViewDataSource
 
 - (UITableViewCell*)tableView:(UITableView*)tableView
@@ -233,8 +206,6 @@
 #pragma mark - Helpers
 
 - (void)sendTabWhenPressed:(UIButton*)sender {
-  base::UmaHistogramEnumeration(kClickResultHistogramName,
-                                SendTabToSelfClickResult::kClickItem);
   [self.delegate sendTabToTargetDeviceCacheGUID:self.selectedItem.cacheGuid
                                targetDeviceName:self.selectedItem.text];
   [self.delegate dismissViewControllerAnimated:YES completion:nil];
diff --git a/media/filters/vpx_video_decoder.cc b/media/filters/vpx_video_decoder.cc
index d900542c..025ccfa 100644
--- a/media/filters/vpx_video_decoder.cc
+++ b/media/filters/vpx_video_decoder.cc
@@ -242,6 +242,14 @@
                   << vpx_codec_error(vpx_codec_.get());
       return false;
     }
+
+    vpx_codec_err_t status =
+        vpx_codec_control(vpx_codec_.get(), VP9D_SET_LOOP_FILTER_OPT, 1);
+    if (status != VPX_CODEC_OK) {
+      DLOG(ERROR) << "Failed to enable VP9D_SET_LOOP_FILTER_OPT. "
+                  << vpx_codec_error(vpx_codec_.get());
+      return false;
+    }
   }
 
   if (config.alpha_mode() == VideoDecoderConfig::AlphaMode::kIsOpaque)
diff --git a/media/gpu/chromeos/platform_video_frame_utils.cc b/media/gpu/chromeos/platform_video_frame_utils.cc
index 0c555fd8..ba2a7ae 100644
--- a/media/gpu/chromeos/platform_video_frame_utils.cc
+++ b/media/gpu/chromeos/platform_video_frame_utils.cc
@@ -131,8 +131,7 @@
     dmabuf_fds.emplace_back(plane.fd.release());
 
   auto frame = VideoFrame::WrapExternalDmabufs(
-      *layout, visible_rect, visible_rect.size(), std::move(dmabuf_fds),
-      timestamp);
+      *layout, visible_rect, natural_size, std::move(dmabuf_fds), timestamp);
   if (!frame)
     return nullptr;
 
diff --git a/media/gpu/test/video_frame_helpers.cc b/media/gpu/test/video_frame_helpers.cc
index cfb6171..7e12ddc1 100644
--- a/media/gpu/test/video_frame_helpers.cc
+++ b/media/gpu/test/video_frame_helpers.cc
@@ -241,8 +241,7 @@
       dst_frame = CreatePlatformVideoFrame(
           gpu_memory_buffer_factory, dst_layout.format(),
           dst_layout.coded_size(), src_frame->visible_rect(),
-          src_frame->visible_rect().size(), src_frame->timestamp(),
-          *dst_buffer_usage);
+          src_frame->natural_size(), src_frame->timestamp(), *dst_buffer_usage);
       break;
 #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
     case VideoFrame::STORAGE_OWNED_MEMORY:
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
index 8c7ea44..e3683fa 100644
--- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
@@ -381,7 +381,6 @@
     const gfx::Rect& output_visible_rect) {
   VLOGF(2);
   DCHECK_CALLED_ON_VALID_SEQUENCE(encoder_sequence_checker_);
-  DCHECK_NE(input_layout.format(), output_format);
 
   auto ip_input_layout = AsMultiPlanarLayout(input_layout);
   if (!ip_input_layout) {
@@ -750,6 +749,16 @@
     return;
 
   if (image_processor_) {
+    if (!frame) {
+      DCHECK(!flush_callback_.is_null());
+      NOTREACHED()
+          << "Flushing is not supported when using an image processor and this "
+             "situation should not happen for well behaved clients.";
+      NOTIFY_ERROR(kIllegalStateError);
+      child_task_runner_->PostTask(
+          FROM_HERE, base::BindOnce(std::move(flush_callback_), false));
+      return;
+    }
     image_processor_input_queue_.emplace(std::move(frame), force_keyframe);
     InputImageProcessorTask();
   } else {
@@ -779,7 +788,7 @@
       VLOGF(1) << "Encoder resolution is changed during encoding"
                << ", frame.natural_size()=" << frame.natural_size().ToString()
                << ", encoder_input_visible_rect_="
-               << input_frame_size_.ToString();
+               << encoder_input_visible_rect_.ToString();
       return false;
     }
     if (frame.coded_size() == input_frame_size_) {
diff --git a/media/gpu/vaapi/vaapi_unittest.cc b/media/gpu/vaapi/vaapi_unittest.cc
index d3d459fa..5acc2e4 100644
--- a/media/gpu/vaapi/vaapi_unittest.cc
+++ b/media/gpu/vaapi/vaapi_unittest.cc
@@ -34,10 +34,8 @@
       {VP8PROFILE_ANY, VAProfileVP8Version0_3},
       {VP9PROFILE_PROFILE0, VAProfileVP9Profile0},
       {VP9PROFILE_PROFILE1, VAProfileVP9Profile1},
-      // TODO(crbug.com/1011454, crbug.com/1011469): Reenable
-      // VP9PROFILE_PROFILE2 and _PROFILE3 when P010 is completely supported.
-      //{VP9PROFILE_PROFILE2, VAProfileVP9Profile2},
-      //{VP9PROFILE_PROFILE3, VAProfileVP9Profile3},
+      {VP9PROFILE_PROFILE2, VAProfileVP9Profile2},
+      {VP9PROFILE_PROFILE3, VAProfileVP9Profile3},
   };
   auto it = kProfileMap.find(profile);
   return it != kProfileMap.end() ? base::make_optional<VAProfile>(it->second)
@@ -56,10 +54,8 @@
       {"VAProfileVP8Version0_3", VAProfileVP8Version0_3},
       {"VAProfileVP9Profile0", VAProfileVP9Profile0},
       {"VAProfileVP9Profile1", VAProfileVP9Profile1},
-      // TODO(crbug.com/1011454, crbug.com/1011469): Reenable
-      // VP9PROFILE_PROFILE2 and _PROFILE3 when P010 is completely supported.
-      // {"VAProfileVP9Profile2", VAProfileVP9Profile2},
-      // {"VAProfileVP9Profile3", VAProfileVP9Profile3},
+      {"VAProfileVP9Profile2", VAProfileVP9Profile2},
+      {"VAProfileVP9Profile3", VAProfileVP9Profile3},
   };
 
   auto it = kStringToVAProfile.find(va_profile);
diff --git a/media/gpu/video_encode_accelerator_unittest.cc b/media/gpu/video_encode_accelerator_unittest.cc
index 3a2cabb6..a28321f8 100644
--- a/media/gpu/video_encode_accelerator_unittest.cc
+++ b/media/gpu/video_encode_accelerator_unittest.cc
@@ -1507,10 +1507,15 @@
             bool mid_stream_framerate_switch,
             bool verify_output,
             bool verify_output_timestamp,
-            bool force_level);
+            bool force_level,
+            bool scale);
   void CreateEncoder();
   void DestroyEncoder();
 
+  bool requested_scaling() const {
+    return encoded_visible_size_ != test_stream_->visible_size;
+  }
+
   // VideoDecodeAccelerator::Client implementation.
   void RequireBitstreamBuffers(unsigned int input_count,
                                const gfx::Size& input_coded_size,
@@ -1668,6 +1673,11 @@
   // Check whether the output timestamps match input timestamps.
   bool verify_output_timestamp_;
 
+  // The visible size we want the encoded stream to have. This can be different
+  // than the visible size of the |test_stream_| when doing scaling in native
+  // input mode.
+  gfx::Size encoded_visible_size_;
+
   // Used to perform codec-specific sanity checks on the stream.
   std::unique_ptr<StreamValidator> stream_validator_;
 
@@ -1719,7 +1729,8 @@
                      bool mid_stream_framerate_switch,
                      bool verify_output,
                      bool verify_output_timestamp,
-                     bool force_level)
+                     bool force_level,
+                     bool scale)
     : VEAClientBase(note),
       state_(CS_CREATED),
       test_stream_(test_stream),
@@ -1771,6 +1782,18 @@
     }
   }
 
+  encoded_visible_size_ = test_stream_->visible_size;
+  if (scale) {
+    LOG_ASSERT(g_native_input)
+        << "Scaling is only supported on native input mode";
+    // Scale to 3/4 of the original size. The reason we don't go smaller is that
+    // we don't want to go below the minimum supported resolution of the
+    // hardware encoder and 3/4 works across all boards with the current test
+    // videos.
+    encoded_visible_size_.set_width(3 * encoded_visible_size_.width() / 4);
+    encoded_visible_size_.set_height(3 * encoded_visible_size_.height() / 4);
+  }
+
   if (save_to_file_) {
     LOG_ASSERT(!test_stream_->out_filename.empty());
 #if defined(OS_POSIX)
@@ -1820,7 +1843,7 @@
                           ? VideoEncodeAccelerator::Config::StorageType::kDmabuf
                           : VideoEncodeAccelerator::Config::StorageType::kShmem;
   const VideoEncodeAccelerator::Config config(
-      test_stream_->pixel_format, test_stream_->visible_size,
+      test_stream_->pixel_format, encoded_visible_size_,
       test_stream_->requested_profile, requested_bitrate_, requested_framerate_,
       keyframe_period_, test_stream_->requested_level, storage_type);
   encoder_ = CreateVideoEncodeAccelerator(config, this, gpu::GpuPreferences());
@@ -1907,9 +1930,16 @@
 
   if (quality_validator_)
     quality_validator_->Initialize(input_coded_size,
-                                   gfx::Rect(test_stream_->visible_size));
+                                   gfx::Rect(encoded_visible_size_));
 
-  CreateAlignedInputStreamFile(input_coded_size, test_stream_);
+  // When scaling is requested in native input mode, |input_coded_size| is not
+  // useful for building the input video frames because the encoder's image
+  // processor will be the one responsible for building the video frames that
+  // are fed to the hardware encoder. Instead, we can just use the unscaled
+  // visible size as the coded size.
+  const gfx::Size coded_size_to_use =
+      requested_scaling() ? test_stream_->visible_size : input_coded_size;
+  CreateAlignedInputStreamFile(coded_size_to_use, test_stream_);
 
   num_frames_to_encode_ = test_stream_->num_frames;
   if (g_num_frames_to_encode > 0)
@@ -1931,7 +1961,7 @@
     }
   }
 
-  input_coded_size_ = input_coded_size;
+  input_coded_size_ = coded_size_to_use;
   num_required_input_buffers_ = input_count;
   ASSERT_GT(num_required_input_buffers_, 0UL);
 
@@ -2004,9 +2034,9 @@
       stream_validator_->ProcessStreamBuffer(stream_ptr,
                                              metadata.payload_size_bytes);
     } else {
-      // We don't know the visible size of without stream validator, just
-      // send the expected value to pass the check.
-      HandleEncodedFrame(metadata.key_frame, test_stream_->visible_size);
+      // We don't know the visible size of the encoded stream without the stream
+      // validator, so just send the expected value to pass the check.
+      HandleEncodedFrame(metadata.key_frame, encoded_visible_size_);
     }
 
     if (quality_validator_) {
@@ -2016,8 +2046,9 @@
       quality_validator_->AddDecodeBuffer(buffer);
     }
     // If the encoder does not support flush, pretend flush is done when all
-    // frames are received.
-    if (!encoder_->IsFlushSupported() &&
+    // frames are received. We also do this when scaling is requested (because a
+    // well behaved client should not request a flush in this situation).
+    if ((!encoder_->IsFlushSupported() || requested_scaling()) &&
         num_encoded_frames_ == num_frames_to_encode_) {
       FlushEncoderDone(true);
     }
@@ -2113,7 +2144,7 @@
   scoped_refptr<VideoFrame> video_frame =
       VideoFrame::WrapExternalYuvDataWithLayout(
           *layout, gfx::Rect(test_stream_->visible_size),
-          test_stream_->visible_size, frame_data[0], frame_data[1],
+          /*natural_size=*/encoded_visible_size_, frame_data[0], frame_data[1],
           frame_data[2],
           // Timestamp needs to avoid starting from 0.
           base::TimeDelta().FromMilliseconds(
@@ -2216,7 +2247,12 @@
   }
   encoder_->Encode(video_frame, force_keyframe);
   ++num_frames_submitted_to_encoder_;
-  if (num_frames_submitted_to_encoder_ == num_frames_to_encode_) {
+
+  // If scaling was requested, we don't need to flush: that's because the only
+  // use case for Flush() is ARC++ and pixel format conversion and/or scaling
+  // are not used.
+  if (!requested_scaling() &&
+      num_frames_submitted_to_encoder_ == num_frames_to_encode_) {
     FlushEncoder();
   }
 }
@@ -2281,7 +2317,7 @@
     }
   }
 
-  EXPECT_EQ(test_stream_->visible_size, visible_size);
+  EXPECT_EQ(encoded_visible_size_, visible_size);
 
   if (num_encoded_frames_ == num_frames_to_encode_ / 2) {
     VerifyStreamProperties();
@@ -2413,10 +2449,8 @@
   header.version = 0;
   header.header_size = sizeof(header);
   header.fourcc = fourcc;  // VP80 or VP90
-  header.width =
-      base::checked_cast<uint16_t>(test_stream_->visible_size.width());
-  header.height =
-      base::checked_cast<uint16_t>(test_stream_->visible_size.height());
+  header.width = base::checked_cast<uint16_t>(encoded_visible_size_.width());
+  header.height = base::checked_cast<uint16_t>(encoded_visible_size_.height());
   header.timebase_denum = requested_framerate_;
   header.timebase_num = 1;
   header.num_frames = num_frames_to_encode_;
@@ -2696,9 +2730,26 @@
 // - If true, verify the timestamps of output frames.
 // - If true, verify the output level is as provided in input stream. Only
 //   available for H264 encoder for now.
+// - If true, request that the encoder scales the input stream to 75% of the
+//   original size prior to encoding. This is only applicable when
+//   |g_native_input| is true. Otherwise, the test is skipped. This is because
+//   the intention is to exercise the image processor path inside the decoder,
+//   and in non-native input mode, the scaling is done by the client instead of
+//   the encoder (and we're not interested in testing that).
+//   Note: we don't go smaller than 75% because we don't want to go below the
+//   minimum supported resolution by the encoder (75% happens to work across all
+//   devices with the current test videos).
 class VideoEncodeAcceleratorTest
     : public ::testing::TestWithParam<
-          std::tuple<int, bool, int, bool, bool, bool, bool, bool, bool>> {};
+          std::
+              tuple<int, bool, int, bool, bool, bool, bool, bool, bool, bool>> {
+ public:
+  void SetUp() override {
+    const bool scale = std::get<9>(GetParam());
+    if (scale && !g_native_input)
+      GTEST_SKIP();
+  }
+};
 
 TEST_P(VideoEncodeAcceleratorTest, TestSimpleEncode) {
   // Workaround: TestSuite::Initialize() overwrites specified features.
@@ -2715,6 +2766,7 @@
       std::get<6>(GetParam()) || g_env->verify_all_output();
   const bool verify_output_timestamp = std::get<7>(GetParam());
   const bool force_level = std::get<8>(GetParam());
+  const bool scale = std::get<9>(GetParam());
 
 #if defined(OS_CHROMEOS)
   if (ShouldSkipTest(g_env->test_streams_[0]->pixel_format))
@@ -2768,7 +2820,7 @@
         g_env->test_streams_[test_stream_index].get(), notes.back().get(),
         encoder_save_to_file, keyframe_period, force_bitrate,
         mid_stream_bitrate_switch, mid_stream_framerate_switch, verify_output,
-        verify_output_timestamp, force_level));
+        verify_output_timestamp, force_level, scale));
 
     g_env->GetRenderingTaskRunner()->PostTask(
         FROM_HERE, base::BindOnce(&VEAClient::CreateEncoder,
@@ -2875,8 +2927,22 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
+INSTANTIATE_TEST_SUITE_P(SimpleEncodeWithScaling,
+                         VideoEncodeAcceleratorTest,
+                         ::testing::Values(std::make_tuple(1,
+                                                           true,
+                                                           0,
+                                                           false,
+                                                           false,
+                                                           false,
+                                                           false,
+                                                           false,
+                                                           false,
+                                                           true)));
+
 INSTANTIATE_TEST_SUITE_P(EncoderPerf,
                          VideoEncodeAcceleratorTest,
                          ::testing::Values(std::make_tuple(1,
@@ -2887,6 +2953,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(ForceKeyframes,
@@ -2899,6 +2966,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(ForceBitrate,
@@ -2911,6 +2979,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(MidStreamParamSwitchBitrate,
@@ -2923,6 +2992,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 // TODO(kcwu): add back bitrate test after https://crbug.com/693336 fixed.
@@ -2936,6 +3006,7 @@
                                                            true,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(MultipleEncoders,
@@ -2948,6 +3019,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false),
                                            std::make_tuple(3,
                                                            false,
@@ -2957,6 +3029,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(VerifyTimestamp,
@@ -2969,6 +3042,7 @@
                                                            false,
                                                            false,
                                                            true,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(ForceLevel,
@@ -2981,7 +3055,8 @@
                                                            false,
                                                            false,
                                                            false,
-                                                           true)));
+                                                           true,
+                                                           false)));
 
 INSTANTIATE_TEST_SUITE_P(NoInputTest,
                          VideoEncodeAcceleratorSimpleTest,
@@ -3002,6 +3077,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false),
                                            std::make_tuple(1,
                                                            true,
@@ -3011,6 +3087,7 @@
                                                            false,
                                                            true,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(EncoderPerf,
@@ -3023,6 +3100,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(MultipleEncoders,
@@ -3035,6 +3113,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 
 INSTANTIATE_TEST_SUITE_P(VerifyTimestamp,
@@ -3047,6 +3126,7 @@
                                                            false,
                                                            false,
                                                            true,
+                                                           false,
                                                            false)));
 
 #if defined(OS_WIN)
@@ -3060,6 +3140,7 @@
                                                            false,
                                                            false,
                                                            false,
+                                                           false,
                                                            false)));
 #endif  // defined(OS_WIN)
 
diff --git a/media/gpu/windows/d3d11_texture_wrapper.cc b/media/gpu/windows/d3d11_texture_wrapper.cc
index 14c6757..b7a44cd7 100644
--- a/media/gpu/windows/d3d11_texture_wrapper.cc
+++ b/media/gpu/windows/d3d11_texture_wrapper.cc
@@ -74,6 +74,9 @@
   if (received_error_)
     return false;
 
+  // Temporary check to track down https://crbug.com/1077645
+  CHECK(texture);
+
   // It's okay to post and forget this call, since it'll be ordered correctly
   // with respect to any access on the gpu main thread.
   gpu_resources_.Post(FROM_HERE, &GpuResources::PushNewTexture,
diff --git a/net/base/features.cc b/net/base/features.cc
index 933e5bc..b4ac15a 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -100,6 +100,10 @@
     "PartitionSSLSessionsByNetworkIsolationKey",
     base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kPartitionExpectCTStateByNetworkIsolationKey{
+    "PartitionExpectCTStateByNetworkIsolationKey",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kTLS13KeyUpdate{"TLS13KeyUpdate",
                                     base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/net/base/features.h b/net/base/features.h
index e95d52e..aa2081eb6 100644
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -111,6 +111,16 @@
 NET_EXPORT extern const base::Feature
     kPartitionSSLSessionsByNetworkIsolationKey;
 
+// Partitions Expect-CT data by NetworkIsolationKey. This only affects the
+// Expect-CT data itself. Regardless of this value, reports will be uploaded
+// using the associated NetworkIsolationKey, when one's available.
+//
+// This feature requires kPartitionConnectionsByNetworkIsolationKey,
+// kPartitionHttpServerPropertiesByNetworkIsolationKey, and
+// kPartitionConnectionsByNetworkIsolationKey to all be enabled to work.
+NET_EXPORT extern const base::Feature
+    kPartitionExpectCTStateByNetworkIsolationKey;
+
 // Enables sending TLS 1.3 Key Update messages on TLS 1.3 connections in order
 // to ensure that this corner of the spec is exercised. This is currently
 // disabled by default because we discovered incompatibilities with some
diff --git a/net/http/transport_security_persister.cc b/net/http/transport_security_persister.cc
index 893be73..6dd61f2 100644
--- a/net/http/transport_security_persister.cc
+++ b/net/http/transport_security_persister.cc
@@ -20,6 +20,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "crypto/sha2.h"
+#include "net/base/features.h"
 #include "net/base/network_isolation_key.h"
 #include "net/cert/x509_certificate.h"
 #include "net/http/transport_security_state.h"
@@ -198,15 +199,12 @@
 
     base::DictionaryValue ct_entry;
 
-    // Write an empty NetworkIsolationKey value. Not used yet, but writing one
-    // now means no format change when a corresponding field is added to
-    // ExpectCTState data.
-    //
-    // TODO(mmenke): Add NetworkIsolationKey field to ExpectCTState and add
-    // support for it to TransportSecurityPersister.
     base::Value network_isolation_key_value;
-    bool result = NetworkIsolationKey().ToValue(&network_isolation_key_value);
-    DCHECK(result);
+    // Don't serialize entries with transient NetworkIsolationKeys.
+    if (!expect_ct_iterator.network_isolation_key().ToValue(
+            &network_isolation_key_value)) {
+      continue;
+    }
     ct_entry.SetKey(kNetworkIsolationKey,
                     std::move(network_isolation_key_value));
 
@@ -230,6 +228,8 @@
                              TransportSecurityState* state) {
   if (!ct_list.is_list())
     return;
+  bool partition_by_nik = base::FeatureList::IsEnabled(
+      features::kPartitionExpectCTStateByNetworkIsolationKey);
 
   const base::Time current_time(base::Time::Now());
 
@@ -238,6 +238,8 @@
       continue;
 
     const std::string* hostname = ct_entry.FindStringKey(kHostname);
+    const base::Value* network_isolation_key_value =
+        ct_entry.FindKey(kNetworkIsolationKey);
     base::Optional<double> expect_ct_last_observed =
         ct_entry.FindDoubleKey(kExpectCTObserved);
     base::Optional<double> expect_ct_expiry =
@@ -247,9 +249,9 @@
     const std::string* expect_ct_report_uri =
         ct_entry.FindStringKey(kExpectCTReportUri);
 
-    if (!hostname || !expect_ct_last_observed.has_value() ||
-        !expect_ct_expiry.has_value() || !expect_ct_enforce.has_value() ||
-        !expect_ct_report_uri) {
+    if (!hostname || !network_isolation_key_value ||
+        !expect_ct_last_observed.has_value() || !expect_ct_expiry.has_value() ||
+        !expect_ct_enforce.has_value() || !expect_ct_report_uri) {
       continue;
     }
 
@@ -272,7 +274,20 @@
     if (hashed.empty())
       continue;
 
-    state->AddOrUpdateEnabledExpectCTHosts(hashed, expect_ct_state);
+    NetworkIsolationKey network_isolation_key;
+    if (!NetworkIsolationKey::FromValue(*network_isolation_key_value,
+                                        &network_isolation_key)) {
+      continue;
+    }
+
+    // If Expect-CT is not being partitioned by NetworkIsolationKey, but
+    // |network_isolation_key| is not empty, drop the entry, to avoid ambiguity
+    // and favor entries that were saved with an empty NetworkIsolationKey.
+    if (!partition_by_nik && !network_isolation_key.IsEmpty())
+      continue;
+
+    state->AddOrUpdateEnabledExpectCTHosts(hashed, network_isolation_key,
+                                           expect_ct_state);
   }
 }
 
@@ -536,8 +551,11 @@
     // We only register entries that have actual state.
     if (has_sts)
       state->AddOrUpdateEnabledSTSHosts(hashed, sts_state);
-    if (has_expect_ct)
-      state->AddOrUpdateEnabledExpectCTHosts(hashed, expect_ct_state);
+    if (has_expect_ct) {
+      // Use empty NetworkIsolationKeys for old data.
+      state->AddOrUpdateEnabledExpectCTHosts(hashed, NetworkIsolationKey(),
+                                             expect_ct_state);
+    }
   }
 
   *dirty = dirtied;
diff --git a/net/http/transport_security_persister_unittest.cc b/net/http/transport_security_persister_unittest.cc
index cf1e286a..c9a893b 100644
--- a/net/http/transport_security_persister_unittest.cc
+++ b/net/http/transport_security_persister_unittest.cc
@@ -16,10 +16,13 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "net/base/features.h"
+#include "net/base/network_isolation_key.h"
 #include "net/http/transport_security_state.h"
 #include "net/test/test_with_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
+#include "url/origin.h"
 
 namespace net {
 
@@ -27,7 +30,9 @@
 
 const char kReportUri[] = "http://www.example.test/report";
 
-class TransportSecurityPersisterTest : public testing::Test,
+// The bool indicates whether kPartitionExpectCTStateByNetworkIsolationKey
+// should be enabled.
+class TransportSecurityPersisterTest : public ::testing::TestWithParam<bool>,
                                        public WithTaskEnvironment {
  public:
   TransportSecurityPersisterTest()
@@ -51,18 +56,32 @@
         base::ThreadPool::CreateSequencedTaskRunner(
             {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
              base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
+    // This feature is used in initializing |state_|.
+    if (partition_expect_ct_state()) {
+      feature_list_.InitAndEnableFeature(
+          features::kPartitionExpectCTStateByNetworkIsolationKey);
+    } else {
+      feature_list_.InitAndDisableFeature(
+          features::kPartitionExpectCTStateByNetworkIsolationKey);
+    }
+    state_ = std::make_unique<TransportSecurityState>();
     persister_ = std::make_unique<TransportSecurityPersister>(
-        &state_, temp_dir_.GetPath(), std::move(background_runner));
+        state_.get(), temp_dir_.GetPath(), std::move(background_runner));
   }
 
+  bool partition_expect_ct_state() const { return GetParam(); }
+
  protected:
   base::ScopedTempDir temp_dir_;
-  TransportSecurityState state_;
+  base::test::ScopedFeatureList feature_list_;
+  std::unique_ptr<TransportSecurityState> state_;
   std::unique_ptr<TransportSecurityPersister> persister_;
 };
 
+INSTANTIATE_TEST_SUITE_P(All, TransportSecurityPersisterTest, testing::Bool());
+
 // Tests that LoadEntries() clears existing non-static entries.
-TEST_F(TransportSecurityPersisterTest, LoadEntriesClearsExistingState) {
+TEST_P(TransportSecurityPersisterTest, LoadEntriesClearsExistingState) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndEnableFeature(
       TransportSecurityState::kDynamicExpectCTFeature);
@@ -74,22 +93,25 @@
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
   static const char kYahooDomain[] = "yahoo.com";
 
-  EXPECT_FALSE(state_.GetDynamicSTSState(kYahooDomain, &sts_state));
+  EXPECT_FALSE(state_->GetDynamicSTSState(kYahooDomain, &sts_state));
 
-  state_.AddHSTS(kYahooDomain, expiry, false /* include subdomains */);
-  state_.AddExpectCT(kYahooDomain, expiry, true /* enforce */, GURL());
+  state_->AddHSTS(kYahooDomain, expiry, false /* include subdomains */);
+  state_->AddExpectCT(kYahooDomain, expiry, true /* enforce */, GURL(),
+                      NetworkIsolationKey());
 
-  EXPECT_TRUE(state_.GetDynamicSTSState(kYahooDomain, &sts_state));
-  EXPECT_TRUE(state_.GetDynamicExpectCTState(kYahooDomain, &expect_ct_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState(kYahooDomain, &sts_state));
+  EXPECT_TRUE(state_->GetDynamicExpectCTState(
+      kYahooDomain, NetworkIsolationKey(), &expect_ct_state));
 
   EXPECT_TRUE(persister_->LoadEntries("{\"version\":2}", &data_in_old_format));
   EXPECT_FALSE(data_in_old_format);
 
-  EXPECT_FALSE(state_.GetDynamicSTSState(kYahooDomain, &sts_state));
-  EXPECT_FALSE(state_.GetDynamicExpectCTState(kYahooDomain, &expect_ct_state));
+  EXPECT_FALSE(state_->GetDynamicSTSState(kYahooDomain, &sts_state));
+  EXPECT_FALSE(state_->GetDynamicExpectCTState(
+      kYahooDomain, NetworkIsolationKey(), &expect_ct_state));
 }
 
-TEST_F(TransportSecurityPersisterTest, SerializeData1) {
+TEST_P(TransportSecurityPersisterTest, SerializeData1) {
   std::string output;
   bool data_in_old_format;
 
@@ -98,16 +120,16 @@
   EXPECT_FALSE(data_in_old_format);
 }
 
-TEST_F(TransportSecurityPersisterTest, SerializeData2) {
+TEST_P(TransportSecurityPersisterTest, SerializeData2) {
   TransportSecurityState::STSState sts_state;
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
   static const char kYahooDomain[] = "yahoo.com";
 
-  EXPECT_FALSE(state_.GetDynamicSTSState(kYahooDomain, &sts_state));
+  EXPECT_FALSE(state_->GetDynamicSTSState(kYahooDomain, &sts_state));
 
   bool include_subdomains = true;
-  state_.AddHSTS(kYahooDomain, expiry, include_subdomains);
+  state_->AddHSTS(kYahooDomain, expiry, include_subdomains);
 
   std::string output;
   bool data_in_old_format;
@@ -115,21 +137,21 @@
   EXPECT_TRUE(persister_->LoadEntries(output, &data_in_old_format));
   EXPECT_FALSE(data_in_old_format);
 
-  EXPECT_TRUE(state_.GetDynamicSTSState(kYahooDomain, &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState(kYahooDomain, &sts_state));
   EXPECT_EQ(sts_state.upgrade_mode,
             TransportSecurityState::STSState::MODE_FORCE_HTTPS);
-  EXPECT_TRUE(state_.GetDynamicSTSState("foo.yahoo.com", &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState("foo.yahoo.com", &sts_state));
   EXPECT_EQ(sts_state.upgrade_mode,
             TransportSecurityState::STSState::MODE_FORCE_HTTPS);
-  EXPECT_TRUE(state_.GetDynamicSTSState("foo.bar.yahoo.com", &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState("foo.bar.yahoo.com", &sts_state));
   EXPECT_EQ(sts_state.upgrade_mode,
             TransportSecurityState::STSState::MODE_FORCE_HTTPS);
-  EXPECT_TRUE(state_.GetDynamicSTSState("foo.bar.baz.yahoo.com", &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState("foo.bar.baz.yahoo.com", &sts_state));
   EXPECT_EQ(sts_state.upgrade_mode,
             TransportSecurityState::STSState::MODE_FORCE_HTTPS);
 }
 
-TEST_F(TransportSecurityPersisterTest, SerializeData3) {
+TEST_P(TransportSecurityPersisterTest, SerializeData3) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndEnableFeature(
       TransportSecurityState::kDynamicExpectCTFeature);
@@ -138,26 +160,27 @@
   base::Time expiry =
       base::Time::Now() + base::TimeDelta::FromSeconds(1000);
   bool include_subdomains = false;
-  state_.AddHSTS("www.example.com", expiry, include_subdomains);
-  state_.AddExpectCT("www.example.com", expiry, true /* enforce */, GURL());
+  state_->AddHSTS("www.example.com", expiry, include_subdomains);
+  state_->AddExpectCT("www.example.com", expiry, true /* enforce */, GURL(),
+                      NetworkIsolationKey());
 
   // Add another entry.
   expiry =
       base::Time::Now() + base::TimeDelta::FromSeconds(3000);
-  state_.AddHSTS("www.example.net", expiry, include_subdomains);
-  state_.AddExpectCT("www.example.net", expiry, false /* enforce */,
-                     report_uri);
+  state_->AddHSTS("www.example.net", expiry, include_subdomains);
+  state_->AddExpectCT("www.example.net", expiry, false /* enforce */,
+                      report_uri, NetworkIsolationKey());
 
   // Save a copy of everything.
   std::set<std::string> sts_saved;
-  TransportSecurityState::STSStateIterator sts_iter(state_);
+  TransportSecurityState::STSStateIterator sts_iter(*state_);
   while (sts_iter.HasNext()) {
     sts_saved.insert(sts_iter.hostname());
     sts_iter.Advance();
   }
 
   std::set<std::string> expect_ct_saved;
-  TransportSecurityState::ExpectCTStateIterator expect_ct_iter(state_);
+  TransportSecurityState::ExpectCTStateIterator expect_ct_iter(*state_);
   while (expect_ct_iter.HasNext()) {
     expect_ct_saved.insert(expect_ct_iter.hostname());
     expect_ct_iter.Advance();
@@ -168,7 +191,7 @@
 
   // Persist the data to the file.
   base::RunLoop run_loop;
-  persister_->WriteNow(&state_, run_loop.QuitClosure());
+  persister_->WriteNow(state_.get(), run_loop.QuitClosure());
   run_loop.Run();
 
   // Read the data back.
@@ -182,7 +205,7 @@
 
   // Check that states are the same as saved.
   size_t count = 0;
-  TransportSecurityState::STSStateIterator sts_iter2(state_);
+  TransportSecurityState::STSStateIterator sts_iter2(*state_);
   while (sts_iter2.HasNext()) {
     count++;
     sts_iter2.Advance();
@@ -190,7 +213,7 @@
   EXPECT_EQ(count, sts_saved.size());
 
   count = 0;
-  TransportSecurityState::ExpectCTStateIterator expect_ct_iter2(state_);
+  TransportSecurityState::ExpectCTStateIterator expect_ct_iter2(*state_);
   while (expect_ct_iter2.HasNext()) {
     count++;
     expect_ct_iter2.Advance();
@@ -198,7 +221,7 @@
   EXPECT_EQ(count, expect_ct_saved.size());
 }
 
-TEST_F(TransportSecurityPersisterTest, DeserializeBadData) {
+TEST_P(TransportSecurityPersisterTest, DeserializeBadData) {
   bool data_in_old_format;
   EXPECT_FALSE(persister_->LoadEntries("", &data_in_old_format));
   EXPECT_FALSE(persister_->LoadEntries("Foopy", &data_in_old_format));
@@ -207,7 +230,7 @@
   EXPECT_FALSE(persister_->LoadEntries("{\"version\":1}", &data_in_old_format));
 }
 
-TEST_F(TransportSecurityPersisterTest, DeserializeDataOldWithoutCreationDate) {
+TEST_P(TransportSecurityPersisterTest, DeserializeDataOldWithoutCreationDate) {
   const char kDomain[] = "example.test";
 
   // This is an old-style piece of transport state JSON, which has no creation
@@ -225,14 +248,14 @@
   EXPECT_TRUE(data_in_old_format);
 
   TransportSecurityState::STSState sts_state;
-  EXPECT_TRUE(state_.GetDynamicSTSState(kDomain, &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState(kDomain, &sts_state));
   EXPECT_EQ(kDomain, sts_state.domain);
   EXPECT_FALSE(sts_state.include_subdomains);
   EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS,
             sts_state.upgrade_mode);
 }
 
-TEST_F(TransportSecurityPersisterTest, DeserializeDataOldMergedDictionary) {
+TEST_P(TransportSecurityPersisterTest, DeserializeDataOldMergedDictionary) {
   const char kStsDomain[] = "sts.test";
   const char kExpectCTDomain[] = "expect_ct.test";
   const GURL kExpectCTReportUri = GURL("https://expect_ct.test/report_uri");
@@ -280,7 +303,7 @@
 
   // kStsDomain should only have HSTS information.
   TransportSecurityState::STSState sts_state;
-  EXPECT_TRUE(state_.GetDynamicSTSState(kStsDomain, &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState(kStsDomain, &sts_state));
   EXPECT_EQ(kStsDomain, sts_state.domain);
   EXPECT_FALSE(sts_state.include_subdomains);
   EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS,
@@ -288,14 +311,15 @@
   EXPECT_LT(base::Time::Now(), sts_state.last_observed);
   EXPECT_LT(sts_state.last_observed, sts_state.expiry);
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_FALSE(state_.GetDynamicExpectCTState(kStsDomain, &expect_ct_state));
+  EXPECT_FALSE(state_->GetDynamicExpectCTState(
+      kStsDomain, NetworkIsolationKey(), &expect_ct_state));
 
   // kExpectCTDomain should only have HSTS information.
   sts_state = TransportSecurityState::STSState();
-  EXPECT_FALSE(state_.GetDynamicSTSState(kExpectCTDomain, &sts_state));
+  EXPECT_FALSE(state_->GetDynamicSTSState(kExpectCTDomain, &sts_state));
   expect_ct_state = TransportSecurityState::ExpectCTState();
-  EXPECT_TRUE(
-      state_.GetDynamicExpectCTState(kExpectCTDomain, &expect_ct_state));
+  EXPECT_TRUE(state_->GetDynamicExpectCTState(
+      kExpectCTDomain, NetworkIsolationKey(), &expect_ct_state));
   EXPECT_EQ(kExpectCTReportUri, expect_ct_state.report_uri);
   EXPECT_TRUE(expect_ct_state.enforce);
   EXPECT_LT(base::Time::Now(), expect_ct_state.last_observed);
@@ -303,7 +327,7 @@
 
   // kBothDomain should have HSTS and ExpectCT information.
   sts_state = TransportSecurityState::STSState();
-  EXPECT_TRUE(state_.GetDynamicSTSState(kBothDomain, &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState(kBothDomain, &sts_state));
   EXPECT_EQ(kBothDomain, sts_state.domain);
   EXPECT_TRUE(sts_state.include_subdomains);
   EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS,
@@ -311,7 +335,8 @@
   EXPECT_LT(base::Time::Now(), sts_state.last_observed);
   EXPECT_LT(sts_state.last_observed, sts_state.expiry);
   expect_ct_state = TransportSecurityState::ExpectCTState();
-  EXPECT_TRUE(state_.GetDynamicExpectCTState(kBothDomain, &expect_ct_state));
+  EXPECT_TRUE(state_->GetDynamicExpectCTState(
+      kBothDomain, NetworkIsolationKey(), &expect_ct_state));
   EXPECT_TRUE(expect_ct_state.report_uri.is_empty());
   EXPECT_TRUE(expect_ct_state.enforce);
   EXPECT_LT(base::Time::Now(), expect_ct_state.last_observed);
@@ -319,7 +344,7 @@
 }
 
 // Tests that dynamic Expect-CT state is serialized and deserialized correctly.
-TEST_F(TransportSecurityPersisterTest, ExpectCT) {
+TEST_P(TransportSecurityPersisterTest, ExpectCT) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndEnableFeature(
       TransportSecurityState::kDynamicExpectCTFeature);
@@ -327,11 +352,13 @@
   TransportSecurityState::ExpectCTState expect_ct_state;
   static const char kTestDomain[] = "example.test";
 
-  EXPECT_FALSE(state_.GetDynamicExpectCTState(kTestDomain, &expect_ct_state));
+  EXPECT_FALSE(state_->GetDynamicExpectCTState(
+      kTestDomain, NetworkIsolationKey(), &expect_ct_state));
 
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  state_.AddExpectCT(kTestDomain, expiry, true /* enforce */, GURL());
+  state_->AddExpectCT(kTestDomain, expiry, true /* enforce */, GURL(),
+                      NetworkIsolationKey());
   std::string serialized;
   EXPECT_TRUE(persister_->SerializeData(&serialized));
   bool data_in_old_format;
@@ -340,19 +367,20 @@
   EXPECT_TRUE(persister_->LoadEntries(serialized, &data_in_old_format));
 
   TransportSecurityState::ExpectCTState new_expect_ct_state;
-  EXPECT_TRUE(
-      state_.GetDynamicExpectCTState(kTestDomain, &new_expect_ct_state));
+  EXPECT_TRUE(state_->GetDynamicExpectCTState(
+      kTestDomain, NetworkIsolationKey(), &new_expect_ct_state));
   EXPECT_TRUE(new_expect_ct_state.enforce);
   EXPECT_TRUE(new_expect_ct_state.report_uri.is_empty());
   EXPECT_EQ(expiry, new_expect_ct_state.expiry);
 
   // Update the state for the domain and check that it is
   // serialized/deserialized correctly.
-  state_.AddExpectCT(kTestDomain, expiry, false /* enforce */, report_uri);
+  state_->AddExpectCT(kTestDomain, expiry, false /* enforce */, report_uri,
+                      NetworkIsolationKey());
   EXPECT_TRUE(persister_->SerializeData(&serialized));
   EXPECT_TRUE(persister_->LoadEntries(serialized, &data_in_old_format));
-  EXPECT_TRUE(
-      state_.GetDynamicExpectCTState(kTestDomain, &new_expect_ct_state));
+  EXPECT_TRUE(state_->GetDynamicExpectCTState(
+      kTestDomain, NetworkIsolationKey(), &new_expect_ct_state));
   EXPECT_FALSE(new_expect_ct_state.enforce);
   EXPECT_EQ(report_uri, new_expect_ct_state.report_uri);
   EXPECT_EQ(expiry, new_expect_ct_state.expiry);
@@ -360,7 +388,7 @@
 
 // Tests that dynamic Expect-CT state is serialized and deserialized correctly
 // when there is also STS data present.
-TEST_F(TransportSecurityPersisterTest, ExpectCTWithSTSDataPresent) {
+TEST_P(TransportSecurityPersisterTest, ExpectCTWithSTSDataPresent) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndEnableFeature(
       TransportSecurityState::kDynamicExpectCTFeature);
@@ -368,12 +396,14 @@
   TransportSecurityState::ExpectCTState expect_ct_state;
   static const char kTestDomain[] = "example.test";
 
-  EXPECT_FALSE(state_.GetDynamicExpectCTState(kTestDomain, &expect_ct_state));
+  EXPECT_FALSE(state_->GetDynamicExpectCTState(
+      kTestDomain, NetworkIsolationKey(), &expect_ct_state));
 
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  state_.AddHSTS(kTestDomain, expiry, false /* include subdomains */);
-  state_.AddExpectCT(kTestDomain, expiry, true /* enforce */, GURL());
+  state_->AddHSTS(kTestDomain, expiry, false /* include subdomains */);
+  state_->AddExpectCT(kTestDomain, expiry, true /* enforce */, GURL(),
+                      NetworkIsolationKey());
 
   std::string serialized;
   EXPECT_TRUE(persister_->SerializeData(&serialized));
@@ -383,21 +413,21 @@
   EXPECT_TRUE(persister_->LoadEntries(serialized, &data_in_old_format));
 
   TransportSecurityState::ExpectCTState new_expect_ct_state;
-  EXPECT_TRUE(
-      state_.GetDynamicExpectCTState(kTestDomain, &new_expect_ct_state));
+  EXPECT_TRUE(state_->GetDynamicExpectCTState(
+      kTestDomain, NetworkIsolationKey(), &new_expect_ct_state));
   EXPECT_TRUE(new_expect_ct_state.enforce);
   EXPECT_TRUE(new_expect_ct_state.report_uri.is_empty());
   EXPECT_EQ(expiry, new_expect_ct_state.expiry);
   // Check that STS state is loaded properly as well.
   TransportSecurityState::STSState sts_state;
-  EXPECT_TRUE(state_.GetDynamicSTSState(kTestDomain, &sts_state));
+  EXPECT_TRUE(state_->GetDynamicSTSState(kTestDomain, &sts_state));
   EXPECT_EQ(sts_state.upgrade_mode,
             TransportSecurityState::STSState::MODE_FORCE_HTTPS);
 }
 
 // Tests that Expect-CT state is not serialized and persisted when the feature
 // is disabled.
-TEST_F(TransportSecurityPersisterTest, ExpectCTDisabled) {
+TEST_P(TransportSecurityPersisterTest, ExpectCTDisabled) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndDisableFeature(
       TransportSecurityState::kDynamicExpectCTFeature);
@@ -405,19 +435,184 @@
   TransportSecurityState::ExpectCTState expect_ct_state;
   static const char kTestDomain[] = "example.test";
 
-  EXPECT_FALSE(state_.GetDynamicExpectCTState(kTestDomain, &expect_ct_state));
+  EXPECT_FALSE(state_->GetDynamicExpectCTState(
+      kTestDomain, NetworkIsolationKey(), &expect_ct_state));
 
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  state_.AddExpectCT(kTestDomain, expiry, true /* enforce */, GURL());
+  state_->AddExpectCT(kTestDomain, expiry, true /* enforce */, GURL(),
+                      NetworkIsolationKey());
   std::string serialized;
   EXPECT_TRUE(persister_->SerializeData(&serialized));
   bool data_in_old_format;
   EXPECT_TRUE(persister_->LoadEntries(serialized, &data_in_old_format));
 
   TransportSecurityState::ExpectCTState new_expect_ct_state;
-  EXPECT_FALSE(
-      state_.GetDynamicExpectCTState(kTestDomain, &new_expect_ct_state));
+  EXPECT_FALSE(state_->GetDynamicExpectCTState(
+      kTestDomain, NetworkIsolationKey(), &new_expect_ct_state));
+}
+
+// Save data with several NetworkIsolationKeys with
+// kPartitionExpectCTStateByNetworkIsolationKey enabled, and then load it with
+// the feature enabled or disabled, based on partition_expect_ct_state().
+TEST_P(TransportSecurityPersisterTest, ExpectCTWithNetworkIsolationKey) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      TransportSecurityState::kDynamicExpectCTFeature);
+
+  const GURL report_uri(kReportUri);
+  static const char kTestDomain[] = "example.test";
+  const url::Origin kOrigin =
+      url::Origin::Create(GURL("https://somewhere.else.test"));
+  const NetworkIsolationKey empty_network_isolation_key;
+  const NetworkIsolationKey network_isolation_key(kOrigin /* top_frame_origin*/,
+                                                  kOrigin /* frame_origin*/);
+  const NetworkIsolationKey transient_network_isolation_key =
+      NetworkIsolationKey::CreateTransient();
+
+  const base::Time current_time(base::Time::Now());
+  const base::Time expiry1 = current_time + base::TimeDelta::FromSeconds(1000);
+  const base::Time expiry2 = current_time + base::TimeDelta::FromSeconds(2000);
+  const base::Time expiry3 = current_time + base::TimeDelta::FromSeconds(3000);
+
+  // Serialize data with kPartitionExpectCTStateByNetworkIsolationKey enabled,
+  // and then revert the feature to its previous value.
+  std::string serialized;
+  {
+    base::test::ScopedFeatureList feature_list2;
+    feature_list2.InitAndEnableFeature(
+        features::kPartitionExpectCTStateByNetworkIsolationKey);
+    TransportSecurityState state2;
+    TransportSecurityPersister persister2(
+        &state2, temp_dir_.GetPath(),
+        std::move(base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+             base::TaskShutdownBehavior::BLOCK_SHUTDOWN})));
+    TransportSecurityState::ExpectCTState expect_ct_state;
+    state2.AddExpectCT(kTestDomain, expiry1, true /* enforce */, GURL(),
+                       empty_network_isolation_key);
+    state2.AddExpectCT(kTestDomain, expiry2, true /* enforce */, GURL(),
+                       network_isolation_key);
+    state2.AddExpectCT(kTestDomain, expiry3, true /* enforce */, GURL(),
+                       transient_network_isolation_key);
+    EXPECT_TRUE(persister2.SerializeData(&serialized));
+
+    EXPECT_TRUE(state2.GetDynamicExpectCTState(
+        kTestDomain, empty_network_isolation_key, &expect_ct_state));
+    EXPECT_TRUE(state2.GetDynamicExpectCTState(
+        kTestDomain, network_isolation_key, &expect_ct_state));
+    EXPECT_TRUE(state2.GetDynamicExpectCTState(
+        kTestDomain, transient_network_isolation_key, &expect_ct_state));
+  }
+
+  bool data_in_old_format;
+  // Load entries into the other persister.
+  EXPECT_TRUE(persister_->LoadEntries(serialized, &data_in_old_format));
+  EXPECT_FALSE(data_in_old_format);
+
+  if (partition_expect_ct_state()) {
+    TransportSecurityState::ExpectCTState new_expect_ct_state;
+    EXPECT_TRUE(state_->GetDynamicExpectCTState(
+        kTestDomain, empty_network_isolation_key, &new_expect_ct_state));
+    EXPECT_TRUE(new_expect_ct_state.enforce);
+    EXPECT_TRUE(new_expect_ct_state.report_uri.is_empty());
+    EXPECT_EQ(expiry1, new_expect_ct_state.expiry);
+
+    EXPECT_TRUE(state_->GetDynamicExpectCTState(
+        kTestDomain, network_isolation_key, &new_expect_ct_state));
+    EXPECT_TRUE(new_expect_ct_state.enforce);
+    EXPECT_TRUE(new_expect_ct_state.report_uri.is_empty());
+    EXPECT_EQ(expiry2, new_expect_ct_state.expiry);
+
+    // The data associated with the transient NetworkIsolationKey should not
+    // have been saved.
+    EXPECT_FALSE(state_->GetDynamicExpectCTState(
+        kTestDomain, transient_network_isolation_key, &new_expect_ct_state));
+  } else {
+    std::set<std::string> expect_ct_saved;
+    TransportSecurityState::ExpectCTStateIterator expect_ct_iter(*state_);
+    ASSERT_TRUE(expect_ct_iter.HasNext());
+    EXPECT_EQ(empty_network_isolation_key,
+              expect_ct_iter.network_isolation_key());
+    EXPECT_TRUE(expect_ct_iter.domain_state().enforce);
+    EXPECT_TRUE(expect_ct_iter.domain_state().report_uri.is_empty());
+    expect_ct_iter.Advance();
+    EXPECT_FALSE(expect_ct_iter.HasNext());
+  }
+}
+
+// Test the case when deserializing a NetworkIsolationKey fails. This happens
+// when data is persisted with kAppendFrameOriginToNetworkIsolationKey, but
+// loaded without it, or vice-versa.
+TEST_P(TransportSecurityPersisterTest,
+       ExpectCTNetworkIsolationKeyDeserializationFails) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      TransportSecurityState::kDynamicExpectCTFeature);
+
+  const GURL report_uri(kReportUri);
+  static const char kTestDomain[] = "example.test";
+  const url::Origin kOrigin =
+      url::Origin::Create(GURL("https://somewhere.else.test"));
+  const NetworkIsolationKey empty_network_isolation_key;
+  const NetworkIsolationKey network_isolation_key(kOrigin /* top_frame_origin*/,
+                                                  kOrigin /* frame_origin*/);
+  const base::Time current_time(base::Time::Now());
+  const base::Time expiry1 = current_time + base::TimeDelta::FromSeconds(1000);
+  const base::Time expiry2 = current_time + base::TimeDelta::FromSeconds(2000);
+
+  // Serialize data with kPartitionExpectCTStateByNetworkIsolationKey and
+  // kAppendFrameOriginToNetworkIsolationKey enabled, and then revert the
+  // features to their previous values.
+  std::string serialized;
+  {
+    base::test::ScopedFeatureList feature_list2;
+    feature_list2.InitWithFeatures(
+        // enabled_features
+        {features::kPartitionExpectCTStateByNetworkIsolationKey,
+         features::kAppendFrameOriginToNetworkIsolationKey},
+        // disabled_features
+        {});
+    TransportSecurityState state2;
+    TransportSecurityPersister persister2(
+        &state2, temp_dir_.GetPath(),
+        std::move(base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+             base::TaskShutdownBehavior::BLOCK_SHUTDOWN})));
+    TransportSecurityState::ExpectCTState expect_ct_state;
+    state2.AddExpectCT(kTestDomain, expiry1, true /* enforce */, GURL(),
+                       empty_network_isolation_key);
+    state2.AddExpectCT(kTestDomain, expiry2, true /* enforce */, GURL(),
+                       network_isolation_key);
+    EXPECT_TRUE(persister2.SerializeData(&serialized));
+
+    EXPECT_TRUE(state2.GetDynamicExpectCTState(
+        kTestDomain, empty_network_isolation_key, &expect_ct_state));
+    EXPECT_TRUE(state2.GetDynamicExpectCTState(
+        kTestDomain, network_isolation_key, &expect_ct_state));
+  }
+
+  base::test::ScopedFeatureList feature_list3;
+  feature_list3.InitAndDisableFeature(
+      features::kAppendFrameOriginToNetworkIsolationKey);
+
+  bool data_in_old_format;
+  // Load entries into the other persister.
+  EXPECT_TRUE(persister_->LoadEntries(serialized, &data_in_old_format));
+  EXPECT_FALSE(data_in_old_format);
+
+  // Regardless of whether kPartitionExpectCTStateByNetworkIsolationKey is
+  // enabled or not, the different kAppendFrameOriginToNetworkIsolationKey state
+  // will cause the entry with a non-empty NetworkIsolationKey to be dropped.
+  std::set<std::string> expect_ct_saved;
+  TransportSecurityState::ExpectCTStateIterator expect_ct_iter(*state_);
+  ASSERT_TRUE(expect_ct_iter.HasNext());
+  EXPECT_EQ(empty_network_isolation_key,
+            expect_ct_iter.network_isolation_key());
+  EXPECT_TRUE(expect_ct_iter.domain_state().enforce);
+  EXPECT_TRUE(expect_ct_iter.domain_state().report_uri.is_empty());
+  expect_ct_iter.Advance();
+  EXPECT_FALSE(expect_ct_iter.HasNext());
 }
 
 }  // namespace
diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc
index 6eee0a31..3925b2f 100644
--- a/net/http/transport_security_state.cc
+++ b/net/http/transport_security_state.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/build_time.h"
 #include "base/containers/span.h"
+#include "base/feature_list.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/metrics/field_trial.h"
@@ -28,6 +29,7 @@
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "crypto/sha2.h"
+#include "net/base/features.h"
 #include "net/base/hash_value.h"
 #include "net/base/host_port_pair.h"
 #include "net/cert/ct_policy_status.h"
@@ -412,7 +414,9 @@
       enable_static_expect_ct_(true),
       enable_pkp_bypass_for_local_trust_anchors_(true),
       sent_hpkp_reports_cache_(kMaxReportCacheEntries),
-      sent_expect_ct_reports_cache_(kMaxReportCacheEntries) {
+      sent_expect_ct_reports_cache_(kMaxReportCacheEntries),
+      key_expect_ct_by_nik_(base::FeatureList::IsEnabled(
+          features::kPartitionExpectCTStateByNetworkIsolationKey)) {
 // Static pinning is only enabled for official builds to make sure that
 // others don't end up with pins that cannot be easily updated.
 #if !BUILDFLAG(GOOGLE_CHROME_BRANDING) || defined(OS_ANDROID) || defined(OS_IOS)
@@ -509,7 +513,8 @@
   // Expect-CT reports from being sent.
   bool required_via_expect_ct = false;
   ExpectCTState state;
-  if (IsDynamicExpectCTEnabled() && GetDynamicExpectCTState(hostname, &state)) {
+  if (IsDynamicExpectCTEnabled() &&
+      GetDynamicExpectCTState(hostname, network_isolation_key, &state)) {
     UMA_HISTOGRAM_ENUMERATION(
         "Net.ExpectCTHeader.PolicyComplianceOnConnectionSetup",
         policy_compliance, ct::CTPolicyCompliance::CT_POLICY_COUNT);
@@ -693,7 +698,8 @@
     const base::Time& last_observed,
     const base::Time& expiry,
     bool enforce,
-    const GURL& report_uri) {
+    const GURL& report_uri,
+    const NetworkIsolationKey& network_isolation_key) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (!IsDynamicExpectCTEnabled())
     return;
@@ -712,11 +718,12 @@
 
   // Only store new state when Expect-CT is explicitly enabled. If it is
   // disabled, remove the state from the enabled hosts.
+  ExpectCTStateIndex index = CreateExpectCTStateIndex(
+      HashHost(canonicalized_host), network_isolation_key);
   if (expect_ct_state.enforce || !expect_ct_state.report_uri.is_empty()) {
-    enabled_expect_ct_hosts_[HashHost(canonicalized_host)] = expect_ct_state;
+    enabled_expect_ct_hosts_[index] = expect_ct_state;
   } else {
-    const std::string hashed_host = HashHost(canonicalized_host);
-    enabled_expect_ct_hosts_.erase(hashed_host);
+    enabled_expect_ct_hosts_.erase(index);
   }
 
   DirtyNotify();
@@ -853,9 +860,16 @@
     deleted = true;
   }
 
-  auto expect_ct_iterator = enabled_expect_ct_hosts_.find(hashed_host);
-  if (expect_ct_iterator != enabled_expect_ct_hosts_.end()) {
-    enabled_expect_ct_hosts_.erase(expect_ct_iterator);
+  // Delete matching entries for all NetworkIsolationKeys. Performance isn't
+  // important here, since this is only called when directly initiated by the
+  // user, so a linear search is fine.
+  for (auto it = enabled_expect_ct_hosts_.begin();
+       it != enabled_expect_ct_hosts_.end();) {
+    auto current = it;
+    ++it;
+    if (current->first.hashed_host != hashed_host)
+      continue;
+    enabled_expect_ct_hosts_.erase(current);
     deleted = true;
   }
 
@@ -967,12 +981,15 @@
                   report_uri);
 }
 
-void TransportSecurityState::AddExpectCT(const std::string& host,
-                                         const base::Time& expiry,
-                                         bool enforce,
-                                         const GURL& report_uri) {
+void TransportSecurityState::AddExpectCT(
+    const std::string& host,
+    const base::Time& expiry,
+    bool enforce,
+    const GURL& report_uri,
+    const NetworkIsolationKey& network_isolation_key) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  AddExpectCTInternal(host, base::Time::Now(), expiry, enforce, report_uri);
+  AddExpectCTInternal(host, base::Time::Now(), expiry, enforce, report_uri,
+                      network_isolation_key);
 }
 
 void TransportSecurityState::ProcessExpectCTHeader(
@@ -1048,7 +1065,8 @@
     }
     ExpectCTState state;
     if (expect_ct_reporter_ && !report_uri.is_empty() &&
-        !GetDynamicExpectCTState(host_port_pair.host(), &state)) {
+        !GetDynamicExpectCTState(host_port_pair.host(), network_isolation_key,
+                                 &state)) {
       MaybeNotifyExpectCTFailed(
           host_port_pair, report_uri, base::Time(), ssl_info.cert.get(),
           ssl_info.unverified_cert.get(),
@@ -1057,7 +1075,7 @@
     return;
   }
   AddExpectCTInternal(host_port_pair.host(), now, now + max_age, enforce,
-                      report_uri);
+                      report_uri, network_isolation_key);
 }
 
 // static
@@ -1243,8 +1261,10 @@
   return false;
 }
 
-bool TransportSecurityState::GetDynamicExpectCTState(const std::string& host,
-                                                     ExpectCTState* result) {
+bool TransportSecurityState::GetDynamicExpectCTState(
+    const std::string& host,
+    const NetworkIsolationKey& network_isolation_key,
+    ExpectCTState* result) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   const std::string canonicalized_host = CanonicalizeHost(host);
@@ -1252,7 +1272,8 @@
     return false;
 
   base::Time current_time(base::Time::Now());
-  auto j = enabled_expect_ct_hosts_.find(HashHost(canonicalized_host));
+  auto j = enabled_expect_ct_hosts_.find(CreateExpectCTStateIndex(
+      HashHost(canonicalized_host), network_isolation_key));
   if (j == enabled_expect_ct_hosts_.end())
     return false;
   // If the entry is invalid, drop it.
@@ -1276,10 +1297,12 @@
 
 void TransportSecurityState::AddOrUpdateEnabledExpectCTHosts(
     const std::string& hashed_host,
+    const NetworkIsolationKey& network_isolation_key,
     const ExpectCTState& state) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(state.enforce || !state.report_uri.is_empty());
-  enabled_expect_ct_hosts_[hashed_host] = state;
+  enabled_expect_ct_hosts_[CreateExpectCTStateIndex(
+      hashed_host, network_isolation_key)] = state;
 }
 
 TransportSecurityState::STSState::STSState()
@@ -1311,6 +1334,15 @@
 
 TransportSecurityState::ExpectCTState::~ExpectCTState() = default;
 
+TransportSecurityState::ExpectCTStateIndex::ExpectCTStateIndex(
+    const std::string& hashed_host,
+    const NetworkIsolationKey& network_isolation_key,
+    bool respect_network_isolation_keyn_key)
+    : hashed_host(hashed_host),
+      network_isolation_key(respect_network_isolation_keyn_key
+                                ? network_isolation_key
+                                : NetworkIsolationKey()) {}
+
 TransportSecurityState::ExpectCTStateIterator::ExpectCTStateIterator(
     const TransportSecurityState& state)
     : iterator_(state.enabled_expect_ct_hosts_.begin()),
@@ -1360,4 +1392,12 @@
   return spki_hashes.size() > 0 || bad_spki_hashes.size() > 0;
 }
 
+TransportSecurityState::ExpectCTStateIndex
+TransportSecurityState::CreateExpectCTStateIndex(
+    const std::string& hashed_host,
+    const NetworkIsolationKey& network_isolation_key) {
+  return ExpectCTStateIndex(hashed_host, network_isolation_key,
+                            key_expect_ct_by_nik_);
+}
+
 }  // namespace net
diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h
index 506d926e..5bd1719 100644
--- a/net/http/transport_security_state.h
+++ b/net/http/transport_security_state.h
@@ -20,6 +20,7 @@
 #include "net/base/expiring_cache.h"
 #include "net/base/hash_value.h"
 #include "net/base/net_export.h"
+#include "net/base/network_isolation_key.h"
 #include "net/cert/signed_certificate_timestamp_and_status.h"
 #include "net/http/transport_security_state_source.h"
 #include "url/gurl.h"
@@ -246,6 +247,30 @@
     base::Time expiry;
   };
 
+  // Unlike other data, Expect-CT information is indexed by NetworkIsolationKey
+  // in addition to domain hash, to prevent leaking user IDs across different
+  // first party contexts. Public only because ExpectCTStateIterator is public
+  // and depends on it.
+  struct ExpectCTStateIndex {
+    // Creates an ExpectCTStateIndex. Uses an empty NetworkIsolationKey instead
+    // of the passed in one, depending on |respect_network_isolation_key|.
+    // The value of features::kPartitionExpectCTStateByNetworkIsolationKey is
+    // cached on creation of the TransportSecurityState, and then passed in to
+    // this method whenever an ExpectCTStateIndex() is created, to avoid
+    // constantly querying the field trial.
+    ExpectCTStateIndex(const std::string& hashed_host,
+                       const NetworkIsolationKey& network_isolation_key,
+                       bool respect_network_isolation_key);
+
+    bool operator<(const ExpectCTStateIndex& other) const {
+      return std::tie(hashed_host, network_isolation_key) <
+             std::tie(other.hashed_host, other.network_isolation_key);
+    }
+
+    std::string hashed_host;
+    NetworkIsolationKey network_isolation_key;
+  };
+
   class NET_EXPORT ExpectCTStateIterator {
    public:
     explicit ExpectCTStateIterator(const TransportSecurityState& state);
@@ -253,12 +278,15 @@
 
     bool HasNext() const { return iterator_ != end_; }
     void Advance() { ++iterator_; }
-    const std::string& hostname() const { return iterator_->first; }
+    const std::string& hostname() const { return iterator_->first.hashed_host; }
+    const NetworkIsolationKey& network_isolation_key() const {
+      return iterator_->first.network_isolation_key;
+    }
     const ExpectCTState& domain_state() const { return iterator_->second; }
 
    private:
-    std::map<std::string, ExpectCTState>::const_iterator iterator_;
-    std::map<std::string, ExpectCTState>::const_iterator end_;
+    std::map<ExpectCTStateIndex, ExpectCTState>::const_iterator iterator_;
+    std::map<ExpectCTStateIndex, ExpectCTState>::const_iterator end_;
   };
 
   // An interface for asynchronously sending HPKP violation reports.
@@ -426,8 +454,10 @@
   // |hashed_host|. |hashed_host| is already in the internal representation.
   // Note: This is only used for serializing/deserializing the
   // TransportSecurityState.
-  void AddOrUpdateEnabledExpectCTHosts(const std::string& hashed_host,
-                                       const ExpectCTState& state);
+  void AddOrUpdateEnabledExpectCTHosts(
+      const std::string& hashed_host,
+      const NetworkIsolationKey& network_isolation_key,
+      const ExpectCTState& state);
 
   // Deletes all dynamic data (e.g. HSTS or HPKP data) created since a given
   // time.
@@ -472,7 +502,9 @@
   // entries that have expired.
   bool GetDynamicSTSState(const std::string& host, STSState* result);
   bool GetDynamicPKPState(const std::string& host, PKPState* result);
-  bool GetDynamicExpectCTState(const std::string& host, ExpectCTState* result);
+  bool GetDynamicExpectCTState(const std::string& host,
+                               const NetworkIsolationKey& network_isolation_key,
+                               ExpectCTState* result);
 
   // Processes an HSTS header value from the host, adding entries to
   // dynamic state if necessary.
@@ -500,7 +532,8 @@
   void AddExpectCT(const std::string& host,
                    const base::Time& expiry,
                    bool enforce,
-                   const GURL& report_uri);
+                   const GURL& report_uri,
+                   const NetworkIsolationKey& network_isolation_key);
 
   // Enables or disables public key pinning bypass for local trust anchors.
   // Disabling the bypass for local trust anchors is highly discouraged.
@@ -549,7 +582,7 @@
 
   typedef std::map<std::string, STSState> STSStateMap;
   typedef std::map<std::string, PKPState> PKPStateMap;
-  typedef std::map<std::string, ExpectCTState> ExpectCTStateMap;
+  typedef std::map<ExpectCTStateIndex, ExpectCTState> ExpectCTStateMap;
   typedef ExpiringCache<std::string,
                         bool,
                         base::TimeTicks,
@@ -593,7 +626,8 @@
                            const base::Time& last_observed,
                            const base::Time& expiry,
                            bool enforce,
-                           const GURL& report_uri);
+                           const GURL& report_uri,
+                           const NetworkIsolationKey& network_isolation_key);
 
   // Returns true if a request to |host_port_pair| with the given
   // SubjectPublicKeyInfo |hashes| satisfies the pins in |pkp_state|,
@@ -627,6 +661,12 @@
           signed_certificate_timestamps,
       const NetworkIsolationKey& network_isolation_key);
 
+  // Convenience method to create ExpectCTStateIndex, taking into account
+  // |key_expect_ct_by_nik_|.
+  ExpectCTStateIndex CreateExpectCTStateIndex(
+      const std::string& hashed_host,
+      const NetworkIsolationKey& network_isolation_key);
+
   // The sets of hosts that have enabled TransportSecurity. |domain| will always
   // be empty for a STSState, PKPState, or ExpectCTState in these maps; the
   // domain comes from the map keys instead. In addition, |upgrade_mode| in the
@@ -658,6 +698,13 @@
   ReportCache sent_hpkp_reports_cache_;
   ReportCache sent_expect_ct_reports_cache_;
 
+  // Whether Expect-CT data should keyed by a NetworkIsolationKey. When false,
+  // ExpectCTStateIndex is always created with an empty NetworkIsolationKey.
+  // Populated based on features::kPartitionExpectCTStateByNetworkIsolationKey
+  // on construction of the TransportSecurityStateObject to avoid repeatedly
+  // querying the feature.
+  bool key_expect_ct_by_nik_;
+
   std::set<std::string> hsts_host_bypass_list_;
 
   THREAD_CHECKER(thread_checker_);
diff --git a/net/http/transport_security_state_unittest.cc b/net/http/transport_security_state_unittest.cc
index f2816c3f..e712ca4 100644
--- a/net/http/transport_security_state_unittest.cc
+++ b/net/http/transport_security_state_unittest.cc
@@ -24,6 +24,7 @@
 #include "build/build_config.h"
 #include "crypto/openssl_util.h"
 #include "crypto/sha2.h"
+#include "net/base/features.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/net_errors.h"
 #include "net/base/network_isolation_key.h"
@@ -750,21 +751,24 @@
 
   EXPECT_FALSE(state.ShouldUpgradeToSSL("example.com"));
   EXPECT_FALSE(state.HasPublicKeyPins("example.com"));
-  EXPECT_FALSE(state.GetDynamicExpectCTState("example.com", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example.com", NetworkIsolationKey(), &expect_ct_state));
   bool include_subdomains = false;
   state.AddHSTS("example.com", expiry, include_subdomains);
   state.AddHPKP("example.com", expiry, include_subdomains,
                 GetSampleSPKIHashes(), GURL());
-  state.AddExpectCT("example.com", expiry, true, GURL());
+  state.AddExpectCT("example.com", expiry, true, GURL(), NetworkIsolationKey());
 
   state.DeleteAllDynamicDataSince(expiry, base::DoNothing());
   EXPECT_TRUE(state.ShouldUpgradeToSSL("example.com"));
   EXPECT_TRUE(state.HasPublicKeyPins("example.com"));
-  EXPECT_TRUE(state.GetDynamicExpectCTState("example.com", &expect_ct_state));
+  EXPECT_TRUE(state.GetDynamicExpectCTState(
+      "example.com", NetworkIsolationKey(), &expect_ct_state));
   state.DeleteAllDynamicDataSince(older, base::DoNothing());
   EXPECT_FALSE(state.ShouldUpgradeToSSL("example.com"));
   EXPECT_FALSE(state.HasPublicKeyPins("example.com"));
-  EXPECT_FALSE(state.GetDynamicExpectCTState("example.com", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example.com", NetworkIsolationKey(), &expect_ct_state));
 
   // Dynamic data in |state| should be empty now.
   EXPECT_FALSE(TransportSecurityState::STSStateIterator(state).HasNext());
@@ -774,32 +778,48 @@
 
 TEST_F(TransportSecurityStateTest, DeleteDynamicDataForHost) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(
-      TransportSecurityState::kDynamicExpectCTFeature);
+  feature_list.InitWithFeatures(
+      /* enabled_features */
+      {TransportSecurityState::kDynamicExpectCTFeature,
+       features::kPartitionExpectCTStateByNetworkIsolationKey},
+      /* disabled_features */
+      {});
   TransportSecurityState state;
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
   bool include_subdomains = false;
 
+  NetworkIsolationKey network_isolation_key =
+      NetworkIsolationKey::CreateTransient();
   state.AddHSTS("example1.test", expiry, include_subdomains);
   state.AddHPKP("example1.test", expiry, include_subdomains,
                 GetSampleSPKIHashes(), GURL());
-  state.AddExpectCT("example1.test", expiry, true, GURL());
+  state.AddExpectCT("example1.test", expiry, true, GURL(),
+                    NetworkIsolationKey());
 
   EXPECT_TRUE(state.ShouldUpgradeToSSL("example1.test"));
   EXPECT_FALSE(state.ShouldUpgradeToSSL("example2.test"));
   EXPECT_TRUE(state.HasPublicKeyPins("example1.test"));
   EXPECT_FALSE(state.HasPublicKeyPins("example2.test"));
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_TRUE(state.GetDynamicExpectCTState("example1.test", &expect_ct_state));
-  EXPECT_FALSE(
-      state.GetDynamicExpectCTState("example2.test", &expect_ct_state));
+  EXPECT_TRUE(state.GetDynamicExpectCTState(
+      "example1.test", NetworkIsolationKey(), &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example2.test", NetworkIsolationKey(), &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example1.test", network_isolation_key, &expect_ct_state));
+  state.AddExpectCT("example1.test", expiry, true, GURL(),
+                    network_isolation_key);
+  EXPECT_TRUE(state.GetDynamicExpectCTState(
+      "example1.test", network_isolation_key, &expect_ct_state));
 
   EXPECT_TRUE(state.DeleteDynamicDataForHost("example1.test"));
   EXPECT_FALSE(state.ShouldUpgradeToSSL("example1.test"));
   EXPECT_FALSE(state.HasPublicKeyPins("example1.test"));
-  EXPECT_FALSE(
-      state.GetDynamicExpectCTState("example1.test", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example1.test", NetworkIsolationKey(), &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example1.test", network_isolation_key, &expect_ct_state));
 }
 
 TEST_F(TransportSecurityStateTest, LongNames) {
@@ -1155,7 +1175,8 @@
   // No report should have been sent and the state should not have been saved.
   EXPECT_EQ(0u, reporter.num_failures());
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_FALSE(state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example.test", NetworkIsolationKey(), &expect_ct_state));
 
   // Sanity-check that the reporter is notified if the build is timely and the
   // connection is not compliant.
@@ -1507,7 +1528,7 @@
   using CTRequirementLevel =
       TransportSecurityState::RequireCTDelegate::CTRequirementLevel;
 
-  // Dummy cert to use as the validate chain. The contents do not matter.
+  // Dummy cert to use as the validation chain. The contents do not matter.
   scoped_refptr<X509Certificate> cert =
       ImportCertFromFile(GetTestCertsDirectory(), "expired_cert.pem");
   ASSERT_TRUE(cert);
@@ -1953,14 +1974,16 @@
   const base::Time current_time = base::Time::Now();
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
 
-  state.AddExpectCT(host, expiry, true, GURL());
-  EXPECT_TRUE(state.GetDynamicExpectCTState(host, &expect_ct_state));
+  state.AddExpectCT(host, expiry, true, GURL(), NetworkIsolationKey());
+  EXPECT_TRUE(state.GetDynamicExpectCTState(host, NetworkIsolationKey(),
+                                            &expect_ct_state));
   EXPECT_TRUE(expect_ct_state.enforce);
   EXPECT_TRUE(expect_ct_state.report_uri.is_empty());
   EXPECT_EQ(expiry, expect_ct_state.expiry);
 
   state.ClearDynamicData();
-  EXPECT_FALSE(state.GetDynamicExpectCTState(host, &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(host, NetworkIsolationKey(),
+                                             &expect_ct_state));
 }
 
 // Tests that dynamic Expect-CT state can be added and retrieved.
@@ -1975,8 +1998,9 @@
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
 
   // Test that Expect-CT state can be added and retrieved.
-  state.AddExpectCT(host, expiry, true, GURL());
-  EXPECT_TRUE(state.GetDynamicExpectCTState(host, &expect_ct_state));
+  state.AddExpectCT(host, expiry, true, GURL(), NetworkIsolationKey());
+  EXPECT_TRUE(state.GetDynamicExpectCTState(host, NetworkIsolationKey(),
+                                            &expect_ct_state));
   EXPECT_TRUE(expect_ct_state.enforce);
   EXPECT_TRUE(expect_ct_state.report_uri.is_empty());
   EXPECT_EQ(expiry, expect_ct_state.expiry);
@@ -1984,16 +2008,18 @@
   // Test that Expect-CT can be updated (e.g. by changing |enforce| to false and
   // adding a report-uri).
   const GURL report_uri("https://example-report.test");
-  state.AddExpectCT(host, expiry, false, report_uri);
-  EXPECT_TRUE(state.GetDynamicExpectCTState(host, &expect_ct_state));
+  state.AddExpectCT(host, expiry, false, report_uri, NetworkIsolationKey());
+  EXPECT_TRUE(state.GetDynamicExpectCTState(host, NetworkIsolationKey(),
+                                            &expect_ct_state));
   EXPECT_FALSE(expect_ct_state.enforce);
   EXPECT_EQ(report_uri, expect_ct_state.report_uri);
   EXPECT_EQ(expiry, expect_ct_state.expiry);
 
   // Test that Expect-CT state is discarded when expired.
   state.AddExpectCT(host, current_time - base::TimeDelta::FromSeconds(1000),
-                    true, report_uri);
-  EXPECT_FALSE(state.GetDynamicExpectCTState(host, &expect_ct_state));
+                    true, report_uri, NetworkIsolationKey());
+  EXPECT_FALSE(state.GetDynamicExpectCTState(host, NetworkIsolationKey(),
+                                             &expect_ct_state));
 }
 
 // Tests that the Expect-CT reporter is not notified for repeated dynamic
@@ -2024,7 +2050,8 @@
   state.ProcessExpectCTHeader(kHeader, HostPortPair("example.test", 443), ssl,
                               NetworkIsolationKey());
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_TRUE(state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+  EXPECT_TRUE(state.GetDynamicExpectCTState(
+      "example.test", NetworkIsolationKey(), &expect_ct_state));
   EXPECT_EQ(GURL("http://foo.test"), expect_ct_state.report_uri);
   EXPECT_TRUE(expect_ct_state.enforce);
   EXPECT_LT(now, expect_ct_state.expiry);
@@ -2112,7 +2139,8 @@
   state.ProcessExpectCTHeader(kHeader, HostPortPair("example.test", 443), ssl,
                               NetworkIsolationKey());
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_FALSE(state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example.test", NetworkIsolationKey(), &expect_ct_state));
   // The first time the header was received over a connection that failed to
   // meet CT requirements, a report should be sent.
   EXPECT_EQ(1u, reporter.num_failures());
@@ -2135,8 +2163,9 @@
   const base::Time current_time = base::Time::Now();
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
 
-  state.AddExpectCT(host, expiry, true, GURL());
-  EXPECT_FALSE(state.GetDynamicExpectCTState(host, &expect_ct_state));
+  state.AddExpectCT(host, expiry, true, GURL(), NetworkIsolationKey());
+  EXPECT_FALSE(state.GetDynamicExpectCTState(host, NetworkIsolationKey(),
+                                             &expect_ct_state));
 }
 
 // Tests that dynamic Expect-CT opt-ins are processed correctly (when the
@@ -2157,8 +2186,8 @@
     state.ProcessExpectCTHeader(kHeader, HostPortPair("example.test", 443), ssl,
                                 NetworkIsolationKey());
     TransportSecurityState::ExpectCTState expect_ct_state;
-    EXPECT_FALSE(
-        state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+    EXPECT_FALSE(state.GetDynamicExpectCTState(
+        "example.test", NetworkIsolationKey(), &expect_ct_state));
   }
 
   // Now test that the header is processed when the feature is enabled.
@@ -2173,8 +2202,8 @@
     state.ProcessExpectCTHeader(kHeader, HostPortPair("example.test", 443), ssl,
                                 NetworkIsolationKey());
     TransportSecurityState::ExpectCTState expect_ct_state;
-    EXPECT_TRUE(
-        state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+    EXPECT_TRUE(state.GetDynamicExpectCTState(
+        "example.test", NetworkIsolationKey(), &expect_ct_state));
     EXPECT_EQ(GURL("http://foo.test"), expect_ct_state.report_uri);
     EXPECT_TRUE(expect_ct_state.enforce);
     EXPECT_LT(now, expect_ct_state.expiry);
@@ -2200,7 +2229,8 @@
   state.ProcessExpectCTHeader(kHeader, HostPortPair("example.test", 443), ssl,
                               NetworkIsolationKey());
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_FALSE(state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example.test", NetworkIsolationKey(), &expect_ct_state));
   EXPECT_EQ(0u, reporter.num_failures());
 }
 
@@ -2231,7 +2261,8 @@
   state.ProcessExpectCTHeader(kHeader, HostPortPair("example.test", 443), ssl,
                               NetworkIsolationKey());
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_FALSE(state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example.test", NetworkIsolationKey(), &expect_ct_state));
   EXPECT_EQ(0u, reporter.num_failures());
 }
 
@@ -2269,7 +2300,8 @@
   state.ProcessExpectCTHeader(kHeader, HostPortPair("example.test", 443), ssl,
                               network_isolation_key);
   TransportSecurityState::ExpectCTState expect_ct_state;
-  EXPECT_FALSE(state.GetDynamicExpectCTState("example.test", &expect_ct_state));
+  EXPECT_FALSE(state.GetDynamicExpectCTState(
+      "example.test", NetworkIsolationKey(), &expect_ct_state));
   EXPECT_EQ(1u, reporter.num_failures());
   EXPECT_EQ("example.test", reporter.host_port_pair().host());
   EXPECT_TRUE(reporter.expiration().is_null());
@@ -2310,11 +2342,11 @@
   MockExpectCTReporter reporter;
   state.SetExpectCTReporter(&reporter);
   state.AddExpectCT("example.test", expiry, true /* enforce */,
-                    GURL("https://example-report.test"));
+                    GURL("https://example-report.test"), network_isolation_key);
   state.AddExpectCT("example-report-only.test", expiry, false /* enforce */,
-                    GURL("https://example-report.test"));
+                    GURL("https://example-report.test"), network_isolation_key);
   state.AddExpectCT("example-enforce-only.test", expiry, true /* enforce */,
-                    GURL());
+                    GURL(), network_isolation_key);
 
   // Test that a connection to an unrelated host is not affected.
   EXPECT_EQ(TransportSecurityState::CT_NOT_REQUIRED,
@@ -2330,7 +2362,7 @@
                 cert1.get(), cert2.get(), sct_list,
                 TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
                 ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS,
-                NetworkIsolationKey()));
+                network_isolation_key));
   EXPECT_EQ(0u, reporter.num_failures());
 
   // A connection to an Expect-CT host should be closed and reported.
@@ -2361,7 +2393,7 @@
                 cert1.get(), cert2.get(), sct_list,
                 TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
                 ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS,
-                NetworkIsolationKey()));
+                network_isolation_key));
   EXPECT_EQ(1u, reporter.num_failures());
   EXPECT_EQ(TransportSecurityState::CT_REQUIREMENTS_MET,
             state.CheckCTRequirements(
@@ -2373,15 +2405,13 @@
   EXPECT_EQ(1u, reporter.num_failures());
 
   // A connection to a report-only host should be reported only.
-  NetworkIsolationKey network_isolation_key2 =
-      NetworkIsolationKey::CreateTransient();
   EXPECT_EQ(TransportSecurityState::CT_NOT_REQUIRED,
             state.CheckCTRequirements(
                 HostPortPair("example-report-only.test", 443), true,
                 HashValueVector(), cert1.get(), cert2.get(), sct_list,
                 TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
                 ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS,
-                network_isolation_key2));
+                network_isolation_key));
   EXPECT_EQ(2u, reporter.num_failures());
   EXPECT_EQ("example-report-only.test", reporter.host_port_pair().host());
   EXPECT_EQ(443, reporter.host_port_pair().port());
@@ -2391,7 +2421,7 @@
   EXPECT_EQ(sct_list[0].status,
             reporter.signed_certificate_timestamps()[0].status);
   EXPECT_EQ(sct_list[0].sct, reporter.signed_certificate_timestamps()[0].sct);
-  EXPECT_EQ(network_isolation_key2, reporter.network_isolation_key());
+  EXPECT_EQ(network_isolation_key, reporter.network_isolation_key());
 
   // A connection to an enforce-only host should be closed but not reported.
   EXPECT_EQ(TransportSecurityState::CT_REQUIREMENTS_NOT_MET,
@@ -2455,7 +2485,7 @@
   MockExpectCTReporter reporter;
   state.SetExpectCTReporter(&reporter);
   state.AddExpectCT("example.test", expiry, false /* enforce */,
-                    GURL("https://example-report.test"));
+                    GURL("https://example-report.test"), network_isolation_key);
 
   // A connection to an Expect-CT host, which also requires CT by the delegate,
   // should be closed and reported.
@@ -2515,7 +2545,7 @@
   MockExpectCTReporter reporter;
   state.SetExpectCTReporter(&reporter);
   state.AddExpectCT("example.test", expiry, false /* enforce */,
-                    GURL("https://example-report.test"));
+                    GURL("https://example-report.test"), network_isolation_key);
 
   // A connection to an Expect-CT host, which is exempted from the CT
   // requirements by the delegate, should be reported but not closed.
@@ -3331,4 +3361,95 @@
 
 #endif  // BUILDFLAG(INCLUDE_TRANSPORT_SECURITY_STATE_PRELOAD_LIST)
 
+TEST_F(TransportSecurityStateTest,
+       PartitionExpectCTStateByNetworkIsolationKey) {
+  const char kDomain[] = "example.test";
+  HostPortPair host_port_pair(kDomain, 443);
+
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      TransportSecurityState::kDynamicExpectCTFeature);
+
+  const base::Time expiry =
+      base::Time::Now() + base::TimeDelta::FromSeconds(1000);
+
+  // Dummy cert to use as the validation chain. The contents do not matter.
+  scoped_refptr<X509Certificate> cert =
+      ImportCertFromFile(GetTestCertsDirectory(), "expired_cert.pem");
+  ASSERT_TRUE(cert);
+  HashValueVector hashes;
+  hashes.push_back(
+      HashValue(X509Certificate::CalculateFingerprint256(cert->cert_buffer())));
+
+  // An ExpectCT entry is set using network_isolation_key1, and then accessed
+  // using both keys. It should only be accessible using the other key when
+  // kPartitionExpectCTStateByNetworkIsolationKey is disabled.
+  NetworkIsolationKey network_isolation_key1 =
+      NetworkIsolationKey::CreateTransient();
+  NetworkIsolationKey network_isolation_key2 =
+      NetworkIsolationKey::CreateTransient();
+
+  for (bool partition_expect_ct_state : {false, true}) {
+    base::test::ScopedFeatureList feature_list2;
+    if (partition_expect_ct_state) {
+      feature_list2.InitAndEnableFeature(
+          features::kPartitionExpectCTStateByNetworkIsolationKey);
+    } else {
+      feature_list2.InitAndDisableFeature(
+          features::kPartitionExpectCTStateByNetworkIsolationKey);
+    }
+
+    // Add Expect-CT entry.
+    TransportSecurityState state;
+    state.AddExpectCT(kDomain, expiry, true, GURL(), network_isolation_key1);
+    TransportSecurityState::ExpectCTState expect_ct_state;
+    EXPECT_TRUE(state.GetDynamicExpectCTState(kDomain, network_isolation_key1,
+                                              &expect_ct_state));
+
+    // The Expect-CT entry should only be respected with
+    // |network_isolation_key2| when
+    // kPartitionExpectCTStateByNetworkIsolationKey is disabled.
+    EXPECT_EQ(!partition_expect_ct_state,
+              state.GetDynamicExpectCTState(kDomain, network_isolation_key2,
+                                            &expect_ct_state));
+    EXPECT_EQ(TransportSecurityState::CT_REQUIREMENTS_NOT_MET,
+              state.CheckCTRequirements(
+                  host_port_pair, true, hashes, cert.get(), cert.get(),
+                  SignedCertificateTimestampAndStatusList(),
+                  TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
+                  ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS,
+                  network_isolation_key1));
+    EXPECT_EQ(!partition_expect_ct_state,
+              TransportSecurityState::CT_REQUIREMENTS_NOT_MET ==
+                  state.CheckCTRequirements(
+                      host_port_pair, true, hashes, cert.get(), cert.get(),
+                      SignedCertificateTimestampAndStatusList(),
+                      TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
+                      ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS,
+                      network_isolation_key2));
+
+    // An Expect-CT header with |network_isolation_key2| should only overwrite
+    // the entry when |partition_expect_ct_state| is false.
+    SSLInfo ssl_info;
+    ssl_info.ct_policy_compliance =
+        ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS;
+    ssl_info.is_issued_by_known_root = true;
+    MockExpectCTReporter reporter;
+    state.SetExpectCTReporter(&reporter);
+    const char kHeader[] = "max-age=0";
+    state.ProcessExpectCTHeader(kHeader, host_port_pair, ssl_info,
+                                network_isolation_key2);
+    EXPECT_EQ(partition_expect_ct_state,
+              state.GetDynamicExpectCTState(kDomain, network_isolation_key1,
+                                            &expect_ct_state));
+
+    // An Expect-CT header with |network_isolation_key1| should always overwrite
+    // the added entry.
+    state.ProcessExpectCTHeader(kHeader, host_port_pair, ssl_info,
+                                network_isolation_key1);
+    EXPECT_FALSE(state.GetDynamicExpectCTState(kDomain, network_isolation_key1,
+                                               &expect_ct_state));
+  }
+}
+
 }  // namespace net
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc
index efe8dee2..0d128ea 100644
--- a/net/socket/ssl_client_socket_unittest.cc
+++ b/net/socket/ssl_client_socket_unittest.cc
@@ -4179,9 +4179,9 @@
   // Set up the Expect-CT opt-in.
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  transport_security_state_->AddExpectCT(host_port_pair().host(), expiry,
-                                         true /* enforce */,
-                                         GURL("https://example-report.test"));
+  transport_security_state_->AddExpectCT(
+      host_port_pair().host(), expiry, true /* enforce */,
+      GURL("https://example-report.test"), NetworkIsolationKey());
   MockExpectCTReporter reporter;
   transport_security_state_->SetExpectCTReporter(&reporter);
 
@@ -4264,9 +4264,9 @@
   // Set up the Expect-CT opt-in.
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  transport_security_state_->AddExpectCT(host_port_pair().host(), expiry,
-                                         true /* enforce */,
-                                         GURL("https://example-report.test"));
+  transport_security_state_->AddExpectCT(
+      host_port_pair().host(), expiry, true /* enforce */,
+      GURL("https://example-report.test"), NetworkIsolationKey());
   MockExpectCTReporter reporter;
   transport_security_state_->SetExpectCTReporter(&reporter);
 
@@ -4308,7 +4308,8 @@
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
   transport_security_state_->AddExpectCT(host_port_pair().host(), expiry,
-                                         true /* enforce */, GURL());
+                                         true /* enforce */, GURL(),
+                                         NetworkIsolationKey());
 
   EXPECT_CALL(*ct_policy_enforcer_, CheckCompliance(server_cert.get(), _, _))
       .WillRepeatedly(
@@ -4342,7 +4343,8 @@
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
   transport_security_state_->AddExpectCT(host_port_pair().host(), expiry,
-                                         true /* enforce */, GURL());
+                                         true /* enforce */, GURL(),
+                                         NetworkIsolationKey());
 
   EXPECT_CALL(*ct_policy_enforcer_, CheckCompliance(server_cert.get(), _, _))
       .WillRepeatedly(
@@ -4424,11 +4426,13 @@
   cert_verifier_->AddResultForCert(server_cert.get(), verify_result, OK);
 
   // Set up the Expect-CT opt-in.
+  NetworkIsolationKey network_isolation_key =
+      NetworkIsolationKey::CreateTransient();
   const base::Time current_time(base::Time::Now());
   const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  transport_security_state_->AddExpectCT(host_port_pair().host(), expiry,
-                                         true /* enforce */,
-                                         GURL("https://example-report.test"));
+  transport_security_state_->AddExpectCT(
+      host_port_pair().host(), expiry, true /* enforce */,
+      GURL("https://example-report.test"), NetworkIsolationKey());
   MockExpectCTReporter reporter;
   transport_security_state_->SetExpectCTReporter(&reporter);
 
@@ -4437,7 +4441,7 @@
           Return(ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS));
 
   SSLConfig ssl_config;
-  ssl_config.network_isolation_key = NetworkIsolationKey::CreateTransient();
+  ssl_config.network_isolation_key = network_isolation_key;
   int rv;
   ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv));
   SSLInfo ssl_info;
@@ -4454,7 +4458,7 @@
             reporter.served_certificate_chain());
   EXPECT_EQ(ssl_info.cert.get(), reporter.validated_certificate_chain());
   EXPECT_EQ(0u, reporter.signed_certificate_timestamps().size());
-  EXPECT_EQ(ssl_config.network_isolation_key, reporter.network_isolation_key());
+  EXPECT_EQ(network_isolation_key, reporter.network_isolation_key());
 
   transport_security_state_->ClearReportCachesForTesting();
   EXPECT_CALL(*ct_policy_enforcer_, CheckCompliance(server_cert.get(), _, _))
@@ -4474,7 +4478,7 @@
             reporter.served_certificate_chain());
   EXPECT_EQ(ssl_info.cert.get(), reporter.validated_certificate_chain());
   EXPECT_EQ(0u, reporter.signed_certificate_timestamps().size());
-  EXPECT_EQ(ssl_config.network_isolation_key, reporter.network_isolation_key());
+  EXPECT_EQ(network_isolation_key, reporter.network_isolation_key());
 
   // If the connection is CT compliant, then there should be no socket error nor
   // a report.
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc
index f67a1b1..57c0997 100644
--- a/net/spdy/spdy_session_unittest.cc
+++ b/net/spdy/spdy_session_unittest.cc
@@ -6795,18 +6795,20 @@
       ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS;
 
   // A different Expect-CT enabled host should not be allowed to pool.
-  tss.AddExpectCT("mail.example.org", expiry, true, GURL());
+  tss.AddExpectCT("mail.example.org", expiry, true, GURL(),
+                  NetworkIsolationKey());
   EXPECT_FALSE(SpdySession::CanPool(&tss, ssl_info, ssl_config_service,
                                     "www.example.org", "mail.example.org"));
   // A report-only Expect-CT configuration should not prevent pooling.
   tss.AddExpectCT("mail.example.org", expiry, false,
-                  GURL("https://report.test"));
+                  GURL("https://report.test"), NetworkIsolationKey());
   EXPECT_TRUE(SpdySession::CanPool(&tss, ssl_info, ssl_config_service,
                                    "www.example.org", "mail.example.org"));
   // If Expect-CT becomes enabled for the same host for which the connection was
   // already made, subsequent connections to that host should not be allowed to
   // pool.
-  tss.AddExpectCT("www.example.org", expiry, true, GURL());
+  tss.AddExpectCT("www.example.org", expiry, true, GURL(),
+                  NetworkIsolationKey());
   EXPECT_FALSE(SpdySession::CanPool(&tss, ssl_info, ssl_config_service,
                                     "www.example.org", "www.example.org"));
 }
diff --git a/net/tools/quic/quic_simple_server.cc b/net/tools/quic/quic_simple_server.cc
index 9c397b5..01c3e63 100644
--- a/net/tools/quic/quic_simple_server.cc
+++ b/net/tools/quic/quic_simple_server.cc
@@ -125,6 +125,7 @@
 }
 
 void QuicSimpleServer::Shutdown() {
+  LOG(WARNING) << "QuicSimpleServer is shutting down";
   // Before we shut down the epoll server, give all active sessions a chance to
   // notify clients that they're closing.
   dispatcher_->Shutdown();
@@ -177,20 +178,24 @@
 
 void QuicSimpleServer::OnReadComplete(int result) {
   read_pending_ = false;
-  if (result == 0)
-    result = ERR_CONNECTION_CLOSED;
 
-  if (result < 0) {
+  if (result > 0) {
+    quic::QuicReceivedPacket packet(read_buffer_->data(), result,
+                                    helper_->GetClock()->Now(), false);
+    dispatcher_->ProcessPacket(ToQuicSocketAddress(server_address_),
+                               ToQuicSocketAddress(client_address_), packet);
+  } else {
     LOG(ERROR) << "QuicSimpleServer read failed: " << ErrorToString(result);
-    Shutdown();
-    return;
+    // Do not act on ERR_MSG_TOO_BIG as that indicates that we received a UDP
+    // packet whose payload is larger than our receive buffer. Do not act on 0
+    // as that indicates that we received a UDP packet with an empty payload.
+    // In both cases, the socket should still be usable.
+    if (result != ERR_MSG_TOO_BIG && result != 0) {
+      Shutdown();
+      return;
+    }
   }
 
-  quic::QuicReceivedPacket packet(read_buffer_->data(), result,
-                                  helper_->GetClock()->Now(), false);
-  dispatcher_->ProcessPacket(ToQuicSocketAddress(server_address_),
-                             ToQuicSocketAddress(client_address_), packet);
-
   StartReading();
 }
 
diff --git a/net/url_request/url_request_quic_unittest.cc b/net/url_request/url_request_quic_unittest.cc
index fb8e2f6..6ea77b2 100644
--- a/net/url_request/url_request_quic_unittest.cc
+++ b/net/url_request/url_request_quic_unittest.cc
@@ -728,15 +728,15 @@
   Init();
 
   GURL report_uri("https://report.test/");
+  IsolationInfo isolation_info = IsolationInfo::CreateTransient();
   transport_security_state()->AddExpectCT(
       kTestServerHost, base::Time::Now() + base::TimeDelta::FromDays(1),
-      true /* enforce */, report_uri);
+      true /* enforce */, report_uri, isolation_info.network_isolation_key());
 
   base::RunLoop run_loop;
   TestDelegate delegate;
   std::unique_ptr<URLRequest> request =
       CreateRequest(GURL(UrlFromPath(kHelloPath)), DEFAULT_PRIORITY, &delegate);
-  IsolationInfo isolation_info = IsolationInfo::CreateTransient();
   request->set_isolation_info(isolation_info);
   request->Start();
   delegate.RunUntilComplete();
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 70b185a..3bf83b5 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -5468,8 +5468,8 @@
   d.RunUntilComplete();
 
   TransportSecurityState::ExpectCTState state;
-  ASSERT_TRUE(
-      transport_security_state.GetDynamicExpectCTState(url.host(), &state));
+  ASSERT_TRUE(transport_security_state.GetDynamicExpectCTState(
+      url.host(), NetworkIsolationKey(), &state));
   EXPECT_TRUE(state.enforce);
   EXPECT_EQ(GURL("https://example.test"), state.report_uri);
 }
@@ -5530,8 +5530,8 @@
   d.RunUntilComplete();
 
   TransportSecurityState::ExpectCTState state;
-  ASSERT_TRUE(
-      transport_security_state.GetDynamicExpectCTState(url.host(), &state));
+  ASSERT_TRUE(transport_security_state.GetDynamicExpectCTState(
+      url.host(), NetworkIsolationKey(), &state));
   EXPECT_TRUE(state.enforce);
   EXPECT_EQ(GURL("https://example.test"), state.report_uri);
 }
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index 20a17880..d9a3e31 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -3668,7 +3668,20 @@
   }
 }
 
-void PDFiumEngine::ScrollIntoView(const pp::Rect& rect) {
+void PDFiumEngine::ScrollAnnotationIntoView(FPDF_ANNOTATION annot,
+                                            int page_index) {
+  if (!PageIndexInBounds(page_index))
+    return;
+
+  FS_RECTF annot_rect;
+  if (!FPDFAnnot_GetRect(annot, &annot_rect))
+    return;
+
+  pp::Rect rect = pages_[page_index]->PageToScreen(
+      pp::Point(), /*zoom=*/1.0, annot_rect.left, annot_rect.top,
+      annot_rect.right, annot_rect.bottom,
+      layout_.options().default_page_orientation());
+
   pp::Rect visible_rect = GetVisibleRect();
   if (visible_rect.Contains(rect))
     return;
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h
index 5bcb213..5b34017 100644
--- a/pdf/pdfium/pdfium_engine.h
+++ b/pdf/pdfium/pdfium_engine.h
@@ -583,9 +583,8 @@
   void SetSelection(const PP_PdfPageCharacterIndex& selection_start_index,
                     const PP_PdfPageCharacterIndex& selection_end_index);
 
-  // Given |rect| in document coordinates, scroll the |rect| into view if not
-  // already in view.
-  void ScrollIntoView(const pp::Rect& rect);
+  // Given |annot|, scroll the |annot| into view if not already in view.
+  void ScrollAnnotationIntoView(FPDF_ANNOTATION annot, int page_index);
 
   void OnFocusedAnnotationUpdated(FPDF_ANNOTATION annot, int page_index);
 
diff --git a/pdf/pdfium/pdfium_form_filler.cc b/pdf/pdfium/pdfium_form_filler.cc
index 4a142b4..d1c1734 100644
--- a/pdf/pdfium/pdfium_form_filler.cc
+++ b/pdf/pdfium/pdfium_form_filler.cc
@@ -285,17 +285,8 @@
 
   // Maintain viewport if we are updating focus. This is to ensure that we don't
   // scroll the focused annotation into view when focus is regained.
-  if (!engine->updating_focus_) {
-    FS_RECTF annot_rect;
-    if (!FPDFAnnot_GetRect(annot, &annot_rect))
-      return;
-
-    pp::Rect screen_rect = engine->pages_[page_index]->PageToScreen(
-        pp::Point(), /*zoom=*/1.0, annot_rect.left, annot_rect.top,
-        annot_rect.right, annot_rect.bottom,
-        engine->layout_.options().default_page_orientation());
-    engine->ScrollIntoView(screen_rect);
-  }
+  if (!engine->updating_focus_)
+    engine->ScrollAnnotationIntoView(annot, page_index);
 
   engine->OnFocusedAnnotationUpdated(annot, page_index);
 }
diff --git a/services/device/public/mojom/serial.mojom b/services/device/public/mojom/serial.mojom
index b4a0891..f48288b 100644
--- a/services/device/public/mojom/serial.mojom
+++ b/services/device/public/mojom/serial.mojom
@@ -9,6 +9,11 @@
 
 struct SerialPortInfo {
   mojo_base.mojom.UnguessableToken token;
+
+  // This platform-specific identifier, if present, can be used to identify the
+  // device across restarts of the application and operating system.
+  string? persistent_id;
+
   mojo_base.mojom.FilePath path;
   uint16 vendor_id;
   bool has_vendor_id = false;
diff --git a/services/device/serial/serial_device_enumerator_win.cc b/services/device/serial/serial_device_enumerator_win.cc
index 07f7b35..680da68f 100644
--- a/services/device/serial/serial_device_enumerator_win.cc
+++ b/services/device/serial/serial_device_enumerator_win.cc
@@ -11,6 +11,9 @@
 #include <setupapi.h>
 #include <stdint.h>
 
+#define INITGUID
+#include <devpkey.h>
+
 #include <algorithm>
 #include <memory>
 #include <string>
@@ -33,32 +36,33 @@
 
 namespace {
 
-// Searches the specified device info for a property with the specified key,
-// assigns the result to value, and returns whether the operation was
-// successful.
-bool GetProperty(HDEVINFO dev_info,
-                 SP_DEVINFO_DATA* dev_info_data,
-                 const int key,
-                 std::string* value) {
-  // We don't know how much space the property's value will take up, so we call
-  // the property retrieval function once to fetch the size of the required
-  // value buffer, then again once we've allocated a sufficiently large buffer.
-  DWORD buffer_size = 0;
-  SetupDiGetDeviceRegistryProperty(dev_info, dev_info_data, key, nullptr,
-                                   nullptr, buffer_size, &buffer_size);
-  if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-    return false;
+base::Optional<std::string> GetProperty(HDEVINFO dev_info,
+                                        SP_DEVINFO_DATA* dev_info_data,
+                                        const DEVPROPKEY& property) {
+  // SetupDiGetDeviceProperty() makes an RPC which may block.
+  base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+                                                base::BlockingType::MAY_BLOCK);
 
-  base::string16 buffer;
-  if (!SetupDiGetDeviceRegistryProperty(
-          dev_info, dev_info_data, key, nullptr,
-          reinterpret_cast<PBYTE>(base::WriteInto(&buffer, buffer_size)),
-          buffer_size, nullptr)) {
-    return false;
+  DEVPROPTYPE property_type;
+  DWORD required_size;
+  if (SetupDiGetDeviceProperty(dev_info, dev_info_data, &property,
+                               &property_type, /*PropertyBuffer=*/nullptr,
+                               /*PropertyBufferSize=*/0, &required_size,
+                               /*Flags=*/0) ||
+      GetLastError() != ERROR_INSUFFICIENT_BUFFER ||
+      property_type != DEVPROP_TYPE_STRING) {
+    return base::nullopt;
   }
 
-  *value = base::UTF16ToUTF8(buffer);
-  return true;
+  base::string16 buffer;
+  if (!SetupDiGetDeviceProperty(
+          dev_info, dev_info_data, &property, &property_type,
+          reinterpret_cast<PBYTE>(base::WriteInto(&buffer, required_size)),
+          required_size, /*RequiredSize=*/nullptr, /*Flags=*/0)) {
+    return base::nullopt;
+  }
+
+  return base::UTF16ToUTF8(buffer);
 }
 
 base::FilePath FixUpPortName(base::StringPiece port_name) {
@@ -78,19 +82,19 @@
                            display_name);
 }
 
-// Searches for the vendor ID in the device's hardware ID, assigns its value to
+// Searches for the vendor ID in the device's instance ID, assigns its value to
 // vendor_id, and returns whether the operation was successful.
-bool GetVendorID(const std::string hardware_id, uint32_t* vendor_id) {
+bool GetVendorID(const std::string& instance_id, uint32_t* vendor_id) {
   std::string vendor_id_str;
-  return RE2::PartialMatch(hardware_id, "VID_([0-9a-fA-F]+)", &vendor_id_str) &&
+  return RE2::PartialMatch(instance_id, "VID_([0-9a-fA-F]+)", &vendor_id_str) &&
          base::HexStringToUInt(vendor_id_str, vendor_id);
 }
 
-// Searches for the product ID in the device's product ID, assigns its value to
+// Searches for the product ID in the device's instance ID, assigns its value to
 // product_id, and returns whether the operation was successful.
-bool GetProductID(const std::string hardware_id, uint32_t* product_id) {
+bool GetProductID(const std::string& instance_id, uint32_t* product_id) {
   std::string product_id_str;
-  return RE2::PartialMatch(hardware_id, "PID_([0-9a-fA-F]+)",
+  return RE2::PartialMatch(instance_id, "PID_([0-9a-fA-F]+)",
                            &product_id_str) &&
          base::HexStringToUInt(product_id_str, product_id);
 }
@@ -208,16 +212,15 @@
   if (!SetupDiEnumDeviceInfo(dev_info.get(), 0, &dev_info_data))
     return;
 
-  std::string friendly_name;
-  // SPDRP_FRIENDLYNAME looks like "USB_SERIAL_PORT (COM3)".
+  // The friendly name looks like "USB_SERIAL_PORT (COM3)".
   // In Windows, the COM port is the path used to uniquely identify the
   // serial device. If the COM can't be found, ignore the device.
-  if (!GetProperty(dev_info.get(), &dev_info_data, SPDRP_FRIENDLYNAME,
-                   &friendly_name)) {
+  base::Optional<std::string> friendly_name =
+      GetProperty(dev_info.get(), &dev_info_data, DEVPKEY_Device_FriendlyName);
+  if (!friendly_name)
     return;
-  }
 
-  base::Optional<base::FilePath> path = GetPath(friendly_name);
+  base::Optional<base::FilePath> path = GetPath(*friendly_name);
   if (!path)
     return;
 
@@ -251,40 +254,42 @@
 
 void SerialDeviceEnumeratorWin::EnumeratePort(HDEVINFO dev_info,
                                               SP_DEVINFO_DATA* dev_info_data) {
-  std::string friendly_name;
-  // SPDRP_FRIENDLYNAME looks like "USB_SERIAL_PORT (COM3)".
+  // The friendly name looks like "USB_SERIAL_PORT (COM3)".
   // In Windows, the COM port is the path used to uniquely identify the
   // serial device. If the COM can't be found, ignore the device.
-  if (!GetProperty(dev_info, dev_info_data, SPDRP_FRIENDLYNAME,
-                   &friendly_name)) {
+  base::Optional<std::string> friendly_name =
+      GetProperty(dev_info, dev_info_data, DEVPKEY_Device_FriendlyName);
+  if (!friendly_name)
     return;
-  }
 
-  base::Optional<base::FilePath> path = GetPath(friendly_name);
+  base::Optional<base::FilePath> path = GetPath(*friendly_name);
   if (!path)
     return;
 
-  auto info = mojom::SerialPortInfo::New();
-  info->path = *path;
+  base::Optional<std::string> instance_id =
+      GetProperty(dev_info, dev_info_data, DEVPKEY_Device_InstanceId);
+  if (!instance_id)
+    return;
+
   base::UnguessableToken token = base::UnguessableToken::Create();
+  auto info = mojom::SerialPortInfo::New();
   info->token = token;
+  info->path = *path;
+  info->persistent_id = instance_id;
 
   std::string display_name;
-  if (GetDisplayName(friendly_name, &display_name))
+  if (GetDisplayName(*friendly_name, &display_name))
     info->display_name = std::move(display_name);
 
-  std::string hardware_id;
-  // SPDRP_HARDWAREID looks like "FTDIBUS\COMPORT&VID_0403&PID_6001".
-  if (GetProperty(dev_info, dev_info_data, SPDRP_HARDWAREID, &hardware_id)) {
-    uint32_t vendor_id, product_id;
-    if (GetVendorID(hardware_id, &vendor_id)) {
-      info->has_vendor_id = true;
-      info->vendor_id = vendor_id;
-    }
-    if (GetProductID(hardware_id, &product_id)) {
-      info->has_product_id = true;
-      info->product_id = product_id;
-    }
+  // The instance ID looks like "FTDIBUS\VID_0403+PID_6001+A703X87GA\0000".
+  uint32_t vendor_id, product_id;
+  if (GetVendorID(*instance_id, &vendor_id)) {
+    info->has_vendor_id = true;
+    info->vendor_id = vendor_id;
+  }
+  if (GetProductID(*instance_id, &product_id)) {
+    info->has_product_id = true;
+    info->product_id = product_id;
   }
 
   paths_.insert(std::make_pair(*path, token));
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index 2e81309..26c5a7f 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -1012,7 +1012,8 @@
     return;
   }
 
-  transport_security_state->AddExpectCT(domain, expiry, enforce, report_uri);
+  transport_security_state->AddExpectCT(domain, expiry, enforce, report_uri,
+                                        net::NetworkIsolationKey::Todo());
   std::move(callback).Run(true);
 }
 
@@ -1083,7 +1084,7 @@
     if (transport_security_state) {
       net::TransportSecurityState::ExpectCTState dynamic_expect_ct_state;
       bool found = transport_security_state->GetDynamicExpectCTState(
-          domain, &dynamic_expect_ct_state);
+          domain, net::NetworkIsolationKey::Todo(), &dynamic_expect_ct_state);
 
       // TODO(estark): query static Expect-CT state as well.
       if (found) {
diff --git a/services/network/network_service_network_delegate.cc b/services/network/network_service_network_delegate.cc
index 8f56101..4e10f8c 100644
--- a/services/network/network_service_network_delegate.cc
+++ b/services/network/network_service_network_delegate.cc
@@ -7,6 +7,7 @@
 #include <string>
 
 #include "base/bind.h"
+#include "base/debug/dump_without_crashing.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "components/domain_reliability/monitor.h"
@@ -258,6 +259,14 @@
 
   LOG(ERROR) << "Cancelling request to " << target_url
              << " with invalid referrer " << referrer_url;
+  // Record information to help debug issues like http://crbug.com/422871.
+  if (target_url.SchemeIsHTTPOrHTTPS()) {
+    auto referrer_policy = request.referrer_policy();
+    base::debug::Alias(&referrer_policy);
+    DEBUG_ALIAS_FOR_GURL(target_buf, target_url);
+    DEBUG_ALIAS_FOR_GURL(referrer_buf, referrer_url);
+    base::debug::DumpWithoutCrashing();
+  }
   return true;
 }
 
diff --git a/services/tracing/DEPS b/services/tracing/DEPS
index 744fe92..fcde8ac 100644
--- a/services/tracing/DEPS
+++ b/services/tracing/DEPS
@@ -9,9 +9,4 @@
   'stack_unwinder_android_unittest.cc': [
     "+services/tracing/jni_headers",
   ],
-  # Temporary to research https://crbug.com/1074115
-  # TODO(crbug.com/1074115): Remove this
-  'producer_client.cc': [
-    "+components/crash/core/app/crashpad.h",
-  ],
 }
diff --git a/services/tracing/public/cpp/BUILD.gn b/services/tracing/public/cpp/BUILD.gn
index f94537ea..136c30e 100644
--- a/services/tracing/public/cpp/BUILD.gn
+++ b/services/tracing/public/cpp/BUILD.gn
@@ -141,10 +141,6 @@
       ]
     }
 
-    if (is_linux && !is_fuchsia) {
-      deps += [ "//components/crash/core/app:app" ]
-    }
-
     if (is_android && can_unwind_with_cfi_table && is_official_build) {
       sources += [
         "stack_sampling/stack_sampler_android.cc",
diff --git a/services/tracing/public/cpp/perfetto/macros_internal.cc b/services/tracing/public/cpp/perfetto/macros_internal.cc
index 8efeeda..8126aa0 100644
--- a/services/tracing/public/cpp/perfetto/macros_internal.cc
+++ b/services/tracing/public/cpp/perfetto/macros_internal.cc
@@ -29,7 +29,8 @@
     const unsigned char* category_group_enabled,
     const char* name,
     unsigned int flags,
-    base::TimeTicks ts = base::TimeTicks()) {
+    base::TimeTicks ts,
+    bool explicit_track) {
   DCHECK(phase == TRACE_EVENT_PHASE_BEGIN || phase == TRACE_EVENT_PHASE_END ||
          phase == TRACE_EVENT_PHASE_INSTANT);
   DCHECK(category_group_enabled);
@@ -47,9 +48,15 @@
   } else {
     flags |= TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP;
   }
-  base::ThreadTicks thread_now = ThreadNow();
-  base::trace_event::ThreadInstructionCount thread_instruction_now =
-      ThreadInstructionNow();
+
+  // Only emit thread time / instruction count for events on the default track
+  // without explicit timestamp.
+  base::ThreadTicks thread_now;
+  base::trace_event::ThreadInstructionCount thread_instruction_now;
+  if ((flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP) == 0 && !explicit_track) {
+    thread_now = ThreadNow();
+    thread_instruction_now = ThreadInstructionNow();
+  }
 
   return base::trace_event::TraceEvent(
       thread_id, ts, thread_now, thread_instruction_now, phase,
diff --git a/services/tracing/public/cpp/perfetto/macros_internal.h b/services/tracing/public/cpp/perfetto/macros_internal.h
index f2401f5..a1871210 100644
--- a/services/tracing/public/cpp/perfetto/macros_internal.h
+++ b/services/tracing/public/cpp/perfetto/macros_internal.h
@@ -41,7 +41,8 @@
                      const unsigned char* category_group_enabled,
                      const char* name,
                      unsigned int flags,
-                     base::TimeTicks timestamp);
+                     base::TimeTicks timestamp,
+                     bool explicit_track);
 
 template <
     typename TrackEventArgumentFunction = void (*)(perfetto::EventContext),
@@ -57,7 +58,8 @@
     TrackEventArgumentFunction argument_func) {
   base::trace_event::TraceEventHandle handle = {0, 0, 0};
   auto maybe_event =
-      CreateTraceEvent(phase, category_group_enabled, name, flags, timestamp);
+      CreateTraceEvent(phase, category_group_enabled, name, flags, timestamp,
+                       track.uuid != perfetto::Track().uuid);
   if (!maybe_event) {
     return handle;
   }
diff --git a/services/tracing/public/cpp/perfetto/producer_client.cc b/services/tracing/public/cpp/perfetto/producer_client.cc
index f8f3a133..edbda2a 100644
--- a/services/tracing/public/cpp/perfetto/producer_client.cc
+++ b/services/tracing/public/cpp/perfetto/producer_client.cc
@@ -25,30 +25,7 @@
 #include "third_party/perfetto/include/perfetto/protozero/scattered_stream_writer.h"
 #include "third_party/perfetto/protos/perfetto/common/track_event_descriptor.pbzero.h"
 
-#if defined(OS_LINUX)
-#include "components/crash/core/app/crashpad.h"  // nogncheck
-#endif
-
 namespace {
-#if defined(OS_LINUX)
-constexpr char kCrashHandlerMetricName[] =
-    "CrashReport.DumpWithoutCrashingHandler.FromInitSharedMemoryIfNeeded";
-// Crash handler that might handle base::debug::DumpWithoutCrashing.
-// TODO(crbug.com/1074115): Remove once crbug.com/1074115 is resolved.
-// These values are persisted to logs. Entries should not be renumbered and
-// numeric values should never be reused.
-enum class CrashHandler {
-  kCrashpad = 0,
-  kBreakpad = 1,
-  kMaxValue = kBreakpad,
-};
-#endif
-
-// UMA that records the return value of base::debug::DumpWithoutCrashing.
-// TODO(crbug.com/1074115): Remove once crbug.com/1074115 is resolved.
-constexpr char kDumpWithoutCrashingResultMetricName[] =
-    "CrashReport.DumpWithoutCrashingResult.FromInitSharedMemoryIfNeeded";
-
 // Result for getting the shared buffer in InitSharedMemoryIfNeeded.
 constexpr char kSharedBufferIsValidMetricName[] = "Tracing.SharedBufferIsValid";
 }  // namespace
@@ -421,18 +398,17 @@
   base::UmaHistogramBoolean(kSharedBufferIsValidMetricName, valid);
 
   if (!valid) {
-#if defined(OS_LINUX)
     // TODO(crbug.com/1074115): Investigate why Breakpad doesn't seem to
     // generate reports on some ChromeOS boards.
-    CrashHandler handler = crash_reporter::IsCrashpadEnabled()
-                               ? CrashHandler::kCrashpad
-                               : CrashHandler::kBreakpad;
-    base::UmaHistogramEnumeration(kCrashHandlerMetricName, handler);
-#endif
+    if (pre_dump_error_callback_) {
+      pre_dump_error_callback_.Run();
+    }
 
     bool dump_with_crashing_result = base::debug::DumpWithoutCrashing();
-    base::UmaHistogramBoolean(kDumpWithoutCrashingResultMetricName,
-                              dump_with_crashing_result);
+
+    if (post_dump_error_callback_) {
+      post_dump_error_callback_.Run(dump_with_crashing_result);
+    }
 
     LOG(ERROR) << "Failed to create tracing SMB";
     shared_memory_.reset();
@@ -493,4 +469,12 @@
   }
 }
 
+void ProducerClient::SetBufferAllocationFailureCallbacks(
+    base::Closure pre_dump_error_callback,
+    base::Callback<void(bool dump_result)> post_dump_error_callback) {
+  base::AutoLock lock(lock_);
+  pre_dump_error_callback_ = std::move(pre_dump_error_callback);
+  post_dump_error_callback_ = std::move(post_dump_error_callback);
+}
+
 }  // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/producer_client.h b/services/tracing/public/cpp/perfetto/producer_client.h
index d831ca8..63a010f4 100644
--- a/services/tracing/public/cpp/perfetto/producer_client.h
+++ b/services/tracing/public/cpp/perfetto/producer_client.h
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "base/atomicops.h"
+#include "base/callback_forward.h"
 #include "base/component_export.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
@@ -108,6 +109,13 @@
       mojo::PendingRemote<mojom::ProducerHost>);
   perfetto::SharedMemory* shared_memory_for_testing();
 
+  // Callbacks that are triggered if this class cannot allocate its shared
+  // buffer. For error reporting. The second callback is called after
+  // DumpWithoutCrashing is called, and includes the result of that call.
+  void SetBufferAllocationFailureCallbacks(
+      base::Closure pre_dump_error_callback,
+      base::Callback<void(bool dump_result)> post_dump_error_callback);
+
  protected:
   // Protected for testing. Returns false if SMB creation failed.
   bool InitSharedMemoryIfNeeded();
@@ -142,6 +150,12 @@
   std::unique_ptr<perfetto::SharedMemoryArbiter> shared_memory_arbiter_
       GUARDED_BY(lock_);
 
+  // See ProducerClient::SetBufferAllocationFailureCallbacks for details of
+  // what these callbacks mean.
+  base::Closure pre_dump_error_callback_ GUARDED_BY(lock_);
+  base::Callback<void(bool dump_without_crashing_result)>
+      post_dump_error_callback_ GUARDED_BY(lock_);
+
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<ProducerClient> weak_ptr_factory_{this};
   DISALLOW_COPY_AND_ASSIGN(ProducerClient);
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
index 72e0e0a..5e89fa8 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
@@ -539,9 +539,10 @@
     } else {
       EXPECT_EQ(packet->track_event().extra_counter_track_uuids_size(), 0);
       if (packet->track_event().extra_counter_values_size()) {
-        // If the event is for a different thread, then we shouldn't have thread
-        // timestamps except for the explicit thread timestamps above.
+        // If the event is for a different thread or track, we shouldn't have
+        // thread timestamps except for the explicit thread timestamps above.
         EXPECT_TRUE(tid_override == 0);
+        EXPECT_EQ(track.uuid, 0u);
         int64_t thread_time_delta =
             packet->track_event().extra_counter_values()[0];
         EXPECT_LE(last_thread_time_ + thread_time_delta,
diff --git a/services/viz/public/cpp/compositing/begin_frame_args_mojom_traits.cc b/services/viz/public/cpp/compositing/begin_frame_args_mojom_traits.cc
index 84a31fba..b36230a 100644
--- a/services/viz/public/cpp/compositing/begin_frame_args_mojom_traits.cc
+++ b/services/viz/public/cpp/compositing/begin_frame_args_mojom_traits.cc
@@ -5,6 +5,7 @@
 #include "services/viz/public/cpp/compositing/begin_frame_args_mojom_traits.h"
 
 #include "mojo/public/cpp/base/time_mojom_traits.h"
+#include "services/viz/public/cpp/crash_keys.h"
 
 namespace mojo {
 
@@ -64,8 +65,11 @@
 bool StructTraits<viz::mojom::BeginFrameAckDataView, viz::BeginFrameAck>::Read(
     viz::mojom::BeginFrameAckDataView data,
     viz::BeginFrameAck* out) {
-  if (data.sequence_number() < viz::BeginFrameArgs::kStartingFrameNumber)
+  if (data.sequence_number() < viz::BeginFrameArgs::kStartingFrameNumber) {
+    viz::SetDeserializationCrashKeyString(
+        "Invalid begin frame ack sequence number");
     return false;
+  }
   out->frame_id.source_id = data.source_id();
   out->frame_id.sequence_number = data.sequence_number();
   out->trace_id = data.trace_id();
diff --git a/services/viz/public/cpp/compositing/compositor_frame_metadata_mojom_traits.cc b/services/viz/public/cpp/compositing/compositor_frame_metadata_mojom_traits.cc
index 51a7f00..1c94afa 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_metadata_mojom_traits.cc
+++ b/services/viz/public/cpp/compositing/compositor_frame_metadata_mojom_traits.cc
@@ -8,6 +8,7 @@
 #include "services/viz/public/cpp/compositing/begin_frame_args_mojom_traits.h"
 #include "services/viz/public/cpp/compositing/selection_mojom_traits.h"
 #include "services/viz/public/cpp/compositing/surface_id_mojom_traits.h"
+#include "services/viz/public/cpp/crash_keys.h"
 #include "ui/gfx/mojom/display_color_spaces_mojom_traits.h"
 #include "ui/gfx/mojom/selection_bound_mojom_traits.h"
 #include "ui/latency/mojom/latency_info_mojom_traits.h"
@@ -19,11 +20,14 @@
                   viz::CompositorFrameMetadata>::
     Read(viz::mojom::CompositorFrameMetadataDataView data,
          viz::CompositorFrameMetadata* out) {
-  if (data.device_scale_factor() <= 0)
+  if (data.device_scale_factor() <= 0) {
+    viz::SetDeserializationCrashKeyString("Invalid device scale factor");
     return false;
+  }
   out->device_scale_factor = data.device_scale_factor();
-  if (!data.ReadRootScrollOffset(&out->root_scroll_offset))
+  if (!data.ReadRootScrollOffset(&out->root_scroll_offset)) {
     return false;
+  }
 
   out->page_scale_factor = data.page_scale_factor();
   if (!data.ReadScrollableViewportSize(&out->scrollable_viewport_size))
@@ -46,15 +50,21 @@
         data.top_controls_visible_height());
   }
 
-  return data.ReadLatencyInfo(&out->latency_info) &&
-         data.ReadReferencedSurfaces(&out->referenced_surfaces) &&
-         data.ReadDeadline(&out->deadline) &&
-         data.ReadActivationDependencies(&out->activation_dependencies) &&
-         data.ReadBeginFrameAck(&out->begin_frame_ack) &&
-         data.ReadLocalSurfaceIdAllocationTime(
-             &out->local_surface_id_allocation_time) &&
-         !out->local_surface_id_allocation_time.is_null() &&
-         data.ReadPreferredFrameInterval(&out->preferred_frame_interval) &&
+  if (!data.ReadLatencyInfo(&out->latency_info) ||
+      !data.ReadReferencedSurfaces(&out->referenced_surfaces) ||
+      !data.ReadDeadline(&out->deadline) ||
+      !data.ReadActivationDependencies(&out->activation_dependencies) ||
+      !data.ReadBeginFrameAck(&out->begin_frame_ack) ||
+      !data.ReadLocalSurfaceIdAllocationTime(
+          &out->local_surface_id_allocation_time)) {
+    return false;
+  }
+  if (out->local_surface_id_allocation_time.is_null()) {
+    viz::SetDeserializationCrashKeyString(
+        "Null local surface ID allocation time");
+    return false;
+  }
+  return data.ReadPreferredFrameInterval(&out->preferred_frame_interval) &&
          data.ReadDisplayTransformHint(&out->display_transform_hint);
 }
 
diff --git a/services/viz/public/cpp/compositing/compositor_frame_mojom_traits.cc b/services/viz/public/cpp/compositing/compositor_frame_mojom_traits.cc
index 7fbc9a9..20b9ad3 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_mojom_traits.cc
+++ b/services/viz/public/cpp/compositing/compositor_frame_mojom_traits.cc
@@ -11,11 +11,8 @@
 // static
 bool StructTraits<viz::mojom::CompositorFrameDataView, viz::CompositorFrame>::
     Read(viz::mojom::CompositorFrameDataView data, viz::CompositorFrame* out) {
-  if (!data.ReadPasses(&out->render_pass_list)) {
-    viz::SetDeserializationCrashKeyString(
-        "Failed read CompositorFrame::render_pass_list");
+  if (!data.ReadPasses(&out->render_pass_list))
     return false;
-  }
 
   if (out->render_pass_list.empty()) {
     viz::SetDeserializationCrashKeyString(
@@ -28,11 +25,8 @@
     return false;
   }
 
-  if (!data.ReadMetadata(&out->metadata)) {
-    viz::SetDeserializationCrashKeyString(
-        "Failed read CompositorFrame::metadata");
+  if (!data.ReadMetadata(&out->metadata))
     return false;
-  }
 
   if (!data.ReadResources(&out->resource_list)) {
     viz::SetDeserializationCrashKeyString(
diff --git a/services/viz/public/cpp/compositing/copy_output_request_mojom_traits.cc b/services/viz/public/cpp/compositing/copy_output_request_mojom_traits.cc
index 34c5039..1571c48 100644
--- a/services/viz/public/cpp/compositing/copy_output_request_mojom_traits.cc
+++ b/services/viz/public/cpp/compositing/copy_output_request_mojom_traits.cc
@@ -11,6 +11,7 @@
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "services/viz/public/cpp/compositing/copy_output_result_mojom_traits.h"
+#include "services/viz/public/cpp/crash_keys.h"
 
 namespace {
 
@@ -91,12 +92,25 @@
       result_format, base::BindOnce(SendResult, std::move(result_sender)));
 
   gfx::Vector2d scale_from;
-  if (!data.ReadScaleFrom(&scale_from) || scale_from.x() <= 0 ||
-      scale_from.y() <= 0) {
+  if (!data.ReadScaleFrom(&scale_from))
+    return false;
+  if (scale_from.x() <= 0) {
+    viz::SetDeserializationCrashKeyString("Invalid readback scale from x");
+    return false;
+  }
+  if (scale_from.y() <= 0) {
+    viz::SetDeserializationCrashKeyString("Invalid readback scale from y");
     return false;
   }
   gfx::Vector2d scale_to;
-  if (!data.ReadScaleTo(&scale_to) || scale_to.x() <= 0 || scale_to.y() <= 0) {
+  if (!data.ReadScaleTo(&scale_to))
+    return false;
+  if (scale_to.x() <= 0) {
+    viz::SetDeserializationCrashKeyString("Invalid readback scale to x");
+    return false;
+  }
+  if (scale_to.y() <= 0) {
+    viz::SetDeserializationCrashKeyString("Invalid readback scale to y");
     return false;
   }
   request->SetScaleRatio(scale_from, scale_to);
diff --git a/services/viz/public/cpp/compositing/quads_mojom_traits.cc b/services/viz/public/cpp/compositing/quads_mojom_traits.cc
index 80f7b3cc..c45a4388 100644
--- a/services/viz/public/cpp/compositing/quads_mojom_traits.cc
+++ b/services/viz/public/cpp/compositing/quads_mojom_traits.cc
@@ -4,6 +4,7 @@
 
 #include "services/viz/public/cpp/compositing/quads_mojom_traits.h"
 
+#include "services/viz/public/cpp/crash_keys.h"
 #include "ui/gfx/mojom/color_space_mojom_traits.h"
 #include "ui/gfx/mojom/transform_mojom_traits.h"
 
@@ -74,8 +75,10 @@
   quad->resources.count = data.mask_resource_id() ? 1 : 0;
   quad->render_pass_id = data.render_pass_id();
   // RenderPass ids are never zero.
-  if (!quad->render_pass_id)
+  if (!quad->render_pass_id) {
+    viz::SetDeserializationCrashKeyString("Draw quad invalid render pass ID");
     return false;
+  }
   if (!data.ReadMaskUvRect(&quad->mask_uv_rect) ||
       !data.ReadMaskTextureSize(&quad->mask_texture_size) ||
       !data.ReadFiltersScale(&quad->filters_scale) ||
@@ -213,8 +216,12 @@
   quad->resource_offset = data.resource_offset();
   quad->resource_multiplier = data.resource_multiplier();
   quad->bits_per_channel = data.bits_per_channel();
-  if (quad->bits_per_channel < viz::YUVVideoDrawQuad::kMinBitsPerChannel ||
-      quad->bits_per_channel > viz::YUVVideoDrawQuad::kMaxBitsPerChannel) {
+  if (quad->bits_per_channel < viz::YUVVideoDrawQuad::kMinBitsPerChannel) {
+    viz::SetDeserializationCrashKeyString("Bits per channel too small");
+    return false;
+  }
+  if (quad->bits_per_channel > viz::YUVVideoDrawQuad::kMaxBitsPerChannel) {
+    viz::SetDeserializationCrashKeyString("Bits per channel too big");
     return false;
   }
   return true;
@@ -228,10 +235,14 @@
     return false;
   }
   // Reject quads with areas larger than int32.
-  if (!out->rect.size().GetCheckedArea().IsValid())
+  if (!out->rect.size().GetCheckedArea().IsValid()) {
+    viz::SetDeserializationCrashKeyString("Draw quad rect too overflow");
     return false;
-  if (!out->rect.Contains(out->visible_rect))
+  }
+  if (!out->rect.Contains(out->visible_rect)) {
+    viz::SetDeserializationCrashKeyString("Rect does not contain visible rect");
     return false;
+  }
 
   out->needs_blending = data.needs_blending();
   return data.ReadDrawQuadState(out);
diff --git a/services/viz/public/cpp/compositing/render_pass_mojom_traits.cc b/services/viz/public/cpp/compositing/render_pass_mojom_traits.cc
index dc84c9b..e704ba10 100644
--- a/services/viz/public/cpp/compositing/render_pass_mojom_traits.cc
+++ b/services/viz/public/cpp/compositing/render_pass_mojom_traits.cc
@@ -5,6 +5,7 @@
 #include "services/viz/public/cpp/compositing/render_pass_mojom_traits.h"
 
 #include "base/numerics/safe_conversions.h"
+#include "services/viz/public/cpp/crash_keys.h"
 #include "ui/gfx/mojom/display_color_spaces_mojom_traits.h"
 
 namespace mojo {
@@ -27,8 +28,10 @@
   }
   (*out)->id = data.id();
   // RenderPass ids are never zero.
-  if (!(*out)->id)
+  if (!(*out)->id) {
+    viz::SetDeserializationCrashKeyString("Invalid render pass ID");
     return false;
+  }
   (*out)->has_transparent_background = data.has_transparent_background();
   (*out)->cache_render_pass = data.cache_render_pass();
   (*out)->has_damage_from_contributing_content =
@@ -46,8 +49,10 @@
 
     viz::DrawQuad* quad =
         AllocateAndConstruct(quad_state_data_view.tag(), &(*out)->quad_list);
-    if (!quad)
+    if (!quad) {
+      viz::SetDeserializationCrashKeyString("AllocateAndConstruct quad failed");
       return false;
+    }
     if (!quads.Read(i, quad))
       return false;
 
@@ -62,8 +67,10 @@
         return false;
     }
     quad->shared_quad_state = last_sqs;
-    if (!quad->shared_quad_state)
+    if (!quad->shared_quad_state) {
+      viz::SetDeserializationCrashKeyString("No shared quad state");
       return false;
+    }
   }
   return true;
 }
diff --git a/skia/BUILD.gn b/skia/BUILD.gn
index 7015ef3..30ddca2 100644
--- a/skia/BUILD.gn
+++ b/skia/BUILD.gn
@@ -731,6 +731,16 @@
     }
     visibility = [ ":skia_opts" ]
   }
+  skia_source_set("skia_opts_skx") {
+    sources = skia_opts.skx_sources
+    if (!is_win) {
+      cflags = [ "-march=skylake-avx512" ]
+    }
+    if (is_win) {
+      cflags = [ "/arch:AVX512" ]
+    }
+    visibility = [ ":skia_opts" ]
+  }
 }
 
 skia_source_set("skia_opts") {
@@ -744,6 +754,7 @@
     deps += [
       ":skia_opts_avx",
       ":skia_opts_hsw",
+      ":skia_opts_skx",
       ":skia_opts_sse3",
       ":skia_opts_sse41",
       ":skia_opts_sse42",
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 5c83c83..475b578 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -4720,124 +4720,6 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_bundle_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "device_os": null,
-              "device_type": null,
-              "os": "Ubuntu-16.04",
-              "pool": "chromium.tests.avd.template",
-              "ssd": "1"
-            }
-          ],
-          "named_caches": [
-            {
-              "name": "avd_generic_android23",
-              "path": ".android"
-            },
-            {
-              "name": "system_images_android_23_google_apis_x86",
-              "path": ".emulator_sdk"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "weblayer_bundle_test",
-        "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_bundle_test/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices",
-          "--avd-config=../../tools/android/avd/proto/generic_android23.textpb"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "weblayer_instrumentation_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "device_os": null,
-              "device_type": null,
-              "os": "Ubuntu-16.04",
-              "pool": "chromium.tests.avd.template",
-              "ssd": "1"
-            }
-          ],
-          "named_caches": [
-            {
-              "name": "avd_generic_android23",
-              "path": ".android"
-            },
-            {
-              "name": "system_images_android_23_google_apis_x86",
-              "path": ".emulator_sdk"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "weblayer_instrumentation_test_apk",
-        "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_instrumentation_test_apk/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices",
-          "--avd-config=../../tools/android/avd/proto/generic_android23.textpb"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
             "weblayer_private_instrumentation_test_apk"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
diff --git a/testing/buildbot/chromium.ci.json b/testing/buildbot/chromium.ci.json
index ef427ad..63e1e26 100644
--- a/testing/buildbot/chromium.ci.json
+++ b/testing/buildbot/chromium.ci.json
@@ -181084,124 +181084,6 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_bundle_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "device_os": null,
-              "device_type": null,
-              "os": "Ubuntu-16.04",
-              "pool": "chromium.tests.avd.template",
-              "ssd": "1"
-            }
-          ],
-          "named_caches": [
-            {
-              "name": "avd_generic_android23",
-              "path": ".android"
-            },
-            {
-              "name": "system_images_android_23_google_apis_x86",
-              "path": ".emulator_sdk"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "weblayer_bundle_test",
-        "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_bundle_test/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices",
-          "--avd-config=../../tools/android/avd/proto/generic_android23.textpb"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "weblayer_instrumentation_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "device_os": null,
-              "device_type": null,
-              "os": "Ubuntu-16.04",
-              "pool": "chromium.tests.avd.template",
-              "ssd": "1"
-            }
-          ],
-          "named_caches": [
-            {
-              "name": "avd_generic_android23",
-              "path": ".android"
-            },
-            {
-              "name": "system_images_android_23_google_apis_x86",
-              "path": ".emulator_sdk"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "weblayer_instrumentation_test_apk",
-        "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_instrumentation_test_apk/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices",
-          "--avd-config=../../tools/android/avd/proto/generic_android23.textpb"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
             "weblayer_private_instrumentation_test_apk"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 7ece9cb..f5223ab8 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -2460,6 +2460,16 @@
       },
     },
   },
+  'weblayer_bundle_test': {
+    'remove_from': [
+      'android-marshmallow-x86-fyi-rel', # crbug.com/1088013
+    ],
+  },
+  'weblayer_instrumentation_test_apk': {
+    'remove_from': [
+      'android-marshmallow-x86-fyi-rel', # crbug.com/1088013
+    ],
+  },
   'webview_instrumentation_test_apk': {
     'remove_from': [
       # This test frequently fails on Android, https://crbug.com/824959
diff --git a/testing/scripts/run_rendering_benchmark_with_gated_performance.py b/testing/scripts/run_rendering_benchmark_with_gated_performance.py
index 36679c8c..9e8d199ba 100755
--- a/testing/scripts/run_rendering_benchmark_with_gated_performance.py
+++ b/testing/scripts/run_rendering_benchmark_with_gated_performance.py
@@ -251,9 +251,10 @@
         csv_obj = csv.DictReader(csv_file)
         values_per_story = self.parse_csv_results(csv_obj)
 
-      # Clearing the result of run_benchmark and write the gated perf results
-      resultsFile.seek(0)
-      resultsFile.truncate(0)
+      if not rerun:
+        # Clearing the result of run_benchmark and write the gated perf results
+        resultsFile.seek(0)
+        resultsFile.truncate(0)
 
     self.compare_values(values_per_story, rerun)
 
@@ -279,25 +280,27 @@
         if story_name not in self.result_recorder[True].failed_stories:
           self.result_recorder[False].remove_failure(story_name,
             self.benchmark, self.is_control_story(story_name))
+    else:
+      # Should only report the results for the initial run and not the rerun.
 
-    if self.result_recorder[False].is_control_stories_noisy:
-      # In this case all failures are reported as expected, and the number of
-      # Failed stories in output.json will be zero.
-      self.result_recorder[False].invalidate_failures(self.benchmark)
+      if self.result_recorder[False].is_control_stories_noisy:
+        # In this case all failures are reported as expected, and the number of
+        # Failed stories in output.json will be zero.
+        self.result_recorder[False].invalidate_failures(self.benchmark)
 
-    (
-      finalOut,
-      self.return_code
-    ) = self.result_recorder[False].get_output(self.return_code)
+      (
+        finalOut,
+        self.return_code
+      ) = self.result_recorder[False].get_output(self.return_code)
 
-    with open(self.output_path[rerun], 'r+') as resultsFile:
-      json.dump(finalOut, resultsFile, indent=4)
-    with open(self.options.isolated_script_test_output, 'w') as outputFile:
-      json.dump(finalOut, outputFile, indent=4)
+      with open(self.output_path[rerun], 'r+') as resultsFile:
+        json.dump(finalOut, resultsFile, indent=4)
+      with open(self.options.isolated_script_test_output, 'w') as outputFile:
+        json.dump(finalOut, outputFile, indent=4)
 
-    if self.result_recorder[False].is_control_stories_noisy:
-      assert self.return_code == 0
-      print('Control story has high noise. These runs are not reliable!')
+      if self.result_recorder[False].is_control_stories_noisy:
+        assert self.return_code == 0
+        print('Control story has high noise. These runs are not reliable!')
 
     return self.return_code
 
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index df9775b..18ccea9 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1225,6 +1225,27 @@
             ]
         }
     ],
+    "CSSReducedFontLoadingLayoutInvalidations": [
+        {
+            "platforms": [
+                "android",
+                "android_weblayer",
+                "android_webview",
+                "chromeos",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "CSSReducedFontLoadingLayoutInvalidations"
+                    ]
+                }
+            ]
+        }
+    ],
     "CacheStorageEagerReading": [
         {
             "platforms": [
@@ -4814,6 +4835,21 @@
             ]
         }
     ],
+    "PreventMessagePumpHangs": [
+        {
+            "platforms": [
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "PreventMessagePumpHangs",
+                    "enable_features": [
+                        "PreventMessagePumpHangs"
+                    ]
+                }
+            ]
+        }
+    ],
     "PreviewsLitePageRedirect": [
         {
             "platforms": [
diff --git a/third_party/android_sdk/androidx_browser/BUILD.gn b/third_party/android_sdk/androidx_browser/BUILD.gn
index 948b7db..de64136 100644
--- a/third_party/android_sdk/androidx_browser/BUILD.gn
+++ b/third_party/android_sdk/androidx_browser/BUILD.gn
@@ -40,12 +40,10 @@
     "./src/browser/browser/src/main/java/androidx/browser/trusted/splashscreens/SplashScreenVersion.java",
   ]
   deps = [
-    "//third_party/android_deps:android_support_v7_appcompat_java",
     "//third_party/android_deps:androidx_annotation_annotation_java",
+    "//third_party/android_deps:androidx_collection_collection_java",
     "//third_party/android_deps:androidx_concurrent_concurrent_futures_java",
-    "//third_party/android_deps:com_android_support_collections_java",
-    "//third_party/android_deps:com_android_support_support_annotations_java",
-    "//third_party/android_deps:com_android_support_support_compat_java",
+    "//third_party/android_deps:androidx_core_core_java",
   ]
   srcjar_deps = [ ":androidx_browser_service_aidl" ]
   chromium_code = false
diff --git a/third_party/android_sdk/androidx_browser/README.chromium b/third_party/android_sdk/androidx_browser/README.chromium
index 620e5ef4..122bc15 100644
--- a/third_party/android_sdk/androidx_browser/README.chromium
+++ b/third_party/android_sdk/androidx_browser/README.chromium
@@ -1,7 +1,7 @@
 Name: AndroidX Browser
 Short Name: AndroidX Browser
 URL: https://chromium.googlesource.com/external/gob/android/platform/frameworks/support/browser
-Version: f6689889c56295d1e97d3597bb44c9901b8f282b
+Version: ac2f9c348999e8943567c6e4d50a82a5010ca263
 License: Apache 2.0
 Security Critical: yes
 License Android Compatible: yes
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 5fc52354..21086a0 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -461,6 +461,9 @@
 
 const base::Feature kCSSReducedFontLoadingInvalidations{
     "CSSReducedFontLoadingInvalidations", base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kCSSReducedFontLoadingLayoutInvalidations{
+    "CSSReducedFontLoadingLayoutInvalidations",
+    base::FEATURE_DISABLED_BY_DEFAULT};
 
 // When enabled, frees up CachedMetadata after consumption by script resources
 // and modules. Needed for the experiment in http://crbug.com/1045052.
diff --git a/third_party/blink/perf_tests/css/ExplicitInheritance.html b/third_party/blink/perf_tests/css/ExplicitInheritance.html
index aad9ba8..1c9358c5 100644
--- a/third_party/blink/perf_tests/css/ExplicitInheritance.html
+++ b/third_party/blink/perf_tests/css/ExplicitInheritance.html
@@ -6,10 +6,11 @@
 <style>
   .red { border: 1px solid red; }
   .green { border: 2px solid green; }
+  #container div { all: unset; }
   #container div { border-color: inherit; }
 </style>
 <script>
-  createDOMTree(container, 5, 6);
+  createDOMTree(container, 4, 5);
 
   PerfTestRunner.measureTime({
       description: 'Measure impact of explicit inheritance',
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index ae28b75..e61a38e 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -146,6 +146,8 @@
 
 BLINK_COMMON_EXPORT extern const base::Feature
     kCSSReducedFontLoadingInvalidations;
+BLINK_COMMON_EXPORT extern const base::Feature
+    kCSSReducedFontLoadingLayoutInvalidations;
 
 BLINK_COMMON_EXPORT extern const base::Feature kDiscardCodeCacheAfterFirstUse;
 
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom
index 6c7d03d..ba07b7f 100644
--- a/third_party/blink/public/mojom/frame/frame.mojom
+++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -15,6 +15,7 @@
 import "services/network/public/mojom/web_sandbox_flags.mojom";
 import "skia/public/mojom/skcolor.mojom";
 import "third_party/blink/public/mojom/ad_tagging/ad_frame.mojom";
+import "third_party/blink/public/mojom/blob/blob.mojom";
 import "third_party/blink/public/mojom/blob/blob_url_store.mojom";
 import "third_party/blink/public/mojom/messaging/transferable_message.mojom";
 import "third_party/blink/public/mojom/choosers/popup_menu.mojom";
@@ -96,7 +97,7 @@
   pending_remote<BlobURLToken>? blob_url_token;
 
   // Non-null when |url| is for "data:", eg. when saving an image.
-  handle<message_pipe>? data_url_blob;
+  pending_remote<Blob>? data_url_blob;
 };
 
 // Actions browser can ask renderer to perform on a Plugin.
diff --git a/third_party/blink/public/platform/DEPS b/third_party/blink/public/platform/DEPS
index 220137a4..8bfc2d5 100644
--- a/third_party/blink/public/platform/DEPS
+++ b/third_party/blink/public/platform/DEPS
@@ -44,6 +44,7 @@
     "+services/network/public/mojom/fetch_api.mojom-shared.h",
     "+services/network/public/mojom/referrer_policy.mojom-shared.h",
     "+services/network/public/mojom/trust_tokens.mojom-shared.h",
+    "+services/network/public/mojom/url_loader_factory.mojom-shared.h",
     "+services/network/public/mojom/web_client_hints_types.mojom-shared.h",
 
     "+services/service_manager/public/mojom",
diff --git a/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h b/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h
index 672e14d..77a772d 100644
--- a/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h
+++ b/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h
@@ -34,8 +34,9 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
-#include "mojo/public/cpp/system/message_pipe.h"
 #include "third_party/blink/public/mojom/service_worker/controller_service_worker_mode.mojom-shared.h"
+#include "third_party/blink/public/mojom/timing/worker_timing_container.mojom-shared.h"
+#include "third_party/blink/public/platform/cross_variant_mojo_util.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"
 
@@ -78,11 +79,11 @@
   // idle signal.
   virtual void DispatchNetworkQuiet() = 0;
 
-  // Returns mojo::PendingReceiver<blink::mojom::blink::WorkerTimingContainer>
-  // for the blink::ResourceResponse with the given |request_id|. Null if the
-  // request has not been intercepted by a service worker.
-  virtual mojo::ScopedMessagePipeHandle TakePendingWorkerTimingReceiver(
-      int request_id) = 0;
+  // Returns the blink::mojom::WorkerTimingContainer receiver for the
+  // blink::ResourceResponse with the given |request_id|. Null if the request
+  // has not been intercepted by a service worker.
+  virtual CrossVariantMojoReceiver<mojom::WorkerTimingContainerInterfaceBase>
+  TakePendingWorkerTimingReceiver(int request_id) = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/public/platform/web_dedicated_worker.h b/third_party/blink/public/platform/web_dedicated_worker.h
index 67eb7dd8..5cfebb2 100644
--- a/third_party/blink/public/platform/web_dedicated_worker.h
+++ b/third_party/blink/public/platform/web_dedicated_worker.h
@@ -5,7 +5,8 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_DEDICATED_WORKER_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_DEDICATED_WORKER_H_
 
-#include "mojo/public/cpp/system/message_pipe.h"
+#include "third_party/blink/public/mojom/browser_interface_broker.mojom-shared.h"
+#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
 
 namespace blink {
 
@@ -18,7 +19,8 @@
 
   // Called when content::DedicatedWorkerHost is created in the browser process.
   virtual void OnWorkerHostCreated(
-      mojo::ScopedMessagePipeHandle browser_interface_broker) = 0;
+      CrossVariantMojoRemote<mojom::BrowserInterfaceBrokerInterfaceBase>
+          browser_interface_broker) = 0;
 
   // Called when content::DedicatedWorkerHost started loading the main worker
   // script in the browser process, and the script information is sent back to
diff --git a/third_party/blink/public/platform/web_worker_fetch_context.h b/third_party/blink/public/platform/web_worker_fetch_context.h
index 5a39ba3..db6c05b 100644
--- a/third_party/blink/public/platform/web_worker_fetch_context.h
+++ b/third_party/blink/public/platform/web_worker_fetch_context.h
@@ -10,8 +10,11 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
+#include "services/network/public/mojom/url_loader_factory.mojom-shared.h"
 #include "third_party/blink/public/mojom/service_worker/controller_service_worker_mode.mojom-shared.h"
+#include "third_party/blink/public/mojom/timing/worker_timing_container.mojom-shared.h"
 #include "third_party/blink/public/platform/code_cache_loader.h"
+#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
 #include "third_party/blink/public/platform/web_document_subresource_filter.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/platform/web_string.h"
@@ -74,7 +77,8 @@
   // Returns a new WebURLLoaderFactory that wraps the given
   // network::mojom::URLLoaderFactory.
   virtual std::unique_ptr<WebURLLoaderFactory> WrapURLLoaderFactory(
-      mojo::ScopedMessagePipeHandle url_loader_factory_handle) = 0;
+      CrossVariantMojoRemote<network::mojom::URLLoaderFactoryInterfaceBase>
+          url_loader_factory) = 0;
 
   // Returns a CodeCacheLoader that fetches data from code caches. If
   // a nullptr is returned then data would not be fetched from the code
@@ -148,11 +152,11 @@
   // Returns the current list of user prefered languages.
   virtual blink::WebString GetAcceptLanguages() const = 0;
 
-  // Returns mojo::PendingReceiver<blink::mojom::blink::WorkerTimingContainer>
-  // for the blink::ResourceResponse with the given |request_id|. Null if the
+  // Returns the blink::mojom::WorkerTimingContainer receiver for the
+  // blink::ResourceResponse with the given |request_id|. Null if the
   // request has not been intercepted by a service worker.
-  virtual mojo::ScopedMessagePipeHandle TakePendingWorkerTimingReceiver(
-      int request_id) = 0;
+  virtual CrossVariantMojoReceiver<mojom::WorkerTimingContainerInterfaceBase>
+  TakePendingWorkerTimingReceiver(int request_id) = 0;
 
   // This flag is set to disallow all network accesses in the context. Used for
   // offline capability detection in service workers.
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.h b/third_party/blink/renderer/core/css/media_query_evaluator.h
index 430273e..84fe011 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator.h
+++ b/third_party/blink/renderer/core/css/media_query_evaluator.h
@@ -65,7 +65,7 @@
   // Creates evaluator to evaluate media types only. Evaluator returns true for
   // accepted_media_type and triggers a NOTREACHED returning false for any media
   // features. Should only be used for UA stylesheets.
-  MediaQueryEvaluator(const char* accepted_media_type);
+  explicit MediaQueryEvaluator(const char* accepted_media_type);
 
   // Creates evaluator which evaluates full media queries.
   explicit MediaQueryEvaluator(LocalFrame*);
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
index 0370ab8..5dfbe0f 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
+++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
@@ -1527,15 +1527,6 @@
     const CSSParserLocalContext&) const {
   if (range.Peek().Id() == CSSValueID::kNormal)
     return css_parsing_utils::ConsumeIdent(range);
-  if (range.Peek().Id() == CSSValueID::kOnly) {
-    // Handle 'only light'
-    CSSValueList* values = CSSValueList::CreateSpaceSeparated();
-    values->Append(*css_parsing_utils::ConsumeIdent(range));
-    if (range.Peek().Id() != CSSValueID::kLight)
-      return nullptr;
-    values->Append(*css_parsing_utils::ConsumeIdent(range));
-    return values;
-  }
 
   CSSValueList* values = CSSValueList::CreateSpaceSeparated();
   do {
@@ -1547,16 +1538,6 @@
         id == CSSValueID::kDefault) {
       return nullptr;
     }
-    if (id == CSSValueID::kOnly) {
-      values->Append(*css_parsing_utils::ConsumeIdent(range));
-      // Has to be 'light only'
-      if (range.AtEnd() && values->length() == 2 &&
-          To<CSSIdentifierValue>(values->Item(0)).GetValueID() ==
-              CSSValueID::kLight) {
-        return values;
-      }
-      return nullptr;
-    }
     CSSValue* value =
         css_parsing_utils::ConsumeIdent<CSSValueID::kDark, CSSValueID::kLight>(
             range);
@@ -1607,21 +1588,24 @@
     bool prefers_dark =
         state.GetDocument().GetStyleEngine().GetPreferredColorScheme() ==
         PreferredColorScheme::kDark;
-    bool use_dark = false;
+    bool has_dark = false;
+    bool has_light = false;
     Vector<AtomicString> color_schemes;
     for (auto& item : *scheme_list) {
       if (const auto* custom_ident = DynamicTo<CSSCustomIdentValue>(*item)) {
         color_schemes.push_back(custom_ident->Value());
       } else if (const auto* ident = DynamicTo<CSSIdentifierValue>(*item)) {
         color_schemes.push_back(ident->CssText());
-        if (prefers_dark && ident->GetValueID() == CSSValueID::kDark)
-          use_dark = true;
+        if (ident->GetValueID() == CSSValueID::kDark)
+          has_dark = true;
+        else if (ident->GetValueID() == CSSValueID::kLight)
+          has_light = true;
       } else {
         NOTREACHED();
       }
     }
     state.Style()->SetColorScheme(color_schemes);
-    state.Style()->SetDarkColorScheme(use_dark);
+    state.Style()->SetDarkColorScheme(has_dark && (!has_light || prefers_dark));
   } else {
     NOTREACHED();
   }
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc
index 902392d..c3dfbf0 100644
--- a/third_party/blink/renderer/core/css/style_engine.cc
+++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -2080,15 +2080,20 @@
 bool StyleEngine::SupportsDarkColorScheme() {
   if (!meta_color_scheme_)
     return false;
+  bool has_light = false;
+  bool has_dark = false;
   if (const auto* scheme_list = DynamicTo<CSSValueList>(*meta_color_scheme_)) {
     for (auto& item : *scheme_list) {
       if (const auto* ident = DynamicTo<CSSIdentifierValue>(*item)) {
         if (ident->GetValueID() == CSSValueID::kDark)
-          return true;
+          has_dark = true;
+        else if (ident->GetValueID() == CSSValueID::kLight)
+          has_light = true;
       }
     }
   }
-  return false;
+  return has_dark &&
+         (!has_light || preferred_color_scheme_ == PreferredColorScheme::kDark);
 }
 
 void StyleEngine::UpdateColorScheme() {
@@ -2109,10 +2114,7 @@
     if (value.IsValid())
       preferred_color_scheme_ = CSSValueIDToPreferredColorScheme(value.id);
   }
-  bool use_dark_scheme =
-      preferred_color_scheme_ == PreferredColorScheme::kDark &&
-      SupportsDarkColorScheme();
-  if (!use_dark_scheme && settings->GetForceDarkModeEnabled()) {
+  if (!SupportsDarkColorScheme() && settings->GetForceDarkModeEnabled()) {
     // Make sure we don't match (prefers-color-scheme: dark) when forced
     // darkening is enabled.
     preferred_color_scheme_ = PreferredColorScheme::kNoPreference;
@@ -2145,8 +2147,7 @@
 
   bool use_dark_background = false;
 
-  if (preferred_color_scheme_ == PreferredColorScheme::kDark &&
-      forced_colors_ != ForcedColors::kActive) {
+  if (forced_colors_ != ForcedColors::kActive) {
     const ComputedStyle* style = nullptr;
     if (auto* root_element = GetDocument().documentElement())
       style = root_element->GetComputedStyle();
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc
index 9e8eada..1a4a601e 100644
--- a/third_party/blink/renderer/core/css/style_engine_test.cc
+++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -2667,7 +2667,7 @@
 
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
-      :root { color-scheme: dark }
+      :root { color-scheme: light dark }
       @media (prefers-color-scheme: light) {
         body { color: green; }
       }
diff --git a/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc b/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc
index f0233ad..08a19440 100644
--- a/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc
@@ -835,6 +835,25 @@
   if (!text_layout_object)
     return;
 
+  if (!text_layout_object->HasInlineFragments()) {
+    // whole text node is empty
+    // Removing a Text node won't dispatch synchronous events.
+    RemoveNode(text_node, ASSERT_NO_EDITING_ABORT);
+    return;
+  }
+  unsigned length = text_node->length();
+  if (start >= length || end > length)
+    return;
+
+  if (text_layout_object->IsInLayoutNGInlineFormattingContext()) {
+    const String string = PlainText(
+        EphemeralRange(Position(*text_node, start), Position(*text_node, end)));
+    if (string.IsEmpty())
+      return DeleteTextFromNode(text_node, start, end - start);
+    // Replace the text between start and end with collapsed version.
+    return ReplaceTextInNode(text_node, start, end - start, string);
+  }
+
   Vector<InlineTextBox*> sorted_text_boxes;
   wtf_size_t sorted_text_boxes_position = 0;
 
@@ -850,17 +869,6 @@
                            ? 0
                            : sorted_text_boxes[sorted_text_boxes_position];
 
-  if (!box) {
-    // whole text node is empty
-    // Removing a Text node won't dispatch synchronous events.
-    RemoveNode(text_node, ASSERT_NO_EDITING_ABORT);
-    return;
-  }
-
-  unsigned length = text_node->length();
-  if (start >= length || end > length)
-    return;
-
   unsigned removed = 0;
   InlineTextBox* prev_box = nullptr;
   String str;
diff --git a/third_party/blink/renderer/core/exported/web_frame_test.cc b/third_party/blink/renderer/core/exported/web_frame_test.cc
index 1b1d3726..c586f6d8 100644
--- a/third_party/blink/renderer/core/exported/web_frame_test.cc
+++ b/third_party/blink/renderer/core/exported/web_frame_test.cc
@@ -10903,10 +10903,7 @@
 
   // FakeLocalFrameHost:
   void DownloadURL(mojom::blink::DownloadURLParamsPtr params) override {
-    mojo::PendingRemote<mojom::blink::Blob> blob_data_remote(
-        std::move(params->data_url_blob), mojom::blink::Blob::Version_);
-
-    mojo::Remote<mojom::blink::Blob> blob(std::move(blob_data_remote));
+    mojo::Remote<mojom::blink::Blob> blob(std::move(params->data_url_blob));
     mojo::ScopedDataPipeProducerHandle producer_handle;
     mojo::ScopedDataPipeConsumerHandle consumer_handle;
     auto result =
diff --git a/third_party/blink/renderer/core/frame/ad_tracker.cc b/third_party/blink/renderer/core/frame/ad_tracker.cc
index a738bb9..38112b2 100644
--- a/third_party/blink/renderer/core/frame/ad_tracker.cc
+++ b/third_party/blink/renderer/core/frame/ad_tracker.cc
@@ -158,9 +158,12 @@
       probe.function->GetScriptOrigin().ResourceName();
   String script_url;
   if (!resource_name.IsEmpty()) {
-    script_url = ToCoreString(
-        resource_name->ToString(ToIsolate(local_root_)->GetCurrentContext())
-            .ToLocalChecked());
+    v8::MaybeLocal<v8::String> resource_name_string =
+        resource_name->ToString(ToIsolate(local_root_)->GetCurrentContext());
+    // Rarely, ToString() can return an empty result, even if |resource_name|
+    // isn't empty (crbug.com/1086832).
+    if (!resource_name_string.IsEmpty())
+      script_url = ToCoreString(resource_name_string.ToLocalChecked());
   }
   WillExecuteScript(probe.context, script_url);
 }
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index afb7d37b..e68a1ab 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -215,15 +215,12 @@
 
 // Convert a data url to a message pipe handle that corresponds to a remote
 // blob, so that it can be passed across processes.
-mojo::ScopedMessagePipeHandle DataURLToMessagePipeHandle(
-    const String& data_url) {
+mojo::PendingRemote<mojom::blink::Blob> DataURLToBlob(const String& data_url) {
   auto blob_data = std::make_unique<BlobData>();
   blob_data->AppendBytes(data_url.Utf8().data(), data_url.length());
   scoped_refptr<BlobDataHandle> blob_data_handle =
       BlobDataHandle::Create(std::move(blob_data), data_url.length());
-  mojo::PendingRemote<mojom::blink::Blob> data_url_blob =
-      blob_data_handle->CloneBlobRemote();
-  return data_url_blob.PassPipe();
+  return blob_data_handle->CloneBlobRemote();
 }
 
 HitTestResult HitTestResultForRootFramePos(
@@ -2465,7 +2462,7 @@
     return;
 
   auto params = mojom::blink::DownloadURLParams::New();
-  params->data_url_blob = DataURLToMessagePipeHandle(url);
+  params->data_url_blob = DataURLToBlob(url);
   GetLocalFrameHostRemote().DownloadURL(std::move(params));
 }
 
@@ -2571,7 +2568,7 @@
   // Pass data URL through blob.
   if (url.ProtocolIs("data")) {
     params->url = KURL();
-    params->data_url_blob = DataURLToMessagePipeHandle(url.GetString());
+    params->data_url_blob = DataURLToBlob(url.GetString());
   } else {
     params->url = url;
   }
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index 0525678..8e2c4a5 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -4100,8 +4100,13 @@
 }
 
 void LocalFrameView::CrossOriginToParentFrameChanged() {
-  if (auto* owner = frame_->DeprecatedLocalOwner())
-    owner->FrameCrossOriginToParentFrameChanged();
+  if (base::FeatureList::IsEnabled(
+          blink::features::kCompositeCrossOriginIframes)) {
+    if (LayoutView* layout_view = GetLayoutView()) {
+      if (PaintLayer* root_layer = layout_view->Layer())
+        root_layer->SetNeedsCompositingInputsUpdate();
+    }
+  }
 }
 
 void LocalFrameView::VisibilityForThrottlingChanged() {
diff --git a/third_party/blink/renderer/core/frame/scheduling.cc b/third_party/blink/renderer/core/frame/scheduling.cc
index d270b559..3bb1f24 100644
--- a/third_party/blink/renderer/core/frame/scheduling.cc
+++ b/third_party/blink/renderer/core/frame/scheduling.cc
@@ -23,7 +23,8 @@
     return false;
 
   auto* scheduler = ThreadScheduler::Current();
-  auto info = scheduler->GetPendingUserInputInfo(options->includeContinuous());
+  auto info = scheduler->GetPendingUserInputInfo(
+      options ? options->includeContinuous() : false);
 
   // TODO(acomminos): Attribution first requires a reverse mapping between
   // cc::ElementId instances and their underlying Document* objects.
diff --git a/third_party/blink/renderer/core/frame/scheduling.h b/third_party/blink/renderer/core/frame/scheduling.h
index b2f35f1..2f1ab3b 100644
--- a/third_party/blink/renderer/core/frame/scheduling.h
+++ b/third_party/blink/renderer/core/frame/scheduling.h
@@ -19,7 +19,8 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  bool isInputPending(ScriptState*, const IsInputPendingOptions* options) const;
+  bool isInputPending(ScriptState*,
+                      const IsInputPendingOptions* options = nullptr) const;
   bool isFramePending() const;
 };
 
diff --git a/third_party/blink/renderer/core/frame/scheduling.idl b/third_party/blink/renderer/core/frame/scheduling.idl
index ea3bd840..8898c015 100644
--- a/third_party/blink/renderer/core/frame/scheduling.idl
+++ b/third_party/blink/renderer/core/frame/scheduling.idl
@@ -8,5 +8,5 @@
     RuntimeEnabled=ExperimentalIsInputPending
 ] interface Scheduling {
     [RuntimeEnabled=ExperimentalIsInputPending] boolean isFramePending();
-    [CallWith=ScriptState, MeasureAs=SchedulingIsInputPending, RuntimeEnabled=ExperimentalIsInputPending] boolean isInputPending(IsInputPendingOptions options);
+    [CallWith=ScriptState, MeasureAs=SchedulingIsInputPending, RuntimeEnabled=ExperimentalIsInputPending] boolean isInputPending(optional IsInputPendingOptions options);
 };
diff --git a/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css b/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css
index 2a59e34..f72ea7e1 100644
--- a/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css
+++ b/third_party/blink/renderer/core/html/forms/resources/calendar_picker_refresh.css
@@ -383,3 +383,128 @@
     forced-color-adjust: none;
   }
 }
+
+@media (prefers-color-scheme: dark) {
+  .calendar-picker {
+    background-color: #4a4a4a;
+    color:#ffffff;
+  }
+
+  .calendar-table-header-view {
+    background-color: #4a4a4a;
+  }
+
+  .calendar-navigation-button {
+    background-color: #4a4a4a;
+    color: #ffffff;
+  }
+
+  .calendar-navigation-button:hover {
+    background-color: rgba(195, 195, 195, 0.3);
+  }
+
+  .calendar-navigation-button:disabled {
+    background-color: #4a4a4a;
+  }
+
+  .month-popup-button:disabled {
+    background-color: #4a4a4a;
+    color: rgba(255, 255, 255, 0.3);
+  }
+
+  .day-cell {
+    background-color: #4a4a4a;
+    color: rgba(255, 255, 255, 0.6);
+  }
+
+  .day-cell.current-month {
+    color: #ffffff;
+  }
+
+  .month-button:hover {
+    background-color: rgba(195, 195, 195, 0.3);
+  }
+
+  :not(.week-picker) > .calendar-table-view > .scroll-view > .scroll-view-content
+      > .calendar-row-cell > .day-cell:not(.selected):hover {
+    background-color: rgba(195, 195, 195, 0.3);
+  }
+
+  .week-picker .calendar-row-cell:hover
+      .day-cell:not(.selected):not(.disabled):not(:nth-child(2)),
+  .week-picker .calendar-row-cell:hover + .calendar-row-cell
+      .day-cell:not(.selected):not(.disabled):nth-child(2),
+  .calendar-row-cell:hover .week-number-cell:not(.selected):not(.disabled) {
+    background-color: rgba(195, 195, 195, 0.3);
+  }
+
+  .day-cell.selected,
+  .month-button.selected,
+  .week-number-cell.selected {
+    background-color: rgba(195, 195, 195, 0.5);
+    color: #FFFFFF;
+  }
+
+  .day-cell.disabled,
+  .day-cell.disabled.today,
+  .month-button[aria-disabled="true"],
+  .week-number-cell.disabled {
+    background-color: #4a4a4a;
+    color: rgba(255, 255, 255, 0.3);
+  }
+
+  .today-button-refresh:hover {
+    background-color: rgba(195, 195, 195, 0.3);
+  }
+
+  .today-button-refresh:disabled {
+    background-color: #4a4a4a;
+    color: rgba(255, 255, 255, 0.3);
+  }
+
+  .year-list-cell .label {
+    background-color: #4a4a4a;
+    color: #ffffff;
+  }
+
+  body {
+    background-color: #4a4a4a;
+  }
+
+  .month-popup-button,
+  .month-popup-button:hover,
+  .month-popup-button:disabled {
+      color: #ffffff;
+  }
+
+  .scrubby-scroll-bar {
+    background-color: #4a4a4a;
+    border-left: 1px solid #4a4a4a;
+  }
+
+  .scrubby-scroll-thumb {
+    background-color: #d8d8d8;
+  }
+
+  .calendar-navigation-button path {
+    fill: #ffffff;
+  }
+
+  .month-popup-button polygon {
+    fill: #ffffff;
+  }
+
+  .month-popup-button:disabled polygon {
+    fill: #ffffff;
+  }
+
+  .year-list-cell .month-chooser {
+    background-color: #4a4a4a;
+  }
+
+  .month-button {
+    background-color: #4a4a4a;
+    color: #ffffff;
+  }
+
+}
diff --git a/third_party/blink/renderer/core/html/forms/resources/time_picker.css b/third_party/blink/renderer/core/html/forms/resources/time_picker.css
index 2a46011..0205061 100644
--- a/third_party/blink/renderer/core/html/forms/resources/time_picker.css
+++ b/third_party/blink/renderer/core/html/forms/resources/time_picker.css
@@ -82,3 +82,23 @@
     border-color: WindowText;
   }
 }
+
+@media (prefers-color-scheme: dark) {
+  .time-picker {
+    background: #4a4a4a;
+    border: 1px solid #bfbfbf;
+  }
+
+  .time-cell {
+    color: #ffffff;
+  }
+
+  .time-cell:hover {
+    background-color: rgba(195, 195, 195, 0.3);
+  }
+
+  .time-cell.selected {
+    background-color: rgba(195, 195, 195, 0.5);
+    color: #FFFFFF;
+  }
+}
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.cc b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
index beef3ca..aa922a7 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
@@ -595,13 +595,6 @@
   }
 }
 
-void HTMLFrameOwnerElement::FrameCrossOriginToParentFrameChanged() {
-  if (base::FeatureList::IsEnabled(
-          blink::features::kCompositeCrossOriginIframes)) {
-    SetNeedsCompositingUpdate();
-  }
-}
-
 void HTMLFrameOwnerElement::SetEmbeddingToken(
     const base::UnguessableToken& embedding_token) {
   DCHECK(content_frame_);
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.h b/third_party/blink/renderer/core/html/html_frame_owner_element.h
index 23d019e..fdecebff 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.h
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.h
@@ -76,8 +76,6 @@
     return embedded_content_view_;
   }
 
-  void FrameCrossOriginToParentFrameChanged();
-
   class PluginDisposeSuspendScope {
     STACK_ALLOCATED();
 
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.cc b/third_party/blink/renderer/core/html/media/html_video_element.cc
index 591c343..af31686 100644
--- a/third_party/blink/renderer/core/html/media/html_video_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_video_element.cc
@@ -654,7 +654,7 @@
         "The provided element has not retrieved data.");
     return ScriptPromise();
   }
-  if (getReadyState() <= HTMLMediaElement::kHaveMetadata) {
+  if (!HasAvailableVideoFrame()) {
     exception_state.ThrowDOMException(
         DOMExceptionCode::kInvalidStateError,
         "The provided element's player has no current data.");
diff --git a/third_party/blink/renderer/core/html/parser/html_construction_site.cc b/third_party/blink/renderer/core/html/parser/html_construction_site.cc
index 33d967da..b28f85f 100644
--- a/third_party/blink/renderer/core/html/parser/html_construction_site.cc
+++ b/third_party/blink/renderer/core/html/parser/html_construction_site.cc
@@ -115,8 +115,13 @@
   // 3. If the adjusted insertion location is inside a template element, let it
   // instead be inside the template element's template contents, after its last
   // child (if any).
-  if (auto* template_element = DynamicTo<HTMLTemplateElement>(*task.parent))
+  if (auto* template_element = DynamicTo<HTMLTemplateElement>(*task.parent)) {
     task.parent = template_element->TemplateContentForHTMLConstructionSite();
+    // If the Document was detached in the middle of parsing, The template
+    // element won't be able to initialize its contents, so bail out.
+    if (!task.parent)
+      return;
+  }
 
   // https://html.spec.whatwg.org/C/#insert-a-foreign-element
   // 3.1, (3) Push (pop) an element queue
@@ -799,8 +804,12 @@
   // handled in Insert().
   if (auto* template_element =
           DynamicTo<HTMLTemplateElement>(*dummy_task.parent)) {
-    dummy_task.parent =
-        template_element->TemplateContentForHTMLConstructionSite();
+    // If the Document was detached in the middle of parsing, the template
+    // element won't be able to initialize its contents.
+    if (auto* content =
+            template_element->TemplateContentForHTMLConstructionSite()) {
+      dummy_task.parent = content;
+    }
   }
 
   // Unclear when parent != case occurs. Somehow we insert text into two
diff --git a/third_party/blink/renderer/core/html/portal/html_portal_element.cc b/third_party/blink/renderer/core/html/portal/html_portal_element.cc
index 4c55a09..1b4cf60 100644
--- a/third_party/blink/renderer/core/html/portal/html_portal_element.cc
+++ b/third_party/blink/renderer/core/html/portal/html_portal_element.cc
@@ -169,6 +169,13 @@
   if (!is_top_level)
     return GuestContentsEligibility::kNotTopLevel;
 
+  // TODO(crbug.com/1051639): We need to find a long term solution to when/how
+  // portals should work in sandboxed documents.
+  if (GetDocument().GetSandboxFlags() !=
+      network::mojom::blink::WebSandboxFlags::kNone) {
+    return GuestContentsEligibility::kSandboxed;
+  }
+
   if (!GetDocument().Url().ProtocolIsInHTTPFamily())
     return GuestContentsEligibility::kNotHTTPFamily;
 
@@ -365,6 +372,13 @@
           "Cannot use <portal> in a nested browsing context."));
       return result;
 
+    case GuestContentsEligibility::kSandboxed:
+      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
+          mojom::ConsoleMessageSource::kRendering,
+          mojom::ConsoleMessageLevel::kWarning,
+          "Cannot use <portal> in a sandboxed browsing context."));
+      return result;
+
     case GuestContentsEligibility::kNotHTTPFamily:
       GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
           mojom::ConsoleMessageSource::kRendering,
diff --git a/third_party/blink/renderer/core/html/portal/html_portal_element.h b/third_party/blink/renderer/core/html/portal/html_portal_element.h
index 13dc9687..5e9e05d 100644
--- a/third_party/blink/renderer/core/html/portal/html_portal_element.h
+++ b/third_party/blink/renderer/core/html/portal/html_portal_element.h
@@ -103,6 +103,9 @@
     // Ineligible as it is not top-level.
     kNotTopLevel,
 
+    // Ineligible as it is sandboxed.
+    kSandboxed,
+
     // Ineligible as the host's protocol is not in the HTTP family.
     kNotHTTPFamily,
 
diff --git a/third_party/blink/renderer/core/html/resources/controls_refresh.css b/third_party/blink/renderer/core/html/resources/controls_refresh.css
index ccf1422..d8de47f4 100644
--- a/third_party/blink/renderer/core/html/resources/controls_refresh.css
+++ b/third_party/blink/renderer/core/html/resources/controls_refresh.css
@@ -146,7 +146,7 @@
 input[type="datetime-local" i]::-webkit-calendar-picker-indicator,
 input[type="month" i]::-webkit-calendar-picker-indicator,
 input[type="week" i]::-webkit-calendar-picker-indicator {
-  background-image: -webkit-image-set(url(images/calendar_icon.svg) 1x);
+  background-image: -internal-light-dark(-webkit-image-set(url(images/calendar_icon.svg) 1x), -webkit-image-set(url(images/calendar_icon_white.svg) 1x));
   background-origin: content-box;
   background-repeat: no-repeat;
   background-size: contain;
diff --git a/third_party/blink/renderer/core/html/resources/images/calendar_icon_white.svg b/third_party/blink/renderer/core/html/resources/images/calendar_icon_white.svg
new file mode 100644
index 0000000..3f4b476
--- /dev/null
+++ b/third_party/blink/renderer/core/html/resources/images/calendar_icon_white.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="15" viewBox="0 0 24 24"><path fill="#ffffff" d="M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"/><path fill="none" d="M0 0h24v24H0z"/></svg>
\ No newline at end of file
diff --git a/third_party/blink/renderer/core/layout/layout_block.h b/third_party/blink/renderer/core/layout/layout_block.h
index 1f5a6aa..07cca58 100644
--- a/third_party/blink/renderer/core/layout/layout_block.h
+++ b/third_party/blink/renderer/core/layout/layout_block.h
@@ -401,6 +401,8 @@
   void UpdateAfterLayout() override;
   MinMaxSizes PreferredLogicalWidths() const override;
 
+  virtual bool HasLineIfEmpty() const;
+
  protected:
   MinMaxSizes ComputeIntrinsicLogicalWidths() const override;
   void ComputeChildPreferredLogicalWidths(
@@ -430,8 +432,6 @@
   // this object even if overflow is non-visible.
   virtual bool AllowsOverflowClip() const;
 
-  virtual bool HasLineIfEmpty() const;
-
   bool SimplifiedLayout();
   virtual void SimplifiedNormalFlowLayout();
 
diff --git a/third_party/blink/renderer/core/layout/layout_embedded_content.cc b/third_party/blink/renderer/core/layout/layout_embedded_content.cc
index f1b0f6c4..20d3666 100644
--- a/third_party/blink/renderer/core/layout/layout_embedded_content.cc
+++ b/third_party/blink/renderer/core/layout/layout_embedded_content.cc
@@ -252,12 +252,8 @@
     return CompositingReason::kPlugin;
   if (auto* element = GetFrameOwnerElement()) {
     if (Frame* content_frame = element->ContentFrame()) {
-      if (content_frame->IsRemoteFrame() ||
-          (base::FeatureList::IsEnabled(
-               blink::features::kCompositeCrossOriginIframes) &&
-           content_frame->IsCrossOriginToParentFrame())) {
+      if (content_frame->IsRemoteFrame())
         return CompositingReason::kIFrame;
-      }
     }
   }
   return CompositingReason::kNone;
diff --git a/third_party/blink/renderer/core/layout/layout_image_resource_style_image.cc b/third_party/blink/renderer/core/layout/layout_image_resource_style_image.cc
index 999918b..9e78085 100644
--- a/third_party/blink/renderer/core/layout/layout_image_resource_style_image.cc
+++ b/third_party/blink/renderer/core/layout/layout_image_resource_style_image.cc
@@ -29,6 +29,7 @@
 #include "third_party/blink/renderer/core/layout/layout_image_resource_style_image.h"
 
 #include "third_party/blink/renderer/core/layout/layout_replaced.h"
+#include "third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.h"
 #include "third_party/blink/renderer/core/style/style_fetched_image.h"
 
 namespace blink {
@@ -70,9 +71,12 @@
 
 FloatSize LayoutImageResourceStyleImage::ImageSize(float multiplier) const {
   // TODO(davve): Find out the correct default object size in this context.
-  return ImageSizeWithDefaultSize(multiplier,
-                                  LayoutSize(LayoutReplaced::kDefaultWidth,
-                                             LayoutReplaced::kDefaultHeight));
+  LayoutSize default_size =
+      layout_object_->IsLayoutNGListMarkerImage()
+          ? ToLayoutNGListMarkerImage(layout_object_)->DefaultSize()
+          : LayoutSize(LayoutReplaced::kDefaultWidth,
+                       LayoutReplaced::kDefaultHeight);
+  return ImageSizeWithDefaultSize(multiplier, default_size);
 }
 
 FloatSize LayoutImageResourceStyleImage::ImageSizeWithDefaultSize(
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index ff23b44..c54175d35 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -2973,8 +2973,13 @@
   transform.PostTranslate(offset_in_container.left.ToFloat(),
                           offset_in_container.top.ToFloat());
 
-  if (container_object && container_object->HasLayer() &&
-      container_object->StyleRef().HasPerspective()) {
+  bool has_perspective = container_object && container_object->HasLayer() &&
+                         container_object->StyleRef().HasPerspective();
+  if (has_perspective && RuntimeEnabledFeatures::TransformInteropEnabled() &&
+      container_object != Parent())
+    has_perspective = false;
+
+  if (has_perspective) {
     // Perspective on the container affects us, so we have to factor it in here.
     DCHECK(container_object->HasLayer());
     FloatPoint perspective_origin =
diff --git a/third_party/blink/renderer/core/layout/layout_theme_default.cc b/third_party/blink/renderer/core/layout/layout_theme_default.cc
index 679b4e0..5b46435b 100644
--- a/third_party/blink/renderer/core/layout/layout_theme_default.cc
+++ b/third_party/blink/renderer/core/layout/layout_theme_default.cc
@@ -241,7 +241,7 @@
 }
 
 bool LayoutThemeDefault::PopsMenuByReturnKey() const {
-  return !features::IsFormControlsRefreshEnabled();
+  return true;
 }
 
 bool LayoutThemeDefault::ShouldOpenPickerWithF4Key() const {
diff --git a/third_party/blink/renderer/core/layout/layout_theme_default.h b/third_party/blink/renderer/core/layout/layout_theme_default.h
index 5347a78..58293c5e 100644
--- a/third_party/blink/renderer/core/layout/layout_theme_default.h
+++ b/third_party/blink/renderer/core/layout/layout_theme_default.h
@@ -74,8 +74,8 @@
   void AdjustInnerSpinButtonStyle(ComputedStyle&) const override;
   void AdjustButtonStyle(ComputedStyle&) const override;
 
-  bool PopsMenuBySpaceKey() const final { return true; }
-  bool PopsMenuByReturnKey() const final;
+  bool PopsMenuBySpaceKey() const override { return true; }
+  bool PopsMenuByReturnKey() const override;
   bool PopsMenuByAltDownUpOrF4Key() const override { return true; }
 
   bool ShouldOpenPickerWithF4Key() const override;
diff --git a/third_party/blink/renderer/core/layout/layout_theme_mac.mm b/third_party/blink/renderer/core/layout/layout_theme_mac.mm
index f9912f0..7bda1506 100644
--- a/third_party/blink/renderer/core/layout/layout_theme_mac.mm
+++ b/third_party/blink/renderer/core/layout/layout_theme_mac.mm
@@ -162,6 +162,8 @@
     return file.name();
   }
   bool PopsMenuByArrowKeys() const override;
+  bool PopsMenuByReturnKey() const override;
+  bool SupportsSelectionForegroundColors() const override { return false; }
 
  protected:
   // Controls color values returned from FocusRingColor().
@@ -382,6 +384,10 @@
   return true;
 }
 
+bool LayoutThemeMacRefresh::PopsMenuByReturnKey() const {
+  return false;
+}
+
 static FontSelectionValue ToFontWeight(NSInteger app_kit_font_weight) {
   DCHECK_GT(app_kit_font_weight, 0);
   DCHECK_LT(app_kit_font_weight, 15);
diff --git a/third_party/blink/renderer/core/layout/layout_theme_test.cc b/third_party/blink/renderer/core/layout/layout_theme_test.cc
index 7461a34..f9a1967 100644
--- a/third_party/blink/renderer/core/layout/layout_theme_test.cc
+++ b/third_party/blink/renderer/core/layout/layout_theme_test.cc
@@ -88,7 +88,7 @@
     <style>
       #dark {
         color: buttonface;
-        color-scheme: dark;
+        color-scheme: light dark;
       }
     </style>
     <div id="dark"></div>
diff --git a/third_party/blink/renderer/core/layout/layout_view.cc b/third_party/blink/renderer/core/layout/layout_view.cc
index 8b37244..b002e563 100644
--- a/third_party/blink/renderer/core/layout/layout_view.cc
+++ b/third_party/blink/renderer/core/layout/layout_view.cc
@@ -24,6 +24,7 @@
 #include <inttypes.h>
 
 #include "build/build_config.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/scroll/scrollbar_mode.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_screen_info.h"
@@ -901,6 +902,18 @@
   return relayout_children || ShouldUsePrintingLayout();
 }
 
+CompositingReasons LayoutView::AdditionalCompositingReasons() const {
+  // TODO(lfg): Audit for portals
+  const LocalFrame& frame = frame_view_->GetFrame();
+  if (frame.OwnerLayoutObject() &&
+      base::FeatureList::IsEnabled(
+          blink::features::kCompositeCrossOriginIframes) &&
+      frame.IsCrossOriginToParentFrame()) {
+    return CompositingReason::kIFrame;
+  }
+  return CompositingReason::kNone;
+}
+
 void LayoutView::UpdateCounters() {
   if (!needs_counter_update_)
     return;
diff --git a/third_party/blink/renderer/core/layout/layout_view.h b/third_party/blink/renderer/core/layout/layout_view.h
index 7a36102b..584e4fe 100644
--- a/third_party/blink/renderer/core/layout/layout_view.h
+++ b/third_party/blink/renderer/core/layout/layout_view.h
@@ -181,6 +181,9 @@
 
   LayoutState* GetLayoutState() const { return layout_state_; }
 
+  bool CanHaveAdditionalCompositingReasons() const override { return true; }
+  CompositingReasons AdditionalCompositingReasons() const override;
+
   void UpdateHitTestResult(HitTestResult&,
                            const PhysicalOffset&) const override;
 
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
index dadc0b92..e9dd642 100644
--- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
@@ -897,8 +897,14 @@
                                    cross_axis_offset);
   }
 
-  LayoutUnit intrinsic_block_size = algorithm_->IntrinsicContentBlockSize() +
-                                    border_scrollbar_padding_.BlockSum();
+  LayoutUnit intrinsic_block_size = border_scrollbar_padding_.BlockSum();
+
+  if (algorithm_->FlexLines().IsEmpty() &&
+      To<LayoutBlock>(Node().GetLayoutBox())->HasLineIfEmpty()) {
+    intrinsic_block_size += Node().GetLayoutBox()->LogicalHeightForEmptyLine();
+  } else {
+    intrinsic_block_size += algorithm_->IntrinsicContentBlockSize();
+  }
 
   intrinsic_block_size =
       ClampIntrinsicBlockSize(ConstraintSpace(), Node(),
diff --git a/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_test.cc b/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_test.cc
index 9ee323b..ed5a6e0 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_test.cc
@@ -142,6 +142,23 @@
             GetItemsAsString(*text.GetLayoutObject()));
 }
 
+// web_tests/external/wpt/editing/run/delete.html?993-993
+// web_tests/external/wpt/editing/run/forwarddelete.html?1193-1193
+TEST_F(LayoutNGTextTest, SetTextWithOffsetDeleteNbspInPreWrap) {
+  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
+    return;
+
+  InsertStyleElement("#target { white-space:pre-wrap; }");
+  SetBodyInnerHTML(u"<p id=target>&nbsp; abc</p>");
+  Text& text = To<Text>(*GetElementById("target")->firstChild());
+  text.deleteData(0, 1, ASSERT_NO_EXCEPTION);
+
+  EXPECT_EQ(
+      "*{' ', ShapeResult=0+1}\n"
+      "*{'abc', ShapeResult=2+3}\n",
+      GetItemsAsString(*text.GetLayoutObject()));
+}
+
 TEST_F(LayoutNGTextTest, SetTextWithOffsetDeleteRTL) {
   if (!RuntimeEnabledFeatures::LayoutNGEnabled())
     return;
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 d24eab0d..9dec9dd 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
@@ -94,14 +94,17 @@
         ShapeResult::CreateEmpty(*reusable_shape_results.front());
     unsigned offset = start_offset;
     for (const ShapeResult* reusable_shape_result : reusable_shape_results) {
-      DCHECK_LE(offset, reusable_shape_result->StartIndex());
+      // In case of pre-wrap having break opportunity after leading space,
+      // |offset| can be greater than |reusable_shape_result->StartIndex()|.
+      // e.g. <div style="white-space:pre">&nbsp; abc</div>, deleteChar(0, 1)
+      // See xternal/wpt/editing/run/delete.html?993-993
       if (offset < reusable_shape_result->StartIndex()) {
         AppendShapeResult(
             *Reshape(start_item, offset, reusable_shape_result->StartIndex()),
             shape_result.get());
         offset = shape_result->EndIndex();
       }
-      DCHECK_EQ(offset, reusable_shape_result->StartIndex());
+      DCHECK_LT(offset, reusable_shape_result->EndIndex());
       DCHECK(shape_result->NumCharacters() == 0 ||
              shape_result->EndIndex() == offset);
       reusable_shape_result->CopyRange(
diff --git a/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.cc b/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.cc
index 0ff2241..fa06cf0 100644
--- a/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.cc
+++ b/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.cc
@@ -24,21 +24,24 @@
   return type == kLayoutObjectNGListMarkerImage || LayoutImage::IsOfType(type);
 }
 
+LayoutSize LayoutNGListMarkerImage::DefaultSize() const {
+  const SimpleFontData* font_data = Style()->GetFont().PrimaryFont();
+  DCHECK(font_data);
+  if (!font_data)
+    return LayoutSize(kDefaultWidth, kDefaultHeight);
+
+  LayoutUnit bullet_width =
+      font_data->GetFontMetrics().Ascent() / LayoutUnit(2);
+  return LayoutSize(bullet_width, bullet_width);
+}
+
 // Because ImageResource() is always LayoutImageResourceStyleImage. So we could
 // use StyleImage::ImageSize to determine the concrete object size with
 // default object size(ascent/2 x ascent/2).
 void LayoutNGListMarkerImage::ComputeIntrinsicSizingInfoByDefaultSize(
     IntrinsicSizingInfo& intrinsic_sizing_info) const {
-  const SimpleFontData* font_data = Style()->GetFont().PrimaryFont();
-  DCHECK(font_data);
-  if (!font_data)
-    return;
-
-  LayoutUnit bullet_width =
-      font_data->GetFontMetrics().Ascent() / LayoutUnit(2);
-  LayoutSize default_object_size(bullet_width, bullet_width);
   FloatSize concrete_size = ImageResource()->ImageSizeWithDefaultSize(
-      Style()->EffectiveZoom(), default_object_size);
+      Style()->EffectiveZoom(), DefaultSize());
   concrete_size.Scale(ImageDevicePixelRatio());
   LayoutSize image_size(RoundedLayoutSize(concrete_size));
 
diff --git a/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.h b/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.h
index 86bdb5ec..b8a2031 100644
--- a/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.h
+++ b/third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker_image.h
@@ -18,6 +18,7 @@
   static LayoutNGListMarkerImage* CreateAnonymous(Document*);
 
   bool IsLayoutNGObject() const override { return true; }
+  LayoutSize DefaultSize() const;
 
  private:
   bool IsOfType(LayoutObjectType) const override;
@@ -26,6 +27,9 @@
   void ComputeIntrinsicSizingInfo(IntrinsicSizingInfo&) const final;
 };
 
+DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutNGListMarkerImage,
+                                IsLayoutNGListMarkerImage());
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_LIST_LAYOUT_NG_LIST_MARKER_IMAGE_H_
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc
index 2179c07..452c2ed1 100644
--- a/third_party/blink/renderer/core/loader/document_loader.cc
+++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -588,11 +588,8 @@
 DocumentLoader::TakePendingWorkerTimingReceiver(int request_id) {
   if (!GetServiceWorkerNetworkProvider())
     return mojo::NullReceiver();
-  mojo::ScopedMessagePipeHandle pipe =
-      GetServiceWorkerNetworkProvider()->TakePendingWorkerTimingReceiver(
-          request_id);
-  return mojo::PendingReceiver<mojom::blink::WorkerTimingContainer>(
-      std::move(pipe));
+  return GetServiceWorkerNetworkProvider()->TakePendingWorkerTimingReceiver(
+      request_id);
 }
 
 void DocumentLoader::BodyCodeCacheReceived(mojo_base::BigBuffer data) {
@@ -1641,9 +1638,6 @@
     previous_security_origin = frame_->GetDocument()->GetSecurityOrigin();
   }
 
-  bool was_cross_origin_to_parent_frame =
-      previous_security_origin && frame_->IsCrossOriginToParentFrame();
-
   // In some rare cases, we'll re-use a LocalDOMWindow for a new Document. For
   // example, when a script calls window.open("..."), the browser gives
   // JavaScript a window synchronously but kicks off the load in the window
@@ -1714,12 +1708,6 @@
   // will use stale values from HTMLParserOption.
   DidCommitNavigation();
 
-  if (was_cross_origin_to_parent_frame !=
-      frame_->IsCrossOriginToParentFrame()) {
-    if (auto* owner = frame_->DeprecatedLocalOwner())
-      owner->FrameCrossOriginToParentFrameChanged();
-  }
-
   if (initiator_origin) {
     const scoped_refptr<const SecurityOrigin> url_origin =
         SecurityOrigin::Create(Url());
diff --git a/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc b/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc
index 279a4e7..ea8c5d66 100644
--- a/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc
+++ b/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc
@@ -49,7 +49,7 @@
   }
 
   if (url_loader_factory) {
-    return web_context_->WrapURLLoaderFactory(url_loader_factory.PassPipe())
+    return web_context_->WrapURLLoaderFactory(std::move(url_loader_factory))
         ->CreateURLLoader(wrapped, CreateTaskRunnerHandle(task_runner));
   }
 
diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
index 8951a6a..841314e3 100644
--- a/third_party/blink/renderer/core/loader/worker_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
@@ -263,10 +263,8 @@
 
 mojo::PendingReceiver<mojom::blink::WorkerTimingContainer>
 WorkerFetchContext::TakePendingWorkerTimingReceiver(int request_id) {
-  mojo::ScopedMessagePipeHandle pipe =
-      GetWebWorkerFetchContext()->TakePendingWorkerTimingReceiver(request_id);
-  return mojo::PendingReceiver<mojom::blink::WorkerTimingContainer>(
-      std::move(pipe));
+  return GetWebWorkerFetchContext()->TakePendingWorkerTimingReceiver(
+      request_id);
 }
 
 void WorkerFetchContext::SetFirstPartyCookie(ResourceRequest& out_request) {
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc
index 49eb3cd..18ac27bd 100644
--- a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc
+++ b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc
@@ -218,14 +218,15 @@
   )HTML");
   UpdateAllLifecyclePhasesForTest();
 
-  Element* iframe = GetDocument().getElementById("iframe");
+  HTMLFrameOwnerElement* iframe =
+      To<HTMLFrameOwnerElement>(GetDocument().getElementById("iframe"));
   ASSERT_TRUE(iframe);
-  PaintLayer* iframe_layer =
-      ToLayoutBoxModelObject(iframe->GetLayoutObject())->Layer();
+  ASSERT_FALSE(iframe->ContentFrame()->IsCrossOriginToMainFrame());
+  LayoutView* iframe_layout_view =
+      To<LocalFrame>(iframe->ContentFrame())->ContentLayoutObject();
+  ASSERT_TRUE(iframe_layout_view);
+  PaintLayer* iframe_layer = iframe_layout_view->Layer();
   ASSERT_TRUE(iframe_layer);
-  ASSERT_FALSE(To<HTMLFrameOwnerElement>(iframe)
-                   ->ContentFrame()
-                   ->IsCrossOriginToMainFrame());
   EXPECT_EQ(kNotComposited, iframe_layer->DirectCompositingReasons());
 
   SetBodyInnerHTML(R"HTML(
@@ -234,13 +235,12 @@
   )HTML");
   UpdateAllLifecyclePhasesForTest();
 
-  iframe = GetDocument().getElementById("iframe");
-  ASSERT_TRUE(iframe);
-  iframe_layer = ToLayoutBoxModelObject(iframe->GetLayoutObject())->Layer();
+  iframe = To<HTMLFrameOwnerElement>(GetDocument().getElementById("iframe"));
+  iframe_layout_view =
+      To<LocalFrame>(iframe->ContentFrame())->ContentLayoutObject();
+  iframe_layer = iframe_layout_view->Layer();
   ASSERT_TRUE(iframe_layer);
-  ASSERT_TRUE(To<HTMLFrameOwnerElement>(iframe)
-                  ->ContentFrame()
-                  ->IsCrossOriginToMainFrame());
+  ASSERT_TRUE(iframe->ContentFrame()->IsCrossOriginToMainFrame());
   EXPECT_EQ(CompositingReason::kIFrame,
             iframe_layer->DirectCompositingReasons());
 }
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_test.cc b/third_party/blink/renderer/core/paint/compositing/compositing_test.cc
index 2d2bf93..d6fc452 100644
--- a/third_party/blink/renderer/core/paint/compositing/compositing_test.cc
+++ b/third_party/blink/renderer/core/paint/compositing/compositing_test.cc
@@ -13,6 +13,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/web/web_script_source.h"
+#include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
@@ -356,6 +357,15 @@
     return layers.IsEmpty() ? nullptr : layers[0];
   }
 
+  const cc::Layer* CcLayerByOwnerNodeId(Node* node) {
+    DOMNodeId id = DOMNodeIds::IdForNode(node);
+    for (auto& layer : RootCcLayer()->children()) {
+      if (layer->debug_info() && layer->debug_info()->owner_node_id == id)
+        return layer.get();
+    }
+    return nullptr;
+  }
+
   Element* GetElementById(const AtomicString& id) {
     return MainFrame().GetFrame()->GetDocument()->getElementById(id);
   }
@@ -1211,7 +1221,14 @@
       blink::features::kCompositeCrossOriginIframes, true);
   InitializeWithHTML("<!DOCTYPE html><iframe id=iframe sandbox></iframe>");
   Compositor().BeginFrame();
-  EXPECT_TRUE(CcLayerByDOMElementId("iframe"));
+  Document* iframe_doc =
+      To<HTMLFrameOwnerElement>(GetElementById("iframe"))->contentDocument();
+  Node* owner_node = iframe_doc;
+  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
+    owner_node = iframe_doc->documentElement();
+  auto* layer = CcLayerByOwnerNodeId(owner_node);
+  EXPECT_TRUE(layer);
+  EXPECT_EQ(layer->bounds(), gfx::Size(300, 150));
 }
 
 // On initial layout, the iframe is not yet loaded and is not considered
@@ -1233,7 +1250,12 @@
   frame_resource.Complete("<!DOCTYPE html>");
   Compositor().BeginFrame();
 
-  EXPECT_TRUE(CcLayerByDOMElementId("iframe"));
+  Document* iframe_doc =
+      To<HTMLFrameOwnerElement>(GetElementById("iframe"))->contentDocument();
+  Node* owner_node = iframe_doc;
+  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
+    owner_node = iframe_doc->documentElement();
+  EXPECT_TRUE(CcLayerByOwnerNodeId(owner_node));
 }
 
 // An iframe that is cross-origin to the parent should be composited. This test
@@ -1260,8 +1282,18 @@
   grandchild_resource.Complete("<!DOCTYPE html>");
   Compositor().BeginFrame();
 
-  EXPECT_TRUE(CcLayerByDOMElementId("main_iframe"));
-  EXPECT_TRUE(CcLayerByDOMElementId("child_iframe"));
+  Document* iframe_doc =
+      To<HTMLFrameOwnerElement>(GetElementById("main_iframe"))
+          ->contentDocument();
+  EXPECT_TRUE(CcLayerByOwnerNodeId(iframe_doc));
+
+  iframe_doc =
+      To<HTMLFrameOwnerElement>(iframe_doc->getElementById("child_iframe"))
+          ->contentDocument();
+  Node* owner_node = iframe_doc;
+  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
+    owner_node = iframe_doc->documentElement();
+  EXPECT_TRUE(CcLayerByOwnerNodeId(owner_node));
 }
 
 // Initially the iframe is cross-origin and should be composited. After changing
@@ -1282,10 +1314,16 @@
   frame_resource.Complete("<!DOCTYPE html>");
   Compositor().BeginFrame();
 
-  EXPECT_TRUE(CcLayerByDOMElementId("iframe"));
-
   auto* iframe_element =
       To<HTMLIFrameElement>(GetDocument().getElementById("iframe"));
+
+  Document* iframe_doc =
+      To<HTMLFrameOwnerElement>(GetElementById("iframe"))->contentDocument();
+  Node* owner_node = iframe_doc;
+  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
+    owner_node = iframe_doc->documentElement();
+  EXPECT_TRUE(CcLayerByOwnerNodeId(owner_node));
+
   NonThrowableExceptionState exception_state;
   GetDocument().setDomain(String("origin-a.com"), exception_state);
   iframe_element->contentDocument()->setDomain(String("origin-a.com"),
@@ -1294,7 +1332,12 @@
   // using BeginFrame.
   UpdateAllLifecyclePhases();
 
-  EXPECT_FALSE(CcLayerByDOMElementId("iframe"));
+  iframe_doc =
+      To<HTMLFrameOwnerElement>(GetElementById("iframe"))->contentDocument();
+  owner_node = iframe_doc;
+  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
+    owner_node = iframe_doc->documentElement();
+  EXPECT_FALSE(CcLayerByOwnerNodeId(owner_node));
 }
 
 // This test sets up nested frames with domains A -> B -> A. Initially, the
@@ -1322,8 +1365,18 @@
   grandchild_resource.Complete("<!DOCTYPE html>");
   Compositor().BeginFrame();
 
-  EXPECT_TRUE(CcLayerByDOMElementId("main_iframe"));
-  EXPECT_TRUE(CcLayerByDOMElementId("child_iframe"));
+  Document* iframe_doc =
+      To<HTMLFrameOwnerElement>(GetElementById("main_iframe"))
+          ->contentDocument();
+  EXPECT_TRUE(CcLayerByOwnerNodeId(iframe_doc));
+
+  iframe_doc =
+      To<HTMLFrameOwnerElement>(iframe_doc->getElementById("child_iframe"))
+          ->contentDocument();
+  Node* owner_node = iframe_doc;
+  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
+    owner_node = iframe_doc->documentElement();
+  EXPECT_TRUE(CcLayerByOwnerNodeId(owner_node));
 
   auto* main_iframe_element =
       To<HTMLIFrameElement>(GetDocument().getElementById("main_iframe"));
@@ -1340,8 +1393,17 @@
   // using BeginFrame.
   UpdateAllLifecyclePhases();
 
-  EXPECT_FALSE(CcLayerByDOMElementId("main_iframe"));
-  EXPECT_FALSE(CcLayerByDOMElementId("child_iframe"));
+  iframe_doc = To<HTMLFrameOwnerElement>(GetElementById("main_iframe"))
+                   ->contentDocument();
+  EXPECT_FALSE(CcLayerByOwnerNodeId(iframe_doc));
+
+  iframe_doc =
+      To<HTMLFrameOwnerElement>(iframe_doc->getElementById("child_iframe"))
+          ->contentDocument();
+  owner_node = iframe_doc;
+  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
+    owner_node = iframe_doc->documentElement();
+  EXPECT_FALSE(CcLayerByOwnerNodeId(owner_node));
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index ced30a29..f17ae36 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -52,6 +52,7 @@
 #include "third_party/blink/renderer/platform/graphics/touch_action.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/text_direction.h"
+#include "third_party/blink/renderer/platform/text/writing_direction_mode.h"
 #include "third_party/blink/renderer/platform/text/writing_mode_utils.h"
 #include "third_party/blink/renderer/platform/transforms/transform_operations.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
@@ -1481,6 +1482,9 @@
   }
 
   // Writing mode utility functions.
+  WritingDirectionMode GetWritingDirection() const {
+    return {GetWritingMode(), Direction()};
+  }
   bool IsHorizontalWritingMode() const {
     return blink::IsHorizontalWritingMode(GetWritingMode());
   }
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image.cc b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
index 892295a..3c01d58c 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image.cc
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
@@ -923,7 +923,6 @@
 DarkModeClassification SVGImage::CheckTypeSpecificConditionsForDarkMode(
     const FloatRect& dest_rect,
     DarkModeImageClassifier* classifier) {
-  classifier->SetImageType(DarkModeImageClassifier::ImageType::kSvg);
   return DarkModeClassification::kNotClassified;
 }
 
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc b/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc
index 7b42c125..5af1a1d7 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc
@@ -267,7 +267,6 @@
   EXPECT_EQ(classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kApplyFilter);
   EXPECT_FALSE(features.is_colorful);
-  EXPECT_TRUE(features.is_svg);
   EXPECT_NEAR(0.0625f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.968889f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.02f, features.background_ratio, kEpsilon);
@@ -290,7 +289,6 @@
   EXPECT_EQ(classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kApplyFilter);
   EXPECT_TRUE(features.is_colorful);
-  EXPECT_TRUE(features.is_svg);
   EXPECT_NEAR(0.00170898f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.background_ratio, kEpsilon);
@@ -312,7 +310,6 @@
   EXPECT_EQ(classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kApplyFilter);
   EXPECT_TRUE(features.is_colorful);
-  EXPECT_TRUE(features.is_svg);
   EXPECT_NEAR(0.000244141f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.777778f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.background_ratio, kEpsilon);
@@ -334,7 +331,6 @@
   EXPECT_EQ(classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kApplyFilter);
   EXPECT_FALSE(features.is_colorful);
-  EXPECT_TRUE(features.is_svg);
   EXPECT_NEAR(0.0625f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.888889f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.11f, features.background_ratio, kEpsilon);
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index 0048c4a..09d7bbe 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -289,12 +289,10 @@
 }
 
 void DedicatedWorker::OnWorkerHostCreated(
-    mojo::ScopedMessagePipeHandle browser_interface_broker) {
+    CrossVariantMojoRemote<mojom::blink::BrowserInterfaceBrokerInterfaceBase>
+        browser_interface_broker) {
   DCHECK(!browser_interface_broker_);
-  browser_interface_broker_ =
-      mojo::PendingRemote<mojom::blink::BrowserInterfaceBroker>(
-          std::move(browser_interface_broker),
-          mojom::blink::BrowserInterfaceBroker::Version_);
+  browser_interface_broker_ = std::move(browser_interface_broker);
 }
 
 void DedicatedWorker::OnScriptLoadStarted() {
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_party/blink/renderer/core/workers/dedicated_worker.h
index 28a8944af..7590e5f 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.h
@@ -86,7 +86,8 @@
   // Implements WebDedicatedWorker.
   // Called only when PlzDedicatedWorker is enabled.
   void OnWorkerHostCreated(
-      mojo::ScopedMessagePipeHandle browser_interface_broker) override;
+      CrossVariantMojoRemote<mojom::blink::BrowserInterfaceBrokerInterfaceBase>
+          browser_interface_broker) override;
   void OnScriptLoadStarted() override;
   void OnScriptLoadStartFailed() override;
 
diff --git a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
index dfc30ad..36d3067 100644
--- a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
+++ b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
@@ -1365,8 +1365,8 @@
 
   /* Taller scrim. */
   background:
-    -webkit-image-set(url('default_200_percent/vr_gradient_bg.png') 1x)
-    repeat-x bottom left auto 198px;
+    -webkit-image-set(url('default_100_percent/vr_gradient_bg.png') 1x)
+    repeat-x bottom left;
 }
 
 video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-timeline" i]::-internal-track-segment-highlight-before,
@@ -1446,6 +1446,12 @@
   display: none;
 }
 
+video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-panel" i] {
+  background:
+    -webkit-image-set(url('default_200_percent/vr_gradient_bg.png') 1x)
+    repeat-x bottom left auto 198px;
+}
+
 /**
  * Test mode styles to remove animations/transitions to make web tests
  * simpler.
diff --git a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
index aa1fbb4..a742f79 100644
--- a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
+++ b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
@@ -111,7 +111,8 @@
     return &fake_web_url_loader_factory_;
   }
   std::unique_ptr<WebURLLoaderFactory> WrapURLLoaderFactory(
-      mojo::ScopedMessagePipeHandle url_loader_factory_handle) override {
+      CrossVariantMojoRemote<network::mojom::URLLoaderFactoryInterfaceBase>
+          url_loader_factory) override {
     return nullptr;
   }
   void WillSendRequest(WebURLRequest&) override {}
@@ -126,8 +127,8 @@
     return base::Optional<WebSecurityOrigin>();
   }
   WebString GetAcceptLanguages() const override { return WebString(); }
-  mojo::ScopedMessagePipeHandle TakePendingWorkerTimingReceiver(
-      int request_id) override {
+  CrossVariantMojoReceiver<mojom::blink::WorkerTimingContainerInterfaceBase>
+  TakePendingWorkerTimingReceiver(int request_id) override {
     return {};
   }
   void SetIsOfflineMode(bool is_offline_mode) override {}
diff --git a/third_party/blink/renderer/modules/webgl/DEPS b/third_party/blink/renderer/modules/webgl/DEPS
index d0ca58d..0cac6d5 100644
--- a/third_party/blink/renderer/modules/webgl/DEPS
+++ b/third_party/blink/renderer/modules/webgl/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
     "+base/containers/mru_cache.h",
+    "+device/vr/public/mojom/vr_service.mojom-blink.h",
     "+gpu/GLES2/gl2extchromium.h",
     "+gpu/command_buffer/client/gles2_interface.h",
     "+gpu/command_buffer/client/raster_interface.h",
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context.cc
index 7519edf..4fa73e2 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context.cc
@@ -98,6 +98,20 @@
 CanvasRenderingContext* WebGLRenderingContext::Factory::Create(
     CanvasRenderingContextHost* host,
     const CanvasContextCreationAttributesCore& attrs) {
+  // The xr_compatible attribute needs to be handled before creating the context
+  // because the GPU process may potentially be restarted in order to be XR
+  // compatible. This scenario occurs if the GPU process is not using the GPU
+  // that the VR headset is plugged into. If the GPU process is restarted, the
+  // WebGraphicsContext3DProvider must be created using the new one.
+  if (attrs.xr_compatible &&
+      !WebGLRenderingContextBase::MakeXrCompatibleSync(host)) {
+    // If the xr_compatible attribute is requested and we're not able to be xr
+    // compatible, fail and don't create the context.
+    // TODO(http://crbug.com/1086697): Create a WebGL context with xrCompatible
+    // set to false
+    return nullptr;
+  }
+
   bool using_gpu_compositing;
   std::unique_ptr<WebGraphicsContext3DProvider> context_provider(
       CreateWebGraphicsContext3DProvider(
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
index ce99cdb..183a6fc 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -103,6 +103,8 @@
 #include "third_party/blink/renderer/modules/webgl/webgl_vertex_array_object_oes.h"
 #include "third_party/blink/renderer/modules/webgl/webgl_video_texture.h"
 #include "third_party/blink/renderer/modules/webgl/webgl_video_texture_enum.h"
+#include "third_party/blink/renderer/modules/xr/navigator_xr.h"
+#include "third_party/blink/renderer/modules/xr/xr_system.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/bindings/v8_binding_macros.h"
 #include "third_party/blink/renderer/platform/geometry/int_size.h"
@@ -808,28 +810,108 @@
     return ScriptPromise();
   }
 
-  if (xr_compatible_) {
-    // Returns a script promise resolved with undefined.
+  // Return a resolved promise if we're already xr compatible. Once we're
+  // compatible, we should always be compatible unless a context lost occurs.
+  // DispatchContextLostEvent() resets this flag to false.
+  if (xr_compatible_)
     return ScriptPromise::CastUndefined(script_state);
-  }
 
-  if (ContextCreatedOnXRCompatibleAdapter()) {
+  if (!base::FeatureList::IsEnabled(features::kWebXrMultiGpu)) {
     xr_compatible_ = true;
     return ScriptPromise::CastUndefined(script_state);
   }
 
-  // TODO(http://crbug.com/876140) Trigger context loss and recreate on
-  // compatible GPU.
-  exception_state.ThrowDOMException(
-      DOMExceptionCode::kNotSupportedError,
-      "Context is not compatible. Switching not yet implemented.");
-  return ScriptPromise();
+  // If there's a request currently in progress, return the same promise.
+  if (make_xr_compatible_resolver_)
+    return make_xr_compatible_resolver_->Promise();
+
+  make_xr_compatible_resolver_ =
+      MakeGarbageCollected<ScriptPromiseResolver>(script_state);
+  ScriptPromise promise = make_xr_compatible_resolver_->Promise();
+
+  MakeXrCompatibleAsync();
+
+  return promise;
 }
 
-bool WebGLRenderingContextBase::IsXRCompatible() {
+bool WebGLRenderingContextBase::IsXRCompatible() const {
   return xr_compatible_;
 }
 
+bool WebGLRenderingContextBase::IsXrCompatibleFromResult(
+    device::mojom::blink::XrCompatibleResult result) {
+  return result ==
+             device::mojom::blink::XrCompatibleResult::kAlreadyCompatible ||
+         result ==
+             device::mojom::blink::XrCompatibleResult::kCompatibleAfterRestart;
+}
+
+bool WebGLRenderingContextBase::DidGpuRestart(
+    device::mojom::blink::XrCompatibleResult result) {
+  return result == device::mojom::blink::XrCompatibleResult::
+                       kCompatibleAfterRestart ||
+         result == device::mojom::blink::XrCompatibleResult::
+                       kNotCompatibleAfterRestart;
+}
+
+bool WebGLRenderingContextBase::MakeXrCompatibleSync(
+    CanvasRenderingContextHost* host) {
+  if (!base::FeatureList::IsEnabled(features::kWebXrMultiGpu))
+    return true;
+
+  device::mojom::blink::XrCompatibleResult xr_compatible_result =
+      device::mojom::blink::XrCompatibleResult::kNotCompatible;
+  HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(host);
+  NavigatorXR* navigator_xr = NavigatorXR::From(canvas->GetDocument());
+  if (navigator_xr)
+    navigator_xr->xr()->MakeXrCompatibleSync(&xr_compatible_result);
+
+  return IsXrCompatibleFromResult(xr_compatible_result);
+}
+
+void WebGLRenderingContextBase::MakeXrCompatibleAsync() {
+  if (!canvas()) {
+    xr_compatible_ = false;
+    CompleteXrCompatiblePromiseIfPending();
+    return;
+  }
+
+  NavigatorXR* navigator_xr = NavigatorXR::From(canvas()->GetDocument());
+  if (!navigator_xr) {
+    xr_compatible_ = false;
+    CompleteXrCompatiblePromiseIfPending();
+    return;
+  }
+
+  // The promise will be completed on the callback.
+  navigator_xr->xr()->MakeXrCompatibleAsync(
+      WTF::Bind(&WebGLRenderingContextBase::OnMakeXrCompatibleFinished,
+                WrapWeakPersistent(this)));
+}
+
+void WebGLRenderingContextBase::OnMakeXrCompatibleFinished(
+    device::mojom::blink::XrCompatibleResult xr_compatible_result) {
+  xr_compatible_ = IsXrCompatibleFromResult(xr_compatible_result);
+
+  // If the gpu is restarted, MaybeRestoreContext will resolve the promise on
+  // the subsequent restore.
+  if (!DidGpuRestart(xr_compatible_result))
+    CompleteXrCompatiblePromiseIfPending();
+}
+
+void WebGLRenderingContextBase::CompleteXrCompatiblePromiseIfPending() {
+  if (make_xr_compatible_resolver_) {
+    if (xr_compatible_) {
+      make_xr_compatible_resolver_->Resolve();
+    } else {
+      make_xr_compatible_resolver_->Reject(
+          MakeGarbageCollected<DOMException>(DOMExceptionCode::kAbortError));
+    }
+
+    make_xr_compatible_resolver_ = nullptr;
+  }
+}
+
 void WebGLRenderingContextBase::
     UpdateNumberOfUserAllocatedMultisampledRenderbuffers(int delta) {
   DCHECK(delta >= -1 && delta <= 1);
@@ -1036,8 +1118,6 @@
       number_of_user_allocated_multisampled_renderbuffers_(0) {
   DCHECK(context_provider);
 
-  // TODO(http://crbug.com/876140) Make sure this is being created on a
-  // compatible adapter.
   xr_compatible_ = requested_attributes.xr_compatible;
 
   context_group_->AddContext(this);
@@ -1137,9 +1217,6 @@
   DCHECK(!isContextLost());
   DCHECK(GetDrawingBuffer());
 
-  // TODO(http://crbug.com/876140) Does compatible_xr_device needs to be taken
-  // into account here?
-
   marked_canvas_dirty_ = false;
   must_paint_to_canvas_ = false;
   active_texture_unit_ = 0;
@@ -1637,12 +1714,6 @@
   return true;
 }
 
-bool WebGLRenderingContextBase::ContextCreatedOnXRCompatibleAdapter() {
-  // TODO(http://crbug.com/876140) Determine if device is compatible with
-  // current context.
-  return true;
-}
-
 bool WebGLRenderingContextBase::CopyRenderingResultsFromDrawingBuffer(
     CanvasResourceProvider* resource_provider,
     SourceDrawingBuffer source_buffer) {
@@ -7987,6 +8058,10 @@
 }
 
 void WebGLRenderingContextBase::DispatchContextLostEvent(TimerBase*) {
+  // WebXR spec: When the WebGL context is lost, set the xr compatible boolean
+  // to false prior to firing the webglcontextlost event.
+  xr_compatible_ = false;
+
   WebGLContextEvent* event =
       WebGLContextEvent::Create(event_type_names::kWebglcontextlost, "");
   Host()->HostDispatchEvent(event);
@@ -7995,6 +8070,14 @@
     if (auto_recovery_method_ == kAuto)
       restore_timer_.StartOneShot(base::TimeDelta(), FROM_HERE);
   }
+
+  if (!restore_allowed_) {
+    // Per WebXR spec, reject the promise with an AbortError if the default
+    // behavior wasn't prevented. CompleteXrCompatiblePromiseIfPending rejects
+    // the promise if xr_compatible_ is false, which was set at the beginning of
+    // this method.
+    CompleteXrCompatiblePromiseIfPending();
+  }
 }
 
 void WebGLRenderingContextBase::MaybeRestoreContext(TimerBase*) {
@@ -8086,6 +8169,8 @@
   WebGLContextEvent* event =
       WebGLContextEvent::Create(event_type_names::kWebglcontextrestored, "");
   Host()->HostDispatchEvent(event);
+
+  CompleteXrCompatiblePromiseIfPending();
 }
 
 String WebGLRenderingContextBase::EnsureNotNull(const String& text) const {
@@ -8309,6 +8394,7 @@
   visitor->Trace(renderbuffer_binding_);
   visitor->Trace(texture_units_);
   visitor->Trace(extensions_);
+  visitor->Trace(make_xr_compatible_resolver_);
   CanvasRenderingContext::Trace(visitor);
 }
 
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
index 9c7a530..1544e97 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
@@ -33,6 +33,7 @@
 #include "base/numerics/checked_math.h"
 #include "base/optional.h"
 #include "base/single_thread_task_runner.h"
+#include "device/vr/public/mojom/vr_service.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
@@ -613,7 +614,7 @@
   void commit();
 
   ScriptPromise makeXRCompatible(ScriptState*, ExceptionState&);
-  bool IsXRCompatible();
+  bool IsXRCompatible() const;
 
   void UpdateNumberOfUserAllocatedMultisampledRenderbuffers(int delta);
 
@@ -794,7 +795,16 @@
   Member<WebGLFramebuffer> framebuffer_binding_;
   Member<WebGLRenderbuffer> renderbuffer_binding_;
 
+  static bool MakeXrCompatibleSync(CanvasRenderingContextHost* host);
+  static bool IsXrCompatibleFromResult(
+      device::mojom::blink::XrCompatibleResult result);
+  static bool DidGpuRestart(device::mojom::blink::XrCompatibleResult result);
+  void MakeXrCompatibleAsync();
+  void OnMakeXrCompatibleFinished(
+      device::mojom::blink::XrCompatibleResult xr_compatible_result);
+  void CompleteXrCompatiblePromiseIfPending();
   bool xr_compatible_;
+  Member<ScriptPromiseResolver> make_xr_compatible_resolver_;
 
   HeapVector<TextureUnitState> texture_units_;
   wtf_size_t active_texture_unit_;
@@ -1772,10 +1782,6 @@
 
   bool IsPaintable() const final { return GetDrawingBuffer(); }
 
-  // Returns true if the context is compatible with the XR device as defined
-  // by https://immersive-web.github.io/webxr/spec/latest/#contextcompatibility
-  bool ContextCreatedOnXRCompatibleAdapter();
-
   bool CopyRenderingResultsFromDrawingBuffer(CanvasResourceProvider*,
                                              SourceDrawingBuffer);
   void HoldReferenceToDrawingBuffer(DrawingBuffer*);
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc
index 22e67d8c..0074a3f 100644
--- a/third_party/blink/renderer/modules/xr/xr_session.cc
+++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -27,7 +27,6 @@
 #include "third_party/blink/renderer/core/resize_observer/resize_observer.h"
 #include "third_party/blink/renderer/core/resize_observer/resize_observer_entry.h"
 #include "third_party/blink/renderer/modules/event_target_modules.h"
-#include "third_party/blink/renderer/modules/screen_orientation/screen_orientation.h"
 #include "third_party/blink/renderer/modules/xr/type_converters.h"
 #include "third_party/blink/renderer/modules/xr/xr_anchor_set.h"
 #include "third_party/blink/renderer/modules/xr/xr_bounded_reference_space.h"
@@ -306,6 +305,7 @@
     case XRSessionFeature::HIT_TEST:
     case XRSessionFeature::LIGHT_ESTIMATION:
     case XRSessionFeature::ANCHORS:
+    case XRSessionFeature::CAMERA_ACCESS:
       // Not recording metrics for these features currently.
       break;
   }
@@ -1710,16 +1710,6 @@
   update_views_next_frame_ = true;
   output_width_ = element->OffsetWidth() * devicePixelRatio;
   output_height_ = element->OffsetHeight() * devicePixelRatio;
-  int output_angle = 0;
-
-  // TODO(crbug.com/836948): handle square canvases.
-  // TODO(crbug.com/840346): we should not need to use ScreenOrientation here.
-  ScreenOrientation* orientation = ScreenOrientation::Create(window);
-
-  if (orientation) {
-    output_angle = orientation->angle();
-    DVLOG(2) << __func__ << ": got angle=" << output_angle;
-  }
 
   if (render_state_->baseLayer()) {
     render_state_->baseLayer()->OnResize();
diff --git a/third_party/blink/renderer/modules/xr/xr_system.cc b/third_party/blink/renderer/modules/xr/xr_system.cc
index dbd54c9..423852f 100644
--- a/third_party/blink/renderer/modules/xr/xr_system.cc
+++ b/third_party/blink/renderer/modules/xr/xr_system.cc
@@ -131,6 +131,9 @@
   } else if (RuntimeEnabledFeatures::WebXRLightEstimationEnabled(doc) &&
              feature_string == "light-estimation") {
     return device::mojom::XRSessionFeature::LIGHT_ESTIMATION;
+  } else if (RuntimeEnabledFeatures::WebXRCameraAccessEnabled(doc) &&
+             feature_string == "camera-access") {
+    return device::mojom::XRSessionFeature::CAMERA_ACCESS;
   }
 
   return base::nullopt;
@@ -164,6 +167,7 @@
       }
       return true;
     case device::mojom::XRSessionFeature::LIGHT_ESTIMATION:
+    case device::mojom::XRSessionFeature::CAMERA_ACCESS:
       return mode == device::mojom::blink::XRSessionMode::kImmersiveAr;
   }
 }
@@ -184,6 +188,7 @@
     case device::mojom::XRSessionFeature::HIT_TEST:
     case device::mojom::XRSessionFeature::LIGHT_ESTIMATION:
     case device::mojom::XRSessionFeature::ANCHORS:
+    case device::mojom::XRSessionFeature::CAMERA_ACCESS:
       return context->IsFeatureEnabled(
           mojom::blink::FeaturePolicyFeature::kWebXr,
           ReportOptions::kReportOnFailure);
@@ -1188,6 +1193,29 @@
   return promise;
 }
 
+void XRSystem::MakeXrCompatibleAsync(
+    device::mojom::blink::VRService::MakeXrCompatibleCallback callback) {
+  TryEnsureService();
+  if (service_.is_bound()) {
+    service_->MakeXrCompatible(std::move(callback));
+  } else {
+    // If the service cannot be created, any sessions that can be supported will
+    // be managed entirely in Blink and thus cannot have an incompatible context
+    std::move(callback).Run(
+        device::mojom::XrCompatibleResult::kAlreadyCompatible);
+  }
+}
+
+void XRSystem::MakeXrCompatibleSync(
+    device::mojom::XrCompatibleResult* xr_compatible_result) {
+  // See the comment in MakeXrCompatibleAsync().
+  *xr_compatible_result = device::mojom::XrCompatibleResult::kAlreadyCompatible;
+
+  TryEnsureService();
+  if (service_.is_bound())
+    service_->MakeXrCompatible(xr_compatible_result);
+}
+
 // This will be called when the XR hardware or capabilities have potentially
 // changed. For example, if a new physical device was connected to the system,
 // it might be able to support immersive sessions, where it couldn't before.
diff --git a/third_party/blink/renderer/modules/xr/xr_system.h b/third_party/blink/renderer/modules/xr/xr_system.h
index c4ef1dd..74d97a2d 100644
--- a/third_party/blink/renderer/modules/xr/xr_system.h
+++ b/third_party/blink/renderer/modules/xr/xr_system.h
@@ -119,6 +119,11 @@
 
   bool IsContextDestroyed() const { return is_context_destroyed_; }
 
+  void MakeXrCompatibleAsync(
+      device::mojom::blink::VRService::MakeXrCompatibleCallback callback);
+  void MakeXrCompatibleSync(
+      device::mojom::XrCompatibleResult* xr_compatible_result);
+
  private:
   enum SensorRequirement {
     kNone,
diff --git a/third_party/blink/renderer/modules/xr/xr_viewer_pose.cc b/third_party/blink/renderer/modules/xr/xr_viewer_pose.cc
index ed6e4bfe..732e4ec4 100644
--- a/third_party/blink/renderer/modules/xr/xr_viewer_pose.cc
+++ b/third_party/blink/renderer/modules/xr/xr_viewer_pose.cc
@@ -26,6 +26,7 @@
 
 void XRViewerPose::Trace(Visitor* visitor) const {
   visitor->Trace(views_);
+  visitor->Trace(camera_views_);
   XRPose::Trace(visitor);
 }
 
diff --git a/third_party/blink/renderer/modules/xr/xr_viewer_pose.h b/third_party/blink/renderer/modules/xr/xr_viewer_pose.h
index b6f757d..8aeed38 100644
--- a/third_party/blink/renderer/modules/xr/xr_viewer_pose.h
+++ b/third_party/blink/renderer/modules/xr/xr_viewer_pose.h
@@ -22,11 +22,15 @@
   ~XRViewerPose() override = default;
 
   const HeapVector<Member<XRView>>& views() const { return views_; }
+  const HeapVector<Member<XRView>>& cameraViews() const {
+    return camera_views_;
+  }
 
   void Trace(Visitor*) const override;
 
  private:
   HeapVector<Member<XRView>> views_;
+  HeapVector<Member<XRView>> camera_views_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/xr/xr_viewer_pose.idl b/third_party/blink/renderer/modules/xr/xr_viewer_pose.idl
index dae4e998..35a2e53 100644
--- a/third_party/blink/renderer/modules/xr/xr_viewer_pose.idl
+++ b/third_party/blink/renderer/modules/xr/xr_viewer_pose.idl
@@ -9,4 +9,5 @@
     RuntimeEnabled=WebXR
 ] interface XRViewerPose : XRPose {
   [SameObject, SaveSameObject] readonly attribute FrozenArray<XRView> views;
+  [RuntimeEnabled=WebXRCameraAccess, SameObject, SaveSameObject] readonly attribute FrozenArray<XRView> cameraViews;
 };
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc b/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc
index 450a967..6b17bb2 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc
@@ -77,6 +77,10 @@
   return texture;
 }
 
+WebGLTexture* XRWebGLBinding::getCameraImage(XRFrame* frame, XRView* view) {
+  return nullptr;
+}
+
 void XRWebGLBinding::Trace(Visitor* visitor) const {
   visitor->Trace(session_);
   visitor->Trace(webgl_context_);
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_binding.h b/third_party/blink/renderer/modules/xr/xr_webgl_binding.h
index 8f0cc3ed..5a60724 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_binding.h
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_binding.h
@@ -17,6 +17,8 @@
 class WebGLTexture;
 class XRLightProbe;
 class XRSession;
+class XRFrame;
+class XRView;
 
 class XRWebGLBinding final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
@@ -33,6 +35,7 @@
   XRSession* session() const { return session_; }
 
   WebGLTexture* getReflectionCubeMap(XRLightProbe*, ExceptionState&);
+  WebGLTexture* getCameraImage(XRFrame*, XRView*);
 
   void Trace(Visitor*) const override;
 
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl b/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl
index 66b790d..63c4d51 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl
@@ -13,4 +13,6 @@
   // Lighting Estimation API
   [RaisesException]
   WebGLTexture? getReflectionCubeMap(XRLightProbe lightProbe);
+
+  [RuntimeEnabled=WebXRCameraAccess] WebGLTexture? getCameraImage(XRFrame frame, XRView view);
 };
\ No newline at end of file
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
index e341f481..a5e6f6a 100644
--- a/third_party/blink/renderer/platform/BUILD.gn
+++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -1396,6 +1396,7 @@
     "text/web_entities.cc",
     "text/web_entities.h",
     "text/win/hyphenation_win.cc",
+    "text/writing_direction_mode.h",
     "text/writing_mode.h",
     "text/writing_mode_utils.h",
     "timer.cc",
diff --git a/third_party/blink/renderer/platform/fonts/font.h b/third_party/blink/renderer/platform/fonts/font.h
index 0c41798f..b6dbb6f3 100644
--- a/third_party/blink/renderer/platform/fonts/font.h
+++ b/third_party/blink/renderer/platform/fonts/font.h
@@ -237,10 +237,14 @@
   bool IsFallbackValid() const;
 
   bool ShouldSkipDrawing() const {
-    return font_fallback_list_ && font_fallback_list_->ShouldSkipDrawing();
+    if (!font_fallback_list_)
+      return false;
+    return EnsureFontFallbackList()->ShouldSkipDrawing();
   }
 
  private:
+  // TODO(xiaochengh): The function not only initializes null FontFallbackList,
+  // but also syncs invalid FontFallbackList. Rename it for better readability.
   FontFallbackList* EnsureFontFallbackList() const;
   void RevalidateFontFallbackList() const;
   void ReleaseFontFallbackListRef() const;
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.cc b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
index 882aa8c..f254483 100644
--- a/third_party/blink/renderer/platform/graphics/bitmap_image.cc
+++ b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
@@ -458,8 +458,6 @@
     return DarkModeClassification::kDoNotApplyFilter;
   }
 
-  classifier->SetImageType(DarkModeImageClassifier::ImageType::kBitmap);
-
   return DarkModeClassification::kNotClassified;
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
index 0eed3b9..e25b688 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -1648,10 +1648,23 @@
     if (!layer.property_tree_state.Transform().BackfaceVisibilitySameAsParent())
       reasons |= CompositingReason::kBackfaceVisibilityHidden;
   }
+
   if (!previous_layer || &layer.property_tree_state.Effect() !=
                              &previous_layer->property_tree_state.Effect()) {
-    reasons |= layer.property_tree_state.Effect()
-                   .DirectCompositingReasonsForDebugging();
+    const auto& effect = layer.property_tree_state.Effect();
+    if (effect.HasDirectCompositingReasons())
+      reasons |= effect.DirectCompositingReasonsForDebugging();
+    if (reasons == CompositingReason::kNone &&
+        layer.compositing_type == PendingLayer::kOther) {
+      if (effect.Opacity() != 1.0f)
+        reasons |= CompositingReason::kOpacityWithCompositedDescendants;
+      if (!effect.Filter().IsEmpty())
+        reasons |= CompositingReason::kFilterWithCompositedDescendants;
+      if (effect.BlendMode() == SkBlendMode::kDstIn)
+        reasons |= CompositingReason::kMaskWithCompositedDescendants;
+      else if (effect.BlendMode() != SkBlendMode::kSrcOver)
+        reasons |= CompositingReason::kBlendingWithCompositedDescendants;
+    }
   }
 
   if (reasons == CompositingReason::kNone &&
diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.cc b/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.cc
index 918685b..8bc35d5 100644
--- a/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.cc
+++ b/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.cc
@@ -216,7 +216,6 @@
       ComputeColorBucketsRatio(sampled_pixels, color_mode);
   features.transparency_ratio = transparency_ratio;
   features.background_ratio = background_ratio;
-  features.is_svg = image_type_ == ImageType::kSvg;
 
   return features;
 }
@@ -268,8 +267,8 @@
     // within float array. Do not change the order here without also changing
     // the neural network code!
     float feature_list[]{features.is_colorful, features.color_buckets_ratio,
-                         features.transparency_ratio, features.background_ratio,
-                         features.is_svg};
+                         features.transparency_ratio,
+                         features.background_ratio};
 
     darkmode_tfnative_model::Inference(feature_list, &nn_out, &nn_temp);
     result = nn_out > 0 ? DarkModeClassification::kApplyFilter
diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.h b/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.h
index 5d03164..7c47da94 100644
--- a/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.h
+++ b/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.h
@@ -29,9 +29,6 @@
     // True if the image is in color, false if it is grayscale.
     bool is_colorful;
 
-    // Whether the image was originally an SVG.
-    bool is_svg;
-
     // Ratio of the number of bucketed colors used in the image to all
     // possibilities. Color buckets are represented with 4 bits per color
     // channel.
@@ -39,8 +36,8 @@
 
     // How much of the image is transparent or considered part of the
     // background.
-    float background_ratio;
     float transparency_ratio;
+    float background_ratio;
   };
 
   DarkModeImageClassifier();
diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier_test.cc b/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier_test.cc
index c25a149..1908bc7 100644
--- a/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier_test.cc
+++ b/third_party/blink/renderer/platform/graphics/dark_mode_image_classifier_test.cc
@@ -98,7 +98,6 @@
   EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kApplyFilter);
   EXPECT_FALSE(features.is_colorful);
-  EXPECT_FALSE(features.is_svg);
   EXPECT_NEAR(0.1875f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.background_ratio, kEpsilon);
@@ -119,7 +118,6 @@
   EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kNotClassified);
   EXPECT_FALSE(features.is_colorful);
-  EXPECT_FALSE(features.is_svg);
   EXPECT_NEAR(0.8125f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.446667f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.03f, features.background_ratio, kEpsilon);
@@ -140,7 +138,6 @@
   EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kApplyFilter);
   EXPECT_TRUE(features.is_colorful);
-  EXPECT_FALSE(features.is_svg);
   EXPECT_NEAR(0.0002441f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.542092f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.1500000f, features.background_ratio, kEpsilon);
@@ -161,7 +158,6 @@
   EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kDoNotApplyFilter);
   EXPECT_TRUE(features.is_colorful);
-  EXPECT_FALSE(features.is_svg);
   EXPECT_NEAR(0.032959f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.background_ratio, kEpsilon);
@@ -182,7 +178,6 @@
   EXPECT_EQ(image_classifier()->ClassifyUsingDecisionTree(features),
             DarkModeClassification::kApplyFilter);
   EXPECT_TRUE(features.is_colorful);
-  EXPECT_FALSE(features.is_svg);
   EXPECT_NEAR(0.0151367f, features.color_buckets_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.transparency_ratio, kEpsilon);
   EXPECT_NEAR(0.0f, features.background_ratio, kEpsilon);
diff --git a/third_party/blink/renderer/platform/text/writing_direction_mode.h b/third_party/blink/renderer/platform/text/writing_direction_mode.h
new file mode 100644
index 0000000..0b5511da
--- /dev/null
+++ b/third_party/blink/renderer/platform/text/writing_direction_mode.h
@@ -0,0 +1,65 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_TEXT_WRITING_DIRECTION_MODE_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TEXT_WRITING_DIRECTION_MODE_H_
+
+#include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/blink/renderer/platform/text/text_direction.h"
+#include "third_party/blink/renderer/platform/text/writing_mode.h"
+
+namespace blink {
+
+// This class packs |WritingMode| and |TextDirection|, two enums that are often
+// used and passed around together, into the size of the minimum memory align.
+class PLATFORM_EXPORT WritingDirectionMode {
+  DISALLOW_NEW();
+
+ public:
+  WritingDirectionMode(WritingMode writing_mode, TextDirection direction)
+      : writing_mode_(writing_mode), direction_(direction) {}
+
+  //
+  // Inline direction functions.
+  //
+  TextDirection Direction() const { return direction_; }
+  void SetDirection(TextDirection direction) { direction_ = direction; }
+
+  bool IsLtr() const { return blink::IsLtr(direction_); }
+  bool IsRtl() const { return blink::IsRtl(direction_); }
+
+  //
+  // Block direction functions.
+  //
+  WritingMode GetWritingMode() const { return writing_mode_; }
+  void SetWritingMode(WritingMode writing_mode) {
+    writing_mode_ = writing_mode;
+  }
+
+  bool IsHorizontal() const { return IsHorizontalWritingMode(writing_mode_); }
+
+  // Block progression increases in the opposite direction to normal; modes
+  // vertical-rl.
+  bool IsFlippedBlocks() const {
+    return IsFlippedBlocksWritingMode(writing_mode_);
+  }
+
+  // Bottom of the line occurs earlier in the block; modes vertical-lr.
+  bool IsFlippedLines() const {
+    return IsFlippedLinesWritingMode(writing_mode_);
+  }
+
+  //
+  // Functions for both inline and block directions.
+  //
+  bool IsHorizontalLtr() const { return IsHorizontal() && IsLtr(); }
+
+ private:
+  WritingMode writing_mode_;
+  TextDirection direction_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_TEXT_WRITING_DIRECTION_MODE_H_
diff --git a/third_party/blink/renderer/platform/text/writing_mode.h b/third_party/blink/renderer/platform/text/writing_mode.h
index bbe414b..14e7de83 100644
--- a/third_party/blink/renderer/platform/text/writing_mode.h
+++ b/third_party/blink/renderer/platform/text/writing_mode.h
@@ -31,13 +31,15 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_TEXT_WRITING_MODE_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TEXT_WRITING_MODE_H_
 
+#include <cstdint>
+
 namespace blink {
 
 // These values are named to match the CSS keywords they correspond to: namely
 // horizontal-tb, vertical-rl and vertical-lr.
 // Since these names aren't very self-explanatory, where possible use the
 // inline utility functions below.
-enum class WritingMode : unsigned {
+enum class WritingMode : uint8_t {
   kHorizontalTb = 0,
   kVerticalRl = 1,
   kVerticalLr = 2,
diff --git a/third_party/blink/web_tests/FlagExpectations/composite-after-paint b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
index d5a6a422..3d79284d 100644
--- a/third_party/blink/web_tests/FlagExpectations/composite-after-paint
+++ b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
@@ -51,7 +51,6 @@
 compositing/masks/mask-with-removed-filters.html [ Failure ]
 external/wpt/css/css-transforms/transform3d-backface-visibility-006.html [ Failure ]
 external/wpt/css/filter-effects/effect-reference-feimage-002.html [ Failure ]
-external/wpt/portals/portals-rendering.html [ Failure ]
 fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ]
 
 printing/fixed-positioned-headers-and-footers-absolute-covering-some-pages.html [ Failure ]
@@ -87,6 +86,3 @@
 
 compositing/gestures/gesture-tapHighlight-composited-img.html [ Pass Failure ]
 http/tests/images/image-decode-in-frame.html [ Pass Failure ]
-
-# Failures after crrev.com/c/2212813
-fast/table/cell-percent-padding.html [ Crash ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 563c1dc..46100ea 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -99,6 +99,12 @@
 crbug.com/591099 external/wpt/css/css-shapes/shape-outside/supported-shapes/polygon/shape-outside-polygon-017.html [ Failure ]
 
 ### external/wpt/css/css-sizing/
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-001.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-002.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-003.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-004.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-005.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-006.tentative.html [ Failure ]
 crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/auto-margins-001.tentative.html [ Failure ]
 crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-001.tentative.html [ Failure ]
 crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/block-aspect-ratio-002.tentative.html [ Failure ]
@@ -444,6 +450,29 @@
 crbug.com/591099 virtual/scalefactor200withoutzoom/external/wpt/element-timing/css-generated-text.html [ Failure ]
 crbug.com/591099 virtual/scalefactor200withoutzoom/external/wpt/largest-contentful-paint/larger-text.html [ Failure ]
 
+# Line clamp overflow fixed in NG
+crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-009.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-010.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-011.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-012.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-013.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-014.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-027.html [ Failure ]
+
+# White space, absolute position and paint timing failures from June 5, 2020
+crbug.com/591099 external/wpt/paint-timing/fcp-only/fcp-pseudo-element-visibility.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-position/position-absolute-center-001.tentative.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-position/position-absolute-center-002.tentative.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/break-spaces-051.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/break-spaces-052.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/pre-wrap-051.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/pre-wrap-052.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-031.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-032.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-035.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-051.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-052.html [ Failure ]
+
 ### 7/22/2019 update
 crbug.com/591099 compositing/overflow/scrollbar-layer-placement-negative-z-index-child.html [ Failure ]
 crbug.com/591099 virtual/text-antialias/emoji-vertical-origin-visual.html [ Failure ]
@@ -590,3 +619,6 @@
 
 crbug.com/845235 external/wpt/quirks/percentage-height-quirk-excludes-flex-grid-001.html [ Failure ]
 crbug.com/845235 external/wpt/css/css-flexbox/hittest-overlapping-order.html [ Failure ]
+
+crbug.com/1074752 editing/selection/selection-color.html [ Failure ]
+
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index 1ad104b..1f9d69de 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -1386,7 +1386,7 @@
 virtual/webgl-extra-video-texture-metadata/fast/webgl/video-metadata/texImage-video-last-uploaded-metadata.html [ Pass ]
 
 # Below are manual tests from web-platform-tests without automation.
-external/wpt/html/canvas/element/drawing-paths-to-the-canvas/canvas_focus_drawFocusIfNeeded_AAPI_001-manual.html [ Skip ]
+external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/canvas_focus_drawFocusIfNeeded_AAPI_001-manual.html [ Skip ]
 external/wpt/FileAPI/FileReader/test_notreadableerrors-manual.html [ Skip ]
 external/wpt/FileAPI/FileReader/test_securityerrors-manual.html [ Skip ]
 external/wpt/FileAPI/url/url_createobjecturl_file_img-manual.html [ Skip ]
@@ -1989,10 +1989,6 @@
 
 crbug.com/626703 [ Win7 ] external/wpt/pointerevents/pointerevent_fractional_coordinates-manual.html [ Skip ]
 
-# These tests require a preferred dark color-scheme and are only run as virtual tests
-external/wpt/css/css-color-adjust/rendering/dark-color-scheme/* [ Skip ]
-virtual/dark-color-scheme/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/* [ Pass ]
-
 crbug.com/626703 [ Linux ] external/wpt/payment-request/dynamically-change-shipping-options-manual.https.html [ Skip ]
 crbug.com/626703 [ Mac ] external/wpt/payment-request/dynamically-change-shipping-options-manual.https.html [ Skip ]
 crbug.com/626703 [ Win ] external/wpt/payment-request/dynamically-change-shipping-options-manual.https.html [ Skip ]
@@ -2067,6 +2063,11 @@
 crbug.com/961439 virtual/legacy-samesite/external/wpt/cookies/samesite/window-open-reload.https.html [ Skip ]
 crbug.com/961439 virtual/legacy-samesite/external/wpt/cookies/samesite/window-open.https.html [ Skip ]
 
+# AppCache tests that need to run only in a virtual test suite
+# But have to live under non-virtual http/ to get http/ behavior
+crbug.com/582750 http/tests/appcache/* [ Skip ]
+virtual/appcache-origin-trial/http/tests/appcache/* [ Pass ]
+
 # Remove these from virtual tests when Network Error Logging is turned on by default
 crbug.com/748549 external/wpt/network-error-logging/* [ Skip ]
 virtual/network-error-logging/external/wpt/network-error-logging/* [ Pass ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index d3cebda0..0fadec2 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -239,6 +239,16 @@
 crbug.com/1004547 external/wpt/intersection-observer/cross-origin-iframe.sub.html [ Pass Failure ]
 crbug.com/1007229 external/wpt/intersection-observer/same-origin-grand-child-iframe.sub.html [ Pass Failure ]
 
+# abspos is not implemented yet for aspect-ratio
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-001.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-002.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-003.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-005.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-006.tentative.html [ Failure ]
+
+# It is not clear if this test is correct. https://github.com/w3c/csswg-drafts/issues/5151
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-004.tentative.html [ Failure ]
+
 # Display locking failures
 
 crbug.com/849459 fragmentation/repeating-thead-under-repeating-thead.html [ Failure ]
@@ -264,6 +274,8 @@
 crbug.com/882975 virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html [ Failure Pass ]
 crbug.com/882975 virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html [ Failure Pass ]
 
+crbug.com/898394 virtual/android/url-bar/bottom-and-top-fixed-sticks-to-top.html [ Failure ]
+
 crbug.com/1024151 http/tests/devtools/tracing/timeline-style/timeline-style-recalc-all-invalidator-types.js [ Failure Pass ]
 
 # Subpixel rounding differences that are incorrect.
@@ -295,7 +307,7 @@
 # Fail due to lack of fuzzy matching on Linux, Win and Mac platforms for WPT. The pixels in the pre-rotated reference
 # images do not exactly match the exif rotated images, probably due to jpeg decoding/encoding issues. Maybe
 # adjusting the image size to a multiple of 8 would fix this (so all jpeg blocks are solid color).
-crbug.com/997202 external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html [ Failure ]
+crbug.com/997202 external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html [ Failure ]
 crbug.com/997202 external/wpt/css/css-images/image-orientation/image-orientation-default.html [ Failure ]
 crbug.com/997202 external/wpt/css/css-images/image-orientation/image-orientation-from-image-composited-dynamic1.html [ Failure ]
 crbug.com/997202 external/wpt/css/css-images/image-orientation/image-orientation-from-image-composited.html [ Failure ]
@@ -1338,8 +1350,10 @@
 crbug.com/995106 external/wpt/css/css-pseudo/first-letter-exclude-inline-marker.html [ Failure ]
 crbug.com/995106 external/wpt/css/css-pseudo/first-letter-exclude-inline-child-marker.html [ Failure ]
 
-crbug.com/1058822 virtual/dark-color-scheme/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-alpha.html [ Failure ]
-crbug.com/1058822 virtual/dark-color-scheme/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-opaque.html [ Failure ]
+crbug.com/1058822 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-alpha.html [ Failure ]
+crbug.com/1058822 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-opaque.html [ Failure ]
+crbug.com/929098 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html [ Failure ]
+crbug.com/929098 virtual/dark-color-scheme/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html [ Pass ]
 
 # ====== Style team owned tests to here ======
 
@@ -1357,7 +1371,6 @@
 crbug.com/891427 virtual/threaded-no-composited-antialiasing/animations/responsive/viewport-unit-transform-responsive.html [ Timeout ]
 crbug.com/891427 virtual/threaded-no-composited-antialiasing/animations/responsive/viewport-unit-translate-responsive.html [ Timeout ]
 crbug.com/891427 virtual/android/fullscreen/rendering/backdrop-video.html [ Failure ]
-crbug.com/891427 virtual/android/url-bar/bottom-and-top-fixed-sticks-to-top.html [ Failure ]
 ## Next 4 here: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/linux_chromium_rel_ng/216317
 crbug.com/891427 virtual/threaded-no-composited-antialiasing/animations/timing/animation-duration-infinite.html [ Failure ]
 
@@ -1368,29 +1381,12 @@
 # Next 3 here: https://ci.chromium.org/buildbot/tryserver.blink/linux-blink-rel/1215
 crbug.com/891427 animations/responsive/viewport-unit-transform-responsive.html [ Pass Failure Timeout Crash ]
 crbug.com/891427 animations/responsive/viewport-unit-translate-responsive.html [ Pass Failure Timeout Crash ]
-crbug.com/891427 virtual/android/rootscroller/rootscroller-during-fullscreen.html [ Pass Failure Timeout Crash ]
 # Next 1 here: https://ci.chromium.org/buildbot/tryserver.blink/win7-blink-rel/1180
 # Next 2 here: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/linux-blink-rel/1541
-crbug.com/891427 virtual/android/rootscroller/gesture-scroll-document-not-root-scroller.html [ Pass Failure Timeout Crash ]
 # Next 1 here: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/linux-blink-rel/1547
 crbug.com/891427 virtual/threaded/external/wpt/css/css-scroll-snap/snap-at-user-scroll-end-manual.html [ Pass Failure Timeout Crash ]
 # Next 1 here: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/win7-blink-rel/1504
 crbug.com/891427 tables/mozilla_expected_failures/marvin/table_overflow_dirty_reflow_tbody.html [ Pass Failure Timeout Crash ]
-
-# The following fail only on Mac.
-crbug.com/891427 [ Mac ] fast/events/touch/gesture/touch-gesture-scroll-listbox.html [ Pass Failure Timeout Crash ]
-
-# These 6 are special. They are tied to both of these CLs:
-#   - https://chromium-review.googlesource.com/c/chromium/src/+/1213864
-#   - https://chromium-review.googlesource.com/c/chromium/src/+/1308038
-# and they only seem (really) flaky when the second CL is in place. But I believe
-# they are related to timing and to the same issues as above.
-# Here is an example: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/linux_chromium_rel_ng/221340
-crbug.com/891427 http/tests/webfont/font-display-intervention.html [ Pass Failure Timeout Crash ]
-crbug.com/891427 paint/invalidation/scroll/fixed-img-src-change-after-scroll.html [ Pass Failure Timeout Crash ]
-crbug.com/891427 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-changing-style-relayout-body-scrollablearea.html [ Pass Failure Timeout Crash ]
-crbug.com/891427 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-changing-style-relayout-div-body-scrollablearea.html [ Pass Failure Timeout Crash ]
-
 # ====== OOPIF-mode failures until here ======
 
 # ====== Form Controls Refresh (chrome://flags/#form-controls-refresh) failures from here ======
@@ -1972,8 +1968,6 @@
 crbug.com/613672 [ Mac ] fast/events/touch/gesture/touch-gesture-scroll-page-past-extent.html [ Skip ]
 crbug.com/613672 [ Mac ] fast/events/touch/gesture/touch-gesture-scroll-page-zoomed.html [ Skip ]
 crbug.com/613672 [ Mac ] fast/events/touch/gesture/touch-gesture-scroll-page.html [ Skip ]
-### See crbug.com/891427 comment near the top of this file:
-####crbug.com/613672 [ Mac ] fast/events/touch/gesture/touch-gesture-scroll-listbox.html [ Skip ]
 
 # Since there is no compositor thread when running tests then there is no main thread event queue. Hence the
 # logic for this test will be skipped when running Layout tests.
@@ -2152,9 +2146,6 @@
 
 crbug.com/548765 http/tests/devtools/console-fetch-logging.js [ Failure Pass ]
 
-### See crbug.com/891427 comment near the top of this file:
-###crbug.com/564109 [ Win ]  http/tests/webfont/font-display-intervention.html [ Pass Failure Timeout ]
-
 crbug.com/399951 http/tests/mime/javascript-mimetype-usecounters.html [ Pass Failure ]
 
 crbug.com/663847 fast/events/context-no-deselect.html [ Failure Pass ]
@@ -3722,6 +3713,802 @@
 # Subgrid is not implemented yet
 crbug.com/618969 external/wpt/css/css-grid/subgrid/* [ Skip ]
 
+# [layout-ng-grid]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-layout-properties.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-tracks-stretched-with-different-flex-factors-sum.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/empty-grid-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-paint-positioned-children-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-children-writing-modes-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-item-dynamic-change-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-background-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-background-rtl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-002-rtl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-padding-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-sizing-positioned-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-sizing-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-baseline-vertical.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-baseline.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-justify-overflow.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-justify-stretch.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-stretching-replaced-items.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-018.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-019.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-020.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-021.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-022.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-023.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-024.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-025.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-026.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-027.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-028.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-029.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-030.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-031.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-032.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-035.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-036.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-container-auto-margins-scrollbars-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-container-baseline-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-and-self-alignment-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-and-self-alignment-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-auto-sized-tracks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-overflow-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-with-span-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-with-span-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-alignment-with-span-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-018.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-019.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-020.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-021.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-022.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-023.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-024.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-025.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-018.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-019.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-020.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-021.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-022.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-023.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-content-distribution-with-collapsed-tracks-024.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-gutters-and-alignment.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-input-range.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-002-b.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/explicit-grid-size-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-content-distribution-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-content-resolution-columns-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-content-resolution-columns-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-content-resolution-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-content-resolution-rows-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-factor-sum-less-than-1-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-item-grid-container-percentage-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/fr-unit-with-percentage.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/fr-unit.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-fill-columns-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-fill-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-fit-columns-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-fit-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-intrinsic-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-min-max-size-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-min-size-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-min-size-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-positioned-container-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-change-auto-repeat-tracks.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-change-intrinsic-size-with-auto-repeat-tracks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-inline-auto-repeat-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-inline-support-repeat-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001.tentative.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-layout-auto-tracks.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-layout-basic.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-layout-repeat-notation.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-limits-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-support-flexible-lengths-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-support-repeat-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-changes-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.tentative.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/anonymous-grid-item-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-items-inline-blocks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-auto-placement-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-auto-placement-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-auto-placement-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-auto-placement-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-auto-placement-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-painting-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-painting-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-painting-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-painting-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-order-property-painting-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-containing-block-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-containing-block-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-containing-block-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-containing-block-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-overflow-auto-max-height-percentage.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-percentage-sizes-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-percentage-sizes-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-percentage-sizes-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-inline-blocks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-sizing-alignment-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-layout-grid-in-grid.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-layout-z-order-a.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-layout-z-order-b.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-010.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-011.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-012.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-013.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-014.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-015.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-016.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-017.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-018.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-019.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-020.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-024.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-025.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-painting-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-painting-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-painting-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-painting-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-painting-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/percentage-size-subitems-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/whitespace-in-grid-item-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/compute-intrinsic-widths-scrollbar-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/display-grid.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/display-inline-grid.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-box-sizing-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-ignores-first-letter-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-scrollbar-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-sizing-constraints-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-first-letter-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-float-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-floats-no-intrude-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-gutters-and-flex-content-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-gutters-and-tracks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-gutters-as-percentage-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-margins-no-collapse-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-min-max-height-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-size-shrink-to-fit-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/implicit-grids/grid-support-grid-auto-columns-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/implicit-grids/grid-support-grid-auto-columns-rows-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/implicit-grids/grid-support-grid-auto-columns-rows-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/flex-and-intrinsic-sizes-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/flex-sizing-columns-min-max-width-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/flex-sizing-rows-min-max-height-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-as-flex-item-should-not-shrink-to-fit-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-as-flex-item-should-not-shrink-to-fit-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-as-flex-item-should-not-shrink-to-fit-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-automatic-minimum-for-auto-columns-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-container-percentage-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-container-percentage-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-fit-content-percentage.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-item-margin-auto-columns-rows-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-item-margin-auto-columns-rows-vertical-lr-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-item-margin-auto-columns-rows-vertical-rl-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-layout-free-space-unit.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-minimum-contribution-baseline-shim-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-minimum-contribution-baseline-shim-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-minimum-contribution-baseline-shim.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/grid-stretch-respects-min-size-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-columns-computed.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-rows-computed-withcontent.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-rows-computed.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-auto-flow-sparse-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-container-change-grid-tracks-recompute-child-positions-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-container-change-named-grid-recompute-child-positions-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-layout-grid-span.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-layout-lines-shorthands.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-layout-lines.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-layout-placement-shorthands.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-001.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-002.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-003.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-004.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-005.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-006.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-007.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-008.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-009.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/auto-content-resolution-columns.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/auto-content-resolution-rows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/breadth-size-resolution-grid.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/calc-resolution-grid-item.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/flex-and-content-sized-resolution-columns.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/flex-content-sized-columns-resize.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-auto-flow-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-repeat-huge-grid.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-columns-rows-get-set-multiple.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-columns-rows-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-content-sized-columns-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-auto-repeat-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-border-grid-item.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-border-padding-grid-item.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-empty-row-column.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-min-max-width.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-padding-grid-item.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-padding-margin.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-repeat-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-grow-tracks-to-their-max.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-initialize-span-one-items.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-addition-auto-placement-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-addition-track-breadth-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-margins-and-stretch.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-margins-must-respect-specified-margins.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-placement-automatic-span.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-placement-definite-span.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-placement-fixed-row-column.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-sized-align-justify-margin-border-padding.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-bad-named-area-auto-placement.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-bad-resolution-double-span.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-border-overflow-paint.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-change-alignment-from-stretch.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-change-order-auto-flow.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-display.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-grid-container-percentage-rows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-margin-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-multiple-minmax-content-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-named-grid-area-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-named-grid-line-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-indexes.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-integer-explicit-grid-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-position-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-order-auto-flow-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-order-paint-order.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-overflow-paint.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-overflow.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-position-changed-dynamic.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-positioning-with-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-removal-auto-placement-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-removal-track-breadth-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-scroll-position.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-sizing-with-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-spanning-and-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-spanning-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-stretch-with-margins-borders-padding-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-stretch-with-margins-borders-padding-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-stretch-with-margins-borders-padding.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-text-background-not-interleaved.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-unknown-named-grid-line-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-with-border-in-fr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-with-percent-height-in-auto-height-grid-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-with-percent-height-replaced-element.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-with-percent-min-max-height-dynamic.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-items-should-not-be-stretched-when-height-or-width-or-margin-change.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-distribution-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-distribution-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-distribution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-vertical-lr.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-vertical-rl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-only-abspos-item-computed-style-crash.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-painting-item-overflow.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-painting-respect-dom-order.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-painting-rtl.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-percent-track-margin-border-padding.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-percent-track-scrollbar.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-preferred-logical-widths.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-self-baseline-two-dimensional.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-template-columns-rows-computed-style-gaps-content-alignment.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-template-shorthand-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-track-sizing-with-margins-and-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-track-sizing-with-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-track-sizing-with-percentages-and-orthogonal-flows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-update-sizes-after-distributing-all.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/implicit-columns-auto-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/implicit-position-dynamic-change.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/implicit-rows-auto-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/implicit-tracks-before-explicit.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/justify-self-cell.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/mark-as-infinitely-growable.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/maximize-tracks-definite-indefinite-height.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/maximize-tracks-definite-indefinite-width.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-content-row-must-shrink-when-column-grows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-height-border-box.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-width-height-auto-and-margins.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-width-height-auto-overflow.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-width-height-auto.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-width-margin-box.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-fixed-logical-height-only.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-fixed-logical-width-only.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-max-content-resolution-columns.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-max-content-resolution-rows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-min-content-column-resolution-columns.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-min-content-column-resolution-rows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-spanning-resolution-columns.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-spanning-resolution-rows.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-areas-dynamic-with-media-query.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-line-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-lines-with-named-grid-areas-dynamic-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-lines-with-named-grid-areas-resolution.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/negative-growth-share-as-infinity-crash.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/non-grid-columns-rows-get-set.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/painting-item-marginbox-overflowing-grid-area.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-grid-item-in-percent-grid-track.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-intrinsic-track-breadth.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-of-indefinite-track-size-in-auto.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-of-indefinite-track-size.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-padding-margin-resolution-grid-item.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-resolution-grid-item-children.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-resolution-grid-item.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/percent-track-breadths-regarding-container-size.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/place-cell-by-index.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/positioned-grid-container-item-percentage-size.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/positioned-grid-container-percentage-tracks.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/preferred-width-computed-after-layout.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/quirks-mode-percent-resolution-grid-item.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/relayout-align-items-changed.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/relayout-align-self-changed.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/relayout-indefinite-heights.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/relayout-justify-items-changed.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/relayout-justify-self-changed.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/repeating-layout-must-produce-the-same-results.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/scrolled-grid-painting-overflow.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/scrolled-grid-painting.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-1.html [ Failure ]
+crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-2.html [ Failure ]
+
 # [css-logical]
 crbug.com/865579 external/wpt/css/css-logical/animation-001.html [ Failure Pass ]
 crbug.com/865579 external/wpt/css/css-logical/animation-002.html [ Failure Pass ]
@@ -4701,10 +5488,6 @@
 #Sheriff 2018-10-23
 crbug.com/898378 [ Mac10.13 ] fast/scroll-behavior/smooth-scroll/keyboard-scroll.html [ Timeout ]
 
-# Sheriff 2018-10-24
-### See crbug.com/891427 comment near the top of this file:
-####crbug.com/898394 [ Linux ] virtual/android/url-bar/bottom-and-top-fixed-sticks-to-top.html [ Failure ]
-
 # Sheriff 2018-10-26
 ### See crbug.com/891427 comment near the top of this file:
 ####crbug.com/899087 [ Linux ] virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Failure Pass ]
@@ -5424,7 +6207,7 @@
 
 # Sheriff 2019-12-17
 crbug.com/1034789 [ Mac ] http/tests/security/frameNavigation/xss-ALLOWED-parent-navigation-change-async.html [ Pass Timeout ]
-crbug.com/1034789 virtual/threaded/fast/scroll-snap/snap-to-target-on-layout-change.html [ Pass Timeout ]
+crbug.com/1034789 virtual/threaded/fast/scroll-snap/snap-to-target-on-layout-change.html [ Pass Failure Timeout ]
 
 # Sheriff 2019-12-23
 crbug.com/1036626 http/tests/devtools/tracing/tracing-record-input-events.js [ Pass Failure ]
@@ -5618,6 +6401,7 @@
 crbug.com/1046784 http/tests/devtools/application-panel/resources-panel-iframe-idb.js [ Pass Timeout ]
 crbug.com/1046784 http/tests/devtools/a11y-axe-core/sources/scope-pane-a11y-test.js [ Pass Timeout ]
 crbug.com/1046784 http/tests/inspector-protocol/service-worker/target-reloaded-after-crash.js [ Pass Timeout ]
+crbug.com/1046784 http/tests/inspector-protocol/network/navigate-iframe-out2in.js [ Pass Timeout ]
 
 # Sheriff 2020-01-28
 crbug.com/1046201 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Pass Failure ]
@@ -5634,6 +6418,23 @@
 crbug.com/1047293 [ Mac ] editing/pasteboard/pasteboard_with_unfocused_selection.html [ Pass Failure ]
 crbug.com/1047420 [ Mac ] http/tests/devtools/persistence/persistence-move-breakpoints-on-reload.js [ Pass Failure ]
 
+crbug.com/1008483 external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative.html [ Failure ]
+crbug.com/1008483 external/wpt/css/css-transforms/backface-visibility-hidden-004.tentative.html [ Failure ]
+crbug.com/1008483 external/wpt/css/css-transforms/backface-visibility-hidden-005.tentative.html [ Failure ]
+crbug.com/1008483 external/wpt/css/css-transforms/backface-visibility-hidden-animated-002.html [ Failure ]
+crbug.com/1008483 external/wpt/css/css-transforms/preserve-3d-flat-grouping-properties.tentative.html [ Failure ]
+
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative.html [ Pass ]
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/backface-visibility-hidden-004.tentative.html [ Pass ]
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/backface-visibility-hidden-005.tentative.html [ Pass ]
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/backface-visibility-hidden-animated-002.html [ Pass ]
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/preserve-3d-flat-grouping-properties.tentative.html [ Pass ]
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/subpixel-perspective-backface-hidden.html [ Failure ]
+
+# Fails due to anonymous layout objects causing flattening
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/transform-table-010.html [ Failure ]
+crbug.com/1008483 virtual/transform-interop/external/wpt/css/css-transforms/transform-table-011.html [ Failure ]
+
 # Swiftshader issue.
 crbug.com/1048149 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html [ Crash Timeout ]
 crbug.com/1048149 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html [ Crash Timeout ]
@@ -5937,3 +6738,11 @@
 # Sheriff 2020-06-04
 crbug.com/1041973 virtual/web-components-v0-disabled/external/wpt/html/semantics/forms/constraints/form-validation-reportValidity.html [ Pass Failure Timeout ]
 crbug.com/1057060 fast/scrolling/scrollbars/mouse-autoscrolling-on-scrollbar.html [ Pass Failure Timeout ]
+
+# Sheriff 2020-06-05
+crbug.com/1091829 [ Mac ] fast/scrolling/scroll-non-composited-scroller.html [ Pass Failure ]
+crbug.com/1091829 [ Linux ] virtual/threaded-prefer-compositing/fast/scrolling/scroll-non-composited-scroller.html [ Pass Failure ]
+crbug.com/1091885 fast/peerconnection/RTCPeerConnection-iframe-gc.html [ Pass Failure ]
+crbug.com/1091250 [ Win10 ] virtual/cors/http/tests/misc/resource-timing-sizes-multipart.html [ Pass Failure ]
+crbug.com/1091948 [ Linux ] external/wpt/html/canvas/element/manual/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm [ Pass Timeout ]
+crbug.com/1092091 [ Mac ] virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index f238112a..0235773 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -254,6 +254,12 @@
     "args": ["--enable-blink-features=LayoutNGFieldset,LayoutNGBlockFragmentation"]
   },
   {
+    "prefix": "layout-ng-grid",
+    "bases": ["fast/css-grid-layout",
+              "external/wpt/css/css-grid"],
+    "args": ["--enable-blink-features=LayoutNGGrid"]
+  },
+  {
     "prefix": "dark-mode-grayscale-images",
     "bases": [],
     "args": ["--blink-settings=forceDarkModeEnabled=true,forceDarkModeInversionAlgorithm=3,forceDarkModeImagePolicy=0,forceDarkModeImageStyle=1,forceDarkModeTextBrightnessThreshold=256,forceDarkModeBackgroundBrightnessThreshold=0"]
@@ -567,7 +573,7 @@
   },
   {
     "prefix": "appcache-origin-trial",
-    "bases": ["http/tests/appcache/origin-trial"],
+    "bases": ["http/tests/appcache"],
     "args": ["--enable-features=AppCacheRequireOriginTrial"]
   },
   {
@@ -803,5 +809,10 @@
     "prefix": "subresource-web-bundles",
     "bases": [ "external/wpt/web-bundle/subresource-loading" ],
     "args": [ "--enable-blink-features=SubresourceWebBundles" ]
+  },
+  {
+    "prefix": "transform-interop",
+    "bases": [ "external/wpt/css/css-transforms" ],
+    "args": [ "--enable-features=TransformInterop" ]
   }
 ]
diff --git a/third_party/blink/web_tests/animations/retarget-modified-transition.html b/third_party/blink/web_tests/animations/retarget-modified-transition.html
new file mode 100644
index 0000000..55655d29
--- /dev/null
+++ b/third_party/blink/web_tests/animations/retarget-modified-transition.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Reversal of transitions previously modified by GetKeyframes</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+'use strict';
+
+function addDiv(t) {
+  var div = document.createElement('div');
+
+  document.body.appendChild(div);
+  t.add_cleanup(function() {
+    if (div.parentNode) {
+      div.remove();
+    }
+  });
+  return div;
+};
+
+// These are simillar to wpt/css/css-transitions/KeyframeEffect-getKeyframes
+// but these use a getComputedStyle to force style evaluation of the modified
+// animation, simulating the effect of modifying and reversing the transition
+// on separate frames. This is intended as a regression test for our partial
+// implementation of this behavior.
+
+function retarget_test(description, newKeyframes, reversed_start) {
+  test(t => {
+    const div = addDiv(t);
+
+    div.style.left = '0px';
+    getComputedStyle(div).transitionProperty;
+    div.style.transition = 'left 100s linear';
+    div.style.left = '100px';
+
+    const transition = div.getAnimations()[0];
+    transition.currentTime = 50000;
+    transition.effect.setKeyframes(newKeyframes);
+
+    // Sync on style so the setKeyframes and the reversal happen on different frames.
+    getComputedStyle(div).left;
+
+    // Reverse transition
+    div.style.left = '0px';
+    const reversedTransition = div.getAnimations()[0];
+
+    assert_approx_equals(
+      reversedTransition.effect.getComputedTiming().activeDuration,
+      50000, 1,
+      "The reversed transition has correctly reduced duration"
+    );
+    assert_equals(reversedTransition.effect.getKeyframes()[0].left, reversed_start,
+        "The reversed transition starts at the expected point");
+  },  description);
+}
+
+retarget_test("A transition with replaced keyframes (same property) still exhibits " +
+    "normal reversing behavior.",
+    {left: ['200px', '300px', '100px']}, '300px');
+
+retarget_test("A transition with replaced keyframes (different property) still exhibits " +
+    "normal reversing behavior  (reversing from the base value).",
+    {top: ['200px', '300px', '100px']}, '100px');
+
+retarget_test("A transition with replaced keyframes (empty) still exhibits " +
+    "normal reversing behavior (reversing from the base value).",
+    {}, '100px');
+
+</script>
diff --git a/third_party/blink/web_tests/editing/selection/selection-color-expected.png b/third_party/blink/web_tests/editing/selection/selection-color-expected.png
new file mode 100644
index 0000000..cbe404d
--- /dev/null
+++ b/third_party/blink/web_tests/editing/selection/selection-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/editing/selection/selection-color.html b/third_party/blink/web_tests/editing/selection/selection-color.html
new file mode 100644
index 0000000..c14bb6de
--- /dev/null
+++ b/third_party/blink/web_tests/editing/selection/selection-color.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+
+<p>This tests that selected text retains its color.</p>
+
+<div id=selectme>
+	<p>Text no styling</p>
+	<p style="color:red">Text color: red</p>
+	<p style="color:red;background-color:gray;">Text color: red, background: gray</p>
+	<p class="customSelection">color: red, ::selection background:gray</p>
+</div>
+
+<style>
+.customSelection {
+  color: red;
+}
+.customSelection::selection {
+  background-color: gray;
+}
+</style>
+
+<script>
+    window.getSelection().selectAllChildren(selectme);
+</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 94080cc..862212f 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -38240,6 +38240,21 @@
        {}
       ]
      ],
+     "background-position": {
+      "subpixel-position-center.tentative.html": [
+       "b708e123122f7e299919401cf8fb8554f77889bf",
+       [
+        null,
+        [
+         [
+          "/css/css-backgrounds/background-position/reference/subpixel-position-center-ref.tentative.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ]
+     },
      "background-position-negative-percentage-comparison.html": [
       "389ee719196cd3dd1afae63d6d773039d0472111",
       [
@@ -151876,8 +151891,12 @@
      ]
     }
    },
+   "CODE_OF_CONDUCT.md": [
+    "8cae1f52664d0551e21f23173f9e776654a6de90",
+    []
+   ],
    "CONTRIBUTING.md": [
-    "54d963d7adbd9d0ab22ef331d0f5d56240c82e90",
+    "cb80d8de3e420cea3ed84e733a7aa5db3d22b3d4",
     []
    ],
    "FileAPI": {
@@ -161632,6 +161651,14 @@
        []
       ]
      },
+     "background-position": {
+      "reference": {
+       "subpixel-position-center-ref.tentative.html": [
+        "be20fbbe77023205547e1219c5d264821e2be82a",
+        []
+       ]
+      }
+     },
      "background-repeat": {
       "reference": {
        "background-repeat-no-repeat.xht": [
@@ -211896,7 +211923,7 @@
      []
     ],
     "fetch.idl": [
-     "515d02bdb1f093b005c610c2e265ea14d34e2859",
+     "1d8a97ef940187ae4ac60fe93bb05d4b7beabd91",
      []
     ],
     "filter-effects.idl": [
@@ -229094,7 +229121,7 @@
        []
       ],
       "wpttest.py": [
-       "bb1ea568758a50e68d7fd548d7187bd6c5de556f",
+       "1078912a229bec1bbac0b2f781b9e8ef95b4ee1c",
        []
       ]
      },
diff --git a/third_party/blink/web_tests/external/wpt/CODE_OF_CONDUCT.md b/third_party/blink/web_tests/external/wpt/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..8cae1f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/CODE_OF_CONDUCT.md
@@ -0,0 +1,137 @@
+# Code of Conduct
+
+Contact: a moderator ([see below](#moderators)), or a member of the WPT
+community that you feel you can trust.
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, sexual identity and
+orientation, or any other dimension of diversity.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+  and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+  overall community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or
+  advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email
+  address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+  professional setting
+
+## Enforcement Responsibilities
+
+Moderators are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Moderators have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+Moderators are held to a higher standard than other community members. If a
+moderator creates an inappropriate situation, they should expect less leeway
+than others.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include official IRC channels (#testing
+on irc.w3.org); GitHub repositories under the web-platform-tests organization;
+and the public-test-infra@w3.org mailing list.
+
+There may arise situations where both the WPT code of conduct and that of
+another organization (such as the WHATWG or W3C) may apply.
+For example, a WPT-focused meeting at
+[TPAC](https://www.w3.org/2002/09/TPOverview.html) would involve both the WPT
+code of conduct and the [W3C code of ethics and professional
+conduct](https://www.w3.org/Consortium/cepc/).
+In such situations we operate under all code of conducts involved.
+If you are placed in a situation where you feel this is inappropriate (e.g. if
+you believe the code of conducts involved contradict one another), please
+contact a [moderator](#moderators).
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the [moderators](#moderators).
+All complaints will be reviewed and investigated promptly and fairly.
+
+All moderators are obligated to respect the privacy and security of the
+reporter of any incident.
+
+Moderators will recuse themselves if they are directly involved in a report of
+a code of conduct violation.
+
+## Enforcement Guidelines
+
+Moderators will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct.
+These are not a consecutive set of steps; a single incident may be sufficient
+enough to proceed straight to a temporary ban, for example.
+
+### 1. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 3. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior,  harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+## Moderators
+
+This section lists the current moderators and how to reach them.
+
+* Nina Satragno - [nso@google.com](mailto:nso@google.com). Languages: English, Spanish.
+* Boaz Sender - [boaz@bocoup.com](mailto:boaz@bocoup.com). Languages: English, Hebrew.
+* Jory Burson - [jory@bocoup.education](mailto:jory@bocoup.education). Languages: English (fluent), Spanish (conversational).
+
+## Attribution
+
+This Code of Conduct is adapted from the Contributor Covenant,
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
diff --git a/third_party/blink/web_tests/external/wpt/CONTRIBUTING.md b/third_party/blink/web_tests/external/wpt/CONTRIBUTING.md
index 54d963d..cb80d8d 100644
--- a/third_party/blink/web_tests/external/wpt/CONTRIBUTING.md
+++ b/third_party/blink/web_tests/external/wpt/CONTRIBUTING.md
@@ -4,3 +4,8 @@
 -------------
 
 See [web-platform-tests.org](https://web-platform-tests.org/).
+
+Code of Conduct
+---------------
+
+See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-computed.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-computed.html
index a5ad4d5..5e1ee74 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-computed.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-computed.html
@@ -14,6 +14,8 @@
   test_computed_value("color-scheme", "light light");
   test_computed_value("color-scheme", "light only");
   test_computed_value("color-scheme", "none");
+  test_computed_value("color-scheme", "only");
+  test_computed_value("color-scheme", "only only");
   // reserved and css-wide keywords.
   test_computed_value("color-scheme", "initial", "normal");
   test_computed_value("color-scheme", "inherit", "normal");
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-invalid.html
index 6c7075c3..191f19b0 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-invalid.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-invalid.html
@@ -5,13 +5,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="/css/support/parsing-testcommon.js"></script>
 <script>
-  test_invalid_value("color-scheme", "only");
-  test_invalid_value("color-scheme", "only only");
   test_invalid_value("color-scheme", "only normal");
-  test_invalid_value("color-scheme", "only light dark");
-  test_invalid_value("color-scheme", "only light light");
-  test_invalid_value("color-scheme", "only light purple");
-  test_invalid_value("color-scheme", "only none");
   test_invalid_value("color-scheme", "normal dark");
   test_invalid_value("color-scheme", "normal purple");
   test_invalid_value("color-scheme", "light normal");
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-valid.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-valid.html
index 5fb4817..3cebabe3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-valid.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/parsing/color-scheme-valid.html
@@ -22,4 +22,10 @@
   test_valid_value("color-scheme", "initial");
   test_valid_value("color-scheme", "unset");
   test_valid_value("color-scheme", "revert");
+  test_valid_value("color-scheme", "only");
+  test_valid_value("color-scheme", "only only");
+  test_valid_value("color-scheme", "only light dark");
+  test_valid_value("color-scheme", "only light light");
+  test_valid_value("color-scheme", "only light purple");
+  test_valid_value("color-scheme", "only none");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html
index ae0dc62b..b163b4a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html
@@ -4,7 +4,6 @@
   <title>CSS Color Adjustment Test: Checkbox rendering should change between dark and light schemes</title>
   <link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-processing">
   <link rel="mismatch" href="color-scheme-change-checkbox-notref.html">
-  <link rel="stylesheet" href="support/assert-preferred-dark.css">
   <script src="/common/reftest-wait.js"></script>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-color-property.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-color-property.html
index 193b759a..4cb02d95 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-color-property.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-color-property.html
@@ -3,7 +3,6 @@
 <head>
   <title>CSS Color Adjustment Test: the initial color is affected by color-scheme</title>
   <link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-processing">
-  <link rel="stylesheet" href="support/assert-preferred-dark.css">
   <script src="/resources/testharness.js"></script>
   <script src="/resources/testharnessreport.js"></script>
   <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-alpha.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-alpha.html
index 26c5819..bab634c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-alpha.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-alpha.html
@@ -2,7 +2,6 @@
 <title>CSS Color Adjustment Test: iframe element with light color-scheme, frame document with dark color-scheme, :root background with alpha</title>
 <link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-effect">
 <link rel="match" href="support/dark-frame-alpha.html">
-<link rel="stylesheet" href="support/assert-preferred-dark.css">
 <style>
   html, body {
     margin: 0;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-opaque.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-opaque.html
index 9e39c0b..d984fdd 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-opaque.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background-mismatch-opaque.html
@@ -2,7 +2,6 @@
 <title>CSS Color Adjustment Test: Frames with a dark color-scheme should get an opaque background when embedding element and embedded root color-schemes do not match</title>
 <link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-effect">
 <link rel="match" href="support/dark-frame-opaque.html">
-<link rel="stylesheet" href="support/assert-preferred-dark.css">
 <style>
   html, body {
     margin: 0;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background.html
index 591044f..caef99cf 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-iframe-background.html
@@ -2,5 +2,4 @@
 <title>CSS Color Adjustment Test: Frames with a dark color-scheme should still be transparent when embedding element and embedded root color-schemes match</title>
 <link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-effect">
 <link rel="match" href="color-scheme-iframe-background-ref.html">
-<link rel="stylesheet" href="support/assert-preferred-dark.css">
 <iframe width="600" height="400" style="color-scheme:dark" src="support/dark-frame.html"></iframe>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html
index a636397..c5766c7 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html
@@ -1,7 +1,6 @@
 <!doctype html>
 <title>CSS Color Adjustment Test: color-scheme does not affect :root background</title>
 <link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-processing">
-<link rel="stylesheet" href="support/assert-preferred-dark.css">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-visited-link-initial.html b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-visited-link-initial.html
index ba8f10cf..6412acd 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-visited-link-initial.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-visited-link-initial.html
@@ -1,7 +1,6 @@
 <!doctype html>
 <title>CSS Color Adjustment Test: initial color on visited link affected by color-scheme</title>
 <link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-processing">
-<link rel="stylesheet" href="support/assert-preferred-dark.css">
 <link rel="match" href="color-scheme-visited-link-initial-ref.html">
 <style>
   :root { color-scheme: dark }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/support/assert-preferred-dark.css b/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/support/assert-preferred-dark.css
deleted file mode 100644
index 73671b8..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/support/assert-preferred-dark.css
+++ /dev/null
@@ -1,9 +0,0 @@
-@media not all and (prefers-color-scheme: dark) {
-  :root {
-    background-color: red !important;
-  }
-  body::before {
-    font-size: 64px;
-    content: "Test must be run with preferred dark color scheme.";
-  }
-}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-image-zoom-dynamic-ref.html b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-image-zoom-dynamic-ref.html
new file mode 100644
index 0000000..9c4d876
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-image-zoom-dynamic-ref.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html class="reftest-waitt">
+<meta charset="utf-8">
+<title>CSS Reference: Image list markers with dynamic zoom</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+body {
+  zoom: 2;
+}
+ol {
+  list-style-position: inside;
+}
+.gradient {
+  list-style-image: linear-gradient(blue, cyan);
+}
+.image {
+  list-style-image: url("/css/support/blue-100.png");
+}
+.svg {
+  list-style-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' style='background: blue'></svg>");
+}
+</style>
+<ol>
+  <li class="gradient">text</li>
+  <li class="image">text</li>
+  <li class="svg">text</li>
+</ol>
+<script src="/common/reftest-wait.js"></script>
+<script>
+// Use a "load" event listener to ensure the images have been loaded.
+addEventListener("load", () => {
+  takeScreenshot();
+}, {once: true});
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-image-zoom-dynamic.html b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-image-zoom-dynamic.html
new file mode 100644
index 0000000..d0cd9de
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-image-zoom-dynamic.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<title>CSS Test: Image list markers with dynamic zoom</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-lists/#image-markers">
+<link rel="match" href="list-style-image-zoom-dynamic-ref.html">
+<meta name="assert" content="Checks that, if the non-standard 'zoom' property is supported, list marker images are correctly updated when the 'zoom' value changes dynamically.">
+<style>
+.zoom {
+  zoom: 2;
+}
+ol {
+  list-style-position: inside;
+}
+.gradient {
+  list-style-image: linear-gradient(blue, cyan);
+}
+.image {
+  list-style-image: url("/css/support/blue-100.png");
+}
+.svg {
+  list-style-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' style='background: blue'></svg>");
+}
+</style>
+<ol>
+  <li class="gradient">text</li>
+  <li class="image">text</li>
+  <li class="svg">text</li>
+</ol>
+<script src="/common/reftest-wait.js"></script>
+<script>
+// Use a "load" event listener to ensure the images have been loaded.
+addEventListener("load", () => {
+  document.body.offsetLeft;
+  document.body.classList.add("zoom");
+  takeScreenshot();
+}, {once: true});
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-001.tentative.html
new file mode 100644
index 0000000..e18a0a7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-001.tentative.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: out-of-flow div block size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="background: green; width: 100px; aspect-ratio: 1/1; position: absolute;"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-002.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-002.tentative.html
new file mode 100644
index 0000000..2e14ff3f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-002.tentative.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: abspos div inline size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="background: green; height: 100px; aspect-ratio: 1/1; position: absolute;"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-003.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-003.tentative.html
new file mode 100644
index 0000000..f8602af
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-003.tentative.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: out-of-flow div block size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="width: 100px; height: 500px; position: relative;">
+  <div style="background: green; aspect-ratio: 1/1; position: absolute; left: 0; right: 0; top: 0; bottom: 0;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-004.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-004.tentative.html
new file mode 100644
index 0000000..b7685f1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-004.tentative.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: abspos div inline size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<!-- It is not entirely clear if this is testing the right behavior. See:
+     https://github.com/w3c/csswg-drafts/issues/5151
+  -->
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="width: 500px; height: 100px; position: relative;">
+  <div style="background: green; aspect-ratio: 1/1; position: absolute; left: 0; top: 0; bottom: 0;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-005.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-005.tentative.html
new file mode 100644
index 0000000..a0eaf8c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-005.tentative.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: out-of-flow div block size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="width: 100px; height: 500px; position: relative;">
+  <div style="background: green; aspect-ratio: 1/1; width: 100px; position: absolute; left: 0; right: 0; top: 0; bottom: 0;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-006.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-006.tentative.html
new file mode 100644
index 0000000..8c9f16f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/abspos-006.tentative.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: abspos div inline size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="width: 500px; height: 100px; position: relative;">
+  <div style="background: green; aspect-ratio: 1/1; height: 100px; position: absolute; left: 0; right: 0; top: 0; bottom: 0;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative.html
new file mode 100644
index 0000000..84bf2f08
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative.html
@@ -0,0 +1,118 @@
+<!doctype HTML>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms-2/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+  div {
+    width: 200px;
+    height: 200px;
+  }
+
+  .rotate45 {
+    transform: rotateY(45deg)
+  }
+  .rotateNeg45 {
+    transform: rotateY(-45deg)
+  }
+
+  .parent {
+    transform-style: preserve-3d;
+  }
+
+  .perspective {
+    perspective: 200px;
+  }
+</style>
+
+<div class="parent rotateNeg45">
+  <div id=childOfPreserve3D class="child rotate45"></div>
+</div>
+
+<div class="parent rotateNeg45">
+  <div id=absChildOfPreserve3D class="child rotate45" style="position: absolute"></div>
+</div>
+
+<div class="parent rotateNeg45">
+  <div id=fixedChildOfPreserve3D class="child rotate45" style="position: absolute"></div>
+</div>
+
+<div class="parent rotateNeg45">
+  <div>
+    <div id=childWithIntermediate class="child rotate45" style="position: absolute"></div>
+  </div>
+</div>
+
+<div class="parent rotateNeg45">
+  <div>
+    <div id=absWithIntermediate class="child rotate45" style="position: absolute"></div>
+  </div>
+</div>
+
+<div class="parent rotateNeg45">
+  <div>
+    <div id=fixedWithIntermediate class="child rotate45" style="position: fixed"></div>
+  </div>
+</div>
+
+<div class="perspective">
+  <div id=childWithPerspectiveParent class="child rotate45" style="position: absolute"></div>
+  <div id=absWithPerspectiveParent class="child rotate45" style="position: absolute"></div>
+  <div id=fixedWithPerspectiveParent class="child rotate45" style="position: fixed"></div>
+</div>
+
+<div class="perspective">
+  <div>
+    <div id=childWithIntermediateAndPerspectiveParent class="child rotate45"></div>
+    <div id=absWithIntermediateAndPerspectiveParent class="child rotate45" style="position: absolute"></div>
+    <div id=fixedWithIntermediateAndPerspectiveParent class="child rotate45" style="position: fixed"></div>
+  </div>
+</div>
+
+<script>
+  test(function() {
+    assert_equals(childOfPreserve3D.getBoundingClientRect().width, 200);
+    assert_equals(absChildOfPreserve3D.getBoundingClientRect().width, 200);
+    assert_equals(fixedChildOfPreserve3D.getBoundingClientRect().width, 200);
+  }, "Direct DOM parent is root of rendering context");
+
+  test(function() {
+    assert_equals(childWithIntermediate.getBoundingClientRect().width, 200);
+    assert_equals(absWithIntermediate.getBoundingClientRect().width, 200);
+    assert_equals(fixedWithIntermediate.getBoundingClientRect().width, 200);
+  }, "Intermediate DOM nodes cause rendering context to end");
+
+  test(function() {
+    assert_approx_equals(
+        childWithPerspectiveParent.getBoundingClientRect().width, 161, 1);
+  }, "Perspective applies to direct DOM normal-flow children");
+
+  test(function() {
+    assert_approx_equals(
+        absWithPerspectiveParent.getBoundingClientRect().width, 161, 1);
+  }, "Perspective applies to direct DOM abs-pos children");
+
+  test(function() {
+    assert_approx_equals(
+        fixedWithPerspectiveParent.getBoundingClientRect().width, 161, 1);
+  }, "Perspective applies to direct DOM fixed-pos children");
+
+  test(function() {
+    assert_approx_equals(
+        childWithIntermediateAndPerspectiveParent.getBoundingClientRect().width,
+        141, 1);
+  }, "Perspective does not apply to DOM normal-flow grandchildren");
+
+  test(function() {
+    assert_approx_equals(
+        absWithIntermediateAndPerspectiveParent.getBoundingClientRect().width,
+        141, 1);
+  }, "Perspective does not apply to DOM abs-pos grandchildren");
+
+  test(function() {
+    assert_approx_equals(
+      fixedWithIntermediateAndPerspectiveParent.getBoundingClientRect().width,
+      141, 1);
+  }, "Perspective does not apply to DOM fixed-pos grandchildren");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-002-ref.html
new file mode 100644
index 0000000..eab3c4e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-002-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden self-transform</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+
+<p>The test passes if there is a green rectangle and no red.</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<div style="backface-visibility:hidden"></div>
+<div style="background: green"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-002.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-002.tentative.html
new file mode 100644
index 0000000..d30ba64
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-002.tentative.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden self-transform</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+<link rel="match" href="backface-visibility-hidden-002-ref.html">
+
+<p>The test passes if there is a green rectangle and no red.</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+  .target {
+    transform: rotateY(180deg);
+  }
+</style>
+<div class=target style="backface-visibility: hidden; background: red"></div>
+<div class=target style="background: green"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-003-ref.html
new file mode 100644
index 0000000..7dab6b9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-003-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden applies to pseudo-stacking contexts</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+
+<p>The test passes if there is a green rectangle and no red</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+  .target {
+    transform: rotateY(180deg);
+  }
+</style>
+<div class=target style="backface-visibility: hidden">
+</div>
+<div class=target>
+  <div style="background: green"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-003.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-003.tentative.html
new file mode 100644
index 0000000..d104662
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-003.tentative.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden applies to pseudo-stacking contexts</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+<link rel="match" href="backface-visibility-hidden-003-ref.html">
+
+<p>The test passes if there is a green rectangle and no red</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+  .target {
+    transform: rotateY(180deg);
+  }
+</style>
+<div class=target style="backface-visibility: hidden">
+  <div style="background: red"></div>
+</div>
+<div class=target>
+  <div style="background: green"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-004-ref.html
new file mode 100644
index 0000000..94c1fc49
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-004-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden does not apply to child pseudo-stacking contexts</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+
+<p>The test passes if there is a green rectangle and no red</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<div class=target style="backface-visibility: hidden">
+  <div style="background: green; isolation: isolate"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-004.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-004.tentative.html
new file mode 100644
index 0000000..1fb3fff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-004.tentative.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden does not apply to child pseudo-stacking context descendants</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+<link rel="match" href="backface-visibility-hidden-004-ref.html">
+
+<p>The test passes if there is a green rectangle and no red</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+  .target {
+    transform: rotateY(180deg);
+  }
+</style>
+<div class=target style="backface-visibility: hidden">
+  <div style="background: green; isolation: isolate"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-005-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-005-ref.html
new file mode 100644
index 0000000..bba35ec
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-005-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden inside preserve-3d applies to pseudo-stacking contexts</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+
+<p>The test passes if there is a green rectangle and no red</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<div style="transform-style: preserve-3d">
+  <div class=target style="backface-visibility: hidden">
+    <div style="background: green; isolation: isolate"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-005.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-005.tentative.html
new file mode 100644
index 0000000..d53ee1c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-005.tentative.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden inside preserve-3d does not apply to pseudo-stacking context descendants</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+<link rel="match" href="backface-visibility-hidden-005-ref.html">
+
+<p>The test passes if there is a green rectangle and no red</p>
+<style>
+  div {
+    width: 100px;
+    height: 100px;
+  }
+  .target {
+    transform: rotateY(180deg);
+  }
+</style>
+<div style="transform-style: preserve-3d">
+  <div class=target style="backface-visibility: hidden; transform-style: preserve-3d">
+    <div style="background: green; isolation: isolate; "></div>
+</div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-animated.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-animated-001.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-animated.html
rename to third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-animated-001.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-animated-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-animated-002.html
new file mode 100644
index 0000000..107b799
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/backface-visibility-hidden-animated-002.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>backface visibility: hidden does not apply to child pseudo-stacking context descendants, even when animation is present</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
+<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
+<link rel="match" href="backface-visibility-hidden-004-ref.html">
+
+<p>The test passes if there is a green rectangle and no red</p>
+<style>
+
+  div {
+    width: 100px;
+    height: 100px;
+  }
+  @keyframes spin {
+    from { transform: rotateY(180deg); }
+    to { transform: rotateY(180deg); }
+  }
+  .target {
+    animation: 10000s linear 0s 1 forwards spin;
+  }
+</style>
+<div class=target style="backface-visibility: hidden">
+  <div style="background: green; isolation: isolate"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/composited-under-rotateY-180deg-clip-perspective.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/composited-under-rotateY-180deg-clip-perspective.html
index c694adf..71b2fd1 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transforms/composited-under-rotateY-180deg-clip-perspective.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/composited-under-rotateY-180deg-clip-perspective.html
@@ -9,7 +9,7 @@
   <div style="transform: rotateY(180deg); overflow: hidden; width: 100px">
     <div style="width: 100px; height: 100px; background: green; will-change: transform"></div>
   </div>
-  <div style="transform: rotateY(180deg); overflow: hidden; width: 100px; backface-visibility: hidden">
-    <div style="width: 100px; height: 100px; background: red; will-change: transform"></div>
+  <div style="transform: rotateY(180deg); overflow: hidden; width: 100px;
+    height: 100px; background: red; backface-visibility: hidden"></div>
   </div>
 </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/preserve-3d-flat-grouping-properties.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/preserve-3d-flat-grouping-properties.tentative.html
new file mode 100644
index 0000000..2d4bb485
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/preserve-3d-flat-grouping-properties.tentative.html
@@ -0,0 +1,124 @@
+<!doctype HTML>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#grouping-property-values">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+  div {
+    width: 200px;
+    height: 200px;
+  }
+  .parent {
+    transform-style: preserve-3d;
+    transform: rotateY(45deg)
+  }
+
+  .child {
+    transform: rotateY(45deg);
+    background: lightblue
+  }
+</style>
+
+<div class=parent>
+  <div id=nonflat class=child></div>
+</div>
+
+<div class=parent style="opacity: 0.5">
+  <div id=opacity class=child></div>
+</div>
+
+<div class=parent style="overflow: hidden">
+  <div id=overflowClip class=child></div>
+</div>
+
+<div class=parent style="filter: invert(0)">
+  <div id=filter class=child></div>
+</div>
+
+<div class=parent style="backdrop-filter: invert(0)">
+  <div id=backdropFilter class=child></div>
+</div>
+
+<div class=parent style="mix-blend-mode: multiply;">
+  <div id=mixBlendMode class=child></div>
+</div>
+
+<div class=parent style="clip: rect(1px, 2px, 3px, 4px); position: absolute">
+  <div id=cssClip class=child></div>
+</div>
+
+<div class=parent style="clip-path: circle(40%)">
+  <div id=clipPath class=child></div>
+</div>
+
+<div class=parent style="isolation: isolate">
+  <div id=isolation class=child></div>
+</div>
+
+<div class=parent style="-webkit-mask:linear-gradient(black,transparent);
+                         mask:linear-gradient(black,transparent)">
+  <div id=mask class=child></div>
+</div>
+
+<div id=parentWithGrouping style="transform-style: preserve-3d; overflow: hidden">
+  <div id=absoluteUnderGrouping style="position: absolute">
+  </div>
+</div>
+
+<div id=parentWithoutGrouping style="transform-style: preserve-3d">
+  <div id=absoluteNotUnderGrouping style="position: absolute">
+  </div>
+</div>
+
+<script>
+  nonflatWidth = nonflat.getBoundingClientRect().width;
+
+  test(function() {
+    assert_equals(nonflat.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element not flattened");
+
+  test(function() {
+    assert_not_equals(opacity.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to opacity");
+
+  test(function() {
+    assert_not_equals(overflowClip.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to overflow clip");
+
+  test(function() {
+    assert_not_equals(filter.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to filter");
+
+  test(function() {
+    assert_not_equals(backdropFilter.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to backdrop-filter");
+
+  test(function() {
+    assert_not_equals(mixBlendMode.getBoundingClientRect().width), nonflatWidth;
+  }, "Preserve-3d element flattened due to mix-blend-mode");
+
+  test(function() {
+    assert_not_equals(cssClip.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to clip CSS");
+
+  test(function() {
+    assert_not_equals(clipPath.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to clip-path");
+
+  test(function() {
+    assert_not_equals(isolation.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to isolation");
+
+  test(function() {
+    assert_not_equals(mask.getBoundingClientRect().width, nonflatWidth);
+  }, "Preserve-3d element flattened due to mask");
+
+  test(function() {
+    assert_equals(absoluteUnderGrouping.offsetParent, parentWithGrouping);
+  }, "Preserve-3d element with a grouping property still a containing block");
+
+  test(function() {
+    assert_equals(absoluteNotUnderGrouping.offsetParent, parentWithoutGrouping);
+  }, "Preserve-3d element without a grouping property still a containing block");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/CSSTransition-currentTime.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-transitions/CSSTransition-currentTime.tentative-expected.txt
new file mode 100644
index 0000000..52ee69a3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/CSSTransition-currentTime.tentative-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+PASS currentTime can be used to seek a CSS transition
+PASS Skipping forwards through transition
+PASS Skipping backwards through transition
+PASS Setting currentTime to null on a CSS transition throws
+FAIL Transition reversing behavior respects currentTime and uses the transition's current position. assert_not_equals: A reversed transition is produced got disallowed value undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/CSSTransition-currentTime.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transitions/CSSTransition-currentTime.tentative.html
index 8ee7215..5800659 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/CSSTransition-currentTime.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/CSSTransition-currentTime.tentative.html
@@ -107,4 +107,39 @@
   );
 }, 'Setting currentTime to null on a CSS transition throws');
 
+test(t => {
+  const div = addDiv(t);
+
+  div.style.left = '0px';
+  getComputedStyle(div).transitionProperty;
+  div.style.transition = 'left 100s';
+  div.style.left = '100px';
+
+  const transition = div.getAnimations()[0];
+
+  // Seek to the middle and get the portion.
+  //
+  // We deliberately DON'T set transition-timing-function to linear so that we
+  // can test that it is applied correctly.
+  transition.currentTime = 50 * MS_PER_SEC;
+  const portion = transition.effect.getComputedTiming().progress;
+
+  // Reverse transition
+  div.style.left = '0px';
+  const reversedTransition = div.getAnimations()[0];
+
+  // If the transition reversing behavior does not advange the previous transition
+  // to the time set by currentTime, start and end values will both be 0px and
+  // no transition will be produced.
+  assert_not_equals(reversedTransition, undefined, "A reversed transition is produced");
+
+  const expectedDuration = 100 * MS_PER_SEC * portion;
+  assert_approx_equals(
+    reversedTransition.effect.getComputedTiming().activeDuration,
+    expectedDuration,
+    1,
+    "The reversed transition has correctly reduced duration"
+  );
+}, "Transition reversing behavior respects currentTime and uses the transition's current position.");
+
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative-expected.txt
index f45b2f6..e068309 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative-expected.txt
@@ -2,7 +2,9 @@
 PASS Keyframes set using setKeyframes() are reflected in computed style for a running transition
 PASS A transition with replaced keyframes still returns the original transitionProperty
 PASS A transition with no keyframes still returns the original transitionProperty
-FAIL A transition with replaced keyframes still exhibits the regular transition reversing behavior Cannot read property 'effect' of undefined
-FAIL A transition with no keyframes still exhibits the regular transition reversing behavior Cannot read property 'effect' of undefined
+FAIL A transition with replaced keyframes animating the same property still exhibits normal reversing behavior. Cannot read property 'effect' of undefined
+FAIL A transition with replaced keyframes animating a different property still exhibits normal reversing behavior  (reversing from the base value). Cannot read property 'effect' of undefined
+FAIL A transition with replaced keyframes animating nothing still exhibits normal reversing behavior (reversing from the base value). Cannot read property 'effect' of undefined
+FAIL A transition with replaced keyframes animating nothing on a property being controlled by another modified transition exhibits normal reversing behavior and reverses from the other transition's current value. Cannot read property 'transitionProperty' of undefined
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html
index df11c28..3b151a6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html
@@ -55,63 +55,86 @@
 }, 'A transition with no keyframes still returns the original'
    + ' transitionProperty');
 
-test(t => {
-  const div = addDiv(t);
+function retarget_test(description, newKeyframes, reversed_start) {
+  test(t => {
+    const div = addDiv(t);
 
-  div.style.left = '0px';
-  getComputedStyle(div).transitionProperty;
-  div.style.transition = 'left 100s';
-  div.style.left = '100px';
+    div.style.left = '0px';
+    getComputedStyle(div).transitionProperty;
+    div.style.transition = 'left 100s linear';
+    div.style.left = '100px';
 
-  const transition = div.getAnimations()[0];
+    const transition = div.getAnimations()[0];
+    transition.currentTime = 50 * MS_PER_SEC;
+    transition.effect.setKeyframes(newKeyframes);
 
-  // Seek to the middle and get the portion.
-  //
-  // We deliberately DON'T set transition-timing-function to linear so that we
-  // can test that it is applied correctly.
-  transition.currentTime = 50 * MS_PER_SEC;
-  const portion = transition.effect.getComputedTiming().progress;
+    // Reverse transition
+    div.style.left = '0px';
+    const reversedTransition = div.getAnimations()[0];
 
-  transition.effect.setKeyframes({ top: ['200px', '300px', '100px'] });
+    assert_approx_equals(
+      reversedTransition.effect.getComputedTiming().activeDuration,
+      50 * MS_PER_SEC, 1,
+      "The reversed transition has correctly reduced duration"
+    );
+    assert_equals(reversedTransition.effect.getKeyframes()[0].left, reversed_start,
+        "The reversed transition starts at the expected point");
+  },  description);
+}
 
-  // Reverse transition
-  div.style.left = '0px';
-  const reversedTransition = div.getAnimations()[0];
+retarget_test("A transition with replaced keyframes animating the same property " +
+    "still exhibits normal reversing behavior.",
+    {left: ['200px', '300px', '100px']}, '300px');
 
-  const expectedDuration = 100 * MS_PER_SEC * portion;
-  assert_approx_equals(
-    reversedTransition.effect.getComputedTiming().activeDuration,
-    expectedDuration,
-    1
-  );
-}, 'A transition with replaced keyframes still exhibits the regular transition'
-   + ' reversing behavior');
+retarget_test("A transition with replaced keyframes animating a different property " +
+    "still exhibits normal reversing behavior  (reversing from the base value).",
+    {top: ['200px', '300px', '100px']}, '100px');
+
+retarget_test("A transition with replaced keyframes animating nothing " +
+    "still exhibits normal reversing behavior (reversing from the base value).",
+    {}, '100px');
 
 test(t => {
   const div = addDiv(t);
-
-  div.style.left = '0px';
-  getComputedStyle(div).transitionProperty;
-  div.style.transition = 'left 100s';
+  // initial conditions
   div.style.left = '100px';
+  div.style.top = '100px';
+  div.style.transition = 'left 100s linear, top 100s linear';
+  getComputedStyle(div).left;
 
-  const transition = div.getAnimations()[0];
+  // start some transitions
+  div.style.left ='200px';
+  div.style.top = '200px';
+  const transitions = div.getAnimations();
 
-  transition.currentTime = 50 * MS_PER_SEC;
-  const portion = transition.effect.getComputedTiming().progress;
+  // hand control of the left property over to top's transition
+  assert_equals(transitions[0].transitionProperty, 'left');
+  transitions[0].effect.setKeyframes({});
+  transitions[1].effect.setKeyframes([
+    {left: '100px', top: '100px'},
+    {left: '400px', top: '200px'}])
+  getComputedStyle(div).left;
 
-  transition.effect.setKeyframes({ });
+  // these form a single style change, equivalent to setting times and then setting left
+  transitions[0].currentTime = 50 * MS_PER_SEC;
+  div.style.left ='100px';
+  transitions[1].currentTime = 60 * MS_PER_SEC;
 
-  div.style.left = '0px';
-  const reversedTransition = div.getAnimations()[0];
-
-  const expectedDuration = 100 * MS_PER_SEC * portion;
+  const reversedTransition = div.getAnimations()[1]
+  assert_equals(reversedTransition.transitionProperty, 'left',
+      "A reversed transition on left is produced");
   assert_approx_equals(
-    reversedTransition.effect.getComputedTiming().activeDuration,
-    expectedDuration,
-    1
-  );
-}, 'A transition with no keyframes still exhibits the regular transition'
-   + ' reversing behavior');
+      reversedTransition.effect.getComputedTiming().activeDuration,
+      50 * MS_PER_SEC, 1,
+      "The reversed transition has correctly reduced duration (based on the original left transition)."
+    );
+  assert_equals(reversedTransition.effect.getKeyframes()[0].left, '280px',
+      "The reversed transition gets its start value from the other transition controlling left");
+
+},  "A transition with replaced keyframes animating nothing on a property being controlled by another " +
+    "modified transition exhibits normal reversing behavior and reverses from the other " +
+    "transition's current value.");
+
+
 
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/README.md b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/README.md
new file mode 100644
index 0000000..68d8772
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/README.md
@@ -0,0 +1 @@
+This folder contains tests that were manually added to the repository. All other tests have been autogenerated by html/canvas/tools/build.sh
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_arcto_001-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_arcto_001-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_arcto_001-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_arcto_001-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_arcto_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_arcto_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_arcto_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_arcto_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_beziercurveto_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_beziercurveto_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/building-paths/canvas_complexshapes_beziercurveto_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/building-paths/canvas_complexshapes_beziercurveto_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/compositing/canvas_compositing_globalcompositeoperation_001-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/compositing/canvas_compositing_globalcompositeoperation_001-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/compositing/canvas_compositing_globalcompositeoperation_001-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/compositing/canvas_compositing_globalcompositeoperation_001-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/compositing/canvas_compositing_globalcompositeoperation_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/compositing/canvas_compositing_globalcompositeoperation_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/compositing/canvas_compositing_globalcompositeoperation_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/compositing/canvas_compositing_globalcompositeoperation_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/context-attributes/getContextAttributes.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/context-attributes/getContextAttributes.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/context-attributes/getContextAttributes.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/context-attributes/getContextAttributes.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_canvas.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_canvas.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_canvas.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_canvas.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_canvas_self.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_canvas_self.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_canvas_self.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_canvas_self.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_crossorigin.sub.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_crossorigin.sub.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_crossorigin.sub.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_crossorigin.sub.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_html_image.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_html_image.html
similarity index 99%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_html_image.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_html_image.html
index a94cfdcd..9216d1da 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_html_image.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_html_image.html
@@ -12,7 +12,7 @@
 
 var destCanvas = document.getElementById('dest');
 var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png';
+sourceImg.src = '/html/canvas/element/2x2.png';
 sourceImg.width = sourceWidth;
 sourceImg.height = sourceHeight;
 var destCtx = destCanvas.getContext('2d');
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_svg_image_1.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_svg_image_1.html
similarity index 97%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_svg_image_1.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_svg_image_1.html
index 6c50b2e..46c54aeb 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_svg_image_1.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_svg_image_1.html
@@ -9,7 +9,7 @@
 <script>
 async_test(t => {
   var sourceImg = document.createElementNS('http://www.w3.org/2000/svg', 'image');
-  sourceImg.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '../2x2.png');
+  sourceImg.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '/html/canvas/element/2x2.png');
   sourceImg.width = 100;
   sourceImg.height = 100;
 
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_svg_image_with_foreign_object_does_not_taint.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_svg_image_with_foreign_object_does_not_taint.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/drawimage_svg_image_with_foreign_object_does_not_taint.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/drawimage_svg_image_with_foreign_object_does_not_taint.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-orientation-none-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-orientation-none-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none.tentative.html
similarity index 92%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none.tentative.html
index 46ce92e3..39ed4a2 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-orientation-none.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: none</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-bitmap-orientation-none-ref.html">
+<link rel="match" href="drawImage-from-bitmap-orientation-none-ref.html">
   <script>
     image = new Image();
     image.src = "/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg";
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-swap-width-height-orientation-none-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-swap-width-height-orientation-none-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none.tentative.html
similarity index 91%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none.tentative.html
index efa3d90..3b16241 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-orientation-none.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: none</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-bitmap-swap-width-height-orientation-none-ref.html">
+<link rel="match" href="drawImage-from-bitmap-swap-width-height-orientation-none-ref.html">
   <script>
     image = new Image();
     image.src = "/css/css-images/image-orientation/support/exif-orientation-7-rl.jpg";
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-swap-width-height-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-bitmap-swap-width-height-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height.tentative.html
similarity index 92%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height.tentative.html
index eabca5fa..744ca54 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap-swap-width-height.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: from-image</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-bitmap-swap-width-height-ref.html">
+<link rel="match" href="drawImage-from-bitmap-swap-width-height-ref.html">
   <script>
     image = new Image();
     image.src = "/css/css-images/image-orientation/support/exif-orientation-7-rl.jpg";
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap.tentative.html
similarity index 93%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap.tentative.html
index 641d0cc..632a170b 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-bitmap.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: from-image</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-bitmap-ref.html">
+<link rel="match" href="drawImage-from-bitmap-ref.html">
   <script>
     image = new Image();
     image.src = "/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg";
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
similarity index 94%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
index e84fce71..330b3cb 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from a blob with image orientation: from-image</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-blob-ref.html">
+<link rel="match" href="drawImage-from-blob-ref.html">
   <script>
   function makeBlob() {
     return new Promise(function(resolve, reject) {
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-orientation-none-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-orientation-none-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none.tentative.html
similarity index 90%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none.tentative.html
index d771ee66..61563da 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-orientation-none.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: none</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-element-orientation-none-ref.html">
+<link rel="match" href="drawImage-from-element-orientation-none-ref.html">
   <script>
     window.onload = () => {
       const img = document.getElementById('img-element');
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-swap-width-height-orientation-none-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-swap-width-height-orientation-none-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none.tentative.html
similarity index 88%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none.tentative.html
index ede4398..290d7ac 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-orientation-none.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: none</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-element-swap-width-height-orientation-none-ref.html">
+<link rel="match" href="drawImage-from-element-swap-width-height-orientation-none-ref.html">
   <script>
     window.onload = () => {
       const img = document.getElementById('img-element');
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-swap-width-height-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-element-swap-width-height-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height.tentative.html
similarity index 89%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height.tentative.html
index 6fe69bd4..20d5935 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element-swap-width-height.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: from-image</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-element-swap-width-height-ref.html">
+<link rel="match" href="drawImage-from-element-swap-width-height-ref.html">
   <script>
     window.onload = () => {
       const img = document.getElementById('img-element');
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element.tentative.html
similarity index 91%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element.tentative.html
index 01c8bc57..62cdf20 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-element.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-from-element.tentative.html
@@ -5,7 +5,7 @@
 <title>createImageBitmap and drawImage from an element source with image orientation: from-image</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-from-element-ref.html">
+<link rel="match" href="drawImage-from-element-ref.html">
   <script>
     window.onload = () => {
       const img = document.getElementById('img-element');
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
similarity index 92%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
index 47d1f8b4..d9d5646 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
@@ -5,7 +5,7 @@
 <title>drawImage with image orientation: from-image and a sub-image source rect</title>
 <link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-images-3/#propdef-image-orientation">
-<link rel="match" href="reference/drawImage-with-src-rect-ref.html">
+<link rel="match" href="drawImage-with-src-rect-ref.html">
 <meta name=fuzzy content="30;100">
   <script>
     window.onload = () => {
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/canvas_complexshapes_ispointInpath_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/canvas_complexshapes_ispointInpath_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/canvas_complexshapes_ispointInpath_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/canvas_complexshapes_ispointInpath_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/canvas_focus_drawFocusIfNeeded_AAPI_001-manual.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/canvas_focus_drawFocusIfNeeded_AAPI_001-manual.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/canvas_focus_drawFocusIfNeeded_AAPI_001-manual.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/canvas_focus_drawFocusIfNeeded_AAPI_001-manual.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_001.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_001.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_001.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_001.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_002.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_002.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_002.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_002.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_003.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_003.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_003.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_003.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_004.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_004.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_004.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_004.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_005.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_005.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-paths-to-the-canvas/drawFocusIfNeeded_005.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/drawing-paths-to-the-canvas/drawFocusIfNeeded_005.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/fill-and-stroke-styles/2d.fillStyle.parse.current.notrendered.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/fill-and-stroke-styles/2d.fillStyle.parse.current.notrendered.html
similarity index 94%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/fill-and-stroke-styles/2d.fillStyle.parse.current.notrendered.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/fill-and-stroke-styles/2d.fillStyle.parse.current.notrendered.html
index 8799443c..59eedb1 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/fill-and-stroke-styles/2d.fillStyle.parse.current.notrendered.html
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/fill-and-stroke-styles/2d.fillStyle.parse.current.notrendered.html
@@ -1,5 +1,4 @@
 <!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
 <title>Canvas test: 2d.fillStyle.parse.current.notrendered</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/hit-regions/addHitRegions-NotSupportedError-01.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/hit-regions/addHitRegions-NotSupportedError-01.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/hit-regions/addHitRegions-NotSupportedError-01.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/hit-regions/addHitRegions-NotSupportedError-01.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/hit-regions/hitregions-members-exist.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/hit-regions/hitregions-members-exist.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/hit-regions/hitregions-members-exist.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/hit-regions/hitregions-members-exist.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/image-smoothing/imagesmoothing.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/image-smoothing/imagesmoothing.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/image-smoothing/imagesmoothing.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/image-smoothing/imagesmoothing.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/canvas-createImageBitmap-resize.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/canvas-createImageBitmap-resize.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/canvas-createImageBitmap-resize.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/canvas-createImageBitmap-resize.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/canvas-createImageBitmap-video-resize.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/canvas-createImageBitmap-video-resize.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/canvas-createImageBitmap-video-resize.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/canvas-createImageBitmap-video-resize.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/common.sub.js b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/common.sub.js
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/common.sub.js
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/common.sub.js
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-blob-invalidtype.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-blob-invalidtype.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-blob-invalidtype.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-blob-invalidtype.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-bounds.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-bounds.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-bounds.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-bounds.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-drawImage-closed.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage-closed.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-drawImage-closed.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage-closed.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-drawImage.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-drawImage.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-flipY.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-flipY.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-in-worker-transfer.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-in-worker-transfer.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-in-worker-transfer.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-in-worker-transfer.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-invalid-args.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-invalid-args.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-origin.sub.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-origin.sub.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-serializable.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-serializable.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-serializable.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-serializable.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-sizeOverflow.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-sizeOverflow.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-sizeOverflow.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-sizeOverflow.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-transfer.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-transfer.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-worker.js b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-worker.js
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/createImageBitmap-worker.js
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-worker.js
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/transfer-worker.js b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/transfer-worker.js
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/imagebitmap/transfer-worker.js
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/imagebitmap/transfer-worker.js
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/canvas_linestyles_linecap_001-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/canvas_linestyles_linecap_001-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/canvas_linestyles_linecap_001-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/canvas_linestyles_linecap_001-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/canvas_linestyles_linecap_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/canvas_linestyles_linecap_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/canvas_linestyles_linecap_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/canvas_linestyles_linecap_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/lineto_a.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/lineto_a.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/lineto_a.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/lineto_a.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/lineto_ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/lineto_ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/lineto_ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/lineto_ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/setLineDash.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/setLineDash.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/line-styles/setLineDash.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/line-styles/setLineDash.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/canvas_shadows_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/canvas_shadows_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/canvas_shadows_002-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/canvas_shadows_002-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/canvas_shadows_002-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/canvas_shadows_002-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/canvas_shadows_002.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/canvas_shadows_002.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/canvas_shadows_002.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/canvas_shadows_002.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/shadowBlur_gaussian_tolerance.1.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/shadowBlur_gaussian_tolerance.1.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/shadows/shadowBlur_gaussian_tolerance.1.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/shadows/shadowBlur_gaussian_tolerance.1.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/text-styles/canvas_text_font_001-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/text-styles/canvas_text_font_001-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/text-styles/canvas_text_font_001-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/text-styles/canvas_text_font_001-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/text-styles/canvas_text_font_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/text-styles/canvas_text_font_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/text-styles/canvas_text_font_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/text-styles/canvas_text_font_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/the-canvas-state/2d.state.saverestore.imageSmoothingEnabled.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/the-canvas-state/2d.state.saverestore.imageSmoothingEnabled.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/the-canvas-state/2d.state.saverestore.imageSmoothingEnabled.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/the-canvas-state/2d.state.saverestore.imageSmoothingEnabled.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/the-canvas-state/canvas_state_restore_001-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/the-canvas-state/canvas_state_restore_001-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/the-canvas-state/canvas_state_restore_001-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/the-canvas-state/canvas_state_restore_001-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/the-canvas-state/canvas_state_restore_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/the-canvas-state/canvas_state_restore_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/the-canvas-state/canvas_state_restore_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/the-canvas-state/canvas_state_restore_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/2d.transformation.getTransform.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/2d.transformation.getTransform.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/2d.transformation.getTransform.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/2d.transformation.getTransform.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_reset_001-ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_reset_001-ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_reset_001-ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_reset_001-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_reset_001.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_reset_001.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_reset_001.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_reset_001.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_scale_001-ref.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_scale_001-ref.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_scale_001-ref.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_scale_001-ref.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_scale_001.htm b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_scale_001.htm
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/canvas_transformations_scale_001.htm
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/canvas_transformations_scale_001.htm
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/transform_a.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/transform_a.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/transform_a.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/transform_a.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/transform_ref.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/transform_ref.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/transformations/transform_ref.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/transformations/transform_ref.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/ImageData-fidelity.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/ImageData-fidelity.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/ImageData-fidelity.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/ImageData-fidelity.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-colorspace-arguments.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-colorspace-arguments.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-colorspace-arguments.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-colorspace-arguments.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-drawImage-e_srgb.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-drawImage-e_srgb.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-getImageData-e_srgb.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/canvas-getImageData-e_srgb.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/imageData-colorManagedBehavior.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/imageData-colorManagedBehavior.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/imageData-colorSpace.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/imageData-colorSpace.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/imageData-colorSpace.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/imageData-colorSpace.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/imagedata-no-color-settings-crash.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/imagedata-no-color-settings-crash.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-p3d65.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-p3d65.png
new file mode 100644
index 0000000..5eb3f6a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-p3d65.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-rec2020.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-rec2020.png
new file mode 100644
index 0000000..b64db07
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-rec2020.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-srgb.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-srgb.png
new file mode 100644
index 0000000..bfbba8b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-semitransparent-srgb.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-fullcolor.ogv b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-fullcolor.ogv
new file mode 100644
index 0000000..43a72bf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-fullcolor.ogv
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.bmp b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.bmp
new file mode 100644
index 0000000..9c9561c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.bmp
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.ico b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.ico
new file mode 100644
index 0000000..87e8ff4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.ico
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.png
new file mode 100644
index 0000000..bfbba8b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.webp b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.webp
new file mode 100644
index 0000000..9256460
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb-transparent.webp
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.bmp b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.bmp
new file mode 100644
index 0000000..465d203
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.bmp
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.gif b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.gif
new file mode 100644
index 0000000..25bcefb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.gif
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.ico b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.ico
new file mode 100644
index 0000000..e5375826
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.ico
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.jpg b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.jpg
new file mode 100644
index 0000000..c4579e8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.jpg
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.png
new file mode 100644
index 0000000..1b5876b5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.svg b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.svg
new file mode 100644
index 0000000..0517130
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.svg
@@ -0,0 +1,6 @@
+<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <rect x="0" y="0" width="10px" height="10px" fill="#9b1b1b"/>
+    <rect x="10" y="0" width="10px" height="10px" fill="#1b9b1b"/>
+    <rect x="0" y="10" width="10px" height="10px" fill="#1b1b9b"/>
+    <rect x="10" y="10" width="10px" height="10px" fill="#1b1b1b"/>
+</svg>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.webp b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.webp
new file mode 100644
index 0000000..b7c0a42
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/pattern-srgb.webp
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_AdobeRGB_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_AdobeRGB_opaque.png
new file mode 100644
index 0000000..c4496db
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_AdobeRGB_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_AdobeRGB_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_AdobeRGB_transparent.png
new file mode 100644
index 0000000..3b4cfda5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_AdobeRGB_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_DisplayP3_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_DisplayP3_opaque.png
new file mode 100644
index 0000000..e7a142c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_DisplayP3_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_DisplayP3_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_DisplayP3_transparent.png
new file mode 100644
index 0000000..0b03531
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_DisplayP3_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_ProPhoto_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_ProPhoto_opaque.png
new file mode 100644
index 0000000..a1dc7dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_ProPhoto_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_ProPhoto_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_ProPhoto_transparent.png
new file mode 100644
index 0000000..be2eb12
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_ProPhoto_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_Rec2020_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_Rec2020_opaque.png
new file mode 100644
index 0000000..e2a2d14
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_Rec2020_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_Rec2020_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_Rec2020_transparent.png
new file mode 100644
index 0000000..960d7d8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_Rec2020_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_AdobeRGB_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_AdobeRGB_opaque.png
new file mode 100644
index 0000000..80cf978
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_AdobeRGB_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_AdobeRGB_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_AdobeRGB_transparent.png
new file mode 100644
index 0000000..3ec565f8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_AdobeRGB_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_DisplayP3_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_DisplayP3_opaque.png
new file mode 100644
index 0000000..5f3134b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_DisplayP3_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_DisplayP3_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_DisplayP3_transparent.png
new file mode 100644
index 0000000..500a70e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_DisplayP3_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_ProPhoto_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_ProPhoto_opaque.png
new file mode 100644
index 0000000..b5d0e07
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_ProPhoto_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_ProPhoto_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_ProPhoto_transparent.png
new file mode 100644
index 0000000..e4ec3e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_ProPhoto_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_Rec2020_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_Rec2020_opaque.png
new file mode 100644
index 0000000..c487d584
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_Rec2020_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_Rec2020_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_Rec2020_transparent.png
new file mode 100644
index 0000000..78fe202
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_Rec2020_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_sRGB_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_sRGB_opaque.png
new file mode 100644
index 0000000..babf232a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_sRGB_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_sRGB_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_sRGB_transparent.png
new file mode 100644
index 0000000..3016404
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_interlaced_sRGB_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_sRGB_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_sRGB_opaque.png
new file mode 100644
index 0000000..8a66534
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_sRGB_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_sRGB_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_sRGB_transparent.png
new file mode 100644
index 0000000..e51cda7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_16bit_sRGB_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_AdobeRGB_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_AdobeRGB_opaque.png
new file mode 100644
index 0000000..8b787b5c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_AdobeRGB_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_AdobeRGB_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_AdobeRGB_transparent.png
new file mode 100644
index 0000000..727028e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_AdobeRGB_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_DisplayP3_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_DisplayP3_opaque.png
new file mode 100644
index 0000000..fe8bdd49
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_DisplayP3_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_DisplayP3_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_DisplayP3_transparent.png
new file mode 100644
index 0000000..b836afeb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_DisplayP3_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_ProPhoto_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_ProPhoto_opaque.png
new file mode 100644
index 0000000..5ecd868
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_ProPhoto_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_ProPhoto_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_ProPhoto_transparent.png
new file mode 100644
index 0000000..85a349dc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_ProPhoto_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_Rec2020_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_Rec2020_opaque.png
new file mode 100644
index 0000000..599cd34
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_Rec2020_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_Rec2020_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_Rec2020_transparent.png
new file mode 100644
index 0000000..ecf65c3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_Rec2020_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_sRGB_opaque.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_sRGB_opaque.png
new file mode 100644
index 0000000..9cab6d1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_sRGB_opaque.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_sRGB_transparent.png b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_sRGB_transparent.png
new file mode 100644
index 0000000..5fa01e6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/resources/png-16bit/2x2_8bit_sRGB_transparent.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/transferFromImageBitmap.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/canvas/element/wide-gamut-canvas/transferFromImageBitmap.html
rename to third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/resources/canvas-tests.js b/third_party/blink/web_tests/external/wpt/html/canvas/resources/canvas-tests.js
index 76313bc8f..0ccb475 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/resources/canvas-tests.js
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/resources/canvas-tests.js
@@ -144,6 +144,7 @@
         return new Promise((resolve, reject) => {
           const video = document.createElement("video");
           video.oncanplaythrough = () => resolve(video);
+          video.preload = "auto";
           video.onerror = reject;
           video.src = getVideoURI(crossOriginUrl + "/media/movie_300");
         });
@@ -156,6 +157,7 @@
         return new Promise((resolve, reject) => {
           const video = document.createElement("video");
           video.oncanplaythrough = () => resolve(video);
+          video.preload = "auto";
           video.onerror = reject;
           video.src = "/common/redirect.py?location=" + getVideoURI(crossOriginUrl + "/media/movie_300");
         });
@@ -168,6 +170,7 @@
         return new Promise((resolve, reject) => {
           const video = document.createElement("video");
           video.oncanplaythrough = () => resolve(video);
+          video.preload = "auto";
           video.onerror = reject;
           video.src = crossOriginUrl + "/common/redirect.py?location=" + getVideoURI(sameOriginUrl + "/media/movie_300");
         });
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-template-element/template-element/template-construction-in-inactive-document-crash.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-template-element/template-element/template-construction-in-inactive-document-crash.html
new file mode 100644
index 0000000..607b8b01
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-template-element/template-element/template-construction-in-inactive-document-crash.html
@@ -0,0 +1,5 @@
+<iframe id="i"></iframe>
+<script>
+i.contentDocument.documentElement.appendChild(document.body);
+</script>
+<template> </template>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl b/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl
index 515d02b..1d8a97e 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/fetch.idl
@@ -72,7 +72,7 @@
   any window; // can only be set to null
 };
 
-enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "image", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style",  "track", "video", "worker", "xslt" };
+enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "frame", "iframe", "image", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style",  "track", "video", "worker", "xslt" };
 enum RequestMode { "navigate", "same-origin", "no-cors", "cors" };
 enum RequestCredentials { "omit", "same-origin", "include" };
 enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };
diff --git a/third_party/blink/web_tests/external/wpt/lint.ignore b/third_party/blink/web_tests/external/wpt/lint.ignore
index 9d057e7..d293fdb 100644
--- a/third_party/blink/web_tests/external/wpt/lint.ignore
+++ b/third_party/blink/web_tests/external/wpt/lint.ignore
@@ -221,6 +221,7 @@
 
 # generate_tests usage (should be got rid of)
 GENERATE_TESTS: html/canvas/element/drawing-images-to-the-canvas/*
+GENERATE_TESTS: html/canvas/element/manual/drawing-images-to-the-canvas/*
 GENERATE_TESTS: css/css-shapes/shape-outside/values/*
 GENERATE_TESTS: css/css-tables/bounding-box-computation-1.html
 GENERATE_TESTS: css/css-tables/bounding-box-computation-2.html
@@ -723,7 +724,7 @@
 AHEM SYSTEM FONT: infrastructure/assumptions/ahem.html
 
 # Existing crashtests using testharness
-TESTHARNESS-IN-OTHER-TYPE: html/canvas/element/wide-gamut-canvas/imagedata-no-color-settings-crash.html
+TESTHARNESS-IN-OTHER-TYPE: html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html
 TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats-clear/adjoining-float-new-fc-crash.html
 TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats/floats-saturated-position-crash.html
 TESTHARNESS-IN-OTHER-TYPE: css/CSS2/linebox/video-needs-layout-crash.html
diff --git a/third_party/blink/web_tests/external/wpt/portals/no-portal-in-sandboxed-popup.html b/third_party/blink/web_tests/external/wpt/portals/no-portal-in-sandboxed-popup.html
new file mode 100644
index 0000000..b26b836
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/portals/no-portal-in-sandboxed-popup.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+promise_test(async t => {
+  let sandboxFlags = 'allow-scripts allow-same-origin';
+  let w = window.open(`resources/attempt-portal-load.html?pipe=header(Content-Security-Policy,sandbox ${sandboxFlags})`);
+  await new Promise((resolve, reject) => w.addEventListener('load', resolve));
+  let result = await Promise.race([
+      w.portalLoaded.then(() => 'loaded'),
+      new Promise(resolve => t.step_timeout(() => resolve('timed out'), 5000))]);
+  assert_equals(result, 'timed out', 'expected portal not to load due to sandbox flags');
+});
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/portals/resources/attempt-portal-load.html b/third_party/blink/web_tests/external/wpt/portals/resources/attempt-portal-load.html
new file mode 100644
index 0000000..1831780
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/portals/resources/attempt-portal-load.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<body>
+<script>
+portalLoaded = new Promise((resolve, reject) => {
+  let portal = document.createElement('portal');
+  portal.src = 'simple-portal.html';
+  portal.onload = resolve;
+  document.body.appendChild(portal);
+});
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
index bfe0067..31367c8 100644
--- a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
+++ b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
@@ -199,6 +199,14 @@
       return {supportsSession: false};
     });
   }
+
+  // Only handles asynchronous calls to makeXrCompatible. Synchronous calls are
+  // not supported in Javascript.
+  makeXrCompatible() {
+    return Promise.resolve({
+      xr_compatible_result: device.mojom.XrCompatibleResult.kAlreadyCompatible
+    });
+  }
 }
 
 class FakeXRAnchorController {
@@ -767,11 +775,6 @@
     this.dataProviderBinding_.close();
   }
 
-  updateSessionGeometry(frame_size, display_rotation) {
-    // This function must exist to ensure that calls to it do not crash, but we
-    // do not have any use for this data at present.
-  }
-
   // XREnvironmentIntegrationProvider implementation:
   subscribeToHitTest(nativeOriginInformation, entityTypes, ray) {
     if (!this.supportedModes_.includes(device.mojom.XRSessionMode.kImmersiveAr)) {
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wpttest.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wpttest.py
index bb1ea56..1078912 100644
--- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wpttest.py
+++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wpttest.py
@@ -556,8 +556,7 @@
         return metadata
 
     def get_viewport_size(self, override):
-        assert override is None
-        return None
+        return override
 
     @property
     def id(self):
diff --git a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html
index 8ba225b..33e54865 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html
@@ -8,16 +8,21 @@
   <script>
     xr_promise_test("An XR-compatible webglCanvasContext can be created",
       (t) => {
+        let gl = null;
+        let offscreenGl = null;
         return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
           .then( (controller) => {
-            webglCanvas = document.getElementById('webgl-canvas');
-            gl = webglCanvas.getContext('webgl', {xrCompatible: true});
+            let webglCanvas = document.getElementById('webgl-canvas');
+            gl = webglCanvas.getContext('webgl');
+            return gl.makeXRCompatible();
+          }).then( () => {
             assert_true(gl.getContextAttributes().xrCompatible);
 
             // Check that an offscreen context behaves no different.
             let offscreenCanvas = document.createElement('canvas');
-            let offscreenGl = offscreenCanvas.getContext(
-              'webgl', {xrCompatible: true});
+            offscreenGl = offscreenCanvas.getContext('webgl');
+            return offscreenGl.makeXRCompatible();
+          }).then( () => {
             assert_true(offscreenGl.getContextAttributes().xrCompatible);
           });
       });
diff --git a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html
index 53fa4fd..0e59807 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html
@@ -13,7 +13,9 @@
       return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
         .then( (controller) => {
           webglCanvas = document.getElementById('webgl-canvas');
-          gl = webglCanvas.getContext('webgl', {xrCompatible: true});
+          gl = webglCanvas.getContext('webgl');
+          return gl.makeXRCompatible();
+        }).then( () => {
           gl.getExtension('WEBGL_lose_context').loseContext();
           return promise_rejects_dom(t, 'InvalidStateError', gl.makeXRCompatible());
         });
diff --git a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https.html b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https.html
new file mode 100644
index 0000000..f412c6f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/webxr_test_constants.js"></script>
+<script src="resources/webxr_util.js"></script>
+<script>
+
+xr_promise_test(
+  "Verify promise from a non-reentrant to makeXRCompatible() is resolved",
+  (t) => {
+    var gl = document.createElement('canvas').getContext('webgl');
+    return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
+      .then((controller) => {
+        assert_false(gl.getContextAttributes().xrCompatible);
+        return gl.makeXRCompatible();
+      }).then(() => {
+        assert_true(gl.getContextAttributes().xrCompatible);
+        return gl.makeXRCompatible();
+      }).then(() => {
+        assert_true(gl.getContextAttributes().xrCompatible);
+      });
+  });
+
+xr_promise_test(
+  "Verify promises from reentrant calls to makeXRCompatible() are resolved",
+  (t) => {
+    var gl = document.createElement('canvas').getContext('webgl');
+    return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
+      .then((controller) => {
+        assert_false(gl.getContextAttributes().xrCompatible);
+
+        return Promise.all([gl.makeXRCompatible(),
+                            gl.makeXRCompatible(),
+                            gl.makeXRCompatible()]);
+      }).then(() => {
+        assert_true(gl.getContextAttributes().xrCompatible);
+      });
+  });
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_constructor.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_constructor.https.html
index dda7ec80..e5b2335c 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_constructor.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_constructor.https.html
@@ -29,21 +29,23 @@
     .then(() => {
       return new Promise((resolve) => {
         navigator.xr.test.simulateUserActivation(() => {
+          let xrSession = null;
           navigator.xr.requestSession('immersive-vr')
           .then((session) => {
+            xrSession = session;
             t.step_func(() => {
               try {
-                let webglLayerIncompatible = new XRWebGLLayer(session, gl);
+                let webglLayerIncompatible = new XRWebGLLayer(xrSession, gl);
                 assert_unreached("XRWebGLLayer should fail when created with a context that is not XRCompatible")
               } catch (err) {
                 assert_equals(err.name, "InvalidStateError");
               }
             })
 
-            gl.makeXRCompatible();
-
+            return gl.makeXRCompatible();
+          }).then(() => {
             try {
-              let webglLayerGood = new XRWebGLLayer(session, gl);
+              let webglLayerGood = new XRWebGLLayer(xrSession, gl);
             } catch (err) {
               reject("XRWebGLLayer should not fail with valid arguments");
             }
@@ -54,7 +56,7 @@
               ev.preventDefault();
 
               try {
-                let webglLayerBadContext = new XRWebGLLayer(session, gl);
+                let webglLayerBadContext = new XRWebGLLayer(xrSession, gl);
                 reject("XRWebGLLayer should fail when created with a lost context");
               } catch (err) {
                 assert_equals(err.name, 'InvalidStateError');
@@ -63,9 +65,9 @@
             });
 
             webglCanvas.addEventListener('webglcontextrestored', (ev) => {
-              resolve(session.end().then(() => {
+              resolve(xrSession.end().then(() => {
                 try {
-                  let webglLayerBadSession = new XRWebGLLayer(session, gl);
+                  let webglLayerBadSession = new XRWebGLLayer(xrSession, gl);
                   assert_unreached("XRWebGLLayer should fail when created with an ended session");
                 } catch (err) {
                   assert_equals(err.name, 'InvalidStateError');
diff --git a/third_party/blink/web_tests/fast/parser/xml-bad-encoding.html b/third_party/blink/web_tests/external/wpt/xslt/invalid-output-encoding-crash.html
similarity index 90%
rename from third_party/blink/web_tests/fast/parser/xml-bad-encoding.html
rename to third_party/blink/web_tests/external/wpt/xslt/invalid-output-encoding-crash.html
index 38ef2907..d84bb5b 100644
--- a/third_party/blink/web_tests/fast/parser/xml-bad-encoding.html
+++ b/third_party/blink/web_tests/external/wpt/xslt/invalid-output-encoding-crash.html
@@ -1,10 +1,5 @@
 <body>
 
-<script>
-  if (window.testRunner)
-    testRunner.dumpAsText();
-</script>
-
 <script id=o_xml type="text/plain">
   <?xml version="1.0" encoding="UTF-8"?>
 </script>
diff --git a/third_party/blink/web_tests/fast/css/invalidation/font-face-shape-together-crash.html b/third_party/blink/web_tests/fast/css/invalidation/font-face-shape-together-crash.html
new file mode 100644
index 0000000..09a57840
--- /dev/null
+++ b/third_party/blink/web_tests/fast/css/invalidation/font-face-shape-together-crash.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<style>
+.container {
+  font: 20px/1 custom-font, sans-serif;
+}
+
+.toggle {
+  outline: 1px solid red;
+}
+</style>
+<div class=container><b id="foo" style="color: orange">foo</b><b id="bar" style="color: purple">bar</b></div>
+<script>
+promise_test(async () => {
+  const face = new FontFace('custom-font', 'url(../../../resources/Ahem.ttf)');
+  face.load();
+  document.fonts.add(face);
+  document.body.offsetLeft; // force style and layout
+  document.querySelectorAll('b').forEach(b => b.classList.add('toggle'));
+  await document.fonts.ready;
+  document.body.offsetLeft; // force style and layout
+  assert_equals(foo.getBoundingClientRect().width, 60);
+  assert_equals(bar.getBoundingClientRect().width, 60);
+}, 'Text nodes shaped together should still have valid Font objects after font loading and do not cause crash');
+</script>
+
diff --git a/third_party/blink/web_tests/fast/parser/xml-bad-encoding-expected.txt b/third_party/blink/web_tests/fast/parser/xml-bad-encoding-expected.txt
deleted file mode 100644
index 6e2acf89..0000000
--- a/third_party/blink/web_tests/fast/parser/xml-bad-encoding-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-CONSOLE WARNING: line 25: Document encoding not valid: bad-encoding
-PASS: renderer didn't crash
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-compositing-reasons-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-compositing-reasons-expected.txt
index 2e1342a..40d73a1 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-compositing-reasons-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-compositing-reasons-expected.txt
@@ -7,7 +7,7 @@
 Compositing reason ids for div#transformWithCompositedDescendants: overlap
 Compositing reason ids for div#transformWithCompositedDescendants-individual: overlap
 Compositing reason ids for div#opacityWithCompositedDescendants: overflowScrolling,rootScroller
-Compositing reason ids for div#reflectionWithCompositedDescendants: overflowScrolling,rootScroller
+Compositing reason ids for div#reflectionWithCompositedDescendants: filterWithCompositedDescendants
 Compositing reason ids for div#perspective: perspectiveWith3DDescendants
 Compositing reason ids for div#preserve3d: preserve3DWith3DDescendants
 
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/fixed-img-src-change-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/fixed-img-src-change-after-scroll-expected.txt
new file mode 100644
index 0000000..e4d0e31
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/fixed-img-src-change-after-scroll-expected.txt
@@ -0,0 +1,42 @@
+{
+  "layers": [
+    {
+      "name": "Scrolling background of LayoutView #document",
+      "bounds": [785, 2016],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFFFF",
+      "transform": 1
+    },
+    {
+      "name": "VerticalScrollbar",
+      "position": [785, 0],
+      "bounds": [15, 600]
+    },
+    {
+      "name": "LayoutImage (positioned) IMG id='img'",
+      "bounds": [100, 100],
+      "transform": 2
+    }
+  ],
+  "transforms": [
+    {
+      "id": 1,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [0, -1000, 0, 1]
+      ]
+    },
+    {
+      "id": 2,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [0, 50, 0, 1]
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/block/float/float-in-float-painting-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/block/float/float-in-float-painting-expected.png
index e47f0b83..e9c8a44 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/block/float/float-in-float-painting-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/block/float/float-in-float-painting-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/file/file-appearance-bidi-filenames-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/file/file-appearance-bidi-filenames-expected.png
index 8fc0f6b..3e154aca 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/file/file-appearance-bidi-filenames-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/file/file-appearance-bidi-filenames-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/select-popup/popup-menu-appearance-zoom-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/select-popup/popup-menu-appearance-zoom-expected.png
index 7f37d39..58be4c6 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/select-popup/popup-menu-appearance-zoom-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/select-popup/popup-menu-appearance-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/generated-gradients-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/generated-gradients-expected.png
index fa96afa..8f879c5 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/generated-gradients-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/generated-gradients-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/list-item-gradient-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/list-item-gradient-expected.png
index 2151dc2..2f38191d 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/list-item-gradient-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/list-item-gradient-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/simple-gradients-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/simple-gradients-expected.png
index 53e6900b..0dd76cc 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/simple-gradients-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/gradients/simple-gradients-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/http/tests/media/video-buffered-range-contains-currentTime-expected.png
new file mode 100644
index 0000000..01d0375d
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/images/color-profile-image-filter-all-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/images/color-profile-image-filter-all-expected.png
index 3287a0c7..01f441e7f 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/images/color-profile-image-filter-all-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt
index 4db9299..90cce2e 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt
@@ -260,8 +260,6 @@
                 }
                 styles : [
                     [0] : [
-                        [0] : -1
-                        [1] : -1
                     ]
                     [1] : [
                         [0] : 5
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/audio-controls-rendering-expected.png
new file mode 100644
index 0000000..fdc9bbc5
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/controls-layout-direction-expected.png
new file mode 100644
index 0000000..33bfa4e
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/media-controls-clone-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/media-controls-clone-expected.png
new file mode 100644
index 0000000..d97e8578
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/media-document-audio-repaint-expected.png
new file mode 100644
index 0000000..e7ebc87
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/media/media-document-audio-repaint-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/dark-color-scheme/select/select-dark-mode-basic-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/dark-color-scheme/select/select-dark-mode-basic-expected.png
index fc68e4d2..310df378 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/dark-color-scheme/select/select-dark-mode-basic-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/dark-color-scheme/select/select-dark-mode-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/stable/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/stable/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt
index 4db9299..90cce2e 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/stable/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/stable/inspector-protocol/dom-snapshot/dom-snapshot-captureSnapshot-pseudo-element-expected.txt
@@ -260,8 +260,6 @@
                 }
                 styles : [
                     [0] : [
-                        [0] : -1
-                        [1] : -1
                     ]
                     [1] : [
                         [0] : 5
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/emoticons-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/emoticons-expected.png
index 3aff8f23..9ede553 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/emoticons-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/emoticons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/midword-break-before-surrogate-pair-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/midword-break-before-surrogate-pair-expected.png
index dd671b0..9634b7c 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/midword-break-before-surrogate-pair-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/midword-break-before-surrogate-pair-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/unicode-fallback-font-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/unicode-fallback-font-expected.png
index be42deb..670d936 100644
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/unicode-fallback-font-expected.png
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/unicode-fallback-font-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/appcache/404-manifest-expected.txt b/third_party/blink/web_tests/http/tests/appcache/404-manifest-expected.txt
index eda39f1..3faa187a 100644
--- a/third_party/blink/web_tests/http/tests/appcache/404-manifest-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/404-manifest-expected.txt
@@ -1,6 +1,6 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 CONSOLE WARNING: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 34: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 40: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that subresources can be loaded if manifest is not available.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/http/tests/appcache/404-manifest.html b/third_party/blink/web_tests/http/tests/appcache/404-manifest.html
index ead4184..d6bedff 100644
--- a/third_party/blink/web_tests/http/tests/appcache/404-manifest.html
+++ b/third_party/blink/web_tests/http/tests/appcache/404-manifest.html
@@ -1,4 +1,10 @@
 <html manifest="does-not-exist.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
+
 <script src="/js-test-resources/js-test.js"></script>
 <script>
 var jsTestIsAsync = true;
diff --git a/third_party/blink/web_tests/http/tests/appcache/404-resource-cross-origin.html b/third_party/blink/web_tests/http/tests/appcache/404-resource-cross-origin.html
index a80e47f7..ebf1d821 100644
--- a/third_party/blink/web_tests/http/tests/appcache/404-resource-cross-origin.html
+++ b/third_party/blink/web_tests/http/tests/appcache/404-resource-cross-origin.html
@@ -1,4 +1,9 @@
 <html manifest="resources/404-resource-cross-origin.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="/js-test-resources/js-test.js"></script>
 <script>
 var jsTestIsAsync = true;
diff --git a/third_party/blink/web_tests/http/tests/appcache/404-resource.html b/third_party/blink/web_tests/http/tests/appcache/404-resource.html
index fd48dbb..bb8d860f2 100644
--- a/third_party/blink/web_tests/http/tests/appcache/404-resource.html
+++ b/third_party/blink/web_tests/http/tests/appcache/404-resource.html
@@ -1,4 +1,9 @@
 <html manifest="resources/404-resource.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="/js-test-resources/js-test.js"></script>
 <script>
 var jsTestIsAsync = true;
diff --git a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-manifest-404.html b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-manifest-404.html
index 00854f8..f43c146 100644
--- a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-manifest-404.html
+++ b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-manifest-404.html
@@ -1,4 +1,9 @@
 <html manifest="resources/abort-cache-onchecking-manifest-404.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-resource-404.html b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-resource-404.html
index 75710e9..eadf1b6d 100644
--- a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-resource-404.html
+++ b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking-resource-404.html
@@ -1,4 +1,9 @@
 <html manifest="resources/abort-cache-onchecking-resource-404.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking.html b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking.html
index 76e4b78..0fa0bbd 100644
--- a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking.html
+++ b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onchecking.html
@@ -1,4 +1,9 @@
 <html manifest="resources/abort-cache-onchecking.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-manifest-404.html b/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-manifest-404.html
index 67738ab..6b78f73 100644
--- a/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-manifest-404.html
+++ b/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-manifest-404.html
@@ -1,4 +1,9 @@
 <html manifest="resources/abort-cache-ondownloading-manifest-404.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-resource-404.html b/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-resource-404.html
index b36efd2..98f7a78 100644
--- a/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-resource-404.html
+++ b/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading-resource-404.html
@@ -1,4 +1,9 @@
 <html manifest="resources/abort-cache-ondownloading-resource-404.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading.html b/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading.html
index 1903fa2..57a43b0f 100644
--- a/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading.html
+++ b/third_party/blink/web_tests/http/tests/appcache/abort-cache-ondownloading.html
@@ -1,4 +1,9 @@
 <html manifest="resources/abort-cache-ondownloading.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onprogress.html b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onprogress.html
index 80202d1..1a47f03 100644
--- a/third_party/blink/web_tests/http/tests/appcache/abort-cache-onprogress.html
+++ b/third_party/blink/web_tests/http/tests/appcache/abort-cache-onprogress.html
@@ -1,4 +1,9 @@
 <html manifest="resources/abort-cache-onprogress.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/access-via-redirect-expected.txt b/third_party/blink/web_tests/http/tests/appcache/access-via-redirect-expected.txt
index 9626720..93ac140 100644
--- a/third_party/blink/web_tests/http/tests/appcache/access-via-redirect-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/access-via-redirect-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 16: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 21: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 This tests that the start of redirect chain doesn't get into an application cache if the end of the chain has a manifest.
 
 SUCCESS
diff --git a/third_party/blink/web_tests/http/tests/appcache/crash-when-navigating-away-then-back.html b/third_party/blink/web_tests/http/tests/appcache/crash-when-navigating-away-then-back.html
index 7581a16..ea9e069 100644
--- a/third_party/blink/web_tests/http/tests/appcache/crash-when-navigating-away-then-back.html
+++ b/third_party/blink/web_tests/http/tests/appcache/crash-when-navigating-away-then-back.html
@@ -1,4 +1,9 @@
 <html>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 function openWindow()
 {
diff --git a/third_party/blink/web_tests/http/tests/appcache/credential-url.html b/third_party/blink/web_tests/http/tests/appcache/credential-url.html
index d0a1cc7..6a8f765 100644
--- a/third_party/blink/web_tests/http/tests/appcache/credential-url.html
+++ b/third_party/blink/web_tests/http/tests/appcache/credential-url.html
@@ -1,4 +1,9 @@
 <html manifest="http://user:password@127.0.0.1:8000/appcache/resources/empty.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that application cache doesn't block loading resources from the same origin with credential.</p>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri-expected.txt b/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri-expected.txt
index f0d05eb..0712d9ad 100644
--- a/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 33: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 38: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that non-ASCII URIs work correctly in cache manifests.
 
 Should be a series of PASS messages, followed with DONE.
diff --git a/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri.html b/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri.html
index 1bd60cb..eff985e 100644
--- a/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri.html
+++ b/third_party/blink/web_tests/http/tests/appcache/cyrillic-uri.html
@@ -1,6 +1,11 @@
 <html manifest="resources/cyrillic-uri.manifest">
 <head>
 <meta charset="koi8-r">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 </head>
 <body>
 <p>Test that non-ASCII URIs work correctly in cache manifests.</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising-timer.html b/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising-timer.html
index 0bdc7107..48c65a9a 100644
--- a/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising-timer.html
+++ b/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising-timer.html
@@ -1,4 +1,9 @@
 <html>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
   testRunner.dumpAsText();
diff --git a/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising.html b/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising.html
index c61f427..0dbd600 100644
--- a/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising.html
+++ b/third_party/blink/web_tests/http/tests/appcache/deferred-events-delete-while-raising.html
@@ -1,5 +1,10 @@
 <html manifest="THIS_FILE_DOES_NOT_EXIST.manifest">
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
   <script src="THIS_FILE_DOES_NOT_EXIST.js" type="text/javascript"></script>
   <script type="text/javascript">
     var isParentFrame = window == window.top;
diff --git a/third_party/blink/web_tests/http/tests/appcache/deferred-events.html b/third_party/blink/web_tests/http/tests/appcache/deferred-events.html
index 1a822fc..3ee38f5 100644
--- a/third_party/blink/web_tests/http/tests/appcache/deferred-events.html
+++ b/third_party/blink/web_tests/http/tests/appcache/deferred-events.html
@@ -1,5 +1,10 @@
 <html manifest="THIS_FILE_DOES_NOT_EXIST.manifest">
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
   <script type="text/javascript">
     var onloadHasBeenCalled = false;
 
diff --git a/third_party/blink/web_tests/http/tests/appcache/destroyed-frame.html b/third_party/blink/web_tests/http/tests/appcache/destroyed-frame.html
index 0d10f17c..6192cb0 100644
--- a/third_party/blink/web_tests/http/tests/appcache/destroyed-frame.html
+++ b/third_party/blink/web_tests/http/tests/appcache/destroyed-frame.html
@@ -17,6 +17,12 @@
 function test()
 {
     ifrCache = frames[0].applicationCache;
+    // If the origin trial is required, then about:blank will not have
+    // an applicationCache.  In this case, just early out.
+    if (!ifrCache) {
+        testRunner.notifyDone();
+        return;
+    }
     document.body.removeChild(document.getElementsByTagName("iframe")[0]);
     setTimeout(function() {
         gc();
diff --git a/third_party/blink/web_tests/http/tests/appcache/detached-iframe.html b/third_party/blink/web_tests/http/tests/appcache/detached-iframe.html
index c0842b73..d1455ef 100644
--- a/third_party/blink/web_tests/http/tests/appcache/detached-iframe.html
+++ b/third_party/blink/web_tests/http/tests/appcache/detached-iframe.html
@@ -1,3 +1,8 @@
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body onload = "test()">
 <p>Test that accessing a detached iframe's applicationCache window property doesn't assert. If you don't see an assert, it passed.</p>
 <iframe src="about:blank"></iframe>
diff --git a/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest-expected.txt b/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest-expected.txt
index 94cf7f5..0e344ff 100644
--- a/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 28: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
+CONSOLE WARNING: line 33: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that a different origin manifest is completely ignored.
 
 PASS
diff --git a/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest.html b/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest.html
index 293bfc4e..e77ca6ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest.html
+++ b/third_party/blink/web_tests/http/tests/appcache/different-origin-manifest.html
@@ -1,4 +1,9 @@
 <html manifest="http://localhost:8000/appcache/resources/empty.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <p>Test that a different origin manifest is completely ignored.</p>
 <div id=result></div>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/different-scheme.html b/third_party/blink/web_tests/http/tests/appcache/different-scheme.html
index 7c69a5c..bfdcce6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/different-scheme.html
+++ b/third_party/blink/web_tests/http/tests/appcache/different-scheme.html
@@ -1,4 +1,9 @@
 <html manifest="resources/different-scheme.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that application cache doesn't block loading resources with different schemes.</p>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2-expected.txt b/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2-expected.txt
index de2aefe..ecf7f80 100644
--- a/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2-expected.txt
@@ -1,4 +1,4 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 11: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
+CONSOLE WARNING: line 16: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 SUCCESS, no assertion failure
 applicationCache.status == 1
diff --git a/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2.html b/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2.html
index 36cbd62..eacc1c8 100644
--- a/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/document-write-html-element-2.html
@@ -1,4 +1,9 @@
 <html manifest="resources/document-write-html-element.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText();
diff --git a/third_party/blink/web_tests/http/tests/appcache/document-write-html-element.html b/third_party/blink/web_tests/http/tests/appcache/document-write-html-element.html
index ad6afdc..98ec2cc 100644
--- a/third_party/blink/web_tests/http/tests/appcache/document-write-html-element.html
+++ b/third_party/blink/web_tests/http/tests/appcache/document-write-html-element.html
@@ -1,3 +1,8 @@
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText();
diff --git a/third_party/blink/web_tests/http/tests/appcache/empty-manifest.html b/third_party/blink/web_tests/http/tests/appcache/empty-manifest.html
index afdc0f62..5cd8793 100644
--- a/third_party/blink/web_tests/http/tests/appcache/empty-manifest.html
+++ b/third_party/blink/web_tests/http/tests/appcache/empty-manifest.html
@@ -1,4 +1,9 @@
 <html manifest="resources/empty.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 
 <div>This tests that the cached event gets sent even if the manifest is empty.</div>
 <div id="result">FAILURE</div>
diff --git a/third_party/blink/web_tests/http/tests/appcache/exceptions.html b/third_party/blink/web_tests/http/tests/appcache/exceptions.html
index 2ba16e3c..24b035df 100644
--- a/third_party/blink/web_tests/http/tests/appcache/exceptions.html
+++ b/third_party/blink/web_tests/http/tests/appcache/exceptions.html
@@ -1,6 +1,11 @@
 <!DOCTYPE html>
 <html>
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 </head>
 <body>
     <script src="/js-test-resources/js-test.js"></script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/fail-on-update-2.html b/third_party/blink/web_tests/http/tests/appcache/fail-on-update-2.html
index 3ab4fa1..fed52b8 100644
--- a/third_party/blink/web_tests/http/tests/appcache/fail-on-update-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/fail-on-update-2.html
@@ -1,6 +1,11 @@
 <!DOCTYPE HTML>
 <html manifest="resources/fail-on-update-2.php">
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <title>fail-on-update-2.html</title>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/fail-on-update.html b/third_party/blink/web_tests/http/tests/appcache/fail-on-update.html
index b6dbd6a..bc4776b 100644
--- a/third_party/blink/web_tests/http/tests/appcache/fail-on-update.html
+++ b/third_party/blink/web_tests/http/tests/appcache/fail-on-update.html
@@ -1,6 +1,11 @@
 <!DOCTYPE HTML>
 <html manifest="resources/fail-on-update.php">
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <title>fail-on-update.html</title>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/fallback-expected.txt b/third_party/blink/web_tests/http/tests/appcache/fallback-expected.txt
index 36df90e..3aface7 100644
--- a/third_party/blink/web_tests/http/tests/appcache/fallback-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/fallback-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 24: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 29: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test application cache fallback entries.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/fallback.html b/third_party/blink/web_tests/http/tests/appcache/fallback.html
index a856f911..babd1df 100644
--- a/third_party/blink/web_tests/http/tests/appcache/fallback.html
+++ b/third_party/blink/web_tests/http/tests/appcache/fallback.html
@@ -1,4 +1,9 @@
 <html manifest="resources/root-scope-fallback-manifest.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test application cache fallback entries.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/foreign-fallback.html b/third_party/blink/web_tests/http/tests/appcache/foreign-fallback.html
index 23ad82e..d40750a 100644
--- a/third_party/blink/web_tests/http/tests/appcache/foreign-fallback.html
+++ b/third_party/blink/web_tests/http/tests/appcache/foreign-fallback.html
@@ -1,4 +1,9 @@
 <html manifest="resources/foreign-fallback.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=44406">bug 44406</a>:
 Application Cache crash when a fallback document has a manifest URL.</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/foreign-iframe-main.html b/third_party/blink/web_tests/http/tests/appcache/foreign-iframe-main.html
index 5ba687f8..ef0f9a9 100644
--- a/third_party/blink/web_tests/http/tests/appcache/foreign-iframe-main.html
+++ b/third_party/blink/web_tests/http/tests/appcache/foreign-iframe-main.html
@@ -1,4 +1,9 @@
 <html manifest="resources/foreign-iframe.manifest"> <!-- Any manifest would do the trick. -->
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test for <a href="rdar://problem/6284708">&lt;rdar://problem/6284708></a> AppCache crashes in ApplicationCacheResource::addType().</p>
 
diff --git a/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest-2.html b/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest-2.html
index 4539ca6..9b7f88a0 100644
--- a/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest-2.html
@@ -1,4 +1,9 @@
 <html>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <div></div>
 <script>
 if (window.testRunner) {
diff --git a/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest.html b/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest.html
index fc49822..137c5146 100644
--- a/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest.html
+++ b/third_party/blink/web_tests/http/tests/appcache/insert-html-element-with-manifest.html
@@ -1,4 +1,9 @@
 <html>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText();
diff --git a/third_party/blink/web_tests/http/tests/appcache/local-content-expected.txt b/third_party/blink/web_tests/http/tests/appcache/local-content-expected.txt
index 37ad6f8..b5aa372 100644
--- a/third_party/blink/web_tests/http/tests/appcache/local-content-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/local-content-expected.txt
@@ -1,6 +1,6 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE ERROR: line 28: Not allowed to load local resource: stdio.h
+CONSOLE ERROR: line 33: Not allowed to load local resource: stdio.h
 Test that documents loaded from application cache don't get access to local resources accidentally.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/local-content.html b/third_party/blink/web_tests/http/tests/appcache/local-content.html
index 8829931b..65281bd6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/local-content.html
+++ b/third_party/blink/web_tests/http/tests/appcache/local-content.html
@@ -1,4 +1,9 @@
 <html manifest="resources/local-content.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that documents loaded from application cache don't get access to local resources accidentally.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/main-resource-hash-expected.txt b/third_party/blink/web_tests/http/tests/appcache/main-resource-hash-expected.txt
index a012264..c6a0880 100644
--- a/third_party/blink/web_tests/http/tests/appcache/main-resource-hash-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/main-resource-hash-expected.txt
@@ -1,4 +1,4 @@
-CONSOLE WARNING: line 21: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 26: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that offline applications' main resources are not affected by URL hashes.
 
diff --git a/third_party/blink/web_tests/http/tests/appcache/main-resource-hash.html b/third_party/blink/web_tests/http/tests/appcache/main-resource-hash.html
index 70060766..7d4539d 100644
--- a/third_party/blink/web_tests/http/tests/appcache/main-resource-hash.html
+++ b/third_party/blink/web_tests/http/tests/appcache/main-resource-hash.html
@@ -1,4 +1,9 @@
 <html>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that offline applications' main resources are not affected by URL hashes.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect-expected.txt b/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect-expected.txt
index b8b6d87..664916c 100644
--- a/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 3: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
+CONSOLE WARNING: line 8: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that application cache is consulted again after a redirect response.
 
 PASS
diff --git a/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect.html b/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect.html
index 4989fdc95..c4ea8e9 100644
--- a/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect.html
+++ b/third_party/blink/web_tests/http/tests/appcache/main-resource-redirect.html
@@ -1,4 +1,9 @@
 <html manifest="resources/main-resource-redirect.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that application cache is consulted again after a redirect response.</p>
 <div id="result">Testing...</div>
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-containing-itself.html b/third_party/blink/web_tests/http/tests/appcache/manifest-containing-itself.html
index 92c7746..9a180ce 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-containing-itself.html
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-containing-itself.html
@@ -1,4 +1,9 @@
 <html manifest="resources/manifest-containing-itself.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 
 <div>This tests that a manifest can contain itself as a resource.</div>
 <div id="result">FAILURE</div>
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-parsing-expected.txt b/third_party/blink/web_tests/http/tests/appcache/manifest-parsing-expected.txt
index efe7a30..8f866bb6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-parsing-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-parsing-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 21: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 26: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test application cache manifest parsing.
 
 SUCCESS
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-parsing.html b/third_party/blink/web_tests/http/tests/appcache/manifest-parsing.html
index b500694..4c43055 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-parsing.html
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-parsing.html
@@ -1,4 +1,9 @@
 <html manifest="resources/manifest-parsing.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test application cache manifest parsing.</p>
 <div id=result></div>
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2-expected.txt b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2-expected.txt
index 88da94f..c65da03 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 25: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
+CONSOLE WARNING: line 30: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that a redirect makes resource caching fail.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2.html b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2.html
index 939ef42..cf6f70d 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-2.html
@@ -1,4 +1,9 @@
 <html manifest="resources/manifest-redirect-2.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a redirect makes resource caching fail.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-expected.txt b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-expected.txt
index 88da94f..c65da03 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 25: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
+CONSOLE WARNING: line 30: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that a redirect makes resource caching fail.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect.html b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect.html
index 9f16d184..9e622a81b 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-redirect.html
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-redirect.html
@@ -1,4 +1,9 @@
 <html manifest="resources/manifest-redirect.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a redirect makes resource caching fail.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/manifest-with-empty-file.html b/third_party/blink/web_tests/http/tests/appcache/manifest-with-empty-file.html
index 43015a78..aa2cdd3 100644
--- a/third_party/blink/web_tests/http/tests/appcache/manifest-with-empty-file.html
+++ b/third_party/blink/web_tests/http/tests/appcache/manifest-with-empty-file.html
@@ -1,4 +1,10 @@
 <html manifest="resources/manifest-with-empty-file.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
+
 <div>This tests that a manifest that contains an empty file will not crash the browser.</div>
 <div id="result">FAILURE</div>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/modified-manifest.html b/third_party/blink/web_tests/http/tests/appcache/modified-manifest.html
index f31d7e6c..48a3597 100644
--- a/third_party/blink/web_tests/http/tests/appcache/modified-manifest.html
+++ b/third_party/blink/web_tests/http/tests/appcache/modified-manifest.html
@@ -1,4 +1,9 @@
 <html manifest="resources/modified-manifest.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="/js-test-resources/js-test.js"></script>
 <script>
 var jsTestIsAsync = true;
diff --git a/third_party/blink/web_tests/http/tests/appcache/multi-fallback-expected.txt b/third_party/blink/web_tests/http/tests/appcache/multi-fallback-expected.txt
index 188e3ee..2f8ab621 100644
--- a/third_party/blink/web_tests/http/tests/appcache/multi-fallback-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/multi-fallback-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 24: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 29: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test application cache fallback entries with multiple candidates.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/multi-fallback.html b/third_party/blink/web_tests/http/tests/appcache/multi-fallback.html
index 1be5a39..d3a2eab 100644
--- a/third_party/blink/web_tests/http/tests/appcache/multi-fallback.html
+++ b/third_party/blink/web_tests/http/tests/appcache/multi-fallback.html
@@ -1,4 +1,9 @@
 <html manifest="resources/root-scope-multi-fallback-manifest.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test application cache fallback entries with multiple candidates.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/navigating-away-while-cache-attempt-in-progress.html b/third_party/blink/web_tests/http/tests/appcache/navigating-away-while-cache-attempt-in-progress.html
index c17c8f9..71bdb18 100644
--- a/third_party/blink/web_tests/http/tests/appcache/navigating-away-while-cache-attempt-in-progress.html
+++ b/third_party/blink/web_tests/http/tests/appcache/navigating-away-while-cache-attempt-in-progress.html
@@ -1,4 +1,9 @@
 <html manifest="resources/navigating-away-while-cache-attempt-in-progress.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 
 <script>
 if (window.testRunner) {
diff --git a/third_party/blink/web_tests/http/tests/appcache/non-html-expected.txt b/third_party/blink/web_tests/http/tests/appcache/non-html-expected.txt
index e57127e1..e20370d98 100644
--- a/third_party/blink/web_tests/http/tests/appcache/non-html-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/non-html-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 47: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 49: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that non-HTML main resources work with application cache correctly.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/non-html.xhtml b/third_party/blink/web_tests/http/tests/appcache/non-html.xhtml
index 0d86681..4a4f20ef 100644
--- a/third_party/blink/web_tests/http/tests/appcache/non-html.xhtml
+++ b/third_party/blink/web_tests/http/tests/appcache/non-html.xhtml
@@ -1,6 +1,8 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
       manifest="/resources/network-simulator.php?path=/appcache/resources/non-html.manifest">
-<head><title/></head>
+<head><title/>
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0="/>
+</head>
 <body>
 <p>Test that non-HTML main resources work with application cache correctly.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/obsolete-error-events.html b/third_party/blink/web_tests/http/tests/appcache/obsolete-error-events.html
index 5457e234..09598e0 100644
--- a/third_party/blink/web_tests/http/tests/appcache/obsolete-error-events.html
+++ b/third_party/blink/web_tests/http/tests/appcache/obsolete-error-events.html
@@ -1,6 +1,11 @@
 <!DOCTYPE HTML>
 <html manifest="resources/fail-on-update.php">
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <title>obsolete-error-events.html</title>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/offline-access-expected.txt b/third_party/blink/web_tests/http/tests/appcache/offline-access-expected.txt
index 983e345..d2f4e38 100644
--- a/third_party/blink/web_tests/http/tests/appcache/offline-access-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/offline-access-expected.txt
@@ -1,4 +1,4 @@
-CONSOLE WARNING: line 21: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 26: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that offline applications work when there is no network access (simulated).
 
diff --git a/third_party/blink/web_tests/http/tests/appcache/offline-access.html b/third_party/blink/web_tests/http/tests/appcache/offline-access.html
index 67a9ca1..0eb0b48f 100644
--- a/third_party/blink/web_tests/http/tests/appcache/offline-access.html
+++ b/third_party/blink/web_tests/http/tests/appcache/offline-access.html
@@ -1,4 +1,9 @@
 <html>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that offline applications work when there is no network access (simulated).</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering-expected.txt b/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering-expected.txt
index de26232..e46fad8 100644
--- a/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 22: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 27: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that a network namespace trumps a fallback namespace where they overlap.
 
 Sanity check the presence of the fallback namespace, should get the fallback resource.
diff --git a/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering.html b/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering.html
index 5b3a6995..c111221 100644
--- a/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering.html
+++ b/third_party/blink/web_tests/http/tests/appcache/online-fallback-layering.html
@@ -1,5 +1,10 @@
 <html manifest=resources/online-fallback-layering.manifest>
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 
 if (window.testRunner) {
diff --git a/third_party/blink/web_tests/http/tests/appcache/online-whitelist-expected.txt b/third_party/blink/web_tests/http/tests/appcache/online-whitelist-expected.txt
index 719c5d5..9ab866bff 100644
--- a/third_party/blink/web_tests/http/tests/appcache/online-whitelist-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/online-whitelist-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 35: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 40: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test online whitelist functionality. Should say PASS:
 
 PASS
diff --git a/third_party/blink/web_tests/http/tests/appcache/online-whitelist.html b/third_party/blink/web_tests/http/tests/appcache/online-whitelist.html
index e58812b7..204d832 100644
--- a/third_party/blink/web_tests/http/tests/appcache/online-whitelist.html
+++ b/third_party/blink/web_tests/http/tests/appcache/online-whitelist.html
@@ -1,4 +1,9 @@
 <html manifest="resources/online-whitelist.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test online whitelist functionality. Should say PASS:</p>
 
diff --git a/third_party/blink/web_tests/http/tests/appcache/origin-trial/uncached-if-no-manifest-token.html b/third_party/blink/web_tests/http/tests/appcache/origin-trial/uncached-if-no-manifest-token.html
index 6eac2be1..6e5dbe3a 100644
--- a/third_party/blink/web_tests/http/tests/appcache/origin-trial/uncached-if-no-manifest-token.html
+++ b/third_party/blink/web_tests/http/tests/appcache/origin-trial/uncached-if-no-manifest-token.html
@@ -1,4 +1,4 @@
-<html manifest="../resources/simple.manifest">
+<html manifest="../resources/simple-no-token.manifest">
 <!--
 Generate this token with the command:
 tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
@@ -38,9 +38,9 @@
 
     event = e;
     shouldBeEqualToString("event.reason", "manifest");
-    shouldBeEqualToString("event.message", "Invalid or missing manifest origin trial token: http://127.0.0.1:8000/appcache/resources/simple.manifest");
+    shouldBeEqualToString("event.message", "Invalid or missing manifest origin trial token: http://127.0.0.1:8000/appcache/resources/simple-no-token.manifest");
 
-    shouldBeEqualToString("event.url", "http://127.0.0.1:8000/appcache/resources/simple.manifest");
+    shouldBeEqualToString("event.url", "http://127.0.0.1:8000/appcache/resources/simple-no-token.manifest");
     // event.status is 0 and not relevant when there is a token error.
     shouldBe("event.status", "0");
 
diff --git a/third_party/blink/web_tests/http/tests/appcache/progress-counter.html b/third_party/blink/web_tests/http/tests/appcache/progress-counter.html
index df6daa2..70e79b7 100644
--- a/third_party/blink/web_tests/http/tests/appcache/progress-counter.html
+++ b/third_party/blink/web_tests/http/tests/appcache/progress-counter.html
@@ -1,4 +1,9 @@
 <html manifest="resources/progress-counter.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/reload-expected.txt b/third_party/blink/web_tests/http/tests/appcache/reload-expected.txt
index 5d628431..3e0a3c6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/reload-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/reload-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 8: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 13: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that the manifest is picked correctly when reloading.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/reload.html b/third_party/blink/web_tests/http/tests/appcache/reload.html
index 47a49fce..70b9a26b 100644
--- a/third_party/blink/web_tests/http/tests/appcache/reload.html
+++ b/third_party/blink/web_tests/http/tests/appcache/reload.html
@@ -1,4 +1,9 @@
 <html>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that the manifest is picked correctly when reloading.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/remove-cache.html b/third_party/blink/web_tests/http/tests/appcache/remove-cache.html
index b9cbb57..217bb84 100644
--- a/third_party/blink/web_tests/http/tests/appcache/remove-cache.html
+++ b/third_party/blink/web_tests/http/tests/appcache/remove-cache.html
@@ -1,5 +1,10 @@
 <html manifest="resources/fail-on-update.php">
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <title>remove-cache.html</title>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2-expected.txt b/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2-expected.txt
index 88da94f..c65da03 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 25: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
+CONSOLE WARNING: line 30: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that a redirect makes resource caching fail.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2.html b/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2.html
index 301788f..bd551de1 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resource-redirect-2.html
@@ -1,4 +1,9 @@
 <html manifest="resources/resource-redirect-2.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a redirect makes resource caching fail.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resource-redirect.html b/third_party/blink/web_tests/http/tests/appcache/resource-redirect.html
index a42adf4..a5e6f38 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resource-redirect.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resource-redirect.html
@@ -1,4 +1,9 @@
 <html manifest="resources/resource-redirect.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="/js-test-resources/js-test.js"></script>
 <script>
 var jsTestIsAsync = true;
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/404-resource-cross-origin.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/404-resource-cross-origin.manifest
index 7354f00..05598b7c 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/404-resource-cross-origin.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/404-resource-cross-origin.manifest
@@ -2,3 +2,5 @@
 CACHE:
 simple.txt
 http://127.0.0.1/does-not-exist.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/404-resource.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/404-resource.manifest
index b2c066dd..8b205e0 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/404-resource.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/404-resource.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 does-not-exist.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking-resource-404.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking-resource-404.manifest
index efd5830b..50757dd 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking-resource-404.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking-resource-404.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
-not-exist.vob
\ No newline at end of file
+not-exist.vob
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking.manifest
index 54b75b1..20b05c27 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onchecking.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
-abort-cache-onchecking.text
\ No newline at end of file
+abort-cache-onchecking.text
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading-resource-404.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading-resource-404.manifest
index efd5830b..50757dd 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading-resource-404.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading-resource-404.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
-not-exist.vob
\ No newline at end of file
+not-exist.vob
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading.manifest
index c3898ae..7df1317 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-ondownloading.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
-abort-cache-ondownloading.text
\ No newline at end of file
+abort-cache-ondownloading.text
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onprogress.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onprogress.manifest
index 2f5ab5d..5b98bf3 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onprogress.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/abort-cache-onprogress.manifest
@@ -4,3 +4,5 @@
 abort-cache-onprogress-3.text
 abort-cache-onprogress-4.text
 
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.html b/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.html
index 945b85e..3417f22 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.html
@@ -1,4 +1,9 @@
 <html manifest="access-via-redirect.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 
 <p>This tests that the start of redirect chain doesn't get into an application cache if the end of the chain has a manifest.</p>
 <p id="result">FAILURE</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/access-via-redirect.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.html b/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.html
index fca8dd3..58aba2ab 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.html
@@ -1,4 +1,9 @@
 <html manifest="crash-when-navigating-away-then-back.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 
 function cached()
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.manifest
index a9fb276..77e0a77 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/crash-when-navigating-away-then-back.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 crash-when-navigating-away-then-back.html
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri-form.html b/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri-form.html
index a97c508..3964428 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri-form.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri-form.html
@@ -1,5 +1,11 @@
 <html manifest="cyrillic-uri.manifest">
 <head>
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
+</head>
 <meta charset="koi8-r">
 </head>
 <body>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri.manifest
index 574ab9e..e55f4d54 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/cyrillic-uri.manifest
@@ -8,3 +8,5 @@
 cyrillic-uri-form.html?i=Проверка-2
 FALLBACK:
 does-not-exist-Проверка intercept/fallback-Проверка
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-1.html b/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-1.html
index 9170514..16af845 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-1.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-1.html
@@ -1,4 +1,9 @@
 <html manifest="THIS_FILE_DOES_NOT_EXIST.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="THIS_FILE_DOES_NOT_EXIST.js"></script>
 <script>
 window.applicationCache.onchecking = function() {
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-2.html b/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-2.html
index a103913..253fafb 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/deferred-events-delete-while-raising-timer-2.html
@@ -1,4 +1,9 @@
 <html manifest="THIS_FILE_DOES_NOT_EXIST.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="THIS_FILE_DOES_NOT_EXIST.js"></script>
 <script>
 window.applicationCache.onchecking = function() {
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.html b/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.html
index 7c24b07..58c2ed29 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.html
@@ -1,4 +1,9 @@
 <html manifest="https://127.0.0.1:8443/appcache/resources/different-https-origin-resource.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py https://127.0.0.1:8443 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AiLmRCfXHl3UQjXZF7fOTiws2+PpdurK7eRm17F/izPG1u0tU9xhE5t013CO5feTWLPUumiMsNg8oGwEsv0tzQkAAABReyJvcmlnaW4iOiAiaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0MyIsICJmZWF0dXJlIjogIkFwcENhY2hlIiwgImV4cGlyeSI6IDE3NjQwOTQyNDF9">
 <script>
 var hadError = false;
 var result;
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.manifest
index 75a58a4..71be30b 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/different-https-origin-resource.manifest
@@ -1,3 +1,5 @@
 CACHE MANIFEST
 CACHE:
 https://localhost:8443/appcache/resources/simple.txt
+ORIGIN-TRIAL:
+AiLmRCfXHl3UQjXZF7fOTiws2+PpdurK7eRm17F/izPG1u0tU9xhE5t013CO5feTWLPUumiMsNg8oGwEsv0tzQkAAABReyJvcmlnaW4iOiAiaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0MyIsICJmZWF0dXJlIjogIkFwcENhY2hlIiwgImV4cGlyeSI6IDE3NjQwOTQyNDF9
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/different-scheme.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/different-scheme.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/different-scheme.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/different-scheme.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/document-write-html-element.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/document-write-html-element.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/document-write-html-element.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/document-write-html-element.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/empty.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/empty.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/empty.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/empty.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update-2.php b/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update-2.php
index 4e11735..b81afed 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update-2.php
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update-2.php
@@ -33,6 +33,8 @@
     print("fail-on-update-2.html\n");
     print("NETWORK:\n");
     print("fail-on-update.php?command=\n");
+    print("ORIGIN-TRIAL:\n");
+    print("AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=\n");
 } else if ($state == "Deleted") {
     header('HTTP/1.0 404 Not Found');
 }
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update.php b/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update.php
index b66da78..50af60b 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update.php
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/fail-on-update.php
@@ -32,6 +32,8 @@
     print("CACHE MANIFEST\n");
     print("NETWORK:\n");
     print("fail-on-update.php?command=\n");
+    print("ORIGIN-TRIAL:\n");
+    print("AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=\n");
 } else if ($state == "Deleted") {
     header('HTTP/1.0 404 Not Found');
 }
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/fallback.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/fallback.manifest
index 7375c7d8..1025190 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/fallback.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/fallback.manifest
@@ -2,4 +2,6 @@
 FALLBACK:
 /resources/network-simulator.php? simple.txt
 fallback-redirect simple.txt
-does-not-exist simple.txt
\ No newline at end of file
+does-not-exist simple.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/foreign-fallback.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/foreign-fallback.manifest
index ddaf602..d6664853b 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/foreign-fallback.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/foreign-fallback.manifest
@@ -2,3 +2,6 @@
 
 FALLBACK:
 /appcache/resources/foreign-fallback/ foreign-fallback-fallback.html
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/foreign-iframe.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/foreign-iframe.manifest
index fc0c2f9..8892508 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/foreign-iframe.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/foreign-iframe.manifest
@@ -2,3 +2,5 @@
 simple.txt
 foreign-iframe.html
 foreign-iframe-subresource.js
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/idempotent-update.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/idempotent-update.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/idempotent-update.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/idempotent-update.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/insert-html-element-with-manifest.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/interrupted-update.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/interrupted-update.manifest
index 682d099..e52dcf7 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/interrupted-update.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/interrupted-update.manifest
@@ -8,3 +8,5 @@
 abe.png?interrupted-update-7
 abe.png?interrupted-update-8
 abe.png?interrupted-update-9
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/load-from-appcache-defer-resume-crash.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/load-from-appcache-defer-resume-crash.manifest
index a82a74d..d35e129 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/load-from-appcache-defer-resume-crash.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/load-from-appcache-defer-resume-crash.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/local-content.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/local-content.manifest
index d62c274..6e73d4af 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/local-content.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/local-content.manifest
@@ -2,3 +2,5 @@
 /appcache/local-content.html
 NETWORK:
 file:/ # Should be ignored due to different URL scheme, but it doesn't hurt to try.
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.html b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.html
index 6fc1260..f4cef6d 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.html
@@ -1,4 +1,9 @@
 <html manifest="/appcache/resources/main-resource-hash-frame.manifest#foo">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <div id=result></div>
 <script>
 function log(message)
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-hash-frame.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect-frame-2.html b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect-frame-2.html
index 0acc1e21..41eea11 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect-frame-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect-frame-2.html
@@ -1,4 +1,9 @@
 <html manifest="http://127.0.0.1:8000/appcache/resources/main-resource-redirect.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 parent.document.getElementById("result").innerHTML = (applicationCache.status) > 0 ? "PASS" : "FAIL: child frame status is UNCACHED";
 parent.done();
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect.manifest
index beffe84..48e58f9 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/main-resource-redirect.manifest
@@ -2,3 +2,5 @@
 http://127.0.0.1:8000/resources/network-simulator.php?path=/appcache/resources/main-resource-redirect-frame-2.html
 NETWORK:
 http://127.0.0.1:8000/resources/network-simulator.php?command
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/manifest-containing-itself.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/manifest-containing-itself.manifest
index eb5c126..c576de6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/manifest-containing-itself.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/manifest-containing-itself.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 manifest-containing-itself.manifest
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/manifest-parsing.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/manifest-parsing.manifest
index db694ac..ca01d5a7 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/manifest-parsing.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/manifest-parsing.manifest
@@ -4,3 +4,5 @@
 simple.txt ignored text
 UNKNOWN_SECTION: 
 not-in-cache.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/manifest-with-empty-file.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/manifest-with-empty-file.manifest
index aab054b..2f9c721 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/manifest-with-empty-file.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/manifest-with-empty-file.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 empty.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/maxsize.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/maxsize.manifest
index 934fa6c..b2e65b7 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/maxsize.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/maxsize.manifest
@@ -1,3 +1,5 @@
 CACHE MANIFEST
 #v1
 abe.png
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/modified-manifest.php b/third_party/blink/web_tests/http/tests/appcache/resources/modified-manifest.php
index ca4a03ae..1fc22fef 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/modified-manifest.php
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/modified-manifest.php
@@ -36,4 +36,6 @@
 print("# version " . getCount($tmpFile) . "\n");
 print("CACHE:\n");
 print("modified-manifest.php?command=step\n");
+print("ORIGIN-TRIAL:\n");
+print("AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=\n");
 ?>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/multi-fallback.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/multi-fallback.manifest
index fa5cef033..7f1ae0e 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/multi-fallback.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/multi-fallback.manifest
@@ -3,3 +3,5 @@
 /resources/network-simulator.php? simple.txt
 does-not empty.txt
 does-not-exist simple.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/navigating-away-while-cache-attempt-in-progress.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/navigating-away-while-cache-attempt-in-progress.manifest
index 10f6ddb7..d5a3f4d 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/navigating-away-while-cache-attempt-in-progress.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/navigating-away-while-cache-attempt-in-progress.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 slow-resource.php
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/non-html.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/non-html.manifest
index dc8db7a..70fdf61 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/non-html.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/non-html.manifest
@@ -6,3 +6,5 @@
 NETWORK:
 /favicon.ico
 /resources/network-simulator.php?command=
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/obsolete-error-events-frame.html b/third_party/blink/web_tests/http/tests/appcache/resources/obsolete-error-events-frame.html
index 6a62202..f0f6431 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/obsolete-error-events-frame.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/obsolete-error-events-frame.html
@@ -1,4 +1,9 @@
 <html manifest="fail-on-update.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 
 applicationCache.addEventListener('obsolete', function(e) {
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/offline-access-frame.html b/third_party/blink/web_tests/http/tests/appcache/resources/offline-access-frame.html
index 43015ae..1fbaaba 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/offline-access-frame.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/offline-access-frame.html
@@ -1,4 +1,9 @@
 <html manifest="/resources/network-simulator.php?path=/appcache/resources/offline-access.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <div id=result></div>
 <script>
 function log(message)
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/offline-access.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/offline-access.manifest
index da571b7..28584c6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/offline-access.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/offline-access.manifest
@@ -6,3 +6,6 @@
 
 NETWORK:
 /resources/redirect.php
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/online-fallback-layering.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/online-fallback-layering.manifest
index a98588ee..17e45de 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/online-fallback-layering.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/online-fallback-layering.manifest
@@ -6,3 +6,6 @@
 NETWORK:
 fallbacknamespace-networknamespace-
 *
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/online-whitelist.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/online-whitelist.manifest
index 892bf8d..443ba889 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/online-whitelist.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/online-whitelist.manifest
@@ -11,4 +11,7 @@
 counter.php?cached
 
 # This should work normally.
-counter.php?uncached
\ No newline at end of file
+counter.php?uncached
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.html b/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.html
index e2565f7..81ec6df 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.html
@@ -1,4 +1,9 @@
 <html manifest="origin-delete-iframe.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // iframe-1 is expected to succeed.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe-1", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.manifest
index 6b484482..41601726 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origin-delete-iframe.manifest
@@ -4,3 +4,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.html b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.html
index 64d32c6..00d03055 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.html
@@ -1,4 +1,9 @@
 <html manifest="origin-usage-iframe-1.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // iframe-1 is expected to succeed.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe-1", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.manifest
index 6b484482..41601726 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-1.manifest
@@ -4,3 +4,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.html b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.html
index 99c1aff..dfe5e05 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.html
@@ -1,4 +1,9 @@
 <html manifest="origin-usage-iframe-2.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // iframe-2 is expected to fail due to exceeding the origin quota.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe-2", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.manifest
index 6b484482..41601726 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origin-usage-iframe-2.manifest
@@ -4,3 +4,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.html b/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.html
index 92cf1ff..0538270 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.html
@@ -1,4 +1,9 @@
 <html manifest="origins-with-appcache-iframe.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // iframe-1 is expected to succeed.
 applicationCache.oncached = function() { parent.postMessage("created_cache", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.manifest
index 6b484482..41601726 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/origins-with-appcache-iframe.manifest
@@ -4,3 +4,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/progress-counter.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/progress-counter.manifest
index 7877cd8..9a2db0a 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/progress-counter.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/progress-counter.manifest
@@ -1,3 +1,5 @@
 CACHE MANIFEST
 simple.txt
 empty.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.html b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.html
index 2696bd2..1ea88eb0 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.html
@@ -1,4 +1,9 @@
 <html manifest="quota-origin-continued-download-multiple-manifests-1.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // This is expected to succeed.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.manifest
index 5cffeefa..4e6b15e 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-1.manifest
@@ -4,3 +4,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.html b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.html
index d7f60ac0..8e8ea62 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.html
@@ -1,4 +1,9 @@
 <html manifest="quota-origin-continued-download-multiple-manifests-2.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // This is expected to fail with "spaceNeeded" large enough for both manifest 1 and 2.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.manifest
index 511ce8f..e15d74a 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download-multiple-manifests-2.manifest
@@ -8,3 +8,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.html b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.html
index 4e44dfb..e3175f89 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.html
@@ -1,4 +1,9 @@
 <html manifest="quota-origin-continued-download.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // This is expected to succeed when the quota is reached, download completes, the user is prompted, and they increase storage.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.manifest
index 202ace3..0973972 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-continued-download.manifest
@@ -6,3 +6,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.html b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.html
index c50959f..e807c469 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.html
@@ -1,4 +1,9 @@
 <html manifest="quota-origin-iframe-1.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // iframe-1 is expected to succeed.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe-1", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.manifest
index 63d3784..af179c7 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-1.manifest
@@ -5,3 +5,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.html b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.html
index 0f1c11b..22913db 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.html
@@ -1,4 +1,9 @@
 <html manifest="quota-origin-iframe-2.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // iframe-2 is expected to fail due to exceeding the origin quota.
 applicationCache.oncached = function() { parent.postMessage("FAIL - cached iframe-2, expected this this fail because it reached the quota", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.manifest
index 64292b0..be3f645e 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-2.manifest
@@ -6,3 +6,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.html b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.html
index a185e54..cae39a6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.html
@@ -1,4 +1,9 @@
 <html manifest="quota-origin-iframe-3.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 // iframe-3 is expected to succeed once the quota has been increased.
 applicationCache.oncached = function() { parent.postMessage("PASS - cached iframe-3", "*"); };
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.manifest
index a7e2d3ad..3ff744c 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/quota-origin-iframe-3.manifest
@@ -6,3 +6,6 @@
 
 CACHE:
 abe.png
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.html b/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.html
index 7575bab..65a3406 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.html
@@ -1,4 +1,9 @@
 <html manifest="reload-iframe.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <script>
 function test()
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.manifest
index 668f974..3d570a6f 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/reload-iframe.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 /appcache/resources/simple.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame-2.html b/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame-2.html
index 5d26f1ca..540f769 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame-2.html
@@ -1,4 +1,9 @@
 <html manifest="fail-on-update.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <div id=result></div>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame.html b/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame.html
index 9ce4324..9d64295 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/remove-cache-frame.html
@@ -1,4 +1,9 @@
 <html manifest="fail-on-update.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <div id=result></div>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect-2.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect-2.manifest
index 66cd3fe..52cf3b5 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect-2.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect-2.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 resource-redirect-2.php
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect.manifest
index e94651d..1eae0bf 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/resource-redirect.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 resource-redirect.php
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-fallback-manifest.php b/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-fallback-manifest.php
index e696d85a..5e1fd2e 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-fallback-manifest.php
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-fallback-manifest.php
@@ -12,4 +12,6 @@
 print("/resources/network-simulator.php? simple.txt\n");
 print("fallback-redirect simple.txt\n");
 print("does-not-exist simple.txt\n");
+print("ORIGIN-TRIAL:\n");
+print("AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=\n");
 ?>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-multi-fallback-manifest.php b/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-multi-fallback-manifest.php
index 5adc34f..1c9559b 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-multi-fallback-manifest.php
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/root-scope-multi-fallback-manifest.php
@@ -12,4 +12,6 @@
 print("/resources/network-simulator.php? simple.txt\n");
 print("does-not empty.txt\n");
 print("does-not-exist simple.txt\n");
+print("ORIGIN-TRIAL:\n");
+print("AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=\n");
 ?>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/simple-no-token.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/simple-no-token.manifest
new file mode 100644
index 0000000..3a210f32
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/simple-no-token.manifest
@@ -0,0 +1,2 @@
+CACHE MANIFEST
+simple.txt
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/simple.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/simple.manifest
index 3a210f32..78f3adf 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/simple.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/simple.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 simple.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/subframe-3.html b/third_party/blink/web_tests/http/tests/appcache/resources/subframe-3.html
index b708408..a7b6eff 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/subframe-3.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/subframe-3.html
@@ -1,4 +1,9 @@
 <html manifest="subframes-3.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 function test()
 {
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/subframe-4.html b/third_party/blink/web_tests/http/tests/appcache/resources/subframe-4.html
index da03679..ce3671f 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/subframe-4.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/subframe-4.html
@@ -1,4 +1,9 @@
 <html manifest="subframes-4.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 function test()
 {
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-1.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-1.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-1.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-1.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-2.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-2.manifest
index 645a34f6..9837d76 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-2.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-2.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 subframe-2.html
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-3.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-3.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-3.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-3.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-4.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-4.manifest
index f4e7937..f33336a 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/subframes-4.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/subframes-4.manifest
@@ -1,2 +1,4 @@
 CACHE MANIFEST
 subframe-4.html
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/versioned-manifest.php b/third_party/blink/web_tests/http/tests/appcache/resources/versioned-manifest.php
index 84a7a91..45a272e 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/versioned-manifest.php
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/versioned-manifest.php
@@ -34,4 +34,6 @@
 print("uncacheable-resource.php\n"); // with Cache-control: no-store
 print("NETWORK:\n");
 print("versioned-manifest.php?command=\n");
+print("ORIGIN-TRIAL:\n");
+print("AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=\n");
 ?>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/video.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/video.manifest
index c938031..45371a5 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/video.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/video.manifest
@@ -4,4 +4,7 @@
 /media-resources/content/test.ogv
 
 /resources/testharness.js
-/resources/testharnessreport.js
\ No newline at end of file
+/resources/testharnessreport.js
+
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/whitelist-wildcard.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/whitelist-wildcard.manifest
index 8f88a4a..1cbe828 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/whitelist-wildcard.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/whitelist-wildcard.manifest
@@ -1,3 +1,5 @@
 CACHE MANIFEST
 NETWORK:
 *
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/wrong-content-type.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/wrong-content-type.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/wrong-content-type.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/wrong-content-type.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature-2.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature-2.manifest
index d7d3f8d..3779d24 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature-2.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature-2.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST;V2
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature.manifest
index aab49be..bfa97f73 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/wrong-signature.manifest
@@ -1 +1,3 @@
 A CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-2.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-2.manifest
index af16a0e..d6672ac 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-2.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-2.manifest
@@ -1 +1,3 @@
 CACHE MANIFEST
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-frame.html b/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-frame.html
index 57093fa..f8e59a1 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-frame.html
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource-frame.html
@@ -1,4 +1,9 @@
 <html manifest="xhr-foreign-resource-2.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <div id=result></div>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource.manifest b/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource.manifest
index 8cfe428..68e18c8 100644
--- a/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource.manifest
+++ b/third_party/blink/web_tests/http/tests/appcache/resources/xhr-foreign-resource.manifest
@@ -1,3 +1,5 @@
 CACHE MANIFEST
 xhr-foreign-resource-frame.html
 simple.txt
+ORIGIN-TRIAL:
+AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=
diff --git a/third_party/blink/web_tests/http/tests/appcache/simple-expected.txt b/third_party/blink/web_tests/http/tests/appcache/simple-expected.txt
index 7682fb2a..e205fe6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/simple-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/simple-expected.txt
@@ -1,4 +1,4 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 15: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 20: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 This tests that the application cache works by first loading a file that does not exist in the cache (to verify that a cache has been associated) and then loads a file that is in the cache
 SUCCESS
diff --git a/third_party/blink/web_tests/http/tests/appcache/simple.html b/third_party/blink/web_tests/http/tests/appcache/simple.html
index 931cf00..40de6d39 100644
--- a/third_party/blink/web_tests/http/tests/appcache/simple.html
+++ b/third_party/blink/web_tests/http/tests/appcache/simple.html
@@ -1,4 +1,9 @@
 <html manifest="resources/simple.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script>
 if (window.testRunner) {
     testRunner.dumpAsText()
diff --git a/third_party/blink/web_tests/http/tests/appcache/top-frame-1.html b/third_party/blink/web_tests/http/tests/appcache/top-frame-1.html
index fa4caa3..b14ffed 100644
--- a/third_party/blink/web_tests/http/tests/appcache/top-frame-1.html
+++ b/third_party/blink/web_tests/http/tests/appcache/top-frame-1.html
@@ -1,4 +1,9 @@
 <html manifest="resources/subframes-1.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a subframe without manifest doesn't pick an application cache from parent frame
 (as long as no relevant cache contains its resource).</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/top-frame-2.html b/third_party/blink/web_tests/http/tests/appcache/top-frame-2.html
index 9ad32f0..5c6be9a6 100644
--- a/third_party/blink/web_tests/http/tests/appcache/top-frame-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/top-frame-2.html
@@ -1,4 +1,9 @@
 <html manifest="resources/subframes-2.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a subframe without manifest gets picked by a relevant application cache that
 contains its resource.</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/top-frame-3-expected.txt b/third_party/blink/web_tests/http/tests/appcache/top-frame-3-expected.txt
index 7866680d..23df8a7 100644
--- a/third_party/blink/web_tests/http/tests/appcache/top-frame-3-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/top-frame-3-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 9: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 14: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that a subframe with manifest that matches top frame manifest works correctly.
 
 In this case, the subframe resource is NOT listed in manifest explicitly.
diff --git a/third_party/blink/web_tests/http/tests/appcache/top-frame-3.html b/third_party/blink/web_tests/http/tests/appcache/top-frame-3.html
index 1032d72..f04fd78 100644
--- a/third_party/blink/web_tests/http/tests/appcache/top-frame-3.html
+++ b/third_party/blink/web_tests/http/tests/appcache/top-frame-3.html
@@ -1,4 +1,9 @@
 <html manifest="resources/subframes-3.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a subframe with manifest that matches top frame manifest works correctly.</p>
 <p>In this case, the subframe resource is NOT listed in manifest explicitly.</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/top-frame-4-expected.txt b/third_party/blink/web_tests/http/tests/appcache/top-frame-4-expected.txt
index e957516..0e4f2f0 100644
--- a/third_party/blink/web_tests/http/tests/appcache/top-frame-4-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/top-frame-4-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 9: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 14: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that a subframe with manifest that matches top frame manifest works correctly.
 
 In this case, the subframe resource is listed in manifest explicitly.
diff --git a/third_party/blink/web_tests/http/tests/appcache/top-frame-4.html b/third_party/blink/web_tests/http/tests/appcache/top-frame-4.html
index 6623bf49..755be7f 100644
--- a/third_party/blink/web_tests/http/tests/appcache/top-frame-4.html
+++ b/third_party/blink/web_tests/http/tests/appcache/top-frame-4.html
@@ -1,4 +1,9 @@
 <html manifest="resources/subframes-4.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a subframe with manifest that matches top frame manifest works correctly.</p>
 <p>In this case, the subframe resource is listed in manifest explicitly.</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/update-cache-expected.txt b/third_party/blink/web_tests/http/tests/appcache/update-cache-expected.txt
index 91e42db..fe80663 100644
--- a/third_party/blink/web_tests/http/tests/appcache/update-cache-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/update-cache-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 20: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 25: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 CONSOLE WARNING: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test a simple offline application self-update process. Should print a series of messages followed with DONE:
 
diff --git a/third_party/blink/web_tests/http/tests/appcache/update-cache.html b/third_party/blink/web_tests/http/tests/appcache/update-cache.html
index df63130..f33ffb2 100644
--- a/third_party/blink/web_tests/http/tests/appcache/update-cache.html
+++ b/third_party/blink/web_tests/http/tests/appcache/update-cache.html
@@ -1,4 +1,9 @@
 <html manifest="resources/versioned-manifest.php">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test a simple offline application self-update process. Should print a series of messages followed with DONE:</p>
 <div id=result></div>
diff --git a/third_party/blink/web_tests/http/tests/appcache/video.html b/third_party/blink/web_tests/http/tests/appcache/video.html
index 0ed8c09..7105149 100644
--- a/third_party/blink/web_tests/http/tests/appcache/video.html
+++ b/third_party/blink/web_tests/http/tests/appcache/video.html
@@ -1,5 +1,10 @@
 <!DOCTYPE html>
 <html manifest="resources/video.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <title>Test that "video" can be loaded from the application cache.</title>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
@@ -34,4 +39,4 @@
         video.onerror = t.step_func_done();
     }
 });
-</script>
\ No newline at end of file
+</script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard-expected.txt b/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard-expected.txt
index a4d705b..34988ae4 100644
--- a/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 14: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 19: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that online whitelist wildcard flag is implemented.
 
 SUCCESS
diff --git a/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard.html b/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard.html
index 77fab60..57dab543 100644
--- a/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard.html
+++ b/third_party/blink/web_tests/http/tests/appcache/whitelist-wildcard.html
@@ -1,4 +1,9 @@
 <html manifest="resources/whitelist-wildcard.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that online whitelist wildcard flag is implemented.</p>
 <script>
diff --git a/third_party/blink/web_tests/http/tests/appcache/wrong-content-type-expected.txt b/third_party/blink/web_tests/http/tests/appcache/wrong-content-type-expected.txt
index 05ec409..20acc52 100644
--- a/third_party/blink/web_tests/http/tests/appcache/wrong-content-type-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/wrong-content-type-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 26: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
+CONSOLE WARNING: line 31: Application Cache API use is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
 Test that a manifest served with an arbitrary content-type is OK.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/wrong-content-type.html b/third_party/blink/web_tests/http/tests/appcache/wrong-content-type.html
index 5b2fd73..3312089e 100644
--- a/third_party/blink/web_tests/http/tests/appcache/wrong-content-type.html
+++ b/third_party/blink/web_tests/http/tests/appcache/wrong-content-type.html
@@ -1,4 +1,9 @@
 <html manifest="resources/wrong-content-type.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a manifest served with an arbitrary content-type is OK.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/http/tests/appcache/wrong-signature-2.html b/third_party/blink/web_tests/http/tests/appcache/wrong-signature-2.html
index 5b6a3812..a00a566 100644
--- a/third_party/blink/web_tests/http/tests/appcache/wrong-signature-2.html
+++ b/third_party/blink/web_tests/http/tests/appcache/wrong-signature-2.html
@@ -1,4 +1,9 @@
 <html manifest="resources/wrong-signature-2.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="/js-test-resources/js-test.js"></script>
 <script>
 var jsTestIsAsync = true;
diff --git a/third_party/blink/web_tests/http/tests/appcache/wrong-signature.html b/third_party/blink/web_tests/http/tests/appcache/wrong-signature.html
index 2e572b4..0678b95d 100644
--- a/third_party/blink/web_tests/http/tests/appcache/wrong-signature.html
+++ b/third_party/blink/web_tests/http/tests/appcache/wrong-signature.html
@@ -1,4 +1,9 @@
 <html manifest="resources/wrong-signature.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <script src="/js-test-resources/js-test.js"></script>
 <script>
 var jsTestIsAsync = true;
diff --git a/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource-expected.txt b/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource-expected.txt
index 34d681b..e37a544 100644
--- a/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource-expected.txt
+++ b/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE WARNING: Application Cache API manifest selection is deprecated and will be removed in M85, around August 2020. See https://www.chromestatus.com/features/6192449487634432 for more details.
-CONSOLE WARNING: line 18: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 23: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 Test that a resource marked as foreign can still be loaded via XHR.
 
 Should say SUCCESS:
diff --git a/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource.html b/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource.html
index 5d9fe46..8185a2af 100644
--- a/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource.html
+++ b/third_party/blink/web_tests/http/tests/appcache/xhr-foreign-resource.html
@@ -1,4 +1,9 @@
 <html manifest="resources/xhr-foreign-resource.manifest">
+<!--
+Generate this token with the command:
+tools/origin_trials/generate_token.py http://127.0.0.1:8000 AppCache --expire-days=2000
+-->
+<meta http-equiv="origin-trial" content="AnwB3aSh6U8pmYtO/AzzxELSwk8BRJoj77nUnCq6u3N8LMJKlX/ImydQmXn3SgE0a+8RyowLbV835tXQHJMHuAEAAABQeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiQXBwQ2FjaGUiLCAiZXhwaXJ5IjogMTc2MTE3NjE5OH0=">
 <body>
 <p>Test that a resource marked as foreign can still be loaded via XHR.</p>
 <p>Should say SUCCESS:</p>
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/selection-color-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/selection-color-expected.png
new file mode 100644
index 0000000..0534c08
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/selection-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-basic-expected.png
new file mode 100644
index 0000000..0885986
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
new file mode 100644
index 0000000..b5201700
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-open-expected.png
new file mode 100644
index 0000000..56b5f32
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
new file mode 100644
index 0000000..8bd456e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
new file mode 100644
index 0000000..a29ee0fd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..ba29037
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-basic-expected.png
new file mode 100644
index 0000000..2b25de6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
new file mode 100644
index 0000000..36e11eb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-open-expected.png
new file mode 100644
index 0000000..0838a654
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/date/date-picker-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
new file mode 100644
index 0000000..f48de41
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
new file mode 100644
index 0000000..7b00b2e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..71f339b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/khmer-selection-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/khmer-selection-expected.png
index 035c1784..6ae62e2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/khmer-selection-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/khmer-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/selection-hard-linebreak-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
index 8f2744d..12bc914 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..0cb9286
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/text-antialias/selection/khmer-selection-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/text-antialias/selection/khmer-selection-expected.png
index 6947e73..bbca073 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/text-antialias/selection/khmer-selection-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/text-antialias/selection/khmer-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..c568bb0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/khmer-selection-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/khmer-selection-expected.png
index 79d00ee..25e0c799 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/khmer-selection-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/khmer-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/selection-hard-linebreak-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
index c28f3a4..81b0873 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/line-wrap-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/line-wrap-2-expected.png
index 6e343b0..b0e106b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/line-wrap-2-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/line-wrap-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-background-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-background-expected.png
index c5fa2d6..983d5d4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-background-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-background-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-color-expected.png
new file mode 100644
index 0000000..7073d07
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png
index aa16aa8..004284fb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png
index 35fa7293..d7a6acb4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/foreignObject-text-clipping-bug-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/foreignObject-text-clipping-bug-expected.png
index b9c6969..1732609 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/foreignObject-text-clipping-bug-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/foreignObject-text-clipping-bug-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..0cb9286
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/khmer-selection-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/khmer-selection-expected.png
index 17e5bbf..89a1690e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/khmer-selection-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/khmer-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/selection-hard-linebreak-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
index 96ec931..348e6939 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/editing/selection/line-wrap-2-expected.png b/third_party/blink/web_tests/platform/mac/editing/selection/line-wrap-2-expected.png
index d691fec6..f79c9b86 100644
--- a/third_party/blink/web_tests/platform/mac/editing/selection/line-wrap-2-expected.png
+++ b/third_party/blink/web_tests/platform/mac/editing/selection/line-wrap-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/editing/selection/selection-background-expected.png b/third_party/blink/web_tests/platform/mac/editing/selection/selection-background-expected.png
index bc5a73a..ec0996d 100644
--- a/third_party/blink/web_tests/platform/mac/editing/selection/selection-background-expected.png
+++ b/third_party/blink/web_tests/platform/mac/editing/selection/selection-background-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png b/third_party/blink/web_tests/platform/mac/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png
index 1989702c..335e8a1 100644
--- a/third_party/blink/web_tests/platform/mac/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png
+++ b/third_party/blink/web_tests/platform/mac/editing/selection/selection-linebreaks-rtl-writing-modes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/events/touch/gesture/touch-gesture-scroll-listbox-expected.txt b/third_party/blink/web_tests/platform/mac/fast/events/touch/gesture/touch-gesture-scroll-listbox-expected.txt
deleted file mode 100644
index 564ad1a..0000000
--- a/third_party/blink/web_tests/platform/mac/fast/events/touch/gesture/touch-gesture-scroll-listbox-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-This tests that an input text field can be properly scrolled with touch gestures
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-===Testing fling gestures===
-PASS box.scrollTop is 0
-PASS container.scrollTop is 0
-Flinging the list box should scroll the list, the scrolls should be locked to item boundaries
-FAIL box.scrollTop should be 38.4. Was 38.
-PASS container.scrollTop is 0
-Flinging the list past the end shouldn't scroll containing div
-PASS box.scrollTop is fullyScrolled
-PASS container.scrollTop is 0
-Flinging fully scrolled list should fling containing div
-PASS box.scrollTop is fullyScrolled
-PASS container.scrollTop is 60
-===Testing gesture scroll===
-PASS box.scrollTop is 0
-PASS container.scrollTop is 0
-Gesture scrolling list should scroll the list, the scrolls should lock to item boundaries
-FAIL box.scrollTop should be 48.599999999999994. Was 48.
-PASS container.scrollTop is 0
-PASS box.scrollTop is 0
-PASS container.scrollTop is 0
-Gesture scrolling list past the end shouldn't scroll container div
-PASS box.scrollTop is fullyScrolled
-PASS container.scrollTop is 0
-Gesture scrolling list past the end should scroll container div when starting at scroll extent
-PASS box.scrollTop is fullyScrolled
-PASS container.scrollTop is fullyScrolled + 50
-===Testing horizontal scroll===
-PASS box.scrollLeft is 0
-PASS container.scrollLeft is 0
-Horizontal scrolls should not affect listbox
-PASS box.scrollLeft is 0
-PASS container.scrollLeft is 60
-
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-img-src-change-after-scroll-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-img-src-change-after-scroll-expected.png
index 270e6c51..4425422 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-img-src-change-after-scroll-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-img-src-change-after-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png
index 5fa3e997..683a2ce 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/text/foreignObject-text-clipping-bug-expected.png b/third_party/blink/web_tests/platform/mac/svg/text/foreignObject-text-clipping-bug-expected.png
index 60014a6..0ffcb6c 100644
--- a/third_party/blink/web_tests/platform/mac/svg/text/foreignObject-text-clipping-bug-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/text/foreignObject-text-clipping-bug-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-basic-expected.png
new file mode 100644
index 0000000..b96f601
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
new file mode 100644
index 0000000..e163ce0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-open-expected.png
new file mode 100644
index 0000000..a8c705a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
new file mode 100644
index 0000000..b222ac0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
new file mode 100644
index 0000000..880461e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..c568bb0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/khmer-selection-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/khmer-selection-expected.png
index 3d926db..4440def2 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/khmer-selection-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/khmer-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/selection-hard-linebreak-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
index c7cc7ff2..b999ce1 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/selection/selection-hard-linebreak-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/selection-color-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/selection-color-expected.png
new file mode 100644
index 0000000..8670847
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/editing/selection/selection-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/implicit-submission-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/implicit-submission-expected.txt
new file mode 100644
index 0000000..63e9015
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/fast/forms/implicit-submission-expected.txt
@@ -0,0 +1,30 @@
+Tests various combinations of form elements and how implicit submission works with them.
+
+Single text input should submit: PASS
+Single text input with submit disabled should not submit: PASS
+Multiple text inputs should not submit: PASS
+Multiple text inputs with submit should submit: PASS
+Multiple text inputs with submit disabled should not submit: PASS
+Multiple text inputs and multiple submits, first submit disabled should not submit: PASS
+Text input and text area, text input focused should submit: PASS
+Text input and text area and a submit, text input focused should submit: PASS
+Text input and text area and a disabled submit, text input focused should not submit: PASS
+Text input and checkbox, text input focused should submit: PASS
+Text input and radio, text input focused should submit: PASS
+Text input and text area, textarea focused should not submit: PASS
+Text input and checkbox, checkbox focused should not submit: PASS
+Text input and radio, radio focused should not submit: PASS
+Single radio should not submit: PASS
+Single checkbox should not submit: PASS
+Single checkbox with a submit should submit: PASS
+Single checkbox with a submit disabled should not submit: PASS
+Single select should not submit: PASS
+Select with a submit should submit: FAIL
+Select with a disabled submit should not submit: PASS
+Multi-line select with a submit should submit: PASS
+Multi-line select with a disabled submit should not submit: PASS
+Text field and single select, text focused should submit: PASS
+Text field and single select, select focused should not submit: PASS
+Multiple text inputs with a button should submit: PASS
+Multiple text inputs with a disabled button should not submit: PASS
+Multiple text inputs with a hidden submit should submit: PASS
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt
new file mode 100644
index 0000000..58f23520
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt
@@ -0,0 +1,27 @@
+Test for opening select popup and closing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+These tests run specfically for Linux and Windows
+Test opening and closing of popup using alt and down arrow key
+PASS internals.isSelectPopupVisible(popup) is true
+PASS internals.isSelectPopupVisible(popup) is false
+Test opening and closing of popup using alt and up arrow key
+PASS internals.isSelectPopupVisible(popup) is true
+PASS internals.isSelectPopupVisible(popup) is false
+Test opening of popup using F4
+PASS internals.isSelectPopupVisible(popup) is true
+Test opening of popup using enter key
+FAIL internals.isSelectPopupVisible(popup) should be false. Was true.
+Works for all platforms
+Test opening of popup using space key
+PASS internals.isSelectPopupVisible(popup) is true
+Works for only mac
+Test opening of popup using up key
+FAIL internals.isSelectPopupVisible(popup) should be true. Was false.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+One
+Two
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-basic-expected.png
new file mode 100644
index 0000000..eeeb8bd1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
new file mode 100644
index 0000000..2a73fbc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-open-expected.png
new file mode 100644
index 0000000..9bb08f8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
new file mode 100644
index 0000000..f163c3510
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
new file mode 100644
index 0000000..49a4b15
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..7453db9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
new file mode 100644
index 0000000..ebbe925
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-open-expected.png
new file mode 100644
index 0000000..119fcb6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
new file mode 100644
index 0000000..a4d2ce1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
new file mode 100644
index 0000000..6d193b7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/appcache-origin-trial/http/tests/appcache/origin-trial/uncached-if-no-manifest-token-expected.txt b/third_party/blink/web_tests/virtual/appcache-origin-trial/http/tests/appcache/origin-trial/uncached-if-no-manifest-token-expected.txt
index e9e4d7c..911af32 100644
--- a/third_party/blink/web_tests/virtual/appcache-origin-trial/http/tests/appcache/origin-trial/uncached-if-no-manifest-token-expected.txt
+++ b/third_party/blink/web_tests/virtual/appcache-origin-trial/http/tests/appcache/origin-trial/uncached-if-no-manifest-token-expected.txt
@@ -8,8 +8,8 @@
 PASS gotCheckingEvent is true
 PASS window.applicationCache.status is applicationCache.UNCACHED
 PASS event.reason is "manifest"
-PASS event.message is "Invalid or missing manifest origin trial token: http://127.0.0.1:8000/appcache/resources/simple.manifest"
-PASS event.url is "http://127.0.0.1:8000/appcache/resources/simple.manifest"
+PASS event.message is "Invalid or missing manifest origin trial token: http://127.0.0.1:8000/appcache/resources/simple-no-token.manifest"
+PASS event.url is "http://127.0.0.1:8000/appcache/resources/simple-no-token.manifest"
 PASS event.status is 0
 PASS req.responseText is "Hello, World!"
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-basic.html b/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-basic.html
new file mode 100644
index 0000000..8450c327
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-basic.html
@@ -0,0 +1,8 @@
+<html>
+<meta name="color-scheme" content="dark">
+
+<body>
+  <input type=date id=date value="2019-07-31">
+</body>
+
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-month-year-selector.html b/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-month-year-selector.html
new file mode 100644
index 0000000..0234495
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-month-year-selector.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+
+<head>
+  <meta name="color-scheme" content="dark">
+</head>
+<script>
+  testRunner.waitUntilDone();
+</script>
+<script src="../../../fast/forms/resources/common.js"></script>
+<script src="../../../fast/forms/resources/picker-common.js"></script>
+<script
+  src="../../../fast/forms/calendar-picker/resources/calendar-picker-common.js"></script>
+<input type=date id=date value="2019-07-31">
+<script>
+  openPicker(document.getElementById('date'), function () {
+    clickMonthPopupButton();
+    popupWindow.global.picker.monthPopupView.yearListView.element.addEventListener('webkitTransitionEnd', function () {
+      testRunner.notifyDone();
+    })
+  });
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-open.html b/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-open.html
new file mode 100644
index 0000000..843b558
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/dark-color-scheme/date/date-picker-open.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta name="color-scheme" content="dark">
+  <script src="../../../fast/forms/resources/common.js"></script>
+  <script src="../../../fast/forms/resources/picker-common.js"></script>
+  <script
+    src="../../../fast/forms/calendar-picker/resources/calendar-picker-common.js"></script>
+</head>
+
+<body>
+  <input type="date" id="date" value="2019-07-31">
+  <script>
+    openPicker(document.getElementById('date'));
+  </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic.html b/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic.html
new file mode 100644
index 0000000..2edca30
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-basic.html
@@ -0,0 +1,8 @@
+<html>
+<meta name="color-scheme" content="dark">
+
+<body>
+  <input type="datetime-local" id="datetime-local" value="2019-02-14T13:02">
+</body>
+
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector.html b/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector.html
new file mode 100644
index 0000000..6576e42
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+
+<head>
+    <meta name="color-scheme" content="dark">
+</head>
+<script>
+    testRunner.waitUntilDone();
+</script>
+<script src="../../../fast/forms/resources/common.js"></script>
+<script src="../../../fast/forms/resources/picker-common.js"></script>
+<script
+    src="../../../fast/forms/calendar-picker/resources/calendar-picker-common.js"></script>
+<input type="datetime-local" id="datetime-local" value="2019-02-14T13:02">
+<script>
+    openPicker(document.getElementById('datetime-local'), function () {
+        clickMonthPopupButton();
+        testRunner.notifyDone();
+    });
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open.html b/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open.html
new file mode 100644
index 0000000..f547f78
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-open.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta name="color-scheme" content="dark">
+  <script src="../../../fast/forms/resources/common.js"></script>
+  <script src="../../../fast/forms/resources/picker-common.js"></script>
+  <script
+    src="../../../fast/forms/calendar-picker/resources/calendar-picker-common.js"></script>
+</head>
+
+<body>
+  <input type="datetime-local" id="datetime-local" value="2019-02-14T13:02">
+  <script>
+    openPicker(document.getElementById('datetime-local'));
+  </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/layout-ng-grid/external/wpt/css/css-grid/README.txt b/third_party/blink/web_tests/virtual/layout-ng-grid/external/wpt/css/css-grid/README.txt
new file mode 100644
index 0000000..73fecb3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout-ng-grid/external/wpt/css/css-grid/README.txt
@@ -0,0 +1,2 @@
+These tests are run with --enable-blink-features=LayoutNGGrid
+The LayoutNG project is described here: http://goo.gl/1hwhfX
diff --git a/third_party/blink/web_tests/virtual/layout-ng-grid/fast/css-grid-layout/README.txt b/third_party/blink/web_tests/virtual/layout-ng-grid/fast/css-grid-layout/README.txt
new file mode 100644
index 0000000..73fecb3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout-ng-grid/fast/css-grid-layout/README.txt
@@ -0,0 +1,2 @@
+These tests are run with --enable-blink-features=LayoutNGGrid
+The LayoutNG project is described here: http://goo.gl/1hwhfX
diff --git a/third_party/blink/web_tests/virtual/transform-interop/README.md b/third_party/blink/web_tests/virtual/transform-interop/README.md
new file mode 100644
index 0000000..50018734
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/transform-interop/README.md
@@ -0,0 +1 @@
+This directory contains tests for the transform-interop feature.
diff --git a/third_party/blink/web_tests/virtual/transform-interop/external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative-expected.txt b/third_party/blink/web_tests/virtual/transform-interop/external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative-expected.txt
new file mode 100644
index 0000000..b82e22a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/transform-interop/external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS Direct DOM parent is root of rendering context
+PASS Intermediate DOM nodes cause rendering context to end
+PASS Perspective applies to direct DOM normal-flow children
+PASS Perspective applies to direct DOM abs-pos children
+PASS Perspective applies to direct DOM fixed-pos children
+PASS Perspective does not apply to DOM normal-flow grandchildren
+PASS Perspective does not apply to DOM abs-pos grandchildren
+PASS Perspective does not apply to DOM fixed-pos grandchildren
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index b19e92d1..0819b53 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -11520,6 +11520,7 @@
     method constructor
 interface XRViewerPose : XRPose
     attribute @@toStringTag
+    getter cameraViews
     getter views
     method constructor
 interface XRViewport
@@ -11532,6 +11533,7 @@
 interface XRWebGLBinding
     attribute @@toStringTag
     method constructor
+    method getCameraImage
     method getReflectionCubeMap
 interface XRWebGLLayer : XRLayer
     static method getNativeFramebufferScaleFactor
diff --git a/third_party/closure_compiler/chromium_patch.diff b/third_party/closure_compiler/chromium_patch.diff
new file mode 100644
index 0000000..3884cb3
--- /dev/null
+++ b/third_party/closure_compiler/chromium_patch.diff
@@ -0,0 +1,110 @@
+diff --git a/third_party/closure_compiler/externs/chrome.js b/third_party/closure_compiler/externs/chrome.js
+index 6559fbeb3f21..d30f339ccdc4 100644
+--- a/third_party/closure_compiler/externs/chrome.js
++++ b/third_party/closure_compiler/externs/chrome.js
+@@ -558,51 +558,6 @@ chrome.webstore.onInstallStageChanged;
+ chrome.webstore.onDownloadProgress;
+ 
+ 
+-/**
+- * @see https://developer.chrome.com/extensions/runtime.html
+- * @const
+- */
+-chrome.runtime = {};
+-
+-
+-/** @type {{message:(string|undefined)}|undefined} */
+-chrome.runtime.lastError;
+-
+-
+-/**
+- * @param {string|!Object=} opt_extensionIdOrConnectInfo Either the
+- *     extensionId to connect to, in which case connectInfo params can be
+- *     passed in the next optional argument, or the connectInfo params.
+- * @param {!Object=} opt_connectInfo The connectInfo object,
+- *     if arg1 was the extensionId to connect to.
+- * @return {!Port} New port.
+- */
+-chrome.runtime.connect = function(
+-    opt_extensionIdOrConnectInfo, opt_connectInfo) {};
+-
+-
+-/**
+- * @param {string|*} extensionIdOrMessage Either the extensionId to send the
+- *     message to, in which case the message is passed as the next arg, or the
+- *     message itself.
+- * @param {(*|!Object|function(*): void)=} opt_messageOrOptsOrCallback
+- *     One of:
+- *     The message, if arg1 was the extensionId.
+- *     The options for message sending, if arg1 was the message and this
+- *     argument is not a function.
+- *     The callback, if arg1 was the message and this argument is a function.
+- * @param {(!Object|function(*): void)=} opt_optsOrCallback
+- *     Either the options for message sending, if arg2 was the message,
+- *     or the callback.
+- * @param {function(*): void=} opt_callback The callback function which
+- *     takes a JSON response object sent by the handler of the request.
+- * @return {undefined}
+- */
+-chrome.runtime.sendMessage = function(
+-    extensionIdOrMessage, opt_messageOrOptsOrCallback, opt_optsOrCallback,
+-    opt_callback) {};
+-
+-
+ /**
+  * Returns an object representing current load times. Note that the properties
+  * on the object do not change and the function must be called again to get
+diff --git a/third_party/closure_compiler/externs/chrome_extensions.js b/third_party/closure_compiler/externs/chrome_extensions.js
+index c0fb4e1c9e17..f2bd83291aec 100644
+--- a/third_party/closure_compiler/externs/chrome_extensions.js
++++ b/third_party/closure_compiler/externs/chrome_extensions.js
+@@ -2528,6 +2528,49 @@ chrome.extension.onRequest;
+ /** @type {!ChromeEvent} */
+ chrome.extension.onRequestExternal;
+ 
++/**
++ * @see https://developer.chrome.com/extensions/runtime.html
++ * @const
++ */
++chrome.runtime = {};
++
++
++/** @type {{message:(string|undefined)}|undefined} */
++chrome.runtime.lastError;
++
++
++/**
++ * @param {string|!Object=} opt_extensionIdOrConnectInfo Either the
++ *     extensionId to connect to, in which case connectInfo params can be
++ *     passed in the next optional argument, or the connectInfo params.
++ * @param {!Object=} opt_connectInfo The connectInfo object,
++ *     if arg1 was the extensionId to connect to.
++ * @return {!Port} New port.
++ */
++chrome.runtime.connect = function(
++    opt_extensionIdOrConnectInfo, opt_connectInfo) {};
++
++
++/**
++ * @param {string|*} extensionIdOrMessage Either the extensionId to send the
++ *     message to, in which case the message is passed as the next arg, or the
++ *     message itself.
++ * @param {(*|!Object|function(*): void)=} opt_messageOrOptsOrCallback
++ *     One of:
++ *     The message, if arg1 was the extensionId.
++ *     The options for message sending, if arg1 was the message and this
++ *     argument is not a function.
++ *     The callback, if arg1 was the message and this argument is a function.
++ * @param {(!Object|function(*): void)=} opt_optsOrCallback
++ *     Either the options for message sending, if arg2 was the message,
++ *     or the callback.
++ * @param {function(*): void=} opt_callback The callback function which
++ *     takes a JSON response object sent by the handler of the request.
++ * @return {undefined}
++ */
++chrome.runtime.sendMessage = function(
++    extensionIdOrMessage, opt_messageOrOptsOrCallback, opt_optsOrCallback,
++    opt_callback) {};
+ 
+ 
+ /** @type {string} */
diff --git a/third_party/closure_compiler/compile_js.gni b/third_party/closure_compiler/compile_js.gni
index 9782717..aedd4e33 100644
--- a/third_party/closure_compiler/compile_js.gni
+++ b/third_party/closure_compiler/compile_js.gni
@@ -275,3 +275,13 @@
     }
   }
 }
+
+# These externs files depend on each other (often in a cyclical way), and
+# therefore makes more sense to add all of them as a dependency together.
+chrome_extension_public_externs = [
+  "$externs_path/events.js",
+  "$externs_path/extension_types.js",
+  "$externs_path/runtime.js",
+  "$externs_path/tabs.js",
+  "$externs_path/windows.js",
+]
diff --git a/third_party/closure_compiler/externs/chrome.js b/third_party/closure_compiler/externs/chrome.js
index 6559fbeb..d30f339c 100644
--- a/third_party/closure_compiler/externs/chrome.js
+++ b/third_party/closure_compiler/externs/chrome.js
@@ -559,51 +559,6 @@
 
 
 /**
- * @see https://developer.chrome.com/extensions/runtime.html
- * @const
- */
-chrome.runtime = {};
-
-
-/** @type {{message:(string|undefined)}|undefined} */
-chrome.runtime.lastError;
-
-
-/**
- * @param {string|!Object=} opt_extensionIdOrConnectInfo Either the
- *     extensionId to connect to, in which case connectInfo params can be
- *     passed in the next optional argument, or the connectInfo params.
- * @param {!Object=} opt_connectInfo The connectInfo object,
- *     if arg1 was the extensionId to connect to.
- * @return {!Port} New port.
- */
-chrome.runtime.connect = function(
-    opt_extensionIdOrConnectInfo, opt_connectInfo) {};
-
-
-/**
- * @param {string|*} extensionIdOrMessage Either the extensionId to send the
- *     message to, in which case the message is passed as the next arg, or the
- *     message itself.
- * @param {(*|!Object|function(*): void)=} opt_messageOrOptsOrCallback
- *     One of:
- *     The message, if arg1 was the extensionId.
- *     The options for message sending, if arg1 was the message and this
- *     argument is not a function.
- *     The callback, if arg1 was the message and this argument is a function.
- * @param {(!Object|function(*): void)=} opt_optsOrCallback
- *     Either the options for message sending, if arg2 was the message,
- *     or the callback.
- * @param {function(*): void=} opt_callback The callback function which
- *     takes a JSON response object sent by the handler of the request.
- * @return {undefined}
- */
-chrome.runtime.sendMessage = function(
-    extensionIdOrMessage, opt_messageOrOptsOrCallback, opt_optsOrCallback,
-    opt_callback) {};
-
-
-/**
  * Returns an object representing current load times. Note that the properties
  * on the object do not change and the function must be called again to get
  * up-to-date data.
diff --git a/third_party/closure_compiler/externs/chrome_extensions.js b/third_party/closure_compiler/externs/chrome_extensions.js
index c0fb4e1..f2bd832 100644
--- a/third_party/closure_compiler/externs/chrome_extensions.js
+++ b/third_party/closure_compiler/externs/chrome_extensions.js
@@ -2528,6 +2528,49 @@
 /** @type {!ChromeEvent} */
 chrome.extension.onRequestExternal;
 
+/**
+ * @see https://developer.chrome.com/extensions/runtime.html
+ * @const
+ */
+chrome.runtime = {};
+
+
+/** @type {{message:(string|undefined)}|undefined} */
+chrome.runtime.lastError;
+
+
+/**
+ * @param {string|!Object=} opt_extensionIdOrConnectInfo Either the
+ *     extensionId to connect to, in which case connectInfo params can be
+ *     passed in the next optional argument, or the connectInfo params.
+ * @param {!Object=} opt_connectInfo The connectInfo object,
+ *     if arg1 was the extensionId to connect to.
+ * @return {!Port} New port.
+ */
+chrome.runtime.connect = function(
+    opt_extensionIdOrConnectInfo, opt_connectInfo) {};
+
+
+/**
+ * @param {string|*} extensionIdOrMessage Either the extensionId to send the
+ *     message to, in which case the message is passed as the next arg, or the
+ *     message itself.
+ * @param {(*|!Object|function(*): void)=} opt_messageOrOptsOrCallback
+ *     One of:
+ *     The message, if arg1 was the extensionId.
+ *     The options for message sending, if arg1 was the message and this
+ *     argument is not a function.
+ *     The callback, if arg1 was the message and this argument is a function.
+ * @param {(!Object|function(*): void)=} opt_optsOrCallback
+ *     Either the options for message sending, if arg2 was the message,
+ *     or the callback.
+ * @param {function(*): void=} opt_callback The callback function which
+ *     takes a JSON response object sent by the handler of the request.
+ * @return {undefined}
+ */
+chrome.runtime.sendMessage = function(
+    extensionIdOrMessage, opt_messageOrOptsOrCallback, opt_optsOrCallback,
+    opt_callback) {};
 
 
 /** @type {string} */
diff --git a/third_party/closure_compiler/externs/virtual_keyboard_private.js b/third_party/closure_compiler/externs/virtual_keyboard_private.js
new file mode 100644
index 0000000..112ca975
--- /dev/null
+++ b/third_party/closure_compiler/externs/virtual_keyboard_private.js
@@ -0,0 +1,209 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This file was generated by:
+//   tools/json_schema_compiler/compiler.py.
+// NOTE: The format of types has changed. 'FooType' is now
+//   'chrome.virtualKeyboardPrivate.FooType'.
+// Please run the closure compiler before committing changes.
+// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md
+
+/** @fileoverview Externs generated from namespace: virtualKeyboardPrivate */
+
+/** @const */
+chrome.virtualKeyboardPrivate = {};
+
+/**
+ * @enum {string}
+ */
+chrome.virtualKeyboardPrivate.VirtualKeyboardEventType = {
+  KEYUP: 'keyup',
+  KEYDOWN: 'keydown',
+};
+
+/**
+ * @typedef {{
+ *   type: !chrome.virtualKeyboardPrivate.VirtualKeyboardEventType,
+ *   charValue: number,
+ *   keyCode: number,
+ *   keyName: string,
+ *   modifiers: (number|undefined)
+ * }}
+ */
+chrome.virtualKeyboardPrivate.VirtualKeyboardEvent;
+
+/**
+ * @enum {string}
+ */
+chrome.virtualKeyboardPrivate.KeyboardMode = {
+  FULL_WIDTH: 'FULL_WIDTH',
+  FLOATING: 'FLOATING',
+};
+
+/**
+ * @enum {string}
+ */
+chrome.virtualKeyboardPrivate.KeyboardState = {
+  ENABLED: 'ENABLED',
+  DISABLED: 'DISABLED',
+  AUTO: 'AUTO',
+};
+
+/**
+ * @typedef {{
+ *   left: number,
+ *   top: number,
+ *   width: number,
+ *   height: number
+ * }}
+ */
+chrome.virtualKeyboardPrivate.Bounds;
+
+/**
+ * @typedef {{
+ *   layout: string,
+ *   hotrodmode: boolean,
+ *   a11ymode: boolean,
+ *   features: !Array<string>
+ * }}
+ */
+chrome.virtualKeyboardPrivate.KeyboardConfig;
+
+/**
+ * @typedef {{
+ *   mode: !chrome.virtualKeyboardPrivate.KeyboardMode,
+ *   bounds: !chrome.virtualKeyboardPrivate.Bounds
+ * }}
+ */
+chrome.virtualKeyboardPrivate.ContainerBehaviorOptions;
+
+/**
+ * Inserts text into the currently focused text field.
+ * @param {string} text The text that will be inserted.
+ * @param {function(): void=} callback Called when the insertion is completed.
+ */
+chrome.virtualKeyboardPrivate.insertText = function(text, callback) {};
+
+/**
+ * Sends a fabricated key event to the focused input field.
+ * @param {!chrome.virtualKeyboardPrivate.VirtualKeyboardEvent} keyEvent
+ * @param {function(): void=} callback Called after processing the event.
+ */
+chrome.virtualKeyboardPrivate.sendKeyEvent = function(keyEvent, callback) {};
+
+/**
+ * Hides the virtual keyboard.
+ * @param {function(): void=} callback Called when the keyboard is hidden.
+ */
+chrome.virtualKeyboardPrivate.hideKeyboard = function(callback) {};
+
+/**
+ * Sets the state of the hotrod virtual keyboard. This API should only be used
+ * by hotrod.
+ * @param {boolean} enable
+ */
+chrome.virtualKeyboardPrivate.setHotrodKeyboard = function(enable) {};
+
+/**
+ * Sets the lock state of the virtual keyboard. A locked keyboard remains
+ * visible even after a text area loses input focus.
+ * @param {boolean} lock
+ */
+chrome.virtualKeyboardPrivate.lockKeyboard = function(lock) {};
+
+/**
+ * Inform the system that the keyboard has loaded.
+ * @param {function(): void=} callback Called when load acknowledgement is
+ *     complete.
+ */
+chrome.virtualKeyboardPrivate.keyboardLoaded = function(callback) {};
+
+/**
+ * Gets the virtual keyboard configuration.
+ * @param {function(!chrome.virtualKeyboardPrivate.KeyboardConfig): void}
+ *     callback Called when querying virtual keyboard configuration is complete.
+ */
+chrome.virtualKeyboardPrivate.getKeyboardConfig = function(callback) {};
+
+/**
+ * Opens chrome://settings/languages page.
+ */
+chrome.virtualKeyboardPrivate.openSettings = function() {};
+
+/**
+ * Sets the virtual keyboard container behavior
+ * @param {!chrome.virtualKeyboardPrivate.ContainerBehaviorOptions} options
+ *     Optional parameters for new container behavior.
+ * @param {function(boolean): void=} callback Called when container mode is
+ *     ready to change, or if the operation failed.
+ */
+chrome.virtualKeyboardPrivate.setContainerBehavior = function(options, callback) {};
+
+/**
+ * Sets the virtual keyboard draggable area bounds.
+ * @param {!chrome.virtualKeyboardPrivate.Bounds} bounds The value of draggable
+ *     rect area of floating keyboard.
+ */
+chrome.virtualKeyboardPrivate.setDraggableArea = function(bounds) {};
+
+/**
+ * Requests the virtual keyboard to change state.
+ * @param {!chrome.virtualKeyboardPrivate.KeyboardState} state The value of the
+ *     virtual keyboard state to change to.
+ */
+chrome.virtualKeyboardPrivate.setKeyboardState = function(state) {};
+
+/**
+ * Sets the areas on the screen that are blocked by the virtual keyboard.
+ * @param {!Array<!chrome.virtualKeyboardPrivate.Bounds>} boundsList List of
+ *     rectangles representing regions occluded by the keyboard.
+ */
+chrome.virtualKeyboardPrivate.setOccludedBounds = function(boundsList) {};
+
+/**
+ * Sets the areas on the keyboard window where events are handled. Any event
+ * outside of these areas are passed on to the window behind it.
+ * @param {!Array<!chrome.virtualKeyboardPrivate.Bounds>} boundsList List of
+ *     rectangles representing regions where events targeting the keyboard
+ *     should be handled.
+ */
+chrome.virtualKeyboardPrivate.setHitTestBounds = function(boundsList) {};
+
+/**
+ * Sets the area of the keyboard window that should not move off screen. Any
+ * area outside of this can be moved off the user's screen.
+ * @param {!chrome.virtualKeyboardPrivate.Bounds} bounds The bounds of the area
+ *     inside the keyboard window, relative to the window origin, that should
+ *     not be moved off screen. Any area outside of this bounds can be moved off
+ *     screen.
+ */
+chrome.virtualKeyboardPrivate.setAreaToRemainOnScreen = function(bounds) {};
+
+/**
+ * Sets the bounds of the keyboard window in screen coordinates.
+ * @param {!chrome.virtualKeyboardPrivate.Bounds} bounds A rectangle defining
+ *     the new bounds of the window in screen coordinates.
+ */
+chrome.virtualKeyboardPrivate.setWindowBoundsInScreen = function(bounds) {};
+
+/**
+ * This event is sent when virtual keyboard bounds changed and overscroll/resize
+ * is enabled.
+ * @type {!ChromeEvent}
+ */
+chrome.virtualKeyboardPrivate.onBoundsChanged;
+
+/**
+ * Fired when the virtual keyboard window has been closed. For example, this can
+ * happen when turning off on-screen keyboard or exiting tablet mode.
+ * @type {!ChromeEvent}
+ */
+chrome.virtualKeyboardPrivate.onKeyboardClosed;
+
+/**
+ * Fired when a configuration for virtual keyboard IME has changed, e.g. auto
+ * complete disabled.
+ * @type {!ChromeEvent}
+ */
+chrome.virtualKeyboardPrivate.onKeyboardConfigChanged;
diff --git a/third_party/closure_compiler/roll_closure_compiler b/third_party/closure_compiler/roll_closure_compiler
index f1e7f29..e30d3ee 100755
--- a/third_party/closure_compiler/roll_closure_compiler
+++ b/third_party/closure_compiler/roll_closure_compiler
@@ -69,6 +69,10 @@
 (echo "${WARNING}" && cat polymer-1.0.js) > "${EXTERNS_DIR}/polymer-1.0.js"
 (echo "${WARNING}" && cat mocha-2.5.js) > "${EXTERNS_DIR}/mocha-2.5.js"
 
+# Apply local Chromium patch.
+cd "${SCRIPT_DIR}"
+git apply chromium_patch.diff
+
 new_chrome_sha1=$(get_sha1 "${EXTERNS_DIR}/chrome.js")
 if [[ "${new_chrome_sha1}" != "${old_chrome_sha1}" ]]; then
   chrome_range="chrome.js: ${old_chrome_sha1} -> ${new_chrome_sha1}"
diff --git a/third_party/widevine/cdm/widevine.gni b/third_party/widevine/cdm/widevine.gni
index fcd08e0..6c828f73 100644
--- a/third_party/widevine/cdm/widevine.gni
+++ b/third_party/widevine/cdm/widevine.gni
@@ -13,6 +13,11 @@
   enable_widevine = is_chrome_branded || is_android || is_fuchsia
 }
 
+# Disable Widevine when running linux-chromeos.
+if (is_chromeos && !is_chromeos_device) {
+  enable_widevine = false
+}
+
 # Widevine CDM is available as a library CDM on the following platforms and
 # architectures. Notably on Android library CDM is not used and Widevine is
 # supported via Android MediaDrm API.
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 2e2e64c..746e410 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -1998,6 +1998,12 @@
   <int value="2" label="RemoteException"/>
 </enum>
 
+<enum name="AndroidWebViewNonEmbeddedMetricsParsingLogResult">
+  <int value="0" label="Success"/>
+  <int value="1" label="Malformed protobuf"/>
+  <int value="2" label="IOException"/>
+</enum>
+
 <enum name="AndroidWebViewProxySchemeFilterType">
   <int value="0" label="HTTP"/>
   <int value="1" label="HTTPS"/>
@@ -38686,6 +38692,7 @@
   <int value="-1993730028" label="CrostiniPortForwarding:enabled"/>
   <int value="-1990614981" label="StoragePressureUI:disabled"/>
   <int value="-1989747818" label="TabStripKeyboardFocus:disabled"/>
+  <int value="-1988840552" label="WebViewExtraHeadersSameOriginOnly:disabled"/>
   <int value="-1985452239" label="SmartDim20190221:disabled"/>
   <int value="-1985239289" label="AutofillRichMetadataQueries:enabled"/>
   <int value="-1985025593" label="file-manager-enable-new-gallery"/>
@@ -39038,6 +39045,7 @@
       label="AndroidPartnerCustomizationPhenotype:enabled"/>
   <int value="-1607691647" label="MojoVideoEncodeAccelerator:disabled"/>
   <int value="-1607297082" label="ash-enable-persistent-window-bounds"/>
+  <int value="-1607175130" label="force-enable-metrics-reporting"/>
   <int value="-1605567628" label="disable-overlay-scrollbar"/>
   <int value="-1604051051" label="SpecialLocale:disabled"/>
   <int value="-1603404046" label="V8VmFuture:disabled"/>
@@ -39201,6 +39209,7 @@
   <int value="-1433087548" label="enable-app-install-alerts"/>
   <int value="-1431722713" label="TabFreeze:disabled"/>
   <int value="-1431563697" label="WebPaymentsMethodSectionOrderV2:enabled"/>
+  <int value="-1430090822" label="EnableSharedImageForWebview:disabled"/>
   <int value="-1428589407" label="WebRTCPipeWireCapturer:disabled"/>
   <int value="-1426817842" label="BlockTabUnders:enabled"/>
   <int value="-1426150007" label="ignore-previews-blacklist"/>
@@ -39656,6 +39665,7 @@
   <int value="-969332901" label="stop-non-timers-in-background:disabled"/>
   <int value="-968675274" label="Rar2Fs:enabled"/>
   <int value="-968010468" label="SharedArrayBuffer:disabled"/>
+  <int value="-967825290" label="WebViewConnectionlessSafeBrowsing:disabled"/>
   <int value="-966290456" label="WebAuthenticationCtap2:enabled"/>
   <int value="-965842218" label="MultiDeviceApi:disabled"/>
   <int value="-964676765" label="enable-accelerated-mjpeg-decode"/>
@@ -40092,6 +40102,7 @@
   <int value="-470247915"
       label="AutofillUpstreamEditableExpirationDate:enabled"/>
   <int value="-468697885" label="ArcInputMethod:enabled"/>
+  <int value="-466704882" label="webview-log-js-console-messages"/>
   <int value="-462554210"
       label="OminboxUIExperimentUseGenericSearchEngineIcon:enabled"/>
   <int value="-462404204" label="CryptAuthV2DeviceSync:disabled"/>
@@ -40108,6 +40119,7 @@
   <int value="-450976085"
       label="AutofillSaveCreditCardUsesImprovedMessaging:disabled"/>
   <int value="-449465495" label="disable-browser-task-scheduler"/>
+  <int value="-446560063" label="finch-seed-min-update-period"/>
   <int value="-444867364" label="Metal:enabled"/>
   <int value="-442352394" label="IframeOneGoogleBar:disabled"/>
   <int value="-438379844" label="SwapSideVolumeButtonsForOrientation:enabled"/>
@@ -40133,6 +40145,7 @@
   <int value="-406850932" label="EnableEmojiContextMenu:enabled"/>
   <int value="-405380243" label="enable-encryption-migration"/>
   <int value="-403701720" label="DirectActions:enabled"/>
+  <int value="-403649153" label="WebViewBrotliSupport:disabled"/>
   <int value="-402038055"
       label="OmniboxUIExperimentBlueTitlesAndGrayUrlsOnPageSuggestions:enabled"/>
   <int value="-401170566"
@@ -40553,6 +40566,7 @@
   <int value="59784035" label="ImeThread:disabled"/>
   <int value="59964519" label="OmniboxEnableClipboardProvider:disabled"/>
   <int value="60023885" label="AutofillNoLocalSaveOnUnmaskSuccess:disabled"/>
+  <int value="61130490" label="WebViewBrotliSupport:enabled"/>
   <int value="61205887" label="enable-text-input-focus-manager"/>
   <int value="61466986" label="AsyncDns:disabled"/>
   <int value="63187126" label="DownloadsAutoResumptionNative:enabled"/>
@@ -40773,6 +40787,7 @@
   <int value="339671131" label="disable-per-user-timezone"/>
   <int value="341152650" label="SoundContentSetting:enabled"/>
   <int value="341851350" label="EnableDbusAndX11StatusIcons:enabled"/>
+  <int value="342431487" label="VizForWebView:enabled"/>
   <int value="342960463" label="SharingQRCodeGenerator:enabled"/>
   <int value="343445783" label="AllowScrollSettings:enabled"/>
   <int value="345664265" label="BlinkHeapIncrementalMarking:disabled"/>
@@ -40896,6 +40911,7 @@
   <int value="470011024" label="NonValidatingReloadOnNormalReload:enabled"/>
   <int value="471224152" label="WinUseHybridSpellChecker:enabled"/>
   <int value="471519375" label="NewOsSettingsSearch:disabled"/>
+  <int value="471560693" label="webview-verbose-logging"/>
   <int value="471969274" label="MediaControlsExpandGesture:enabled"/>
   <int value="473958125" label="OmniboxWrapPopupPosition:enabled"/>
   <int value="474743272" label="material-design-ink-drop"/>
@@ -40908,6 +40924,7 @@
   <int value="480677983" label="WebXRARDOMOverlay:disabled"/>
   <int value="481506759" label="ServiceWorkerScriptStreaming:enabled"/>
   <int value="482232604" label="PercentBasedScrolling:enabled"/>
+  <int value="485957747" label="finch-seed-ignore-pending-download"/>
   <int value="487810392" label="EnablePalmOnToolTypePalm:enabled"/>
   <int value="491334698" label="ConditionalTabStripAndroid:enabled"/>
   <int value="492113129" label="ExperimentalAppBanners:enabled"/>
@@ -41178,6 +41195,7 @@
   <int value="783270752" label="AndroidHistoryManager:enabled"/>
   <int value="787080596" label="DynamicTcmallocTuning:enabled"/>
   <int value="787385958" label="RegionalLocalesAsDisplayUI:enabled"/>
+  <int value="792884862" label="EnableSharedImageForWebview:enabled"/>
   <int value="798696013" label="ImeInputLogicMozc:enabled"/>
   <int value="799680074" label="ContextualSearchTranslationModel:enabled"/>
   <int value="803282885" label="PreferHtmlOverPlugins:disabled"/>
@@ -41250,6 +41268,7 @@
   <int value="883190338" label="PrintWithReducedRasterization:disabled"/>
   <int value="884106779" label="supervised-user-safesites"/>
   <int value="885004540" label="ArcEnableApplicationZoomFeature:enabled"/>
+  <int value="885186849" label="finch-seed-expiration-age"/>
   <int value="885971656" label="EnablePlayStoreAppSearch:enabled"/>
   <int value="886907524" label="autoplay-policy"/>
   <int value="887011602" label="enable-spelling-auto-correct"/>
@@ -41273,6 +41292,7 @@
   <int value="916316159" label="disable-new-app-list-mixer"/>
   <int value="917561046" label="ConversionMeasurement:disabled"/>
   <int value="918046854" label="NtlmV2Enabled:disabled"/>
+  <int value="918608729" label="finch-seed-min-download-period"/>
   <int value="921536672" label="OfflinePagesDescriptiveFailStatus:enabled"/>
   <int value="921561616" label="WebAssemblyTiering:disabled"/>
   <int value="925712999" label="V8Orinoco:enabled"/>
@@ -41313,6 +41333,7 @@
   <int value="972228058" label="SyncUSSSessions:disabled"/>
   <int value="973601997" label="SafeBrowsingUseLocalBlacklistsV2:disabled"/>
   <int value="975104092" label="show-taps"/>
+  <int value="975463471" label="WebViewExtraHeadersSameOriginOnly:enabled"/>
   <int value="976079108" label="TouchpadOverscrollHistoryNavigation:disabled"/>
   <int value="976278412" label="google-password-manager:enabled"/>
   <int value="977968353" label="WebUITabStrip:disabled"/>
@@ -41447,6 +41468,7 @@
       label="PrefetchMainResourceNetworkIsolationKey:enabled"/>
   <int value="1111871757" label="ForceUnifiedConsentBump:enabled"/>
   <int value="1112051724" label="DetectingHeavyPages:enabled"/>
+  <int value="1112817963" label="WebViewConnectionlessSafeBrowsing:enabled"/>
   <int value="1113196543" label="ShowManagedUi:disabled"/>
   <int value="1113365156" label="tab-management-experiment-type-chive"/>
   <int value="1114270092" label="PortalsCrossOrigin:disabled"/>
@@ -41863,6 +41885,7 @@
   <int value="1579084737" label="TemporaryUnexpireFlagsM80:disabled"/>
   <int value="1579461102" label="MemoryCoordinator:disabled"/>
   <int value="1581002467" label="enable-explicit-dma-fences"/>
+  <int value="1584039096" label="highlight-all-webviews"/>
   <int value="1584536816" label="LimitAltTabToActiveDesk:enabled"/>
   <int value="1586022426" label="AutofillCreditCardAssist:enabled"/>
   <int value="1587521886" label="SSLCommittedInterstitials:enabled"/>
@@ -41881,8 +41904,10 @@
   <int value="1597972555" label="ChromeSharingHubV15:enabled"/>
   <int value="1600850069" label="MobileIdentityConsistency:disabled"/>
   <int value="1600926040" label="TranslateCompactUI:enabled"/>
+  <int value="1601582484" label="enable-crash-reporter-for-testing"/>
   <int value="1602869271" label="ChromeShareScreenshot:disabled"/>
   <int value="1603578716" label="CaptionSettings:disabled"/>
+  <int value="1604893983" label="VizForWebView:disabled"/>
   <int value="1605398303" label="MacSystemMediaPermissionsInfoUI:enabled"/>
   <int value="1605611615" label="enable-webrtc-srtp-aes-gcm"/>
   <int value="1609059016" label="CupsIppPrintingBackend:enabled"/>
@@ -66134,25 +66159,6 @@
   <int value="3" label="Use new"/>
 </enum>
 
-<enum name="SyncConsentBehavior">
-  <summary>
-    Behavior of the out-of-box experience (OOBE) sync consent screen.
-  </summary>
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Show"/>
-  <int value="2" label="Skip"/>
-  <int value="3" label="Skip and enable sync"/>
-</enum>
-
-<enum name="SyncConsentUserChoice">
-  <summary>
-    Which button the user clicked in the out-of-box experience (OOBE) sync
-    consent screen.
-  </summary>
-  <int value="0" label="Declined"/>
-  <int value="1" label="Accepted"/>
-</enum>
-
 <enum name="SyncCryptographerPendingKeysState">
   <int value="0" label="Does not have pending keys"/>
   <int value="1" label="Has pending keys"/>
@@ -71918,8 +71924,11 @@
 
 <enum name="WebUITabStripCloseActions">
   <int value="0" label="Tap on tab counter"/>
-  <int value="1" label="Tap outside tab strip"/>
+  <int value="1" label="Tap outside tab strip (deprecated)"/>
   <int value="2" label="Tab selected in tab strip"/>
+  <int value="3" label="Tap in tab's content area"/>
+  <int value="4"
+      label="Omnibox focused (either by tap or by creating a new tab)"/>
 </enum>
 
 <enum name="WebUITabStripCloseTabActions">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 1cb350d..b87cbc3 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -5197,6 +5197,20 @@
   </summary>
 </histogram>
 
+<histogram name="Android.WebView.NonEmbeddedMetrics.ParsingLogResult"
+    enum="AndroidWebViewNonEmbeddedMetricsParsingLogResult"
+    expires_after="2021-01-20">
+  <owner>hazems@chromium.org</owner>
+  <owner>ntfschr@chromium.org</owner>
+  <owner>src/android_webview/OWNERS</owner>
+  <summary>
+    Records whether metrics parsing from file in non-embedded histogram service
+    was successful. It's recorded during service startup by adding it to records
+    list. It captures the most recent file parsing result for the last service
+    launch before the client connects to the service.
+  </summary>
+</histogram>
+
 <histogram name="Android.WebView.NonEmbeddedMetrics.TransmissionResult"
     enum="AndroidWebViewDevUiMetricsTransmission" expires_after="2021-01-20">
   <owner>ntfschr@chromium.org</owner>
@@ -62311,6 +62325,9 @@
 
 <histogram name="GoogleNow.Card.Button.Clicked0" enum="GoogleNowCardTypeId"
     expires_after="M85">
+  <obsolete>
+    Removed in r454917 03/2017.
+  </obsolete>
   <owner>robliao@chromium.org</owner>
   <owner>skare@chromium.org</owner>
   <summary>Types of cards which received an index 0 button click.</summary>
@@ -62318,6 +62335,9 @@
 
 <histogram name="GoogleNow.Card.Button.Clicked1" enum="GoogleNowCardTypeId"
     expires_after="M85">
+  <obsolete>
+    Removed in r454917 03/2017.
+  </obsolete>
   <owner>robliao@chromium.org</owner>
   <owner>skare@chromium.org</owner>
   <summary>Types of cards which received an index 1 button click.</summary>
@@ -62325,12 +62345,18 @@
 
 <histogram name="GoogleNow.Card.Clicked" enum="GoogleNowCardTypeId"
     expires_after="M85">
+  <obsolete>
+    Removed in r454917 03/2017.
+  </obsolete>
   <owner>robliao@chromium.org</owner>
   <owner>skare@chromium.org</owner>
   <summary>Types of cards which received a notification click.</summary>
 </histogram>
 
 <histogram name="GoogleNow.Event" enum="GoogleNowEvent" expires_after="M85">
+  <obsolete>
+    Removed in r454917 03/2017.
+  </obsolete>
   <owner>robliao@chromium.org</owner>
   <owner>skare@chromium.org</owner>
   <summary>Events in Google Now component extension.</summary>
@@ -62338,6 +62364,9 @@
 
 <histogram name="GoogleNow.MessageCenter.Displayed.NotificationsVisible"
     units="count" expires_after="M85">
+  <obsolete>
+    Removed in r455117 03/2017.
+  </obsolete>
   <owner>robliao@chromium.org</owner>
   <owner>skare@chromium.org</owner>
   <summary>
@@ -71830,10 +71859,14 @@
 <histogram name="Launch.FlagsAtStartup" enum="LoginCustomFlags"
     expires_after="2020-11-29">
   <owner>asvitkine@chromium.org</owner>
+  <owner>ntfschr@chromium.org</owner>
   <summary>
     Logs which Chrome flags from about:flags were active on start up. Note that
     this flag is not really used on Chrome OS; on that platform, look at
-    Login.CustomFlags instead.
+    Login.CustomFlags instead. Android WebView supports flags differently than
+    most platforms, see
+    https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/developer-ui.md
+    for details.
   </summary>
 </histogram>
 
@@ -72527,6 +72560,17 @@
   </summary>
 </histogram>
 
+<histogram name="LiteVideo.OriginHints.ParseResult" enum="BooleanSuccess"
+    expires_after="M90">
+  <owner>mcrouse@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    Indicates whether the hints for configuring LiteVideo throttling provided
+    via Finch were successfully parsed and loaded for use. Android only,
+    recorded once per browser startup.
+  </summary>
+</histogram>
+
 <histogram name="LoadingPredictor.OptimizationHintsReceiveStatus"
     enum="LoadingPredictorOptimizationHintsReceiveStatus"
     expires_after="2020-10-04">
@@ -113589,19 +113633,6 @@
   <summary>Time spent on specific OOBE screen grouped by exit reason.</summary>
 </histogram>
 
-<histogram name="OOBE.SyncConsentScreen.Behavior" enum="SyncConsentBehavior"
-    expires_after="2020-12-01">
-  <owner>jamescook@chromium.org</owner>
-  <owner>cros-oac@google.com</owner>
-  <summary>
-    Whether the sync consent screen was shown, skipped (resulting in the default
-    sync behavior), or skipped with sync enabled. Recorded when the screen is
-    closed. The default sync behavior depends on the SplitSettingsSync flag.
-    When SplitSettingsSync is enabled, sync defaults to off, and vice versa.
-    Metric Sync.InitialState provides more detail on the state of sync.
-  </summary>
-</histogram>
-
 <histogram name="OOBE.SyncConsentScreen.ReviewFollowingSetup"
     enum="BooleanChecked" expires_after="2020-10-01">
   <owner>raleksandrov@google.com</owner>
@@ -113612,16 +113643,6 @@
   </summary>
 </histogram>
 
-<histogram name="OOBE.SyncConsentScreen.UserChoice"
-    enum="SyncConsentUserChoice" expires_after="2020-12-01">
-  <owner>jamescook@chromium.org</owner>
-  <owner>cros-oac@google.com</owner>
-  <summary>
-    Which button the user clicked on the out-of-box sync consent screen.
-    Recorded when the user clicks the button, which also closes the screen.
-  </summary>
-</histogram>
-
 <histogram name="OOBE.UpdateScreen.UpdateDownloadingTime" units="ms"
     expires_after="2020-10-01">
   <owner>raleksandrov@google.com</owner>
@@ -151416,10 +151437,7 @@
 </histogram>
 
 <histogram base="true" name="SendTabToSelf.ClickResult"
-    enum="SendTabToSelfClickResult" expires_after="M84">
-  <obsolete>
-    Removed 05/2020.
-  </obsolete>
+    enum="SendTabToSelfClickResult" expires_after="M88">
   <owner>jeffreycohen@chromium.org</owner>
   <owner>sebsg@chromium.org</owner>
   <owner>tgupta@chromium.org</owner>
@@ -156846,6 +156864,9 @@
 
 <histogram name="Sharing.VapidKeyCreationResult"
     enum="SharingVapidKeyCreationResult" expires_after="M85">
+  <obsolete>
+    Removed 2020-06 as the result is always successful.
+  </obsolete>
   <owner>alexchau@chromium.org</owner>
   <owner>peter@chromium.org</owner>
   <summary>
@@ -162191,6 +162212,18 @@
   </summary>
 </histogram>
 
+<histogram name="SpellCheck.MisspellRatio" units="%" expires_after="M87">
+  <owner>gujen@google.com</owner>
+  <owner>chrome-language@google.com</owner>
+  <summary>The percentage of misspelled words within checked words.</summary>
+</histogram>
+
+<histogram name="SpellCheck.ReplaceRatio" units="%" expires_after="M87">
+  <owner>gujen@google.com</owner>
+  <owner>chrome-language@google.com</owner>
+  <summary>The percentage of replaced words within misspelled words.</summary>
+</histogram>
+
 <histogram name="SpellCheck.SpellingService.Enabled" enum="BooleanEnabled"
     expires_after="2020-12-01">
   <owner>groby@chromium.org</owner>
@@ -162234,6 +162267,14 @@
   </summary>
 </histogram>
 
+<histogram name="SpellCheck.SuggestionHitRatio" units="%" expires_after="M87">
+  <owner>gujen@google.com</owner>
+  <owner>chrome-language@google.com</owner>
+  <summary>
+    The percentage of replacement executions within suggestion occurrences.
+  </summary>
+</histogram>
+
 <histogram base="true" name="Spellcheck.Windows.ChromeLocalesSupport"
     units="locales" expires_after="2020-12-01">
   <owner>gujen@google.com</owner>
@@ -168407,8 +168448,11 @@
   </summary>
 </histogram>
 
-<histogram name="Sync.GlobalIdConflict" units="SyncGlobalIdConflict"
+<histogram name="Sync.GlobalIdConflict" enum="SyncGlobalIdConflict"
     expires_after="M85">
+  <obsolete>
+    Removed as of 06/2020.
+  </obsolete>
   <owner>mastiz@chromium.org</owner>
   <owner>treib@chromium.org</owner>
   <summary>
@@ -206681,9 +206725,6 @@
 
 <histogram_suffixes name="SendTabToSelfEntryPoint" separator="."
     ordering="prefix">
-  <obsolete>
-    The affected histogram is obsolete (5/20).
-  </obsolete>
   <owner>jeffreycohen@chromium.org</owner>
   <owner>sebsg@chromium.org</owner>
   <owner>tgupta@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index dd4fcf6..28fd8bf9 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,16 +1,16 @@
 {
     "trace_processor_shell": {
         "win": {
-            "hash": "0d67e269f432323554f769f10344b2d196d483d9",
-            "remote_path": "perfetto_binaries/trace_processor_shell/win/1c21759bb44e3f63dec4ec6b4cc078f4931fc13b/trace_processor_shell.exe"
+            "hash": "b7f0a11d1bd050f1615eaa75e7b1361cacbf47f8",
+            "remote_path": "perfetto_binaries/trace_processor_shell/win/3755aca72039c54e42fded4b16a1f2ac2c48fbf5/trace_processor_shell.exe"
         },
         "mac": {
             "hash": "cdcb1f5b233c5d3472a561a8f567d4927dec850b",
             "remote_path": "perfetto_binaries/trace_processor_shell/mac/058776deb61c3c6b1022c1e613e69518db32e443/trace_processor_shell"
         },
         "linux": {
-            "hash": "4ed2ea0ca4a1d98f2ffb5381eb8254da6989c52f",
-            "remote_path": "perfetto_binaries/trace_processor_shell/linux/bc9475ac0bf57ff18e9fea4fc10b6e3eb8f09247/trace_processor_shell"
+            "hash": "e761278db51e8f2d20fa0f43921f3f85090dfbc9",
+            "remote_path": "perfetto_binaries/trace_processor_shell/linux/3755aca72039c54e42fded4b16a1f2ac2c48fbf5/trace_processor_shell"
         }
     }
 }
\ No newline at end of file
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom
index 2af2772..9ee5d0d 100644
--- a/ui/accessibility/ax_enums.mojom
+++ b/ui/accessibility/ax_enums.mojom
@@ -27,7 +27,7 @@
 
 enum Event {
   kNone,
-  kActiveDescendantChanged,  // Web
+  kActiveDescendantChanged,
   kAlert,
   kAriaAttributeChanged,   // Implicit
   kAutocorrectionOccured,  // Unknown: http://crbug.com/392498
diff --git a/ui/accessibility/platform/ax_platform_node_delegate_base.cc b/ui/accessibility/platform/ax_platform_node_delegate_base.cc
index 87796dc..7a093f4 100644
--- a/ui/accessibility/platform/ax_platform_node_delegate_base.cc
+++ b/ui/accessibility/platform/ax_platform_node_delegate_base.cc
@@ -537,6 +537,11 @@
 
 std::set<AXPlatformNode*> AXPlatformNodeDelegateBase::GetReverseRelations(
     ax::mojom::IntAttribute attr) {
+  // TODO(accessibility) Implement these if views ever use relations more
+  // widely. The use so far has been for the Omnibox to the suggestion popup.
+  // If this is ever implemented, then the "popup for" to "controlled by"
+  // mapping in AXPlatformRelationWin can be removed, as it would be
+  // redundant with setting the controls relationship.
   return std::set<AXPlatformNode*>();
 }
 
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index 076152e..aeb3dca 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -7306,6 +7306,8 @@
   switch (event) {
     case ax::mojom::Event::kAlert:
       return EVENT_SYSTEM_ALERT;
+    case ax::mojom::Event::kActiveDescendantChanged:
+      return IA2_EVENT_ACTIVE_DESCENDANT_CHANGED;
     case ax::mojom::Event::kCheckedStateChanged:
     case ax::mojom::Event::kExpandedChanged:
     case ax::mojom::Event::kStateChanged:
diff --git a/ui/accessibility/platform/ax_platform_node_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_win_unittest.cc
index e79b7ce7..bd75332 100644
--- a/ui/accessibility/platform/ax_platform_node_win_unittest.cc
+++ b/ui/accessibility/platform/ax_platform_node_win_unittest.cc
@@ -1935,6 +1935,103 @@
   // TODO(dougt): Try adding one more relation.
 }
 
+TEST_F(AXPlatformNodeWinTest,
+       IAccessible2TestPopupForRelationMapsToControlledByRelation) {
+  AXNodeData root;
+  root.id = 1;
+  root.role = ax::mojom::Role::kRootWebArea;
+
+  AXNodeData child1;
+  child1.id = 2;
+  child1.role = ax::mojom::Role::kTextField;
+  child1.AddIntListAttribute(ax::mojom::IntListAttribute::kControlsIds, {3});
+  root.child_ids.push_back(2);
+
+  // Add listbox that is popup for the textfield.
+  AXNodeData child2;
+  child2.id = 3;
+  child2.role = ax::mojom::Role::kListBox;
+  child2.AddIntAttribute(ax::mojom::IntAttribute::kPopupForId, 2);
+  root.child_ids.push_back(3);
+
+  Init(root, child1, child2);
+  ComPtr<IAccessible> root_iaccessible(GetRootIAccessible());
+  ComPtr<IAccessible2> root_iaccessible2 = ToIAccessible2(root_iaccessible);
+
+  ComPtr<IDispatch> result;
+  EXPECT_EQ(S_OK, root_iaccessible2->get_accChild(ScopedVariant(1), &result));
+  ComPtr<IAccessible2> ax_child1;
+  EXPECT_EQ(S_OK, result.As(&ax_child1));
+  result.Reset();
+
+  EXPECT_EQ(S_OK, root_iaccessible2->get_accChild(ScopedVariant(2), &result));
+  ComPtr<IAccessible2> ax_child2;
+  EXPECT_EQ(S_OK, result.As(&ax_child2));
+  result.Reset();
+
+  LONG n_relations = 0;
+  LONG n_targets = 0;
+  ScopedBstr relation_type;
+  ComPtr<IAccessibleRelation> controls_relation;
+  ComPtr<IAccessibleRelation> controlled_by_relation;
+  ComPtr<IUnknown> target;
+
+  EXPECT_HRESULT_SUCCEEDED(ax_child1->get_nRelations(&n_relations));
+  EXPECT_EQ(1, n_relations);
+
+  EXPECT_HRESULT_SUCCEEDED(ax_child1->get_relation(0, &controls_relation));
+
+  EXPECT_HRESULT_SUCCEEDED(
+      controls_relation->get_relationType(relation_type.Receive()));
+  EXPECT_EQ(L"controllerFor", base::string16(relation_type.Get()));
+
+  relation_type.Reset();
+
+  EXPECT_HRESULT_SUCCEEDED(controls_relation->get_nTargets(&n_targets));
+  EXPECT_EQ(1, n_targets);
+
+  EXPECT_HRESULT_SUCCEEDED(controls_relation->get_target(0, &target));
+  target.Reset();
+
+  controls_relation.Reset();
+
+  // Test the controlled by relation, mapped from the popup for relation.
+  EXPECT_HRESULT_SUCCEEDED(ax_child2->get_nRelations(&n_relations));
+  // The test is currently outsmarting us, and automatically mapping the
+  // reverse relation in addition to mapping the popup for -> controlled by.
+  // Therefore, the same relation will exist twice in this test, which
+  // actually shows that the popup for -> controlled by relation is working.
+  // As a result, both relations should have the same result in this test.
+  EXPECT_EQ(2, n_relations);
+
+  // Both relations should have the same result in this test.
+  EXPECT_HRESULT_SUCCEEDED(ax_child2->get_relation(0, &controlled_by_relation));
+  EXPECT_HRESULT_SUCCEEDED(
+      controlled_by_relation->get_relationType(relation_type.Receive()));
+  EXPECT_EQ(L"controlledBy", base::string16(relation_type.Get()));
+  relation_type.Reset();
+
+  EXPECT_HRESULT_SUCCEEDED(controlled_by_relation->get_nTargets(&n_targets));
+  EXPECT_EQ(1, n_targets);
+
+  EXPECT_HRESULT_SUCCEEDED(controlled_by_relation->get_target(0, &target));
+  target.Reset();
+  controlled_by_relation.Reset();
+
+  // Both relations should have the same result in this test.
+  EXPECT_HRESULT_SUCCEEDED(ax_child2->get_relation(1, &controlled_by_relation));
+  EXPECT_HRESULT_SUCCEEDED(
+      controlled_by_relation->get_relationType(relation_type.Receive()));
+  EXPECT_EQ(L"controlledBy", base::string16(relation_type.Get()));
+  relation_type.Reset();
+
+  EXPECT_HRESULT_SUCCEEDED(controlled_by_relation->get_nTargets(&n_targets));
+  EXPECT_EQ(1, n_targets);
+
+  EXPECT_HRESULT_SUCCEEDED(controlled_by_relation->get_target(0, &target));
+  target.Reset();
+}
+
 TEST_F(AXPlatformNodeWinTest, DISABLED_TestRelationTargetsOfType) {
   AXNodeData root;
   root.id = 1;
diff --git a/ui/accessibility/platform/ax_platform_relation_win.cc b/ui/accessibility/platform/ax_platform_relation_win.cc
index 5f03ec8..eee92e3 100644
--- a/ui/accessibility/platform/ax_platform_relation_win.cc
+++ b/ui/accessibility/platform/ax_platform_relation_win.cc
@@ -43,6 +43,12 @@
       return IA2_RELATION_MEMBER_OF;
     case ax::mojom::IntAttribute::kErrormessageId:
       return IA2_RELATION_ERROR;
+    case ax::mojom::IntAttribute::kPopupForId:
+      // Map "popup for" to "controlled by".
+      // Unlike ATK there is no special IA2 popup-for relationship, but it can
+      // be exposed via the controlled by relation, which is also computed for
+      // content as the reverse of the controls relationship.
+      return IA2_RELATION_CONTROLLED_BY;
     default:
       break;
   }
diff --git a/ui/android/java/res/OWNERS b/ui/android/java/res/OWNERS
index dfa1db9..317a9b6 100644
--- a/ui/android/java/res/OWNERS
+++ b/ui/android/java/res/OWNERS
@@ -4,5 +4,7 @@
 set noparent
 file://ui/android/java/res/LAYOUT_OWNERS
 
+per-file *color*.xml=lazzzis@google.com
+
 # COMPONENT: UI>Browser>Mobile
 # OS: Android
diff --git a/ui/android/java/src/org/chromium/ui/base/Clipboard.java b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
index 41d172ed..346314f 100644
--- a/ui/android/java/src/org/chromium/ui/base/Clipboard.java
+++ b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
@@ -36,6 +36,7 @@
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.compat.ApiHelperForO;
 import org.chromium.base.metrics.RecordUserAction;
+import org.chromium.base.task.AsyncTask;
 import org.chromium.ui.R;
 import org.chromium.ui.widget.Toast;
 
@@ -277,6 +278,8 @@
 
     /**
      * Setting the clipboard's current primary clip to an image.
+     * This method requires background work and might not be immediately committed upon returning
+     * from this method.
      * @param Uri The {@link Uri} will become the content of the clipboard's primary clip.
      */
     public void setImageUri(final Uri uri) {
@@ -287,9 +290,19 @@
 
         grantUriPermission(uri);
 
-        ClipData clip = ClipData.newUri(
-                ContextUtils.getApplicationContext().getContentResolver(), "image", uri);
-        setPrimaryClipNoException(clip);
+        // ClipData.newUri may access the disk (for reading mime types), and cause
+        // StrictModeDiskReadViolation if do it on UI thread.
+        new AsyncTask<ClipData>() {
+            @Override
+            protected ClipData doInBackground() {
+                return ClipData.newUri(
+                        ContextUtils.getApplicationContext().getContentResolver(), "image", uri);
+            }
+            @Override
+            protected void onPostExecute(ClipData clipData) {
+                setPrimaryClipNoException(clipData);
+            }
+        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
     }
 
     /**
diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/DisableAnimationsTestRule.java b/ui/android/javatests/src/org/chromium/ui/test/util/DisableAnimationsTestRule.java
index 838e6f2a..7bb953c 100644
--- a/ui/android/javatests/src/org/chromium/ui/test/util/DisableAnimationsTestRule.java
+++ b/ui/android/javatests/src/org/chromium/ui/test/util/DisableAnimationsTestRule.java
@@ -14,6 +14,10 @@
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 
@@ -22,6 +26,13 @@
  * DisableAnimationsTestRule(true).
  */
 public class DisableAnimationsTestRule implements TestRule {
+    /**
+     * Allows methods to ensure animations are on while disabled rule is applied class-wide.
+     */
+    @Target(ElementType.METHOD)
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface EnsureAnimationsOn {}
+
     private boolean mEnableAnimation;
     private Method mSetAnimationScalesMethod;
     private Method mGetAnimationScalesMethod;
@@ -65,11 +76,14 @@
         return new Statement() {
             @Override
             public void evaluate() throws Throwable {
+                boolean overrideRequested =
+                        description.getAnnotation(EnsureAnimationsOn.class) != null;
                 float curAnimationScale = Settings.Global.getFloat(
                         ContextUtils.getApplicationContext().getContentResolver(),
                         Settings.Global.ANIMATOR_DURATION_SCALE, DEFAULT_SCALE_FACTOR);
-                float toAnimationScale =
-                        mEnableAnimation ? DEFAULT_SCALE_FACTOR : DISABLED_SCALE_FACTOR;
+                float toAnimationScale = mEnableAnimation || overrideRequested
+                        ? DEFAULT_SCALE_FACTOR
+                        : DISABLED_SCALE_FACTOR;
                 if (curAnimationScale != toAnimationScale) {
                     setAnimationScaleFactors(toAnimationScale);
                     Log.i(TAG, "Set animation scales to: %.1f", toAnimationScale);
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
index bc47a918..07d9672e 100644
--- a/ui/base/BUILD.gn
+++ b/ui/base/BUILD.gn
@@ -1097,6 +1097,7 @@
       "dragdrop/os_exchange_data_provider_x11_unittest.cc",
       "x/selection_requestor_unittest.cc",
     ]
+    deps += [ "//ui/gfx/x:unit_test" ]
   }
 
   if (is_chromeos) {
diff --git a/ui/base/x/selection_requestor.cc b/ui/base/x/selection_requestor.cc
index a2ed13d..6c83894b 100644
--- a/ui/base/x/selection_requestor.cc
+++ b/ui/base/x/selection_requestor.cc
@@ -256,11 +256,15 @@
   } else {
     // This occurs if PerformBlockingConvertSelection() is called during
     // shutdown and the X11EventSource has already been destroyed.
+    auto* conn = x11::Connection::Get();
+    auto& events = conn->events();
     while (!request->completed && request->timeout > base::TimeTicks::Now()) {
-      if (XPending(x_display_)) {
-        XEvent event;
-        XNextEvent(x_display_, &event);
-        dispatcher_->DispatchXEvent(&event);
+      conn->Flush();
+      conn->ReadResponses();
+      if (!conn->events().empty()) {
+        x11::Connection::Event event = std::move(events.front());
+        events.pop_front();
+        dispatcher_->DispatchXEvent(&event.xlib_event);
       }
     }
   }
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index 693c83d..eb598ba 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -356,22 +356,23 @@
 
 int CoalescePendingMotionEvents(const XEvent* xev, XEvent* last_event) {
   DCHECK(xev->type == MotionNotify || xev->type == x11::GeGenericEvent::opcode);
-  XDisplay* display = xev->xany.display;
-  XEvent next_event;
+  auto* conn = x11::Connection::Get();
   bool is_motion = false;
   int num_coalesced = 0;
 
+  conn->ReadResponses();
   if (xev->type == MotionNotify) {
     is_motion = true;
-    while (XPending(display)) {
-      XPeekEvent(xev->xany.display, &next_event);
+    for (auto it = conn->events().begin(); it != conn->events().end();) {
+      const auto& next_event = it->xlib_event;
       // Discard all but the most recent motion event that targets the same
       // window with unchanged state.
       if (next_event.type == MotionNotify &&
           next_event.xmotion.window == xev->xmotion.window &&
           next_event.xmotion.subwindow == xev->xmotion.subwindow &&
           next_event.xmotion.state == xev->xmotion.state) {
-        XNextEvent(xev->xany.display, last_event);
+        *last_event = next_event;
+        it = conn->events().erase(it);
       } else {
         break;
       }
@@ -382,12 +383,11 @@
     DCHECK(event_type == XI_Motion || event_type == XI_TouchUpdate);
     is_motion = event_type == XI_Motion;
 
-    while (XPending(display)) {
-      XPeekEvent(display, &next_event);
+    for (auto it = conn->events().begin(); it != conn->events().end();) {
+      auto& next_event = it->xlib_event;
 
-      // If we can't get the cookie, abort the check.
-      if (!XGetEventData(next_event.xgeneric.display, &next_event.xcookie))
-        return num_coalesced;
+      if (next_event.type != GenericEvent || !next_event.xcookie.data)
+        break;
 
       // If this isn't from a valid device, throw the event away, as
       // that's what the message pump would do. Device events come in pairs
@@ -395,8 +395,7 @@
       // always be at least one pending.
       if (!ui::TouchFactory::GetInstance()->ShouldProcessXI2Event(
               &next_event)) {
-        XFreeEventData(display, &next_event.xcookie);
-        XNextEvent(display, &next_event);
+        it = conn->events().erase(it);
         continue;
       }
 
@@ -420,19 +419,16 @@
             xievent->mods.latched == next_xievent->mods.latched &&
             xievent->mods.locked == next_xievent->mods.locked &&
             xievent->mods.effective == next_xievent->mods.effective) {
-          XFreeEventData(display, &next_event.xcookie);
           // Free the previous cookie.
           if (num_coalesced > 0)
-            XFreeEventData(display, &last_event->xcookie);
-          // Get the event and its cookie data.
-          XNextEvent(display, last_event);
-          XGetEventData(display, &last_event->xcookie);
-          ++num_coalesced;
+            XFreeEventData(last_event->xany.display, &last_event->xcookie);
+          last_event->xcookie = next_event.xcookie;
+          next_event.xcookie.data = nullptr;
+          it = conn->events().erase(it);
+          num_coalesced++;
           continue;
         }
       }
-      // This isn't an event we want so free its cookie data.
-      XFreeEventData(display, &next_event.xcookie);
       break;
     }
   }
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
index b79e4b5..cbe5bf38 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliterasie (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Velle</translation>
 <translation id="2938685643439809023">Mongolees</translation>
+<translation id="2939410873710774399">Om lêers met <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) oop te maak, moet jy hulle eers na die vouer <ph name="FOLDER_NAME" /> toe skuif.</translation>
 <translation id="2942290791863759244">Duitse NEO 2-sleutelbord</translation>
 <translation id="2943400156390503548">Skyfies</translation>
 <translation id="2943503720238418293">Gebruik 'n korter naam</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> items gekies</translation>
 <translation id="4850886885716139402">Bekyk</translation>
 <translation id="485316830061041779">Duits</translation>
+<translation id="4859297381873413734">Om die lêers met <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) oop te maak, moet jy hulle eers na die vouer <ph name="FOLDER_NAME" /> toe kopieer.</translation>
 <translation id="4867079195717347957">Kies om die kolom in dalende volgorde te rangskik.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> grepe</translation>
 <translation id="4880214202172289027">Volumeglyer</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
index 0ba4b3c..00bad61f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">በቋንቋ ፊደል መጻፍ (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">ሉሆች</translation>
 <translation id="2938685643439809023">ሞንጎልኛ</translation>
+<translation id="2939410873710774399">ፋይሎችን በ<ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ለመክፈት መጀመሪያ ወደ የ<ph name="FOLDER_NAME" /> አቃፊው ይውሰዷቸው።</translation>
 <translation id="2942290791863759244">የጀርመንኛ NEO 2 ቁልፍ ሰሌዳ</translation>
 <translation id="2943400156390503548">ስላይድ</translation>
 <translation id="2943503720238418293">ያጠረ ስም ይጠቀሙ</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ንጥሎች ተመርጠዋል</translation>
 <translation id="4850886885716139402">አሳይ</translation>
 <translation id="485316830061041779">ጀርመን</translation>
+<translation id="4859297381873413734">ፋይሎችን በ<ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ለመክፈት መጀመሪያ ወደ የ<ph name="FOLDER_NAME" /> አቃፊው ይቅዷቸው።</translation>
 <translation id="4867079195717347957">በወራጅ ቅደም ተከተል ዓምዱን ለመደርደር ጠቅ ያድርጉ።</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> ባይት</translation>
 <translation id="4880214202172289027">የድምጽ ተንሸራታች</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
index b210530..117fe88 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">‏التحويل الصوتي (ناماسكارام ← ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">جداول البيانات</translation>
 <translation id="2938685643439809023">المنغولية</translation>
+<translation id="2939410873710774399">لفتح الملفات باستخدام التطبيق <ph name="APP_NAME" /> ‏(<ph name="VM_SOFTWARE_NAME" />)، يُرجى نقلها أولاً إلى المجلد <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">‏لوحة المفاتيح الألمانية Neo 2</translation>
 <translation id="2943400156390503548">الشرائح</translation>
 <translation id="2943503720238418293">استخدم اسم أقصر</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">تم اختيار <ph name="SELCTED_FILES_COUNT" /> من العناصر</translation>
 <translation id="4850886885716139402">عرض</translation>
 <translation id="485316830061041779">الألمانية</translation>
+<translation id="4859297381873413734">لفتح الملفات باستخدام التطبيق <ph name="APP_NAME" /> ‏(<ph name="VM_SOFTWARE_NAME" />)، يُرجى نسخها أولاً إلى المجلد <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">انقر لترتيب محتوى العمود ترتيبًا تنازليًا.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> بايت</translation>
 <translation id="4880214202172289027">شريط تمرير مستوى الصوت</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_az.xtb b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
index 16378df..1e87cdb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_az.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliterasiya (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Vərəqlər</translation>
 <translation id="2938685643439809023">Monqolca</translation>
+<translation id="2939410873710774399">Faylları <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ilə açmaq üçün əvvəlcə onları <ph name="FOLDER_NAME" /> qovluğuna köçürün.</translation>
 <translation id="2942290791863759244">Alman NEO 2 klaviaturası</translation>
 <translation id="2943400156390503548">Slaydlar</translation>
 <translation id="2943503720238418293">Qısa ad istifadə edin</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> element seçilib</translation>
 <translation id="4850886885716139402">Görünüş</translation>
 <translation id="485316830061041779">Alman</translation>
+<translation id="4859297381873413734">Faylları <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ilə açmaq üçün əvvəlcə onları <ph name="FOLDER_NAME" /> qovluğuna kopyalayın.</translation>
 <translation id="4867079195717347957">Sütunu artan sıra ilə çeşidləmək üçün klikləyin.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bayt</translation>
 <translation id="4880214202172289027">Səs slayderi</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_be.xtb b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
index e3961e0a..cebe8e8b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_be.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Транслітарацыя (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Табліцы</translation>
 <translation id="2938685643439809023">Мангольская</translation>
+<translation id="2939410873710774399">Каб адкрываць файлы ў праграме <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), спачатку перамясціце іх у папку "<ph name="FOLDER_NAME" />".</translation>
 <translation id="2942290791863759244">Нямецкая клавіятура NEO 2</translation>
 <translation id="2943400156390503548">Прэзентацыі</translation>
 <translation id="2943503720238418293">Выкарыстайце карацейшую назву</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Элементаў выбрана: <ph name="SELCTED_FILES_COUNT" /></translation>
 <translation id="4850886885716139402">Праглядзець</translation>
 <translation id="485316830061041779">Нямецкая</translation>
+<translation id="4859297381873413734">Каб адкрываць файлы ў праграме <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), спачатку скапіруйце іх у папку "<ph name="FOLDER_NAME" />".</translation>
 <translation id="4867079195717347957">Каб адсартаваць слупок па ўбыванні, націсніце тут.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> Б</translation>
 <translation id="4880214202172289027">Рэгулятар гучнасці</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
index 93ac110..2fde314 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Транслитерация (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Електронни таблици</translation>
 <translation id="2938685643439809023">монголски</translation>
+<translation id="2939410873710774399">За да отваряте файлове с <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), първо ги преместете в папката <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Немска клавиатура (NEO 2)</translation>
 <translation id="2943400156390503548">Презентации</translation>
 <translation id="2943503720238418293">Използвайте по-кратко име</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Избрани са <ph name="SELCTED_FILES_COUNT" /> елемента</translation>
 <translation id="4850886885716139402">Изглед</translation>
 <translation id="485316830061041779">немски</translation>
+<translation id="4859297381873413734">За да отваряте файлове с <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), първо ги копирайте в папката <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Кликнете, за да сортирате колоната в низходящ ред.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> байта</translation>
 <translation id="4880214202172289027">Плъзгач за силата на звука</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
index abea15d5..52caa83d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">transliteracija (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Tabele</translation>
 <translation id="2938685643439809023">Mongolska</translation>
+<translation id="2939410873710774399">Da otvorite fajlove pomoću aplikacije <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), prvo ih premjestite u folder <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Njemačka NEO 2 tastatura</translation>
 <translation id="2943400156390503548">Slides</translation>
 <translation id="2943503720238418293">Koristite kraći naziv</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Broj odabranih stavki: <ph name="SELCTED_FILES_COUNT" /></translation>
 <translation id="4850886885716139402">Prikaz</translation>
 <translation id="485316830061041779">Njemačka</translation>
+<translation id="4859297381873413734">Da otvorite fajlove pomoću aplikacije <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), prvo ih premjestite u folder <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Kliknite da poredate kolonu silaznim poretkom.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> B</translation>
 <translation id="4880214202172289027">Klizač za jačinu zvuka</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
index 51a31a35..6cca230 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteració (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Fulls</translation>
 <translation id="2938685643439809023">Mongol</translation>
+<translation id="2939410873710774399">Per obrir fitxers amb <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), primer mou-los a la carpeta <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Teclat alemany (NEO 2)</translation>
 <translation id="2943400156390503548">Diapositives</translation>
 <translation id="2943503720238418293">Utilitza un nom més curt</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elements seleccionats</translation>
 <translation id="4850886885716139402">Mostra</translation>
 <translation id="485316830061041779">Alemany</translation>
+<translation id="4859297381873413734">Per obrir fitxers amb <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), primer copia'ls a la carpeta <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Fes clic per veure les dades de la columna en ordre descendent.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bytes</translation>
 <translation id="4880214202172289027">Control lliscant de volum</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
index c5bfd7a9..cf6a1cdc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Translitteration (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Sheets</translation>
 <translation id="2938685643439809023">Mongolsk</translation>
+<translation id="2939410873710774399">Hvis du vil åbne filer med <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), skal du først flytte dem til mappen <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Tysk NEO 2-tastatur</translation>
 <translation id="2943400156390503548">Slides</translation>
 <translation id="2943503720238418293">Brug et kortere navn</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementer valgt</translation>
 <translation id="4850886885716139402">Vis</translation>
 <translation id="485316830061041779">Tysk</translation>
+<translation id="4859297381873413734">Hvis du vil åbne filer med <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), skal du først flytte dem til mappen <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Klik for at sortere kolonnen i faldende rækkefølge.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bytes</translation>
 <translation id="4880214202172289027">Skydeknap til lydstyrke</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index 283f009d..59b8cd5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteration (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Tabellen</translation>
 <translation id="2938685643439809023">Mongolisch</translation>
+<translation id="2939410873710774399">Zum Öffnen von Dateien mit der App "<ph name="APP_NAME" />" (<ph name="VM_SOFTWARE_NAME" />) müssen Sie sie zuerst in den Ordner "<ph name="FOLDER_NAME" />" verschieben.</translation>
 <translation id="2942290791863759244">Deutsche Neo2-Tastatur</translation>
 <translation id="2943400156390503548">Präsentationen</translation>
 <translation id="2943503720238418293">Verwenden Sie einen kürzeren Namen</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> Elemente ausgewählt</translation>
 <translation id="4850886885716139402">Anzeigen</translation>
 <translation id="485316830061041779">Deutsch</translation>
+<translation id="4859297381873413734">Zum Öffnen von Dateien mit der App "<ph name="APP_NAME" />" (<ph name="VM_SOFTWARE_NAME" />) müssen Sie sie zuerst in den Ordner "<ph name="FOLDER_NAME" />" kopieren.</translation>
 <translation id="4867079195717347957">Klicken, um die Spalte in absteigender Reihenfolge zu sortieren.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> Byte</translation>
 <translation id="4880214202172289027">Schieberegler für die Lautstärke</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
index df4ead7..034895d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -168,6 +168,7 @@
 <translation id="2924296707677495905">Μεταγραφή (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Υπολογιστικά φύλλα</translation>
 <translation id="2938685643439809023">Μογγολικά</translation>
+<translation id="2939410873710774399">Για να ανοίξετε αρχεία με την εφαρμογή <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), πρώτα μετακινήστε τα στον φάκελο <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Πληκτρολόγιο Γερμανικών Neo 2</translation>
 <translation id="2943400156390503548">Διαφάνειες</translation>
 <translation id="2943503720238418293">Χρησιμοποιήστε πιο σύντομο όνομα</translation>
@@ -334,6 +335,7 @@
 <translation id="4850886885716139402">Προβολή</translation>
 <translation id="485316830061041779">Γερμανικά
 </translation>
+<translation id="4859297381873413734">Για να ανοίξετε αρχεία με την εφαρμογή <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), πρώτα αντιγράψτε τα στον φάκελο<ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Κάντε κλικ για ταξινόμηση της στήλης σε φθίνουσα σειρά.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> byte</translation>
 <translation id="4880214202172289027">Ρυθμιστικό έντασης ήχου</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
index e0a5beb..c94fc83 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteración (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Hojas de cálculo de Google</translation>
 <translation id="2938685643439809023">Mongol</translation>
+<translation id="2939410873710774399">Para abrir archivos con <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), primero debes moverlos a la carpeta <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Teclado alemán Neo 2</translation>
 <translation id="2943400156390503548">Presentaciones</translation>
 <translation id="2943503720238418293">Usa un nombre más corto</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementos seleccionados</translation>
 <translation id="4850886885716139402">Ver</translation>
 <translation id="485316830061041779">Alemán</translation>
+<translation id="4859297381873413734">Para abrir archivos con <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), primero debes copiarlos a la carpeta <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Haz clic para ordenar la columna de forma descendente.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bytes</translation>
 <translation id="4880214202172289027">Control deslizante del volumen</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
index e136837..53a9bb24 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteración (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Hojas de cálculo de Google</translation>
 <translation id="2938685643439809023">Mongol</translation>
+<translation id="2939410873710774399">Para abrir los archivos con <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), primero debes moverlos a la carpeta <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Teclado alemán Neo 2</translation>
 <translation id="2943400156390503548">Presentaciones</translation>
 <translation id="2943503720238418293">Utiliza un nombre más corto</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementos seleccionados</translation>
 <translation id="4850886885716139402">Ver</translation>
 <translation id="485316830061041779">Alemán</translation>
+<translation id="4859297381873413734">Para abrir los archivos con <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), primero debes copiarlos a la carpeta <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Haz clic para mostrar la columna en orden descendente.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bytes</translation>
 <translation id="4880214202172289027">Control deslizante de volumen</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
index c2ed6a67..124d420 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteratsioon (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Arvutustabelid</translation>
 <translation id="2938685643439809023">mongoolia keel</translation>
+<translation id="2939410873710774399">Failide avamiseks rakendusega <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) teisaldage need esmalt kausta <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Saksa NEO 2 klaviatuur</translation>
 <translation id="2943400156390503548">Esitlused</translation>
 <translation id="2943503720238418293">Kasutage lühemat nime</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Valitud on <ph name="SELCTED_FILES_COUNT" /> üksust</translation>
 <translation id="4850886885716139402">Kuva</translation>
 <translation id="485316830061041779">saksa keel</translation>
+<translation id="4859297381873413734">Failide avamiseks rakendusega <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) kopeerige need esmalt kausta <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Klõpsake, et veerg kahanevas järjestuses sortida.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> baiti</translation>
 <translation id="4880214202172289027">Helitugevuse liugur</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
index 8190645..1eca870 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliterazioa (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Kalkulu-orriak</translation>
 <translation id="2938685643439809023">Mongoliarra</translation>
+<translation id="2939410873710774399">Fitxategiak <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) aplikazioarekin irekitzeko, eraman itzazu <ph name="FOLDER_NAME" /> karpetara.</translation>
 <translation id="2942290791863759244">Teklatu alemana (NEO 2)</translation>
 <translation id="2943400156390503548">Diapositibak</translation>
 <translation id="2943503720238418293">Erabili izen laburrago bat</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementu hautatu dira</translation>
 <translation id="4850886885716139402">Ikusi</translation>
 <translation id="485316830061041779">Alemana</translation>
+<translation id="4859297381873413734">Fitxategiak <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) aplikazioarekin irekitzeko, kopia itzazu <ph name="FOLDER_NAME" /> karpetan.</translation>
 <translation id="4867079195717347957">Egin klik zutabea beheranzko ordenan ezartzeko.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> byte</translation>
 <translation id="4880214202172289027">Bolumen-graduatzailea</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
index c8a3580..672f2d4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">‏نویسه‌گردانی (namaskaram ← ‏ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">صفحات</translation>
 <translation id="2938685643439809023">مغولی</translation>
+<translation id="2939410873710774399">برای باز کردن فایل‌ها با <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />)، ابتدا آن‌ها را به پوشه <ph name="FOLDER_NAME" /> منتقل کنید.</translation>
 <translation id="2942290791863759244">‏صفحه‌کلید آلمانی NEO 2</translation>
 <translation id="2943400156390503548">اسلایدها</translation>
 <translation id="2943503720238418293">از نام کوتاه‌تری استفاده کنید</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> مورد انتخاب شد</translation>
 <translation id="4850886885716139402">نما</translation>
 <translation id="485316830061041779">آلمانی</translation>
+<translation id="4859297381873413734">برای باز کردن فایل‌ها با <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />)، ابتدا آن‌ها را در پوشه <ph name="FOLDER_NAME" /> کپی کنید.</translation>
 <translation id="4867079195717347957">کلیک کنید تا ستون به‌صورت نزولی مرتب شود.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> بایت</translation>
 <translation id="4880214202172289027">اسلایدر میزان صدا</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
index 6a5253c..4f5c514d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Translitterointi (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Taulukot</translation>
 <translation id="2938685643439809023">mongolia</translation>
+<translation id="2939410873710774399">Jos haluat avata tiedostoja sovelluksella <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), siirrä ne ensin kansioon <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Saksan NEO 2 -näppäimistö</translation>
 <translation id="2943400156390503548">Slides</translation>
 <translation id="2943503720238418293">Nimi on liian pitkä.</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> kohdetta on valittu</translation>
 <translation id="4850886885716139402">Näytä</translation>
 <translation id="485316830061041779">saksa</translation>
+<translation id="4859297381873413734">Jos haluat avata tiedostoja sovelluksella <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), kopioi ne ensin kansioon <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Klikkaa, jos haluat lajitella laskevaan järjestykseen.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> tavua</translation>
 <translation id="4880214202172289027">Äänenvoimakkuuden liukusäädin</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
index 14775cbf..485c7a7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Translittération (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Feuilles de calcul</translation>
 <translation id="2938685643439809023">Mongol</translation>
+<translation id="2939410873710774399">Pour ouvrir les fichiers avec l'application <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), déplacez-les d'abord dans le dossier <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Clavier allemand NEO 2</translation>
 <translation id="2943400156390503548">Présentations</translation>
 <translation id="2943503720238418293">Utilisez un nom plus court.</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> éléments sélectionnés</translation>
 <translation id="4850886885716139402">Afficher</translation>
 <translation id="485316830061041779">Allemand</translation>
+<translation id="4859297381873413734">Pour ouvrir des fichiers avec l'application <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), copiez-les d'abord dans le dossier <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Cliquez pour trier la colonne par ordre décroissant.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> octets</translation>
 <translation id="4880214202172289027">Curseur de volume</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
index 9e3fc5ab..b1a9db6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteración (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Follas</translation>
 <translation id="2938685643439809023">Mongol</translation>
+<translation id="2939410873710774399">Para poder abrir ficheiros coa aplicación <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), debes movelos ao cartafol <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Teclado neo 2 alemán</translation>
 <translation id="2943400156390503548">Presentacións</translation>
 <translation id="2943503720238418293">Utiliza un nome máis curto</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementos seleccionados</translation>
 <translation id="4850886885716139402">Vista</translation>
 <translation id="485316830061041779">Alemán</translation>
+<translation id="4859297381873413734">Para poder abrir ficheiros coa aplicación <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), debes copialos no cartafol <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Fai clic para organizar a columna en orde descendente.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bytes</translation>
 <translation id="4880214202172289027">Control desprazable de volume</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
index ca92b01e..46de713 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">લિવ્યંતરણ (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Sheets</translation>
 <translation id="2938685643439809023">મોંગોલિયન</translation>
+<translation id="2939410873710774399"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />)માં ફાઇલો ખોલવા માટે, પહેલાં તેમને <ph name="FOLDER_NAME" /> ફોલ્ડરમાં ખસેડો.</translation>
 <translation id="2942290791863759244">જર્મન નીઓ 2 કીબોર્ડ</translation>
 <translation id="2943400156390503548">સ્લાઇડ્સ</translation>
 <translation id="2943503720238418293">વધુ ટૂંકા નામનો ઉપયોગ કરો</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> આઇટમ્સ પસંદ કરી</translation>
 <translation id="4850886885716139402">જુઓ</translation>
 <translation id="485316830061041779">જર્મન</translation>
+<translation id="4859297381873413734"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />)માં ફાઇલો ખોલવા માટે, પહેલાં તેમને <ph name="FOLDER_NAME" /> ફોલ્ડરમાં કૉપિ કરો.</translation>
 <translation id="4867079195717347957">કૉલમને: ઉતરતા ક્રમમાં સૉર્ટ કરવા માટે ક્લિક કરો.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> બાઇટ</translation>
 <translation id="4880214202172289027">વોલ્યુમ સ્લાઇડર</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index 169e82905..b358cb4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">लिप्यंतरण (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Sheets</translation>
 <translation id="2938685643439809023">मंगोलियाई</translation>
+<translation id="2939410873710774399"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), से फ़ाइलों को खोलने के लिए, पहले उन्हें <ph name="FOLDER_NAME" /> फ़ोल्डर में ले जाएं.</translation>
 <translation id="2942290791863759244">जर्मन नियो 2 कीबोर्ड</translation>
 <translation id="2943400156390503548">स्लाइड</translation>
 <translation id="2943503720238418293">थोड़े छोटे नाम का इस्तेमाल करें</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> आइटम चयनित</translation>
 <translation id="4850886885716139402">देखें</translation>
 <translation id="485316830061041779">जर्मन</translation>
+<translation id="4859297381873413734"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) से फ़ाइलों को खोलने के लिए, पहले उन्हें <ph name="FOLDER_NAME" /> फ़ोल्डर में कॉपी करें.</translation>
 <translation id="4867079195717347957">स्तंभ को घटते क्रम में लगाने के लिए क्लिक करें.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> बाइट</translation>
 <translation id="4880214202172289027">वॉल्‍यूम स्‍लाइडर</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
index 80e3405d..9342cc3 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">transliteracija (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Tablice</translation>
 <translation id="2938685643439809023">Mongolski</translation>
+<translation id="2939410873710774399">Da biste otvorili datoteke s <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), prvo ih premjestite u mapu <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">njemačka NEO 2 tipkovnica</translation>
 <translation id="2943400156390503548">Prezentacije</translation>
 <translation id="2943503720238418293">Upotrijebite kraći naziv</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Odabrane stavke: <ph name="SELCTED_FILES_COUNT" /></translation>
 <translation id="4850886885716139402">Prikaz</translation>
 <translation id="485316830061041779">Njemački</translation>
+<translation id="4859297381873413734">Da biste otvorili datoteke s <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), prvo ih kopirajte u mapu <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Kliknite da biste stavke u stupcu poredali silaznim redoslijedom.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> B</translation>
 <translation id="4880214202172289027">Klizač za glasnoću</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
index 73366ea3..ca8e5208 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Átírás (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Táblázatok</translation>
 <translation id="2938685643439809023">mongol</translation>
+<translation id="2939410873710774399">Ha a következővel szeretne fájlokat megnyitni, először helyezze át őket a(z) <ph name="FOLDER_NAME" /> mappába: <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />).</translation>
 <translation id="2942290791863759244">Német NEO 2 billentyűzet</translation>
 <translation id="2943400156390503548">Diák</translation>
 <translation id="2943503720238418293">Rövidebb nevet adjon meg</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elem kiválasztva</translation>
 <translation id="4850886885716139402">Nézet</translation>
 <translation id="485316830061041779">német</translation>
+<translation id="4859297381873413734">Ha a következővel szeretne fájlokat megnyitni, először másolja át őket a(z) <ph name="FOLDER_NAME" /> mappába: <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />).</translation>
 <translation id="4867079195717347957">Kattintson az oszlop csökkenő sorrendben való rendezéséhez.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bájt</translation>
 <translation id="4880214202172289027">Hangerőcsúszka</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
index 14cc777d7..450b3f2 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Տառադարձություն (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Աղյուսակներ</translation>
 <translation id="2938685643439809023">Մոնղոլական</translation>
+<translation id="2939410873710774399">«<ph name="APP_NAME" />» (<ph name="VM_SOFTWARE_NAME" />) հավելվածի միջոցով ֆայլերը բացելու համար նախ տեղափոխեք դրանք «<ph name="FOLDER_NAME" />» պանակ։</translation>
 <translation id="2942290791863759244">Գերմաներենի NEO 2 ստեղնաշար</translation>
 <translation id="2943400156390503548">Սլայդներ</translation>
 <translation id="2943503720238418293">Նշեք ավելի կարճ անուն</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Ընտրված է <ph name="SELCTED_FILES_COUNT" /> տարր</translation>
 <translation id="4850886885716139402">Տեսք</translation>
 <translation id="485316830061041779">Գերմանական</translation>
+<translation id="4859297381873413734">«<ph name="APP_NAME" />» (<ph name="VM_SOFTWARE_NAME" />) հավելվածի միջոցով ֆայլերը բացելու համար նախ պատճենեք դրանք «<ph name="FOLDER_NAME" />» պանակ։</translation>
 <translation id="4867079195717347957">Սեղմեք՝ սյունակներն ըստ նվազման կարգի տեսակավորելու համար։</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> բայթ</translation>
 <translation id="4880214202172289027">Ձայնի սահիչ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
index b046e33c..3f2eab78 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliterasi (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Spreadsheet</translation>
 <translation id="2938685643439809023">Mongolia</translation>
+<translation id="2939410873710774399">Untuk membuka file dengan <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), pindahkan ke folder <ph name="FOLDER_NAME" /> terlebih dulu.</translation>
 <translation id="2942290791863759244">Keyboard NEO 2 Jerman</translation>
 <translation id="2943400156390503548">Slide</translation>
 <translation id="2943503720238418293">Gunakan nama yang lebih pendek</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> item dipilih</translation>
 <translation id="4850886885716139402">Lihat</translation>
 <translation id="485316830061041779">Jerman</translation>
+<translation id="4859297381873413734">Untuk membuka file dengan <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), salin ke folder <ph name="FOLDER_NAME" /> terlebih dulu.</translation>
 <translation id="4867079195717347957">Klik untuk mengurutkan kolom dari atas ke bawah.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> byte</translation>
 <translation id="4880214202172289027">Pengatur volume</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_is.xtb b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
index 3e17c40..4de4ab57 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_is.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Umritun (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Töflureiknar</translation>
 <translation id="2938685643439809023">Mongólskt</translation>
+<translation id="2939410873710774399">Til að opna skrár með <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) skaltu fyrst færa þær í möppuna <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Þýskt NEO 2 lyklaborð</translation>
 <translation id="2943400156390503548">Skyggnur</translation>
 <translation id="2943503720238418293">Notaðu styttra heiti</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> atriði valin</translation>
 <translation id="4850886885716139402">Yfirlit</translation>
 <translation id="485316830061041779">Þýskt</translation>
+<translation id="4859297381873413734">Til að opna skrár með <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) skaltu fyrst afrita þær í möppuna <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Smelltu til að raða dálkinum í lækkandi röð.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bæti</translation>
 <translation id="4880214202172289027">Sleði fyrir hljóð</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
index 1d14b01..8fc9b9c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Traslitterazione (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Fogli</translation>
 <translation id="2938685643439809023">Mongolo</translation>
+<translation id="2939410873710774399">Per aprire file con l'app <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), devi prima spostarli nella cartella <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Tastiera Tedesco NEO 2</translation>
 <translation id="2943400156390503548">Presentazioni</translation>
 <translation id="2943503720238418293">Utilizza un nome più corto</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementi selezionati</translation>
 <translation id="4850886885716139402">Visualizza</translation>
 <translation id="485316830061041779">Tedesco</translation>
+<translation id="4859297381873413734">Per aprire file con l'app <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), devi prima copiarli nella cartella <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Fai clic per ordinare la colonna in ordine decrescente.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> byte</translation>
 <translation id="4880214202172289027">Dispositivo volume</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
index acea748..cec4d89b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">ტრანსლიტერაცია (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">ფურცლები</translation>
 <translation id="2938685643439809023">მონღოლური</translation>
+<translation id="2939410873710774399">ფაილების <ph name="APP_NAME" />-ით (<ph name="VM_SOFTWARE_NAME" />) გასახსნელად, პირველ რიგში, გადაიტანეთ ისინი <ph name="FOLDER_NAME" />-ის საქაღალდეში.</translation>
 <translation id="2942290791863759244">გერმანული NEO 2 კლავიატურა</translation>
 <translation id="2943400156390503548">სლაიდები</translation>
 <translation id="2943503720238418293">გამოიყენეთ უფრო მოკლე სახელი</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ელემენტი არჩეულია</translation>
 <translation id="4850886885716139402">გადახედვა</translation>
 <translation id="485316830061041779">გერმანული</translation>
+<translation id="4859297381873413734">ფაილების <ph name="APP_NAME" />-ით (<ph name="VM_SOFTWARE_NAME" />) გასახსნელად, პირველ რიგში, დააკოპირეთ ისინი <ph name="FOLDER_NAME" />-ის საქაღალდეში.</translation>
 <translation id="4867079195717347957">დააწკაპუნეთ სვეტის კლებადი მიმდევრობით დასალაგებლად.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> ბაიტი</translation>
 <translation id="4880214202172289027">ხმის სლაიდერი</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
index 4b7d631..2dfe36d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Транслитерация (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Парақтар</translation>
 <translation id="2938685643439809023">монғол</translation>
+<translation id="2939410873710774399">Файлдарды <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) қолданбасымен ашу үшін алдымен оларды <ph name="FOLDER_NAME" /> қалтасына көшіріңіз.</translation>
 <translation id="2942290791863759244">Неміс NEO 2 пернетақтасы</translation>
 <translation id="2943400156390503548">Slides</translation>
 <translation id="2943503720238418293">Қысқарақ атау енгізіңіз</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> элемент таңдалды</translation>
 <translation id="4850886885716139402">Көрініс</translation>
 <translation id="485316830061041779">неміс</translation>
+<translation id="4859297381873413734">Файлдарды <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) қолданбасымен ашу үшін алдымен оларды <ph name="FOLDER_NAME" /> қалтасына көшіріңіз.</translation>
 <translation id="4867079195717347957">Бағанды кему ретімен сұрыптау үшін басыңыз.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> байт</translation>
 <translation id="4880214202172289027">Дыбыс деңгейі ысырмасы</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_km.xtb b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
index 47281bc..7e134ab1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_km.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">ការសរសេរតាមសូរស័ព្ទ (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">បញ្ជីតារាង</translation>
 <translation id="2938685643439809023">ភាសាមុងហ្គោលី</translation>
+<translation id="2939410873710774399">ដើម្បីបើកឯកសារដោយប្រើ <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) សូមផ្លាស់ទីឯកសារទាំងនោះទៅក្នុងថត <ph name="FOLDER_NAME" /> ជាមុនសិន។</translation>
 <translation id="2942290791863759244">ក្តារចុច NEO 2 អាល្លឺម៉ង់</translation>
 <translation id="2943400156390503548">ស្លាយ៍</translation>
 <translation id="2943503720238418293">ប្រើ​ឈ្មោះ​ខ្លី​ជាងនេះ</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ធាតុត្រូវបានជ្រើសរើស</translation>
 <translation id="4850886885716139402">មើល</translation>
 <translation id="485316830061041779">ភាសាអាល្លឺម៉ង់</translation>
+<translation id="4859297381873413734">ដើម្បីបើកឯកសារដោយប្រើ <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) សូមផ្លាស់ទីឯកសារទាំងនោះទៅក្នុងថត <ph name="FOLDER_NAME" /> ជាមុនសិន។</translation>
 <translation id="4867079195717347957">ចុចដើម្បី​តម្រៀបជួរឈរ​តាមលំដាប់ចុះ។</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> បៃ</translation>
 <translation id="4880214202172289027">របាររំកិលកម្រិតសំឡេង</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
index 158045d4..0d99965 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">음역(namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">스프레드시트</translation>
 <translation id="2938685643439809023">몽고어</translation>
+<translation id="2939410873710774399"><ph name="APP_NAME" />(<ph name="VM_SOFTWARE_NAME" />) 앱으로 파일을 열려면 먼저 파일을 <ph name="FOLDER_NAME" /> 폴더로 이동하세요.</translation>
 <translation id="2942290791863759244">독일어 NEO 2 키보드</translation>
 <translation id="2943400156390503548">프레젠테이션</translation>
 <translation id="2943503720238418293">더 짧은 이름을 입력해 주세요.</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" />개의 항목이 선택됨</translation>
 <translation id="4850886885716139402">보기</translation>
 <translation id="485316830061041779">독일어</translation>
+<translation id="4859297381873413734"><ph name="APP_NAME" />(<ph name="VM_SOFTWARE_NAME" />) 앱으로 파일을 열려면 먼저 파일을 <ph name="FOLDER_NAME" /> 폴더로 복사하세요.</translation>
 <translation id="4867079195717347957">열을 내림차순으로 정렬하려면 클릭하세요.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" />바이트</translation>
 <translation id="4880214202172289027">볼륨 슬라이더</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
index 5908d27..abc6ab7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Транслитерация (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Таблицалар</translation>
 <translation id="2938685643439809023">Монголчо</translation>
+<translation id="2939410873710774399">Файлдарды <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) менен ачуу үчүн, алгач аларды <ph name="FOLDER_NAME" /> папкасына жылдырыңыз.</translation>
 <translation id="2942290791863759244">Немисче NEO 2 баскычтобу</translation>
 <translation id="2943400156390503548">Слайддар</translation>
 <translation id="2943503720238418293">Кыскараак аталышты колдонуңуз</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> нерсе тандалды</translation>
 <translation id="4850886885716139402">Көрүнүш</translation>
 <translation id="485316830061041779">Немисче</translation>
+<translation id="4859297381873413734">Файлдарды <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) менен ачуу үчүн, алгач аларды <ph name="FOLDER_NAME" /> папкасына көчүрүңүз.</translation>
 <translation id="4867079195717347957">Тилкени кичирейген ыраатта иреттөө үчүн чыкылдатыңыз.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> байт</translation>
 <translation id="4880214202172289027">Үн слайдери</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
index 2f03e35..fc8efa5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">ການປ່ຽນ​ຖ່າຍ​ຕົວ​ອັກສອນ (namaska​​ram →​ນາມາສກາຣໍາ)</translation>
 <translation id="2925966894897775835">ແຜ່ນ</translation>
 <translation id="2938685643439809023">ພາສາມົງໂກລີ</translation>
+<translation id="2939410873710774399">ເພື່ອເປີດໄຟລ໌ດ້ວຍ <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), ກະລຸນາຍ້າຍພວກມັນໄປໃສ່ໂຟນເດີ <ph name="FOLDER_NAME" /> ກ່ອນ.</translation>
 <translation id="2942290791863759244">ຄີບອດພາສາເຢຍ​ລະ​ມັນ NEO 2</translation>
 <translation id="2943400156390503548">ສະໄລດ໌</translation>
 <translation id="2943503720238418293">ກະ​ລຸ​ນາໃຊ້ຊື່ທີ່ສັ້ນກວ່າ</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">ເລືອກ <ph name="SELCTED_FILES_COUNT" /> ລາຍ​ການແລ້ວ</translation>
 <translation id="4850886885716139402">ເບິ່ງ</translation>
 <translation id="485316830061041779">ພາສາເຢຍລະມັນ</translation>
+<translation id="4859297381873413734">ເພື່ອເປີດໄຟລ໌ດ້ວຍ <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), ກະລຸນາສຳເນົາພວກມັນໄປໃສ່ໂຟນເດີ <ph name="FOLDER_NAME" /> ກ່ອນ.</translation>
 <translation id="4867079195717347957">ຄລິກເພື່ອຮຽງລຳດັບຖັນແຕ່ໃຫຍ່ຫານ້ອຍ.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> ໄບຕ໌</translation>
 <translation id="4880214202172289027">​ແຖບ​ເລື່ອນປັບ​ລະດັບ​ສຽງ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
index 470f73b..cbab667 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliterācija (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Izklājlapas</translation>
 <translation id="2938685643439809023">Mongoļu valoda</translation>
+<translation id="2939410873710774399">Lai atvērtu failus, izmantojot lietotni <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), vispirms pārvietojiet tos uz mapi “<ph name="FOLDER_NAME" />”.</translation>
 <translation id="2942290791863759244">Vācu NEO 2 tastatūra</translation>
 <translation id="2943400156390503548">Prezentācijas</translation>
 <translation id="2943503720238418293">Izmantojiet īsāku nosaukumu.</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Atlasīti <ph name="SELCTED_FILES_COUNT" /> vienumi.</translation>
 <translation id="4850886885716139402">Skatīt</translation>
 <translation id="485316830061041779">Vācu valoda</translation>
+<translation id="4859297381873413734">Lai atvērtu failus, izmantojot lietotni <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), vispirms kopējiet tos uz mapi “<ph name="FOLDER_NAME" />”.</translation>
 <translation id="4867079195717347957">Noklikšķiniet, lai kārtotu slejas dilstošā secībā.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> baiti</translation>
 <translation id="4880214202172289027">Skaļuma slīdnis</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
index 7dcace1..2683bcb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Хөрвүүлэлт (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Sheets</translation>
 <translation id="2938685643439809023">Монгол</translation>
+<translation id="2939410873710774399">Файлуудыг <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) аппаар нээхийн тулд эхлээд тэдгээрийг <ph name="FOLDER_NAME" /> фолдер луу зөөнө үү.</translation>
 <translation id="2942290791863759244">Герман хэлний NEO 2 гар</translation>
 <translation id="2943400156390503548">Слайдууд</translation>
 <translation id="2943503720238418293">Богино нэр ашиглах</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> сонгогдсон зүйлс</translation>
 <translation id="4850886885716139402">Харах</translation>
 <translation id="485316830061041779">Герман</translation>
+<translation id="4859297381873413734">Файлуудыг <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) аппаар нээхийн тулд эхлээд тэдгээрийг <ph name="FOLDER_NAME" /> фолдер луу хуулна уу.</translation>
 <translation id="4867079195717347957">Баганыг буурах дарааллаар эрэмбэлэхийн тулд товшино уу.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> байт</translation>
 <translation id="4880214202172289027">Дууны түвшин тохируулагч</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
index 61f543f6..5590741 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Pengalihan huruf (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Helaian</translation>
 <translation id="2938685643439809023">Bahasa Mongolia</translation>
+<translation id="2939410873710774399">Untuk membuka fail dengan <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), alihkan fail itu ke folder <ph name="FOLDER_NAME" /> dahulu.</translation>
 <translation id="2942290791863759244">Papan kekunci NEO 2 bahasa Jerman</translation>
 <translation id="2943400156390503548">Slaid</translation>
 <translation id="2943503720238418293">Gunakan nama yang lebih pendek</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> item dipilih</translation>
 <translation id="4850886885716139402">Lihat</translation>
 <translation id="485316830061041779">Bahasa Jerman</translation>
+<translation id="4859297381873413734">Untuk membuka fail dengan <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), salin fail itu ke folder <ph name="FOLDER_NAME" /> dahulu.</translation>
 <translation id="4867079195717347957">Klik untuk mengisih lajur dalam tertib menurun.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bait</translation>
 <translation id="4880214202172289027">Peluncur kelantangan</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
index 84da9a8..0b1871e0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">အက္ခရာဖလှယ်မှု (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">စာရွက်များ</translation>
 <translation id="2938685643439809023">မွန်ဂိုဘာသာ</translation>
+<translation id="2939410873710774399"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ဖြင့် ဖိုင်များကို ဖွင့်ရန် ၎င်းတို့ကို <ph name="FOLDER_NAME" /> ဖိုင်တွဲသို့ ဦးစွာရွှေ့ပါ။</translation>
 <translation id="2942290791863759244">ဂျာမန် NEO ၂ ကီးဘုတ်</translation>
 <translation id="2943400156390503548">ဆလိုက်များ</translation>
 <translation id="2943503720238418293">ပိုတိုသောအမည်ကို အသုံးပြုပါ</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">အရာ <ph name="SELCTED_FILES_COUNT" />ခု ရွေးထား</translation>
 <translation id="4850886885716139402">မြင်ကွင်း</translation>
 <translation id="485316830061041779">ဂျာမန်</translation>
+<translation id="4859297381873413734"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ဖြင့် ဖိုင်များကို ဖွင့်ရန် ၎င်းတို့ကို <ph name="FOLDER_NAME" /> ဖိုင်တွဲသို့ ဦးစွာမိတ္တူကူးပါ။</translation>
 <translation id="4867079195717347957">ကော်လံကို ကြီးစဉ်ငယ်လိုက်စီရန် နှိပ်ပါ။</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> ဘိုက်</translation>
 <translation id="4880214202172289027">အတိုးအကျယ် ဆလိုက်ဒါး</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
index a5eeaf2..aa4ade80 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteratie (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Bladen</translation>
 <translation id="2938685643439809023">Mongools</translation>
+<translation id="2939410873710774399">Als je bestanden wilt openen met <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), verplaats je ze eerst naar de map <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Duits NEO 2-toetsenbord</translation>
 <translation id="2943400156390503548">Presentaties</translation>
 <translation id="2943503720238418293">Gebruik een kortere naam</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> items geselecteerd</translation>
 <translation id="4850886885716139402">Weergave</translation>
 <translation id="485316830061041779">Duits</translation>
+<translation id="4859297381873413734">Als je bestanden wilt openen met <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), kopieer je ze eerst naar de map <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Klik om de kolom in aflopende volgorde te sorteren.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bytes</translation>
 <translation id="4880214202172289027">Volumeregelaar</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
index 6a807200..845bf06e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Translitterasjon (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Regneark</translation>
 <translation id="2938685643439809023">Mongolsk</translation>
+<translation id="2939410873710774399">For å åpne filer med <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), flytt dem til <ph name="FOLDER_NAME" />-mappen først.</translation>
 <translation id="2942290791863759244">Tysk NEO 2-tastatur</translation>
 <translation id="2943400156390503548">Lysbilder</translation>
 <translation id="2943503720238418293">Bruk et kortere navn</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementer valgt</translation>
 <translation id="4850886885716139402">Visning</translation>
 <translation id="485316830061041779">Tysk</translation>
+<translation id="4859297381873413734">For å åpne filer med <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), kopiér dem til <ph name="FOLDER_NAME" />-mappen først.</translation>
 <translation id="4867079195717347957">Klikk for å sortere kolonnen i synkende rekkefølge.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> byte</translation>
 <translation id="4880214202172289027">Volumbryter</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
index 1fe7d265..770dd8f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteracja (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Arkusze</translation>
 <translation id="2938685643439809023">Mongolski</translation>
+<translation id="2939410873710774399">Aby otwierać pliki w aplikacji <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), najpierw przenieś je do folderu <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Klawiatura niemiecka NEO 2</translation>
 <translation id="2943400156390503548">Prezentacje</translation>
 <translation id="2943503720238418293">Użyj krótszej nazwy</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Wybrano <ph name="SELCTED_FILES_COUNT" /> elementy(ów)</translation>
 <translation id="4850886885716139402">Widok</translation>
 <translation id="485316830061041779">Niemiecki</translation>
+<translation id="4859297381873413734">Aby otwierać pliki w aplikacji <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), najpierw skopiuj je do folderu <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Kliknij, by posortować kolumnę w kolejności malejącej.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> B</translation>
 <translation id="4880214202172289027">Suwak głośności</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
index a33fd98..382cc5c1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteração (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Folhas</translation>
 <translation id="2938685643439809023">Mongol</translation>
+<translation id="2939410873710774399">Para abrir ficheiros com a app <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), mova-os primeiro para a pasta <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Teclado NEO 2 alemão</translation>
 <translation id="2943400156390503548">Slides</translation>
 <translation id="2943503720238418293">Utilize um nome mais curto.</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> itens selecionados</translation>
 <translation id="4850886885716139402">Ver</translation>
 <translation id="485316830061041779">Alemão</translation>
+<translation id="4859297381873413734">Para abrir ficheiros com a app <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), copie-os primeiro para a pasta <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Clique para ordenar a coluna por ordem descendente.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bytes</translation>
 <translation id="4880214202172289027">Controlo de deslize do volume</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
index 432b5b1c..4a8dcbc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Транслитерация (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Таблицы</translation>
 <translation id="2938685643439809023">Монгольский</translation>
+<translation id="2939410873710774399">Чтобы открывать файлы с помощью приложения "<ph name="APP_NAME" />" (<ph name="VM_SOFTWARE_NAME" />), сначала перенесите их в папку <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Немецкая раскладка (NEO 2)</translation>
 <translation id="2943400156390503548">Слайды</translation>
 <translation id="2943503720238418293">Слишком длинное название.</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Выбрано элементов: <ph name="SELCTED_FILES_COUNT" />.</translation>
 <translation id="4850886885716139402">Посмотреть</translation>
 <translation id="485316830061041779">Немецкий</translation>
+<translation id="4859297381873413734">Чтобы открывать файлы с помощью приложения "<ph name="APP_NAME" />" (<ph name="VM_SOFTWARE_NAME" />), сначала скопируйте их в папку <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Нажмите, чтобы отсортировать значения в столбце по убыванию.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> Б</translation>
 <translation id="4880214202172289027">Ползунок громкости</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
index 43e6d39..65bc66e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Prepis (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Tabuľky</translation>
 <translation id="2938685643439809023">Mongolčina</translation>
+<translation id="2939410873710774399">Ak chcete otvoriť súbory pomocou aplikácie <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), najprv ich presuňte do priečinka <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Nemecká klávesnica NEO 2</translation>
 <translation id="2943400156390503548">Prezentácie</translation>
 <translation id="2943503720238418293">Použite kratší názov</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Počet vybratých položiek: <ph name="SELCTED_FILES_COUNT" /></translation>
 <translation id="4850886885716139402">Zobraziť</translation>
 <translation id="485316830061041779">Nemčina</translation>
+<translation id="4859297381873413734">Ak chcete otvoriť súbory pomocou aplikácie <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), najprv ich skopírujte do priečinka <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Kliknutím zoradíte stĺpec v zostupnom poradí.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> B</translation>
 <translation id="4880214202172289027">Posúvač hlasitosti</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
index 70f830f..281ad07 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Prečrkovanje (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Preglednice</translation>
 <translation id="2938685643439809023">mongolščina</translation>
+<translation id="2939410873710774399">Če želite odpreti datoteke z aplikacijo <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), jih najprej premaknite v mapo <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Tipkovnica za nemščino NEO 2</translation>
 <translation id="2943400156390503548">Predstavitve</translation>
 <translation id="2943503720238418293">Uporabite krajše ime</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Št. izbranih elementov: <ph name="SELCTED_FILES_COUNT" /></translation>
 <translation id="4850886885716139402">Pogled</translation>
 <translation id="485316830061041779">nemščina</translation>
+<translation id="4859297381873413734">Če želite odpreti datoteke z aplikacijo <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), jih najprej kopirajte v mapo <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Kliknite, če želite razvrstiti elemente stolpca v padajočem vrstnem redu.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> B</translation>
 <translation id="4880214202172289027">Drsnik za glasnost</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
index 67f301fa..7bc89b8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Transliteracija (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Tabele</translation>
 <translation id="2938685643439809023">mongolski</translation>
+<translation id="2939410873710774399">Da biste otvarali datoteke pomoću aplikacije <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), prvo ih premestite u direktorijum <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Nemačka NEO 2 tastatura</translation>
 <translation id="2943400156390503548">Prezentacije</translation>
 <translation id="2943503720238418293">Koristite kraći naziv</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Izabranih stavki: <ph name="SELCTED_FILES_COUNT" /></translation>
 <translation id="4850886885716139402">Prikaz</translation>
 <translation id="485316830061041779">nemački</translation>
+<translation id="4859297381873413734">Da biste otvarali datoteke pomoću aplikacije <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), prvo ih kopirajte u direktorijum <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Kliknite da biste sortirali stavke u koloni po opadajućem redosledu.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bajt(ov)a</translation>
 <translation id="4880214202172289027">Klizač za jačinu zvuka</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index 7b145ef..8ddf74fb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Транслитерација (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Табеле</translation>
 <translation id="2938685643439809023">монголски</translation>
+<translation id="2939410873710774399">Да бисте отварали датотеке помоћу апликације <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), прво их преместите у директоријум <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Немачка NEO 2 тастатура</translation>
 <translation id="2943400156390503548">Презентације</translation>
 <translation id="2943503720238418293">Користите краћи назив</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">Изабраних ставки: <ph name="SELCTED_FILES_COUNT" /></translation>
 <translation id="4850886885716139402">Приказ</translation>
 <translation id="485316830061041779">немачки</translation>
+<translation id="4859297381873413734">Да бисте отварали датотеке помоћу апликације <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />), прво их копирајте у директоријум <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Кликните да бисте сортирали ставке у колони по опадајућем редоследу.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> бајт(ов)а</translation>
 <translation id="4880214202172289027">Клизач за јачину звука</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
index 151487bf..76a2deb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Translitterering (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Kalkylark</translation>
 <translation id="2938685643439809023">mongoliska</translation>
+<translation id="2939410873710774399">Om du vill öppna filer med <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) måste du först flytta dem till mappen <ph name="FOLDER_NAME" />.</translation>
 <translation id="2942290791863759244">Tyskt Neo 2-tangentbord</translation>
 <translation id="2943400156390503548">Presentationer</translation>
 <translation id="2943503720238418293">Ange ett kortare namn</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> poster har valts</translation>
 <translation id="4850886885716139402">Visa</translation>
 <translation id="485316830061041779">tyska</translation>
+<translation id="4859297381873413734">Om du vill öppna filer med <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) måste du först kopiera dem till mappen <ph name="FOLDER_NAME" />.</translation>
 <translation id="4867079195717347957">Klicka här om kolumnen ska sorteras i fallande ordning.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> byte</translation>
 <translation id="4880214202172289027">Volymreglage</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
index 75048a9..5ad6e7e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">ஒலிபெயர்ப்பு (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Sheets</translation>
 <translation id="2938685643439809023">மங்கோலியன்</translation>
+<translation id="2939410873710774399">கோப்புகளை <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ஆப்ஸில் திறக்க, முதலில் அவற்றை <ph name="FOLDER_NAME" /> கோப்புறைக்கு நகர்த்தவும்.</translation>
 <translation id="2942290791863759244">ஜெர்மன் NEO 2 விசைப்பலகை</translation>
 <translation id="2943400156390503548">ஸ்லைடுகள்</translation>
 <translation id="2943503720238418293">சிறிய பெயரைப் பயன்படுத்தவும்</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> உருப்படிகள் தேர்ந்தெடுக்கப்பட்டன</translation>
 <translation id="4850886885716139402">காட்சி</translation>
 <translation id="485316830061041779">ஜெர்மன்</translation>
+<translation id="4859297381873413734">கோப்புகளை <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) ஆப்ஸில் திறக்க, முதலில் அவற்றை <ph name="FOLDER_NAME" /> கோப்புறைக்கு நகலெடுக்கவும்.</translation>
 <translation id="4867079195717347957">நெடுவரிசையை இறங்குவரிசைப்படுத்த கிளிக் செய்யவும்.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> பைட்கள்</translation>
 <translation id="4880214202172289027">ஒலியளவு ஸ்லைடர்</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
index 571c37c..900d0a1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">Harf çevirisi (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">E-Tablolar</translation>
 <translation id="2938685643439809023">Moğolca</translation>
+<translation id="2939410873710774399">Dosyaları <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) uygulamasıyla açmak için önce <ph name="FOLDER_NAME" /> klasörüne taşıyın.</translation>
 <translation id="2942290791863759244">Almanca NEO 2 klavye</translation>
 <translation id="2943400156390503548">Slaytlar</translation>
 <translation id="2943503720238418293">Daha kısa bir ad kullanın</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> öğe seçildi</translation>
 <translation id="4850886885716139402">Görüntüle</translation>
 <translation id="485316830061041779">Almanca</translation>
+<translation id="4859297381873413734">Dosyaları <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) uygulamasıyla açmak için önce <ph name="FOLDER_NAME" /> klasörüne kopyalayın.</translation>
 <translation id="4867079195717347957">Sütunu azalan düzende sıralamak için tıklayın.</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> bayt</translation>
 <translation id="4880214202172289027">Ses kaydırma çubuğu</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
index 68dc2886..cd9be20f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">‏نقل حَرفی (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">Sheets</translation>
 <translation id="2938685643439809023">منگؤلی</translation>
+<translation id="2939410873710774399"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) کے ساتھ فائلز کھولنے کے لیے، پہلے انہیں <ph name="FOLDER_NAME" /> فولڈر میں منتقل کریں۔</translation>
 <translation id="2942290791863759244">جرمن نیو 2 کی بورڈ</translation>
 <translation id="2943400156390503548">Slides</translation>
 <translation id="2943503720238418293">اس سے چھوٹا نام استعمال کریں</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> آئٹمز منتخب کیے گئے</translation>
 <translation id="4850886885716139402">دیکھیں</translation>
 <translation id="485316830061041779">جرمن</translation>
+<translation id="4859297381873413734"><ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) کے ساتھ فائلز کو کھولنے کے لیے، پہلے انہیں <ph name="FOLDER_NAME" /> فولڈر میں کاپی کریں۔</translation>
 <translation id="4867079195717347957">نزولی ترتیب میں کالم ترتیب دینے کیلئے کلک کریں۔</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> بائٹس</translation>
 <translation id="4880214202172289027">والیوم سلائیڈر</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
index c4f2a67a..529210d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">音译(namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">表格</translation>
 <translation id="2938685643439809023">蒙古语</translation>
+<translation id="2939410873710774399">如需使用 <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) 打开文件,请先将文件移到“<ph name="FOLDER_NAME" />”文件夹。</translation>
 <translation id="2942290791863759244">德语Neo 2键盘</translation>
 <translation id="2943400156390503548">幻灯片</translation>
 <translation id="2943503720238418293">请使用一个较短的名称</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">已经选择 <ph name="SELCTED_FILES_COUNT" /> 个文件或目录</translation>
 <translation id="4850886885716139402">视图</translation>
 <translation id="485316830061041779">德语</translation>
+<translation id="4859297381873413734">如需使用 <ph name="APP_NAME" /> (<ph name="VM_SOFTWARE_NAME" />) 打开文件,请先将文件复制到“<ph name="FOLDER_NAME" />”文件夹。</translation>
 <translation id="4867079195717347957">点击即可按降序对此列排序。</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> 字节</translation>
 <translation id="4880214202172289027">音量滑块</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
index 23977192..9fdd7db66 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">音譯 (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">試算表</translation>
 <translation id="2938685643439809023">蒙古文</translation>
+<translation id="2939410873710774399">如要透過「<ph name="APP_NAME" />」(<ph name="VM_SOFTWARE_NAME" />) 開啟檔案,請先將檔案移至「<ph name="FOLDER_NAME" />」資料夾。</translation>
 <translation id="2942290791863759244">德文 NEO 2 鍵盤</translation>
 <translation id="2943400156390503548">投影片</translation>
 <translation id="2943503720238418293">請使用較短的名稱</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">已選取 <ph name="SELCTED_FILES_COUNT" /> 個項目</translation>
 <translation id="4850886885716139402">檢視</translation>
 <translation id="485316830061041779">德文</translation>
+<translation id="4859297381873413734">如要透過「<ph name="APP_NAME" />」(<ph name="VM_SOFTWARE_NAME" />) 開啟檔案,請先將檔案複製至「<ph name="FOLDER_NAME" />」資料夾。</translation>
 <translation id="4867079195717347957">按一下即可遞減排序欄位。</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> 個字節</translation>
 <translation id="4880214202172289027">音量滑桿</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
index 201df2e..9302f338 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -164,6 +164,7 @@
 <translation id="2924296707677495905">音譯 (namaskaram → ನಮಸ್ಕಾರ)</translation>
 <translation id="2925966894897775835">試算表</translation>
 <translation id="2938685643439809023">蒙古語</translation>
+<translation id="2939410873710774399">如要使用「<ph name="APP_NAME" />」(<ph name="VM_SOFTWARE_NAME" />) 開啟檔案,請先將檔案移至「<ph name="FOLDER_NAME" />」資料夾。</translation>
 <translation id="2942290791863759244">德文 Neo 2 鍵盤</translation>
 <translation id="2943400156390503548">投影片</translation>
 <translation id="2943503720238418293">請縮短名稱</translation>
@@ -324,6 +325,7 @@
 <translation id="4839847978919684242">已選取 <ph name="SELCTED_FILES_COUNT" /> 個項目</translation>
 <translation id="4850886885716139402">檢視</translation>
 <translation id="485316830061041779">德文</translation>
+<translation id="4859297381873413734">如要使用「<ph name="APP_NAME" />」(<ph name="VM_SOFTWARE_NAME" />) 開啟檔案,請先將檔案複製到「<ph name="FOLDER_NAME" />」資料夾。</translation>
 <translation id="4867079195717347957">按一下即可依遞減順序排列資料欄。</translation>
 <translation id="4873265419374180291"><ph name="NUMBER_OF_BYTES" /> 位元組</translation>
 <translation id="4880214202172289027">音量滑桿</translation>
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index f941da33..178fc262 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -450,6 +450,16 @@
   if (display_color_spaces_ == display_color_spaces)
     return;
   display_color_spaces_ = display_color_spaces;
+  // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully
+  // supported on ChromeOS.
+#if defined(OS_CHROMEOS)
+  if (display_color_spaces_.SupportsHDR() &&
+      !base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kEnableUseHDRTransferFunction)) {
+    display_color_spaces_ =
+        gfx::DisplayColorSpaces(gfx::ColorSpace::CreateSRGB());
+  }
+#endif
 
   host_->SetRasterColorSpace(display_color_spaces_.GetRasterColorSpace());
   // Always force the ui::Compositor to re-draw all layers, because damage
diff --git a/ui/compositor/test/test_compositor_host_x11.cc b/ui/compositor/test/test_compositor_host_x11.cc
index 91f07260..15537d5f 100644
--- a/ui/compositor/test/test_compositor_host_x11.cc
+++ b/ui/compositor/test/test_compositor_host_x11.cc
@@ -70,16 +70,12 @@
       static_cast<int>(x11::WindowClass::InputOutput),
       nullptr,  // visual
       CWOverrideRedirect, &swa);
-  window_events_.reset(
-      new XScopedEventSelector(window_, StructureNotifyMask | ExposureMask));
+  window_events_ =
+      std::make_unique<XScopedEventSelector>(window_, ExposureMask);
   XMapWindow(display, window_);
-
-  while (true) {
-    XEvent event;
-    XNextEvent(display, &event);
-    if (event.type == MapNotify && event.xmap.window == window_)
-      break;
-  }
+  // Since this window is override-redirect, syncing is sufficient
+  // to ensure the map is complete.
+  XSync(display, x11::False);
   allocator_.GenerateId();
   compositor_.SetAcceleratedWidget(window_);
   compositor_.SetScaleAndSize(1.0f, bounds_.size(),
diff --git a/ui/display/fake/fake_display_snapshot.cc b/ui/display/fake/fake_display_snapshot.cc
index 656ab8b1..af8fad50 100644
--- a/ui/display/fake/fake_display_snapshot.cc
+++ b/ui/display/fake/fake_display_snapshot.cc
@@ -164,8 +164,7 @@
       id_, origin_, physical_size, type_, is_aspect_preserving_scaling_,
       has_overscan_, privacy_screen_state_, has_color_correction_matrix_,
       color_correction_in_linear_space_, name_, std::move(modes_),
-      current_mode_, native_mode_, product_code_, maximum_cursor_size_,
-      color_space_, bits_per_channel_);
+      current_mode_, native_mode_, product_code_, maximum_cursor_size_);
 }
 
 Builder& Builder::SetId(int64_t id) {
@@ -266,16 +265,6 @@
   return *this;
 }
 
-Builder& Builder::SetColorSpace(const gfx::ColorSpace& color_space) {
-  color_space_ = color_space;
-  return *this;
-}
-
-Builder& Builder::SetBitsPerChannel(uint32_t bits_per_channel) {
-  bits_per_channel_ = bits_per_channel;
-  return *this;
-}
-
 const DisplayMode* Builder::AddOrFindDisplayMode(const gfx::Size& size) {
   for (auto& mode : modes_) {
     if (mode->size() == size)
@@ -317,9 +306,7 @@
     const DisplayMode* current_mode,
     const DisplayMode* native_mode,
     int64_t product_code,
-    const gfx::Size& maximum_cursor_size,
-    const gfx::ColorSpace& color_space,
-    uint32_t bits_per_channel)
+    const gfx::Size& maximum_cursor_size)
     : DisplaySnapshot(display_id,
                       origin,
                       physical_size,
@@ -329,8 +316,8 @@
                       privacy_screen_state,
                       has_color_correction_matrix,
                       color_correction_in_linear_space,
-                      color_space,
-                      bits_per_channel,
+                      gfx::ColorSpace(),
+                      8u /* bits_per_channel */,
                       display_name,
                       base::FilePath(),
                       std::move(modes),
diff --git a/ui/display/fake/fake_display_snapshot.h b/ui/display/fake/fake_display_snapshot.h
index d521fb3..833ac74 100644
--- a/ui/display/fake/fake_display_snapshot.h
+++ b/ui/display/fake/fake_display_snapshot.h
@@ -70,8 +70,6 @@
     // Sets physical_size for high DPI display.
     Builder& SetHighDPI();
     Builder& SetPrivacyScreen(PrivacyScreenState state);
-    Builder& SetColorSpace(const gfx::ColorSpace& color_space);
-    Builder& SetBitsPerChannel(uint32_t bits_per_channel);
 
    private:
     // Returns a display mode with |size|. If there is no existing mode, insert
@@ -96,8 +94,6 @@
     DisplayModeList modes_;
     const DisplayMode* current_mode_ = nullptr;
     const DisplayMode* native_mode_ = nullptr;
-    gfx::ColorSpace color_space_;
-    uint32_t bits_per_channel_ = 8u;
 
     DISALLOW_COPY_AND_ASSIGN(Builder);
   };
@@ -116,9 +112,7 @@
                       const DisplayMode* current_mode,
                       const DisplayMode* native_mode,
                       int64_t product_code,
-                      const gfx::Size& maximum_cursor_size,
-                      const gfx::ColorSpace& color_space,
-                      uint32_t bits_per_channel);
+                      const gfx::Size& maximum_cursor_size);
   ~FakeDisplaySnapshot() override;
 
   // Creates a display snapshot from the provided |spec| string. Returns null if
diff --git a/ui/display/manager/display_change_observer.cc b/ui/display/manager/display_change_observer.cc
index 8eab97c..93961fa5 100644
--- a/ui/display/manager/display_change_observer.cc
+++ b/ui/display/manager/display_change_observer.cc
@@ -77,57 +77,6 @@
   return display_mode_list;
 }
 
-// Constructs the raster DisplayColorSpaces out of |snapshot_color_space|,
-// including the HDR ones if present and |allow_high_bit_depth| is set.
-gfx::DisplayColorSpaces FillDisplayColorSpaces(
-    const gfx::ColorSpace& snapshot_color_space,
-    bool allow_high_bit_depth) {
-  // ChromeOS VMs (e.g. amd64-generic or betty) have INVALID Primaries; just
-  // pass the color space along.
-  if (!snapshot_color_space.IsValid()) {
-    return gfx::DisplayColorSpaces(snapshot_color_space,
-                                   DisplaySnapshot::PrimaryFormat());
-  }
-
-  constexpr auto kSDRTransferId = gfx::ColorSpace::TransferID::IEC61966_2_1;
-  const auto primary_id = snapshot_color_space.GetPrimaryID();
-
-  gfx::ColorSpace sdr_color_space;
-  if (primary_id == gfx::ColorSpace::PrimaryID::CUSTOM) {
-    skcms_Matrix3x3 primary_matrix{};
-    snapshot_color_space.GetPrimaryMatrix(&primary_matrix);
-    sdr_color_space =
-        gfx::ColorSpace::CreateCustom(primary_matrix, kSDRTransferId);
-  } else {
-    sdr_color_space = gfx::ColorSpace(primary_id, kSDRTransferId);
-  }
-  gfx::DisplayColorSpaces display_color_spaces(
-      sdr_color_space, DisplaySnapshot::PrimaryFormat());
-
-  if (allow_high_bit_depth) {
-    constexpr float kSDRJoint = 0.55;
-    constexpr float kHDRLevel = 3.0;
-    gfx::ColorSpace hdr_color_space;
-    if (primary_id == gfx::ColorSpace::PrimaryID::CUSTOM) {
-      skcms_Matrix3x3 primary_matrix{};
-      snapshot_color_space.GetPrimaryMatrix(&primary_matrix);
-      hdr_color_space = gfx::ColorSpace::CreatePiecewiseHDR(
-          primary_id, kSDRJoint, kHDRLevel, &primary_matrix);
-    } else {
-      hdr_color_space =
-          gfx::ColorSpace::CreatePiecewiseHDR(primary_id, kSDRJoint, kHDRLevel);
-    }
-
-    display_color_spaces.SetOutputColorSpaceAndBufferFormat(
-        gfx::ContentColorUsage::kHDR, false /* needs_alpha */, hdr_color_space,
-        gfx::BufferFormat::RGBA_1010102);
-    display_color_spaces.SetOutputColorSpaceAndBufferFormat(
-        gfx::ContentColorUsage::kHDR, true /* needs_alpha */, hdr_color_space,
-        gfx::BufferFormat::RGBA_1010102);
-  }
-  return display_color_spaces;
-}
-
 }  // namespace
 
 // static
@@ -388,23 +337,21 @@
   if (dpi)
     new_info.set_device_dpi(dpi);
 
-#if !defined(OS_CHROMEOS)
   // TODO(crbug.com/1012846): This should configure the HDR color spaces.
   gfx::DisplayColorSpaces display_color_spaces(
       snapshot->color_space(), DisplaySnapshot::PrimaryFormat());
   new_info.set_display_color_spaces(display_color_spaces);
   new_info.set_bits_per_channel(snapshot->bits_per_channel());
-#else
-  // TODO(crbug.com/1012846): Remove kEnableUseHDRTransferFunction usage when
-  // HDR is fully supported on ChromeOS.
-  const bool allow_high_bit_depth =
-      base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnableUseHDRTransferFunction);
-  new_info.set_display_color_spaces(
-      FillDisplayColorSpaces(snapshot->color_space(), allow_high_bit_depth));
+
+  // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully
+  // supported on ChromeOS.
+#if defined(OS_CHROMEOS)
   constexpr int32_t kNormalBitDepth = 8;
-  new_info.set_bits_per_channel(
-      allow_high_bit_depth ? snapshot->bits_per_channel() : kNormalBitDepth);
+  if (new_info.bits_per_channel() > kNormalBitDepth &&
+      !base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kEnableUseHDRTransferFunction)) {
+    new_info.set_bits_per_channel(kNormalBitDepth);
+  }
 #endif
 
   new_info.set_refresh_rate(mode_info->refresh_rate());
diff --git a/ui/display/manager/display_change_observer.h b/ui/display/manager/display_change_observer.h
index 5c17ce6..0e896e24 100644
--- a/ui/display/manager/display_change_observer.h
+++ b/ui/display/manager/display_change_observer.h
@@ -60,8 +60,6 @@
   DISPLAY_EXPORT static float FindDeviceScaleFactor(float dpi);
 
  private:
-  friend class DisplayChangeObserverTest;
-
   void UpdateInternalDisplay(
       const DisplayConfigurator::DisplayStateList& display_states);
 
diff --git a/ui/display/manager/display_change_observer_unittest.cc b/ui/display/manager/display_change_observer_unittest.cc
index 1b2907137..bb900209 100644
--- a/ui/display/manager/display_change_observer_unittest.cc
+++ b/ui/display/manager/display_change_observer_unittest.cc
@@ -14,11 +14,8 @@
 #include "ui/display/display_switches.h"
 #include "ui/display/fake/fake_display_snapshot.h"
 #include "ui/display/manager/display_configurator.h"
-#include "ui/display/manager/display_manager.h"
 #include "ui/display/manager/managed_display_info.h"
-#include "ui/display/screen.h"
 #include "ui/display/types/display_mode.h"
-#include "ui/events/devices/device_data_manager.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
 
@@ -63,13 +60,6 @@
     Test::SetUp();
   }
 
-  // Pass through method to be called by individual test cases.
-  ManagedDisplayInfo CreateManagedDisplayInfo(DisplayChangeObserver* observer,
-                                              const DisplaySnapshot* snapshot,
-                                              const DisplayMode* mode_info) {
-    return observer->CreateManagedDisplayInfo(snapshot, mode_info);
-  }
-
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
 
@@ -185,8 +175,7 @@
   FakeDisplaySnapshot display_snapshot(
       123, gfx::Point(), gfx::Size(), DISPLAY_CONNECTION_TYPE_UNKNOWN, false,
       false, PrivacyScreenState::kNotSupported, false, false, std::string(), {},
-      nullptr, nullptr, 0, gfx::Size(), gfx::ColorSpace(),
-      /*bits_per_channel=*/8u);
+      nullptr, nullptr, 0, gfx::Size());
 
   ManagedDisplayInfo::ManagedDisplayModeList display_modes =
       DisplayChangeObserver::GetExternalManagedDisplayModeList(
@@ -305,127 +294,6 @@
   }
 }
 
-TEST_P(DisplayChangeObserverTest, InvalidDisplayColorSpaces) {
-  const std::unique_ptr<DisplaySnapshot> display_snapshot =
-      FakeDisplaySnapshot::Builder()
-          .SetId(123)
-          .SetName("AmazingFakeDisplay")
-          .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60))
-          .SetColorSpace(gfx::ColorSpace())
-          .Build();
-
-  ui::DeviceDataManager::CreateInstance();
-  DisplayManager manager(nullptr);
-  const auto display_mode = MakeDisplayMode(1920, 1080, true, 60);
-  DisplayChangeObserver observer(&manager);
-  const ManagedDisplayInfo display_info = CreateManagedDisplayInfo(
-      &observer, display_snapshot.get(), display_mode.get());
-
-  EXPECT_EQ(display_info.bits_per_channel(), 8u);
-  const auto display_color_spaces = display_info.display_color_spaces();
-  EXPECT_FALSE(display_color_spaces.SupportsHDR());
-
-  EXPECT_EQ(
-      DisplaySnapshot::PrimaryFormat(),
-      display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kSRGB,
-                                                 /*needs_alpha=*/true));
-
-  const auto color_space = display_color_spaces.GetRasterColorSpace();
-  // DisplayColorSpaces will fix an invalid ColorSpace to return sRGB.
-  EXPECT_TRUE(color_space.IsValid());
-  EXPECT_EQ(color_space, gfx::ColorSpace::CreateSRGB());
-}
-
-TEST_P(DisplayChangeObserverTest, SDRDisplayColorSpaces) {
-  const std::unique_ptr<DisplaySnapshot> display_snapshot =
-      FakeDisplaySnapshot::Builder()
-          .SetId(123)
-          .SetName("AmazingFakeDisplay")
-          .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60))
-          .SetColorSpace(gfx::ColorSpace::CreateSRGB())
-          .Build();
-
-  ui::DeviceDataManager::CreateInstance();
-  DisplayManager manager(nullptr);
-  const auto display_mode = MakeDisplayMode(1920, 1080, true, 60);
-  DisplayChangeObserver observer(&manager);
-  const ManagedDisplayInfo display_info = CreateManagedDisplayInfo(
-      &observer, display_snapshot.get(), display_mode.get());
-
-  EXPECT_EQ(display_info.bits_per_channel(), 8u);
-
-  const auto display_color_spaces = display_info.display_color_spaces();
-  EXPECT_FALSE(display_color_spaces.SupportsHDR());
-
-  EXPECT_EQ(
-      DisplaySnapshot::PrimaryFormat(),
-      display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kSRGB,
-                                                 /*needs_alpha=*/true));
-
-  const auto color_space = display_color_spaces.GetRasterColorSpace();
-  EXPECT_TRUE(color_space.IsValid());
-  EXPECT_EQ(color_space.GetPrimaryID(), gfx::ColorSpace::PrimaryID::BT709);
-  EXPECT_EQ(color_space.GetTransferID(),
-            gfx::ColorSpace::TransferID::IEC61966_2_1);
-}
-
-#if defined(OS_CHROMEOS)
-TEST_P(DisplayChangeObserverTest, HDRDisplayColorSpaces) {
-  // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully
-  // supported on ChromeOS.
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      switches::kEnableUseHDRTransferFunction);
-
-  const std::unique_ptr<DisplaySnapshot> display_snapshot =
-      FakeDisplaySnapshot::Builder()
-          .SetId(123)
-          .SetName("AmazingFakeDisplay")
-          .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60))
-          .SetColorSpace(gfx::ColorSpace::CreateHDR10(100.0f))
-          .SetBitsPerChannel(10u)
-          .Build();
-
-  ui::DeviceDataManager::CreateInstance();
-  DisplayManager manager(nullptr);
-  const auto display_mode = MakeDisplayMode(1920, 1080, true, 60);
-  DisplayChangeObserver observer(&manager);
-  const ManagedDisplayInfo display_info = CreateManagedDisplayInfo(
-      &observer, display_snapshot.get(), display_mode.get());
-
-  EXPECT_EQ(display_info.bits_per_channel(), 10u);
-
-  const auto display_color_spaces = display_info.display_color_spaces();
-  EXPECT_TRUE(display_color_spaces.SupportsHDR());
-
-  // |display_color_spaces| still supports SDR rendering.
-  EXPECT_EQ(
-      DisplaySnapshot::PrimaryFormat(),
-      display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kSRGB,
-                                                 /*needs_alpha=*/true));
-
-  const auto sdr_color_space =
-      display_color_spaces.GetOutputColorSpace(gfx::ContentColorUsage::kSRGB,
-                                               /*needs_alpha=*/true);
-  EXPECT_TRUE(sdr_color_space.IsValid());
-  EXPECT_EQ(sdr_color_space.GetPrimaryID(), gfx::ColorSpace::PrimaryID::BT2020);
-  EXPECT_EQ(sdr_color_space.GetTransferID(),
-            gfx::ColorSpace::TransferID::IEC61966_2_1);
-
-  EXPECT_EQ(
-      display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kHDR,
-                                                 /*needs_alpha=*/true),
-      gfx::BufferFormat::RGBA_1010102);
-
-  const auto hdr_color_space =
-      display_color_spaces.GetOutputColorSpace(gfx::ContentColorUsage::kHDR,
-                                               /*needs_alpha=*/true);
-  EXPECT_TRUE(hdr_color_space.IsValid());
-  EXPECT_EQ(hdr_color_space.GetPrimaryID(), gfx::ColorSpace::PrimaryID::BT2020);
-  EXPECT_EQ(hdr_color_space.GetTransferID(),
-            gfx::ColorSpace::TransferID::PIECEWISE_HDR);
-}
-#endif
-
 INSTANTIATE_TEST_SUITE_P(All,
                          DisplayChangeObserverTest,
                          ::testing::Values(false, true));
diff --git a/ui/events/platform/x11/x11_event_source.cc b/ui/events/platform/x11/x11_event_source.cc
index 45ae5e4..e49b486 100644
--- a/ui/events/platform/x11/x11_event_source.cc
+++ b/ui/events/platform/x11/x11_event_source.cc
@@ -7,10 +7,13 @@
 #include <X11/Xlib-xcb.h>
 #include <xcb/xcb.h>
 #include <xcb/xcbext.h>
+#include <xcb/xproto.h>
 
+#include <algorithm>
 #include <memory>
 #include <type_traits>
 
+#include "base/auto_reset.h"
 #include "base/logging.h"
 #include "base/memory/free_deleter.h"
 #include "base/metrics/histogram_macros.h"
@@ -25,6 +28,7 @@
 #include "ui/events/x/x11_window_event_manager.h"
 #include "ui/gfx/x/x11.h"
 #include "ui/gfx/x/x11_atom_cache.h"
+#include "ui/gfx/x/xproto.h"
 
 #if defined(USE_GLIB)
 #include "ui/events/platform/x11/x11_event_watcher_glib.h"
@@ -100,13 +104,6 @@
   DeviceDataManagerX11::GetInstance()->UpdateDeviceList(display);
 }
 
-x11::Bool IsPropertyNotifyForTimestamp(Display* display,
-                                       XEvent* event,
-                                       XPointer arg) {
-  return event->type == PropertyNotify &&
-         event->xproperty.window == *reinterpret_cast<Window*>(arg);
-}
-
 }  // namespace
 
 #if defined(USE_GLIB)
@@ -158,10 +155,6 @@
   x11::Connection::Get()->Dispatch(this);
 }
 
-void X11EventSource::DispatchXEventNow(XEvent* event) {
-  ExtractCookieDataDispatchEvent(event);
-}
-
 Time X11EventSource::GetCurrentServerTime() {
   DCHECK(display_);
 
@@ -184,7 +177,8 @@
     start = base::TimeTicks::Now();
 
   // Make a no-op property change on |dummy_window_|.
-  x11::Connection::Get()->ChangeProperty({
+  auto* connection = x11::Connection::Get();
+  connection->ChangeProperty({
       .window = static_cast<x11::Window>(dummy_window_),
       .property = dummy_atom_,
       .type = x11::Atom::STRING,
@@ -194,18 +188,29 @@
   });
 
   // Observe the resulting PropertyNotify event to obtain the timestamp.
-  XFlush(display_);
-  XEvent event;
-  XIfEvent(display_, &event, IsPropertyNotifyForTimestamp,
-           reinterpret_cast<XPointer>(&dummy_window_));
-
+  connection->Sync();
   if (measure_rtt) {
     UMA_HISTOGRAM_CUSTOM_COUNTS(
         "Linux.X11.ServerRTT",
         (base::TimeTicks::Now() - start).InMicroseconds(), 1,
         base::TimeDelta::FromMilliseconds(50).InMicroseconds(), 50);
   }
-  return event.xproperty.time;
+  connection->ReadResponses();
+
+  Time time = x11::CurrentTime;
+  auto pred = [&](const x11::Connection::Event& event) {
+    if (event.xlib_event.type == x11::PropertyNotifyEvent::opcode &&
+        event.xlib_event.xproperty.window == dummy_window_) {
+      time = event.xlib_event.xproperty.time;
+      return true;
+    }
+    return false;
+  };
+
+  auto& events = connection->events();
+  events.erase(std::remove_if(events.begin(), events.end(), pred),
+               events.end());
+  return time;
 }
 
 Time X11EventSource::GetTimestamp() {
@@ -378,24 +383,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // X11EventSource, protected
 
-void X11EventSource::ExtractCookieDataDispatchEvent(XEvent* xevent) {
-  bool have_cookie = false;
-  if (xevent->type == x11::GeGenericEvent::opcode &&
-      XGetEventData(xevent->xgeneric.display, &xevent->xcookie)) {
-    have_cookie = true;
-  }
-
-  dispatching_event_ = xevent;
-
-  ProcessXEvent(xevent);
-  PostDispatchEvent(xevent);
-
-  dispatching_event_ = nullptr;
-
-  if (have_cookie)
-    XFreeEventData(xevent->xgeneric.display, &xevent->xcookie);
-}
-
 void X11EventSource::PostDispatchEvent(XEvent* xevent) {
   bool should_update_device_list = false;
 
@@ -447,7 +434,10 @@
 }
 
 void X11EventSource::DispatchXEvent(XEvent* event) {
-  ExtractCookieDataDispatchEvent(event);
+  base::AutoReset<XEvent*> dispatching_event(&dispatching_event_, event);
+
+  ProcessXEvent(event);
+  PostDispatchEvent(event);
 }
 
 // ScopedXEventDispatcher implementation
diff --git a/ui/events/platform/x11/x11_event_source.h b/ui/events/platform/x11/x11_event_source.h
index 0e29ace..d06f167 100644
--- a/ui/events/platform/x11/x11_event_source.h
+++ b/ui/events/platform/x11/x11_event_source.h
@@ -134,11 +134,6 @@
   // available X events.
   void DispatchXEvents();
 
-  // Dispatches a given event immediately. This is to facilitate sequential
-  // interaction between the gtk event loop (used for IME) and the
-  // main X11 event loop.
-  void DispatchXEventNow(XEvent* event);
-
   XDisplay* display() { return display_; }
 
   // Returns the timestamp of the event currently being dispatched.  Falls back
@@ -184,12 +179,11 @@
 
   void ProcessXEvent(XEvent* xevent);
 
- protected:
-  // Extracts cookie data from |xevent| if it's of GenericType, and dispatches
-  // the event. This function also frees up the cookie data after dispatch is
-  // complete.
-  void ExtractCookieDataDispatchEvent(XEvent* xevent);
+  // x11::Connection::Delegate:
+  bool ShouldContinueStream() const override;
+  void DispatchXEvent(XEvent* event) override;
 
+ protected:
   // Handles updates after event has been dispatched.
   void PostDispatchEvent(XEvent* xevent);
 
@@ -209,10 +203,6 @@
   void StopCurrentEventStream() override;
   void OnDispatcherListChanged() override;
 
-  // x11::Connection::Delegate:
-  bool ShouldContinueStream() const override;
-  void DispatchXEvent(XEvent* event) override;
-
   void RestoreOverridenXEventDispatcher();
 
   static X11EventSource* instance_;
diff --git a/ui/events/platform/x11/x11_event_watcher_glib.cc b/ui/events/platform/x11/x11_event_watcher_glib.cc
index fa33d54..bedf678 100644
--- a/ui/events/platform/x11/x11_event_watcher_glib.cc
+++ b/ui/events/platform/x11/x11_event_watcher_glib.cc
@@ -15,22 +15,25 @@
 struct GLibX11Source : public GSource {
   // Note: The GLibX11Source is created and destroyed by GLib. So its
   // constructor/destructor may or may not get called.
-  XDisplay* display;
+  x11::Connection* connection;
   GPollFD* poll_fd;
 };
 
 gboolean XSourcePrepare(GSource* source, gint* timeout_ms) {
   GLibX11Source* gxsource = static_cast<GLibX11Source*>(source);
-  if (XPending(gxsource->display))
-    *timeout_ms = 0;
-  else
-    *timeout_ms = -1;
+  gxsource->connection->Flush();
+  gxsource->connection->ReadResponses();
+  if (gxsource->connection->HasPendingResponses())
+    return TRUE;
+  *timeout_ms = -1;
   return FALSE;
 }
 
 gboolean XSourceCheck(GSource* source) {
   GLibX11Source* gxsource = static_cast<GLibX11Source*>(source);
-  return XPending(gxsource->display);
+  gxsource->connection->Flush();
+  gxsource->connection->ReadResponses();
+  return gxsource->connection->HasPendingResponses();
 }
 
 gboolean XSourceDispatch(GSource* source,
@@ -67,7 +70,7 @@
 
   GLibX11Source* glib_x_source = static_cast<GLibX11Source*>(
       g_source_new(&XSourceFuncs, sizeof(GLibX11Source)));
-  glib_x_source->display = display;
+  glib_x_source->connection = x11::Connection::Get();
   glib_x_source->poll_fd = x_poll_.get();
 
   x_source_ = glib_x_source;
diff --git a/ui/gfx/x/BUILD.gn b/ui/gfx/x/BUILD.gn
index ca782e65..d93fbea 100644
--- a/ui/gfx/x/BUILD.gn
+++ b/ui/gfx/x/BUILD.gn
@@ -143,3 +143,12 @@
   ]
   public_deps = [ ":xprotos" ]
 }
+
+source_set("unit_test") {
+  testonly = true
+  sources = [ "connection_unittest.cc" ]
+  deps = [
+    "//testing/gtest",
+    "//ui/gfx/x",
+  ]
+}
diff --git a/ui/gfx/x/connection.cc b/ui/gfx/x/connection.cc
index 53b00b3..ad12613 100644
--- a/ui/gfx/x/connection.cc
+++ b/ui/gfx/x/connection.cc
@@ -6,6 +6,7 @@
 
 #include <X11/Xlib-xcb.h>
 #include <X11/Xlib.h>
+#include <X11/Xlibint.h>
 #include <xcb/xcb.h>
 
 #include <algorithm>
@@ -51,6 +52,56 @@
 
 }  // namespace
 
+Connection::Event::Event(base::Optional<uint32_t> sequence,
+                         const XEvent& xlib_event)
+    : sequence(sequence), xlib_event(xlib_event) {}
+
+Connection::Event::Event(xcb_generic_event_t* xcb_event,
+                         x11::Connection* connection) {
+  XDisplay* display = connection->display();
+
+  sequence = xcb_event->full_sequence;
+  // KeymapNotify events are the only events that don't have a sequence.
+  if ((xcb_event->response_type & 0x7f) != x11::KeymapNotifyEvent::opcode) {
+    // Rewrite the sequence to the last seen sequence so that Xlib doesn't
+    // think the sequence wrapped around.
+    xcb_event->sequence = XLastKnownRequestProcessed(display);
+
+    // On the wire, events are 32 bytes except for generic events which are
+    // trailed by additional data.  XCB inserts an extended 4-byte sequence
+    // between the 32-byte event and the additional data, so we need to shift
+    // the additional data over by 4 bytes so the event is back in its wire
+    // format, which is what Xlib and XProto are expecting.
+    if ((xcb_event->response_type & 0x7f) == x11::GeGenericEvent::opcode) {
+      auto* ge = reinterpret_cast<xcb_ge_event_t*>(xcb_event);
+      memmove(&ge->full_sequence, &ge[1], ge->length * 4);
+    }
+  }
+
+  _XEnq(display, reinterpret_cast<xEvent*>(xcb_event));
+  XNextEvent(display, &xlib_event);
+  if (xlib_event.type == x11::GeGenericEvent::opcode)
+    XGetEventData(display, &xlib_event.xcookie);
+}
+
+Connection::Event::Event(Event&& event) {
+  xlib_event = event.xlib_event;
+  sequence = event.sequence;
+  memset(&event, 0, sizeof(Event));
+}
+
+Connection::Event& Connection::Event::operator=(Event&& event) {
+  xlib_event = event.xlib_event;
+  sequence = event.sequence;
+  memset(&event, 0, sizeof(Event));
+  return *this;
+}
+
+Connection::Event::~Event() {
+  if (xlib_event.type == x11::GeGenericEvent::opcode && xlib_event.xcookie.data)
+    XFreeEventData(xlib_event.xcookie.display, &xlib_event.xcookie);
+}
+
 Connection* Connection::Get() {
   static Connection* instance = new Connection;
   return instance;
@@ -60,6 +111,8 @@
   if (!display_)
     return;
 
+  XSetEventQueueOwner(display_, XCBOwnsEventQueue);
+
   setup_ = std::make_unique<Setup>(Read<Setup>(
       reinterpret_cast<const uint8_t*>(xcb_get_setup(XcbConnection()))));
   default_screen_ = &setup_->roots[DefaultScreen(display_)];
@@ -101,10 +154,35 @@
 
 Connection::Request::~Request() = default;
 
+bool Connection::HasNextResponse() const {
+  return !requests_.empty() &&
+         CompareSequenceIds(XLastKnownRequestProcessed(display_),
+                            requests_.front().sequence) >= 0;
+}
+
+void Connection::Flush() {
+  XFlush(display_);
+}
+
+void Connection::Sync() {
+  GetInputFocus({}).Sync();
+}
+
+void Connection::ReadResponses() {
+  while (auto* event = xcb_poll_for_event(XcbConnection())) {
+    events_.emplace_back(event, this);
+    free(event);
+  }
+}
+
+bool Connection::HasPendingResponses() const {
+  return !events_.empty() || HasNextResponse();
+}
+
 void Connection::Dispatch(Delegate* delegate) {
   DCHECK(display_);
 
-  auto process_next_response = [&]() {
+  auto process_next_response = [&] {
     xcb_connection_t* connection = XGetXCBConnection(display_);
     auto request = std::move(requests_.front());
     requests_.pop();
@@ -118,26 +196,27 @@
              FutureBase::RawError{raw_error});
   };
 
-  auto process_next_event = [&]() {
-    XEvent xevent;
-    XNextEvent(display_, &xevent);
-    delegate->DispatchXEvent(&xevent);
+  auto process_next_event = [&] {
+    DCHECK(!events_.empty());
+
+    Event event = std::move(events_.front());
+    events_.pop_front();
+    delegate->DispatchXEvent(&event.xlib_event);
   };
 
   // Handle all pending events.
   while (delegate->ShouldContinueStream()) {
-    bool has_next_response =
-        !requests_.empty() &&
-        CompareSequenceIds(XLastKnownRequestProcessed(display_),
-                           requests_.front().sequence) >= 0;
-    bool has_next_event = XPending(display_);
+    Flush();
+    ReadResponses();
 
-    if (has_next_response && has_next_event) {
+    if (HasNextResponse() && !events_.empty()) {
+      if (!events_.front().sequence.has_value()) {
+        process_next_event();
+        continue;
+      }
+
       auto next_response_sequence = requests_.front().sequence;
-
-      XEvent event;
-      XPeekEvent(display_, &event);
-      auto next_event_sequence = event.xany.serial;
+      auto next_event_sequence = events_.front().sequence.value();
 
       // All events have the sequence number of the last processed request
       // included in them.  So if a reply and an event have the same sequence,
@@ -146,9 +225,9 @@
         process_next_response();
       else
         process_next_event();
-    } else if (has_next_response) {
+    } else if (HasNextResponse()) {
       process_next_response();
-    } else if (has_next_event) {
+    } else if (!events_.empty()) {
       process_next_event();
     } else {
       break;
diff --git a/ui/gfx/x/connection.h b/ui/gfx/x/connection.h
index de9ee4d..9dcf979b 100644
--- a/ui/gfx/x/connection.h
+++ b/ui/gfx/x/connection.h
@@ -5,6 +5,7 @@
 #ifndef UI_GFX_X_CONNECTION_H_
 #define UI_GFX_X_CONNECTION_H_
 
+#include <list>
 #include <queue>
 
 #include "base/component_export.h"
@@ -23,7 +24,23 @@
     virtual void DispatchXEvent(XEvent* event) = 0;
 
    protected:
-    virtual ~Delegate() {}
+    virtual ~Delegate() = default;
+  };
+
+  struct Event {
+    Event(base::Optional<uint32_t> sequence, const XEvent& xlib_event);
+    Event(xcb_generic_event_t* xcb_event, x11::Connection* connection);
+
+    Event(const Event&) = delete;
+    Event& operator=(const Event&) = delete;
+
+    Event(Event&& event);
+    Event& operator=(Event&& event);
+
+    ~Event();
+
+    base::Optional<uint32_t> sequence;
+    XEvent xlib_event;
   };
 
   // Gets or creates the singeton connection.
@@ -47,8 +64,29 @@
   const Depth* default_root_depth() const { return default_root_depth_; }
   const VisualType* default_root_visual() const { return defualt_root_visual_; }
 
+  template <typename T>
+  T GenerateId() {
+    return static_cast<T>(xcb_generate_id(XcbConnection()));
+  }
+
+  // Write all requests to the socket.
+  void Flush();
+
+  // Flush and block until the server has responded to all requests.
+  void Sync();
+
+  // Read all responses from the socket without blocking.
+  void ReadResponses();
+
+  // Are there any events, errors, or replies already buffered?
+  bool HasPendingResponses() const;
+
+  // Dispatch any buffered events, errors, or replies.
   void Dispatch(Delegate* delegate);
 
+  // Access the event buffer.  Clients can add, delete, or modify events.
+  std::list<Event>& events() { return events_; }
+
  private:
   friend class FutureBase;
 
@@ -63,6 +101,8 @@
 
   void AddRequest(unsigned int sequence, FutureBase::ResponseCallback callback);
 
+  bool HasNextResponse() const;
+
   XDisplay* const display_;
 
   uint32_t extended_max_request_length_ = 0;
@@ -72,6 +112,8 @@
   const Depth* default_root_depth_ = nullptr;
   const VisualType* defualt_root_visual_ = nullptr;
 
+  std::list<Event> events_;
+
   std::queue<Request> requests_;
 };
 
diff --git a/ui/gfx/x/connection_unittest.cc b/ui/gfx/x/connection_unittest.cc
new file mode 100644
index 0000000..a047b09d
--- /dev/null
+++ b/ui/gfx/x/connection_unittest.cc
@@ -0,0 +1,110 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/x/connection.h"
+#include "ui/gfx/x/xproto.h"
+
+#undef Bool
+
+#include <xcb/xcb.h>
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace x11 {
+
+namespace {
+
+Window CreateWindow(Connection* connection) {
+  Window window = connection->GenerateId<Window>();
+  auto create_window_future = connection->CreateWindow({
+      .depth = connection->default_root_depth()->depth,
+      .wid = window,
+      .parent = connection->default_screen()->root,
+      .width = 1,
+      .height = 1,
+      .value_mask = CreateWindowAttribute::OverrideRedirect,
+      .override_redirect = Bool32(true),
+  });
+  auto create_window_response = create_window_future.Sync();
+  EXPECT_FALSE(create_window_response.error);
+  return window;
+}
+
+}  // namespace
+
+// Connection setup and teardown.
+TEST(X11ConnectionTest, Basic) {
+  Connection connection;
+  ASSERT_TRUE(connection.XcbConnection());
+  EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+}
+
+TEST(X11ConnectionTest, Request) {
+  Connection connection;
+  ASSERT_TRUE(connection.XcbConnection());
+  EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+
+  Window window = CreateWindow(&connection);
+
+  auto attributes = connection.GetWindowAttributes({window}).Sync();
+  ASSERT_TRUE(attributes);
+  EXPECT_EQ(attributes->map_state, MapState::Unmapped);
+  EXPECT_TRUE(attributes->override_redirect);
+
+  auto geometry = connection.GetGeometry({window}).Sync();
+  ASSERT_TRUE(geometry);
+  EXPECT_EQ(geometry->x, 0);
+  EXPECT_EQ(geometry->y, 0);
+  EXPECT_EQ(geometry->width, 1u);
+  EXPECT_EQ(geometry->height, 1u);
+}
+
+TEST(X11ConnectionTest, Event) {
+  Connection connection;
+  ASSERT_TRUE(connection.XcbConnection());
+  EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+
+  Window window = CreateWindow(&connection);
+
+  auto cwa_future = connection.ChangeWindowAttributes({
+      .window = window,
+      .value_mask = CreateWindowAttribute::EventMask,
+      .event_mask = EventMask::PropertyChange,
+  });
+  EXPECT_FALSE(cwa_future.Sync().error);
+
+  auto prop_future = connection.ChangeProperty({
+      .window = static_cast<x11::Window>(window),
+      .property = x11::Atom::WM_NAME,
+      .type = x11::Atom::STRING,
+      .format = CHAR_BIT,
+      .data_len = 1,
+      .data = std::vector<uint8_t>{0},
+  });
+  EXPECT_FALSE(prop_future.Sync().error);
+
+  connection.ReadResponses();
+  ASSERT_EQ(connection.events().size(), 1u);
+  XEvent& event = connection.events().front().xlib_event;
+  auto property_notify_opcode = PropertyNotifyEvent::opcode;
+  EXPECT_EQ(event.type, property_notify_opcode);
+  EXPECT_EQ(event.xproperty.atom, static_cast<uint32_t>(x11::Atom::WM_NAME));
+  EXPECT_EQ(event.xproperty.state, static_cast<int>(Property::NewValue));
+}
+
+TEST(X11ConnectionTest, Error) {
+  Connection connection;
+  ASSERT_TRUE(connection.XcbConnection());
+  EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+
+  Window invalid_window = connection.GenerateId<Window>();
+
+  auto geometry = connection.GetGeometry({invalid_window}).Sync();
+  ASSERT_FALSE(geometry);
+  xcb_generic_error_t* error = geometry.error.get();
+  EXPECT_EQ(error->error_code, XCB_DRAWABLE);
+  EXPECT_EQ(error->resource_id, static_cast<uint32_t>(invalid_window));
+}
+
+}  // namespace x11
diff --git a/ui/gl/gl_context_glx_unittest.cc b/ui/gl/gl_context_glx_unittest.cc
index 75d6379..006c9f0 100644
--- a/ui/gl/gl_context_glx_unittest.cc
+++ b/ui/gl/gl_context_glx_unittest.cc
@@ -43,14 +43,11 @@
       static_cast<int>(x11::WindowClass::InputOutput),
       nullptr,  // visual
       CWBackPixmap | CWOverrideRedirect, &swa);
-  XSelectInput(xdisplay, xwindow, StructureNotifyMask);
 
-  XEvent xevent;
   XMapWindow(xdisplay, xwindow);
-  // Wait until the window is mapped.
-  while (XNextEvent(xdisplay, &xevent) && xevent.type != MapNotify &&
-         xevent.xmap.window != xwindow) {
-  }
+  // Since this window is override-redirect, syncing is sufficient
+  // to ensure the map is complete.
+  XSync(xdisplay, x11::False);
 
   GLImageTestSupport::InitializeGL(base::nullopt);
   auto surface =
@@ -63,12 +60,11 @@
   ASSERT_TRUE(context->MakeCurrent(surface.get()));
   EXPECT_TRUE(context->GetHandle());
 
-  // Destroy the window, and wait until the window is unmapped. There should be
-  // no x11 errors.
   context->ReleaseCurrent(surface.get());
   XDestroyWindow(xdisplay, xwindow);
-  while (XNextEvent(xdisplay, &xevent) && xevent.type != UnmapNotify) {
-  }
+  // Since this window is override-redirect, syncing is sufficient
+  // to ensure the window is destroyed and unmapped.
+  XSync(xdisplay, x11::False);
   ASSERT_FALSE(error_tracker.FoundNewError());
 
   if (context->MakeCurrent(surface.get())) {
diff --git a/ui/gl/swap_chain_presenter.cc b/ui/gl/swap_chain_presenter.cc
index 3a2c992..4221f439 100644
--- a/ui/gl/swap_chain_presenter.cc
+++ b/ui/gl/swap_chain_presenter.cc
@@ -483,10 +483,6 @@
       (DXGI_FORMAT_NV12 == DirectCompositionSurfaceWin::GetOverlayFormatUsed());
   // TODO(sunnyps): Try using decode swap chain for uploaded video images.
   if (nv12_image && nv12_supported && !failed_to_present_decode_swapchain_) {
-    // This is a temporary check to determine if |texture()| is, in fact, the
-    // nullptr being dereferenced.
-    // crbug.com/1077645
-    CHECK(nv12_image->texture());
     D3D11_TEXTURE2D_DESC texture_desc = {};
     nv12_image->texture()->GetDesc(&texture_desc);
 
diff --git a/ui/gtk/x/gtk_event_loop_x11.cc b/ui/gtk/x/gtk_event_loop_x11.cc
index 8b4a41d..1e9431c 100644
--- a/ui/gtk/x/gtk_event_loop_x11.cc
+++ b/ui/gtk/x/gtk_event_loop_x11.cc
@@ -66,13 +66,16 @@
   // corresponding key event in the X event queue.  So we have to handle this
   // case.  ibus-gtk is used through gtk-immodule to support IMEs.
 
+  auto* conn = x11::Connection::Get();
+  XDisplay* display = conn->display();
+
   XEvent x_event;
   x_event.xkey = {};
   x_event.xkey.type = gdk_event_key.type == GDK_KEY_PRESS
                           ? x11::KeyPressEvent::opcode
                           : x11::KeyReleaseEvent::opcode;
   x_event.xkey.send_event = gdk_event_key.send_event;
-  x_event.xkey.display = gfx::GetXDisplay();
+  x_event.xkey.display = display;
   x_event.xkey.window = GDK_WINDOW_XID(gdk_event_key.window);
   x_event.xkey.root = DefaultRootWindow(x_event.xkey.display);
   x_event.xkey.time = gdk_event_key.time;
@@ -84,9 +87,9 @@
   // We want to process the gtk event; mapped to an X11 event immediately
   // otherwise if we put it back on the queue we may get items out of order.
   if (ui::X11EventSource* x11_source = ui::X11EventSource::GetInstance())
-    x11_source->DispatchXEventNow(&x_event);
+    x11_source->DispatchXEvent(&x_event);
   else
-    XPutBackEvent(x_event.xkey.display, &x_event);
+    conn->events().emplace_front(base::nullopt, x_event);
 }
 
 }  // namespace ui
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index 21c0ab1..23a35bb2 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -319,6 +319,9 @@
   // Henceforth, ensure the delegate outlives the Widget.
   widget_delegate_->can_delete_this_ = false;
 
+  if (params.delegate)
+    params.delegate->WidgetInitializing(this);
+
   ownership_ = params.ownership;
   native_widget_ = CreateNativeWidget(params, this)->AsNativeWidgetPrivate();
   root_view_.reset(CreateRootView());
@@ -374,7 +377,7 @@
   native_widget_->OnWidgetInitDone();
 
   if (delegate)
-    delegate->WidgetInitialized(this);
+    delegate->WidgetInitialized();
 
   internal::AnyWidgetObserverSingleton::GetInstance()->OnAnyWidgetInitialized(
       this);
diff --git a/ui/views/widget/widget_delegate.cc b/ui/views/widget/widget_delegate.cc
index 69b27019..477208d 100644
--- a/ui/views/widget/widget_delegate.cc
+++ b/ui/views/widget/widget_delegate.cc
@@ -153,8 +153,12 @@
   return true;
 }
 
-void WidgetDelegate::WidgetInitialized(Widget* widget) {
+void WidgetDelegate::WidgetInitializing(Widget* widget) {
   widget_ = widget;
+  OnWidgetInitializing();
+}
+
+void WidgetDelegate::WidgetInitialized() {
   OnWidgetInitialized();
 }
 
diff --git a/ui/views/widget/widget_delegate.h b/ui/views/widget/widget_delegate.h
index fd3c3839..e7160a9 100644
--- a/ui/views/widget/widget_delegate.h
+++ b/ui/views/widget/widget_delegate.h
@@ -93,6 +93,10 @@
   // menu bars, etc.) changes in size.
   virtual void OnWorkAreaChanged();
 
+  // Called when the widget's initialization is beginning, right after the
+  // ViewsDelegate decides to use this WidgetDelegate for a Widget.
+  virtual void OnWidgetInitializing() {}
+
   // Called when the widget's initialization is complete.
   virtual void OnWidgetInitialized() {}
 
@@ -287,7 +291,8 @@
 
   // Called to notify the WidgetDelegate of changes to the state of its Widget.
   // It is not usually necessary to call these from client code.
-  void WidgetInitialized(Widget* widget);
+  void WidgetInitializing(Widget* widget);
+  void WidgetInitialized();
   void WidgetDestroying();
   void WindowWillClose();
 
diff --git a/ui/webui/resources/cr_components/chromeos/bluetooth/BUILD.gn b/ui/webui/resources/cr_components/chromeos/bluetooth/BUILD.gn
index 53a29d3da..16484cc 100644
--- a/ui/webui/resources/cr_components/chromeos/bluetooth/BUILD.gn
+++ b/ui/webui/resources/cr_components/chromeos/bluetooth/BUILD.gn
@@ -21,10 +21,10 @@
     "//ui/webui/resources/js:cr",
     "//ui/webui/resources/js:i18n_behavior",
   ]
-  externs_list = [
-    "$externs_path/bluetooth.js",
-    "$externs_path/bluetooth_private.js",
-  ]
+  externs_list = chrome_extension_public_externs + [
+                   "$externs_path/bluetooth.js",
+                   "$externs_path/bluetooth_private.js",
+                 ]
   extra_sources = [
     "$interfaces_path/bluetooth_interface.js",
     "$interfaces_path/bluetooth_private_interface.js",
@@ -45,10 +45,10 @@
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:i18n_behavior.m",
   ]
-  externs_list = [
-    "$externs_path/bluetooth.js",
-    "$externs_path/bluetooth_private.js",
-  ]
+  externs_list = chrome_extension_public_externs + [
+                   "$externs_path/bluetooth.js",
+                   "$externs_path/bluetooth_private.js",
+                 ]
   extra_sources = [
     "$interfaces_path/bluetooth_interface.js",
     "$interfaces_path/bluetooth_private_interface.js",
diff --git a/ui/webui/resources/cr_components/chromeos/multidevice_setup/BUILD.gn b/ui/webui/resources/cr_components/chromeos/multidevice_setup/BUILD.gn
index de6c651e..63fd8b3 100644
--- a/ui/webui/resources/cr_components/chromeos/multidevice_setup/BUILD.gn
+++ b/ui/webui/resources/cr_components/chromeos/multidevice_setup/BUILD.gn
@@ -67,7 +67,8 @@
     "//ui/webui/resources/cr_elements/cr_input:cr_input",
     "//ui/webui/resources/js:cr",
   ]
-  externs_list = [ "$externs_path/quick_unlock_private.js" ]
+  externs_list = chrome_extension_public_externs +
+                 [ "$externs_path/quick_unlock_private.js" ]
   extra_sources = [ "$interfaces_path/quick_unlock_private_interface.js" ]
 }
 
diff --git a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
index 6e1c7b2..ca7f9fc 100644
--- a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
+++ b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
@@ -63,7 +63,8 @@
     "//ui/webui/resources/js:assert",
     "//ui/webui/resources/js:i18n_behavior",
   ]
-  externs_list = [ "$externs_path/networking_private.js" ]
+  externs_list = chrome_extension_public_externs +
+                 [ "$externs_path/networking_private.js" ]
   extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
 }
 
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn
index 0f05f81..335bec0 100644
--- a/weblayer/BUILD.gn
+++ b/weblayer/BUILD.gn
@@ -346,6 +346,7 @@
     "//components/variations/net",
     "//components/variations/service",
     "//components/version_info",
+    "//components/viz/common",
     "//components/web_cache/browser",
     "//components/webrtc",
     "//content:content_resources",
@@ -364,6 +365,7 @@
     "//net:net_resources",
     "//sandbox",
     "//services/metrics/public/cpp:metrics_cpp",
+    "//services/network/public/cpp",
     "//services/network/public/mojom",
     "//services/preferences/tracked",
     "//services/service_manager/embedder:embedder_result_codes",
diff --git a/weblayer/app/DEPS b/weblayer/app/DEPS
index ef333d8..58982f24 100644
--- a/weblayer/app/DEPS
+++ b/weblayer/app/DEPS
@@ -1,8 +1,10 @@
 include_rules = [
   "+components/startup_metric_utils",
   "+components/version_info",
+  "+components/viz/common",
   "+content/public",
   "+media/base/media_switches.h",
   "+sandbox",
+  "+services/network/public/cpp",
   "+ui/base",
 ]
diff --git a/weblayer/app/content_main_delegate_impl.cc b/weblayer/app/content_main_delegate_impl.cc
index c06cd7d..12f68fab 100644
--- a/weblayer/app/content_main_delegate_impl.cc
+++ b/weblayer/app/content_main_delegate_impl.cc
@@ -20,6 +20,7 @@
 #include "content/public/common/content_switches.h"
 #include "content/public/common/url_constants.h"
 #include "media/base/media_switches.h"
+#include "services/network/public/cpp/features.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/ui_base_paths.h"
 #include "weblayer/browser/content_browser_client_impl.h"
@@ -36,6 +37,7 @@
 #include "base/android/locale_utils.h"
 #include "base/i18n/rtl.h"
 #include "base/posix/global_descriptors.h"
+#include "components/viz/common/features.h"
 #include "content/public/browser/android/compositor.h"
 #include "ui/base/resource/resource_bundle_android.h"
 #include "ui/base/ui_base_switches.h"
@@ -145,11 +147,22 @@
         // TODO(crbug.com/1025627): make webauth work with WebLayer.
         ::features::kWebAuth, ::features::kSmsReceiver,
         // TODO(crbug.com/1057106): make web-xr work with WebLayer.
-        ::features::kWebXr,
+        ::features::kWebXr, ::features::kWebXrArModule,
+        ::features::kWebXrHitTest,
         // TODO(crbug.com/1057770): make Background Fetch work with WebLayer.
-        ::features::kBackgroundFetch,
+        ::features::kBackgroundFetch, ::features::kInstalledApp,
+        // TODO(crbug.com/1091212): make Notification triggers work with
+        // WebLayer.
+        ::features::kNotificationTriggers,
+        // TODO(crbug.com/1091211): Support PeriodicBackgroundSync on WebLayer.
+        ::features::kPeriodicBackgroundSync, ::features::kSmsReceiver,
+        media::kOverlayFullscreenVideo,
+        // TODO(crbug.com/1091795): Support Cross Origin Embedder Policy on
+        // WebLayer.
+        network::features::kCrossOriginEmbedderPolicy,
 #if defined(OS_ANDROID)
-        media::kPictureInPictureAPI,
+        media::kPictureInPictureAPI, ::features::kDisableDeJelly,
+        ::features::kDynamicColorGamut,
 #endif
   });
 
diff --git a/weblayer/browser/android/javatests/BUILD.gn b/weblayer/browser/android/javatests/BUILD.gn
index 711ea55..7978bdb0 100644
--- a/weblayer/browser/android/javatests/BUILD.gn
+++ b/weblayer/browser/android/javatests/BUILD.gn
@@ -27,6 +27,7 @@
     "src/org/chromium/weblayer/test/OnTabRemovedTabListCallbackImpl.java",
     "src/org/chromium/weblayer/test/ProfileTest.java",
     "src/org/chromium/weblayer/test/RenderingTest.java",
+    "src/org/chromium/weblayer/test/SiteSettingsTest.java",
     "src/org/chromium/weblayer/test/SmokeTest.java",
     "src/org/chromium/weblayer/test/TabCallbackTest.java",
     "src/org/chromium/weblayer/test/TabListCallbackTest.java",
@@ -49,6 +50,7 @@
     "//third_party/android_deps:androidx_fragment_fragment_java",
     "//third_party/android_support_test_runner:rules_java",
     "//third_party/android_support_test_runner:runner_java",
+    "//third_party/espresso:espresso_all_java",
     "//third_party/hamcrest:hamcrest_java",
     "//third_party/junit:junit",
     "//weblayer/browser/java:interfaces_java",
@@ -93,6 +95,8 @@
     "src/org/chromium/weblayer/test/MinWebLayerVersionSkipCheck.java",
     "src/org/chromium/weblayer/test/NavigationWaiter.java",
     "src/org/chromium/weblayer/test/ResourceUtil.java",
+    "src/org/chromium/weblayer/test/SiteSettingsActivityTestRule.java",
+    "src/org/chromium/weblayer/test/WebLayerActivityTestRule.java",
     "src/org/chromium/weblayer/test/WebLayerJUnit4ClassRunner.java",
   ]
   deps = [
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
index bd36011f..274b4ce 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
@@ -7,13 +7,11 @@
 import android.app.Activity;
 import android.app.Instrumentation.ActivityMonitor;
 import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.rule.ActivityTestRule;
-import android.text.TextUtils;
 
 import androidx.fragment.app.Fragment;
 
@@ -24,7 +22,6 @@
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
-import org.chromium.base.CommandLine;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.content_public.browser.test.util.CriteriaHelper;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
@@ -35,9 +32,6 @@
 import org.chromium.weblayer.WebLayer;
 import org.chromium.weblayer.shell.InstrumentationActivity;
 
-import java.io.File;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
 import java.lang.reflect.Field;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
@@ -47,9 +41,8 @@
  *
  * Test can use this ActivityTestRule to launch or get InstrumentationActivity.
  */
-public class InstrumentationActivityTestRule extends ActivityTestRule<InstrumentationActivity> {
-    private static final String COMMAND_LINE_FILE = "weblayer-command-line";
-
+public class InstrumentationActivityTestRule
+        extends WebLayerActivityTestRule<InstrumentationActivity> {
     @Rule
     private EmbeddedTestServerRule mTestServerRule = new EmbeddedTestServerRule();
 
@@ -67,37 +60,12 @@
     }
 
     public InstrumentationActivityTestRule() {
-        super(InstrumentationActivity.class, false, false);
+        super(InstrumentationActivity.class);
     }
 
     @Override
     public Statement apply(final Statement base, Description description) {
-        Statement testServer = super.apply(mTestServerRule.apply(base, description), description);
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                try {
-                    // The CommandLine instance we have here will not be picked up in the
-                    // implementation since they use different class loaders, so we need to write
-                    // all the switches to the WebLayer command line file.
-                    try (Writer writer = new OutputStreamWriter(
-                                 InstrumentationRegistry.getInstrumentation()
-                                         .getTargetContext()
-                                         .openFileOutput(COMMAND_LINE_FILE, Context.MODE_PRIVATE),
-                                 "UTF-8")) {
-                        writer.write(TextUtils.join(" ", CommandLine.getJavaSwitchesOrNull()));
-                    }
-
-                    testServer.evaluate();
-                } finally {
-                    new File(InstrumentationRegistry.getInstrumentation()
-                                     .getTargetContext()
-                                     .getFilesDir(),
-                            COMMAND_LINE_FILE)
-                            .delete();
-                }
-            }
-        };
+        return super.apply(mTestServerRule.apply(base, description), description);
     }
 
     public WebLayer getWebLayer() {
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SiteSettingsActivityTestRule.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SiteSettingsActivityTestRule.java
new file mode 100644
index 0000000..1ee2cbe
--- /dev/null
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SiteSettingsActivityTestRule.java
@@ -0,0 +1,39 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.weblayer.test;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
+
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.weblayer.SiteSettingsActivity;
+import org.chromium.weblayer.WebLayer;
+
+/**
+ * ActivityTestRule for SiteSettingsActivity.
+ *
+ * Test can use this ActivityTestRule to launch SiteSettingsActivity.
+ */
+public class SiteSettingsActivityTestRule extends WebLayerActivityTestRule<SiteSettingsActivity> {
+    public SiteSettingsActivityTestRule() {
+        super(SiteSettingsActivity.class);
+    }
+
+    public SiteSettingsActivity launchCategoryListWithProfile(String profileName) {
+        Context appContext = InstrumentationRegistry.getInstrumentation()
+                                     .getTargetContext()
+                                     .getApplicationContext();
+        Intent siteSettingsIntent = TestThreadUtils.runOnUiThreadBlockingNoException(() -> {
+            // We load WebLayer here so it gets initialized with the test/instrumentation Context,
+            // which has an in-memory SharedPreferences. Without this call, WebLayer gets
+            // initialized with the Application as its appContext, which breaks tests because a
+            // SharedPreferences xml file is persisted to disk.
+            WebLayer.loadSync(appContext);
+            return SiteSettingsActivity.createIntentForCategoryList(appContext, profileName);
+        });
+        return launchActivity(siteSettingsIntent);
+    }
+}
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SiteSettingsTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SiteSettingsTest.java
new file mode 100644
index 0000000..e48c5a9
--- /dev/null
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/SiteSettingsTest.java
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.weblayer.test;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withText;
+
+import android.support.test.filters.SmallTest;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.weblayer.SiteSettingsActivity;
+
+/**
+ * Tests the behavior of the Site Settings UI.
+ */
+@RunWith(WebLayerJUnit4ClassRunner.class)
+public class SiteSettingsTest {
+    private static final String PROFILE_NAME = "DefaultProfile";
+
+    @Rule
+    public SiteSettingsActivityTestRule mActivityTestRule = new SiteSettingsActivityTestRule();
+
+    @Test
+    @SmallTest
+    @MinWebLayerVersion(84)
+    public void testSiteSettingsLaunches() throws InterruptedException {
+        SiteSettingsActivity siteSettingsActivity =
+                mActivityTestRule.launchCategoryListWithProfile(PROFILE_NAME);
+
+        // Check that the "All sites" option is visible.
+        onView(withText("All sites")).check(matches(isDisplayed()));
+    }
+}
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/WebLayerActivityTestRule.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/WebLayerActivityTestRule.java
new file mode 100644
index 0000000..a7d030b
--- /dev/null
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/WebLayerActivityTestRule.java
@@ -0,0 +1,62 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.weblayer.test;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.rule.ActivityTestRule;
+import android.text.TextUtils;
+
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import org.chromium.base.CommandLine;
+
+import java.io.File;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+/**
+ * Base ActivityTestRule for WebLayer instrumentation tests.
+ *
+ * This rule contains some common setup needed to deal with WebLayer's multiple classloaders.
+ */
+abstract class WebLayerActivityTestRule<T extends Activity> extends ActivityTestRule<T> {
+    private static final String COMMAND_LINE_FILE = "weblayer-command-line";
+
+    public WebLayerActivityTestRule(Class<T> clazz) {
+        super(clazz, /*initialTouchMode=*/false, /*launchActivity=*/false);
+    }
+
+    @Override
+    public Statement apply(final Statement base, Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                try {
+                    // The CommandLine instance we have here will not be picked up in the
+                    // implementation since they use different class loaders, so we need to write
+                    // all the switches to the WebLayer command line file.
+                    try (Writer writer = new OutputStreamWriter(
+                                 InstrumentationRegistry.getInstrumentation()
+                                         .getTargetContext()
+                                         .openFileOutput(COMMAND_LINE_FILE, Context.MODE_PRIVATE),
+                                 "UTF-8")) {
+                        writer.write(TextUtils.join(" ", CommandLine.getJavaSwitchesOrNull()));
+                    }
+
+                    base.evaluate();
+                } finally {
+                    new File(InstrumentationRegistry.getInstrumentation()
+                                     .getTargetContext()
+                                     .getFilesDir(),
+                            COMMAND_LINE_FILE)
+                            .delete();
+                }
+            }
+        };
+    }
+}
diff --git a/weblayer/browser/browser_controls_container_view.cc b/weblayer/browser/browser_controls_container_view.cc
index 772bd0aa..81a1f9e9 100644
--- a/weblayer/browser/browser_controls_container_view.cc
+++ b/weblayer/browser/browser_controls_container_view.cc
@@ -5,6 +5,7 @@
 #include "weblayer/browser/browser_controls_container_view.h"
 
 #include "base/android/jni_string.h"
+#include "base/bind.h"
 #include "base/feature_list.h"
 #include "cc/layers/ui_resource_layer.h"
 #include "content/public/browser/android/compositor.h"
@@ -33,9 +34,19 @@
       content_view_render_view_(content_view_render_view),
       is_top_(is_top) {
   DCHECK(content_view_render_view_);
+  if (!is_top_) {
+    content_view_render_view_->SetHeightChangedListener(
+        base::BindRepeating(&BrowserControlsContainerView::ContentHeightChanged,
+                            base::Unretained(this)));
+  }
 }
 
-BrowserControlsContainerView::~BrowserControlsContainerView() = default;
+BrowserControlsContainerView::~BrowserControlsContainerView() {
+  if (!is_top_) {
+    content_view_render_view_->SetHeightChangedListener(
+        base::RepeatingClosure());
+  }
+}
 
 int BrowserControlsContainerView::GetControlsHeight() {
   return controls_layer_ ? controls_layer_->bounds().height() : 0;
@@ -82,28 +93,20 @@
 }
 
 void BrowserControlsContainerView::SetTopControlsOffset(JNIEnv* env,
-                                                        int controls_offset_y,
                                                         int content_offset_y) {
   DCHECK(is_top_);
   // |controls_layer_| may not be created if the controls view has 0 height.
   if (controls_layer_)
-    controls_layer_->SetPosition(gfx::PointF(0, controls_offset_y));
+    controls_layer_->SetPosition(gfx::PointF(0, GetControlsOffset()));
   if (web_contents()) {
     web_contents()->GetNativeView()->GetLayer()->SetPosition(
         gfx::PointF(0, content_offset_y));
   }
 }
 
-void BrowserControlsContainerView::SetBottomControlsOffset(
-    JNIEnv* env,
-    int controls_offset_y) {
+void BrowserControlsContainerView::SetBottomControlsOffset(JNIEnv* env) {
   DCHECK(!is_top_);
-  // |controls_layer_| may not be created if the controls view has 0 height.
-  if (controls_layer_) {
-    controls_layer_->SetPosition(
-        gfx::PointF(0, content_view_render_view_->height() -
-                           GetControlsHeight() + controls_offset_y));
-  }
+  DoSetBottomControlsOffset();
 }
 
 void BrowserControlsContainerView::SetControlsSize(
@@ -143,6 +146,26 @@
       entered_fullscreen);
 }
 
+void BrowserControlsContainerView::ContentHeightChanged() {
+  DCHECK(!is_top_);
+  DoSetBottomControlsOffset();
+}
+
+int BrowserControlsContainerView::GetControlsOffset() {
+  return Java_BrowserControlsContainerView_getControlsOffset(
+      AttachCurrentThread(), java_browser_controls_container_view_);
+}
+
+void BrowserControlsContainerView::DoSetBottomControlsOffset() {
+  DCHECK(!is_top_);
+  // |controls_layer_| may not be created if the controls view has 0 height.
+  if (!controls_layer_)
+    return;
+  controls_layer_->SetPosition(
+      gfx::PointF(0, content_view_render_view_->height() - GetControlsHeight() +
+                         GetControlsOffset()));
+}
+
 static jlong
 JNI_BrowserControlsContainerView_CreateBrowserControlsContainerView(
     JNIEnv* env,
diff --git a/weblayer/browser/browser_controls_container_view.h b/weblayer/browser/browser_controls_container_view.h
index 883ea0c..9231531 100644
--- a/weblayer/browser/browser_controls_container_view.h
+++ b/weblayer/browser/browser_controls_container_view.h
@@ -55,9 +55,8 @@
   // Sets the offsets of the controls and content. See
   // BrowserControlsContainerView's javadoc for details on this.
   void SetTopControlsOffset(JNIEnv* env,
-                            int controls_offset_y,
                             int content_offset_y);
-  void SetBottomControlsOffset(JNIEnv* env, int controls_offset_y);
+  void SetBottomControlsOffset(JNIEnv* env);
 
   // Sets the size of |controls_layer_|.
   void SetControlsSize(JNIEnv* env,
@@ -75,6 +74,12 @@
   void DidToggleFullscreenModeForTab(bool entered_fullscreen,
                                      bool will_cause_resize) override;
 
+  // Only used for bottom controls.
+  void ContentHeightChanged();
+
+  int GetControlsOffset();
+  void DoSetBottomControlsOffset();
+
   base::android::ScopedJavaGlobalRef<jobject>
       java_browser_controls_container_view_;
   ContentViewRenderView* content_view_render_view_;
diff --git a/weblayer/browser/content_view_render_view.cc b/weblayer/browser/content_view_render_view.cc
index d1dcd657..98cd8bc 100644
--- a/weblayer/browser/content_view_render_view.cc
+++ b/weblayer/browser/content_view_render_view.cc
@@ -8,6 +8,7 @@
 #include <android/native_window_jni.h>
 
 #include <memory>
+#include <utility>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
@@ -37,7 +38,15 @@
   java_obj_.Reset(env, obj);
 }
 
-ContentViewRenderView::~ContentViewRenderView() = default;
+ContentViewRenderView::~ContentViewRenderView() {
+  DCHECK(height_changed_listener_.is_null());
+}
+
+void ContentViewRenderView::SetHeightChangedListener(
+    base::RepeatingClosure callback) {
+  DCHECK(height_changed_listener_.is_null() || callback.is_null());
+  height_changed_listener_ = std::move(callback);
+}
 
 // static
 static jlong JNI_ContentViewRenderView_Init(
@@ -75,11 +84,15 @@
     const JavaParamRef<jobject>& jweb_contents,
     jint width,
     jint height) {
+  bool height_changed = height_ != height;
   height_ = height;
   content::WebContents* web_contents =
       content::WebContents::FromJavaWebContents(jweb_contents);
   gfx::Size size(width, height);
   web_contents->GetNativeView()->OnPhysicalBackingSizeChanged(size);
+
+  if (height_changed && !height_changed_listener_.is_null())
+    height_changed_listener_.Run();
 }
 
 void ContentViewRenderView::SurfaceCreated(JNIEnv* env) {
diff --git a/weblayer/browser/content_view_render_view.h b/weblayer/browser/content_view_render_view.h
index 6ab6844..1633925 100644
--- a/weblayer/browser/content_view_render_view.h
+++ b/weblayer/browser/content_view_render_view.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/android/jni_weak_ref.h"
+#include "base/callback.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
@@ -38,6 +39,7 @@
 
   // Height, in pixels.
   int height() const { return height_; }
+  void SetHeightChangedListener(base::RepeatingClosure callback);
 
   // Methods called from Java via JNI -----------------------------------------
   void Destroy(JNIEnv* env);
@@ -83,6 +85,7 @@
 
   int current_surface_format_ = 0;
 
+  base::RepeatingClosure height_changed_listener_;
   int height_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(ContentViewRenderView);
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
index 827ec22..ce10368c 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
@@ -371,10 +371,10 @@
         }
         if (mIsTop) {
             BrowserControlsContainerViewJni.get().setTopControlsOffset(
-                    mNativeBrowserControlsContainerView, mControlsOffset, mContentOffset);
+                    mNativeBrowserControlsContainerView, mContentOffset);
         } else {
             BrowserControlsContainerViewJni.get().setBottomControlsOffset(
-                    mNativeBrowserControlsContainerView, mControlsOffset);
+                    mNativeBrowserControlsContainerView);
         }
     }
 
@@ -396,6 +396,11 @@
     }
 
     @CalledByNative
+    private int getControlsOffset() {
+        return mControlsOffset;
+    }
+
+    @CalledByNative
     private void didToggleFullscreenModeForTab(final boolean isFullscreen) {
         // Delay hiding until after the animation. This comes from Chrome code.
         if (mSystemUiFullscreenResizeRunnable != null) {
@@ -435,9 +440,8 @@
         void deleteBrowserControlsContainerView(long nativeBrowserControlsContainerView);
         void createControlsLayer(long nativeBrowserControlsContainerView, int id);
         void deleteControlsLayer(long nativeBrowserControlsContainerView);
-        void setTopControlsOffset(
-                long nativeBrowserControlsContainerView, int controlsOffsetY, int contentOffsetY);
-        void setBottomControlsOffset(long nativeBrowserControlsContainerView, int controlsOffsetY);
+        void setTopControlsOffset(long nativeBrowserControlsContainerView, int contentOffsetY);
+        void setBottomControlsOffset(long nativeBrowserControlsContainerView);
         void setControlsSize(long nativeBrowserControlsContainerView, int width, int height);
         void updateControlsResource(long nativeBrowserControlsContainerView);
         void setWebContents(long nativeBrowserControlsContainerView, WebContents webContents);