diff --git a/DEPS b/DEPS
index 1319933..3c539105 100644
--- a/DEPS
+++ b/DEPS
@@ -109,7 +109,7 @@
   # 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': 'edb48955af27794272c0d8cae8b954ab24fa4b36',
+  'v8_revision': '9f7f390a79ded307b7050dadf1e939c5e901e21d',
   # 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.
@@ -117,7 +117,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': '6d765b07f86f189db4164be0171e36fd7ddf5f3a',
+  'angle_revision': '3f21fcb9bd26d469996d59d2f70c711799c227e3',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
@@ -165,7 +165,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '4fc4281d2152a36762a0bf47ba76bf8d4a6ee234',
+  'catapult_revision': '9ec8468cfde0868ce5f3893e819087278c5af988',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -595,7 +595,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'a81322039bb80c2686b71c4d7b07dc81a65d1928',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '39a66e9fc8df234f9ce48c7b7a431fc5e59aad00',
       'condition': 'checkout_linux',
   },
 
@@ -1106,7 +1106,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '6d2f3f4cb8bac1f7c4a945c73d07a33df74f22f9',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '343f4144bee5ddde5efec1e1217403b444386cb4',
+    Var('webrtc_git') + '/src.git' + '@' + '3a7423909164538a047a0bd93ae0dfbb575ba2dd',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1137,7 +1137,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@9b74746414c78c943800a362a545f6951cdb7a1f',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@3c569553009589659019b3909c270727d450c02a',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 9635882..2391c996 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -582,6 +582,14 @@
       True,
       (),
     ),
+    (
+      'ios/web/public/test/http_server',
+      (
+        'web::HTTPserver is deprecated use net::EmbeddedTestServer instead.',
+      ),
+      False,
+      (),
+    ),
 )
 
 
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/SplitApkWorkaround.java b/android_webview/glue/java/src/com/android/webview/chromium/SplitApkWorkaround.java
index b403474..3444463 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/SplitApkWorkaround.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/SplitApkWorkaround.java
@@ -4,11 +4,10 @@
 
 package com.android.webview.chromium;
 
-import android.support.annotation.IntDef;
-
 import dalvik.system.BaseDexClassLoader;
 
 import org.chromium.base.Log;
+import org.chromium.base.process_launcher.ChildProcessService.SplitApkWorkaroundResult;
 
 import java.io.File;
 import java.lang.reflect.Array;
@@ -23,17 +22,6 @@
 public class SplitApkWorkaround {
     private static final String TAG = "SplitApkWorkaround";
 
-    @IntDef({Result.NOT_RUN, Result.NO_ENTRIES, Result.ONE_ENTRY, Result.MULTIPLE_ENTRIES,
-            Result.TOPLEVEL_EXCEPTION, Result.LOOP_EXCEPTION})
-    @interface Result {
-        int NOT_RUN = 0;
-        int NO_ENTRIES = 1;
-        int ONE_ENTRY = 2;
-        int MULTIPLE_ENTRIES = 3;
-        int TOPLEVEL_EXCEPTION = 4;
-        int LOOP_EXCEPTION = 5;
-    }
-
     /**
      * There is a framework bug in O that causes an incorrect classloader cache entry to be created
      * when the WebView provider is installed as multiple split APKs.
@@ -46,7 +34,7 @@
      * @return a value from Result describing what happened.
      */
     @SuppressWarnings("unchecked")
-    public static @Result int apply(boolean dryRun) {
+    public static @SplitApkWorkaroundResult int apply(boolean dryRun) {
         int matchingEntries = 0;
         int exceptionEntries = 0;
         try {
@@ -132,7 +120,7 @@
             // If we got an exception at this point we assume that we failed to fix it, since we
             // didn't get as far as iterating over the cache entries.
             Log.w(TAG, "Caught exception while attempting to fix classloader cache", e);
-            return Result.TOPLEVEL_EXCEPTION;
+            return SplitApkWorkaroundResult.TOPLEVEL_EXCEPTION;
         }
 
         // If we found at least one matching entry, then don't worry about exceptions that happened
@@ -140,16 +128,16 @@
         // exception was probably not relevant. Distinguish one vs multiple entries, though,
         // because multiple matches is unexpected (only one case in the code is supposed to create
         // this situation).
-        if (matchingEntries == 1) return Result.ONE_ENTRY;
-        if (matchingEntries > 1) return Result.MULTIPLE_ENTRIES;
+        if (matchingEntries == 1) return SplitApkWorkaroundResult.ONE_ENTRY;
+        if (matchingEntries > 1) return SplitApkWorkaroundResult.MULTIPLE_ENTRIES;
 
         // If we didn't find any matching entries, but did get an exception during the loop, then
         // report this, as we might have taken the exception while trying to access the entry we
         // needed to fix.
-        if (exceptionEntries > 0) return Result.LOOP_EXCEPTION;
+        if (exceptionEntries > 0) return SplitApkWorkaroundResult.LOOP_EXCEPTION;
 
         // Otherwise, we just didn't find any entries at all, which is probably fine; not all
         // configurations actually trigger the bug.
-        return Result.NO_ENTRIES;
+        return SplitApkWorkaroundResult.NO_ENTRIES;
     }
 }
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 75ad5153..20dd634 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
@@ -47,6 +47,7 @@
 import org.chromium.base.annotations.DoNotInline;
 import org.chromium.base.library_loader.NativeLibraries;
 import org.chromium.base.metrics.CachedMetrics.TimesHistogramSample;
+import org.chromium.base.process_launcher.ChildProcessService;
 import org.chromium.components.autofill.AutofillProvider;
 import org.chromium.content_public.browser.LGEmailActionModeWorkaround;
 
@@ -362,9 +363,6 @@
         }
     }
 
-    private static @SplitApkWorkaround.Result int sSplitApkWorkaroundResult =
-            SplitApkWorkaround.Result.NOT_RUN;
-
     public static boolean preloadInZygote() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
                 && Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
@@ -372,7 +370,8 @@
             // of applying the workaround - don't actually change anything, but do the reflection
             // to check for compatibility issues. The result will be logged to UMA later, because
             // we can't do very much in the restricted environment of the WebView zygote process.
-            sSplitApkWorkaroundResult = SplitApkWorkaround.apply(/* dryRun */ true);
+            ChildProcessService.setSplitApkWorkaroundResult(
+                    SplitApkWorkaround.apply(/* dryRun */ true));
         }
 
         for (String library : NativeLibraries.LIBRARIES) {
diff --git a/ash/public/cpp/caption_buttons/frame_back_button.cc b/ash/public/cpp/caption_buttons/frame_back_button.cc
index fa438f89..8f4db5ef 100644
--- a/ash/public/cpp/caption_buttons/frame_back_button.cc
+++ b/ash/public/cpp/caption_buttons/frame_back_button.cc
@@ -28,9 +28,6 @@
 
 void FrameBackButton::ButtonPressed(Button* sender, const ui::Event& event) {
   // Send up event as well as down event as ARC++ clients expect this sequence.
-  // TODO(estade): this may not actually work in Mash, but thus far isn't used
-  // there. Consider fixing or moving back to //ash/frame/.
-  // https://crbug.com/887663
   aura::Window* root_window = GetWidget()->GetNativeWindow()->GetRootWindow();
   ui::KeyEvent press_key_event(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK,
                                ui::EF_NONE);
diff --git a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessService.java b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessService.java
index 876ebbb..f9d7ca7 100644
--- a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessService.java
+++ b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessService.java
@@ -14,6 +14,7 @@
 import android.os.Parcelable;
 import android.os.Process;
 import android.os.RemoteException;
+import android.support.annotation.IntDef;
 import android.util.SparseArray;
 
 import org.chromium.base.BaseSwitches;
@@ -25,6 +26,7 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.base.memory.MemoryPressureMonitor;
+import org.chromium.base.metrics.RecordHistogram;
 
 import java.util.List;
 import java.util.concurrent.Semaphore;
@@ -87,6 +89,29 @@
 
     private final Semaphore mActivitySemaphore = new Semaphore(1);
 
+    // These values are persisted to logs. Entries should not be renumbered and numeric values
+    // should never be reused.
+    @IntDef({SplitApkWorkaroundResult.NOT_RUN, SplitApkWorkaroundResult.NO_ENTRIES,
+            SplitApkWorkaroundResult.ONE_ENTRY, SplitApkWorkaroundResult.MULTIPLE_ENTRIES,
+            SplitApkWorkaroundResult.TOPLEVEL_EXCEPTION, SplitApkWorkaroundResult.LOOP_EXCEPTION})
+    public @interface SplitApkWorkaroundResult {
+        int NOT_RUN = 0;
+        int NO_ENTRIES = 1;
+        int ONE_ENTRY = 2;
+        int MULTIPLE_ENTRIES = 3;
+        int TOPLEVEL_EXCEPTION = 4;
+        int LOOP_EXCEPTION = 5;
+        // Keep this one at the end and increment appropriately when adding new results.
+        int SPLIT_APK_WORKAROUND_RESULT_COUNT = 6;
+    }
+
+    private static @SplitApkWorkaroundResult int sSplitApkWorkaroundResult =
+            SplitApkWorkaroundResult.NOT_RUN;
+
+    public static void setSplitApkWorkaroundResult(@SplitApkWorkaroundResult int result) {
+        sSplitApkWorkaroundResult = result;
+    }
+
     public ChildProcessService(ChildProcessServiceDelegate delegate) {
         mDelegate = delegate;
     }
@@ -239,6 +264,12 @@
                     nativeRegisterFileDescriptors(keys, fileIds, fds, regionOffsets, regionSizes);
 
                     mDelegate.onBeforeMain();
+                    if (ContextUtils.isIsolatedProcess()) {
+                        RecordHistogram.recordEnumeratedHistogram(
+                                "Android.WebView.SplitApkWorkaroundResult",
+                                sSplitApkWorkaroundResult,
+                                SplitApkWorkaroundResult.SPLIT_APK_WORKAROUND_RESULT_COUNT);
+                    }
                     if (mActivitySemaphore.tryAcquire()) {
                         mDelegate.runMain();
                         nativeExitChildProcess();
diff --git a/build/fuchsia/layout_test_proxy/DEPS b/build/fuchsia/layout_test_proxy/DEPS
index b2f6f8e..8fa9d48 100644
--- a/build/fuchsia/layout_test_proxy/DEPS
+++ b/build/fuchsia/layout_test_proxy/DEPS
@@ -1,3 +1,3 @@
 include_rules = [
   "+net",
-]
\ No newline at end of file
+]
diff --git a/cc/tiles/gpu_image_decode_cache_unittest.cc b/cc/tiles/gpu_image_decode_cache_unittest.cc
index dbd3bbc..fc570cc 100644
--- a/cc/tiles/gpu_image_decode_cache_unittest.cc
+++ b/cc/tiles/gpu_image_decode_cache_unittest.cc
@@ -185,6 +185,9 @@
   }
   void GetIntegerv(GLenum name, GLint* params) override {
     switch (name) {
+      case GL_MAX_TEXTURE_IMAGE_UNITS:
+        *params = 8;
+        return;
       case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
         *params = 8;
         return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
index c7ebb10..f47022d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -151,6 +151,7 @@
     public static final String ANDROID_PAY_INTEGRATION_V1 = "AndroidPayIntegrationV1";
     public static final String ANDROID_PAY_INTEGRATION_V2 = "AndroidPayIntegrationV2";
     public static final String ANDROID_PAYMENT_APPS = "AndroidPaymentApps";
+    public static final String ANDROID_SITE_SETTINGS_UI = "AndroidSiteSettingsUI";
     public static final String APP_NOTIFICATION_STATUS_MESSAGING = "AppNotificationStatusMessaging";
     public static final String AUTOFILL_ASSISTANT = "AutofillAssistant";
     public static final String AUTOFILL_REFRESH_STYLE_ANDROID = "AutofillRefreshStyleAndroid";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleHostImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleHostImpl.java
index 226921a..9aff92a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleHostImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleHostImpl.java
@@ -10,7 +10,7 @@
  * The implementation of {@link IModuleHost}.
  */
 public class ModuleHostImpl extends BaseModuleHost {
-    private static final int VERSION = 4;
+    private static final int VERSION = 5;
     private static final int MINIMUM_MODULE_VERSION = 1;
 
     private final Context mApplicationContext;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java
index 0163d215..29b3205 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java
@@ -19,7 +19,8 @@
     @IntDef({State.NONE, State.INVALID_GAIA_CREDENTIALS, State.USER_NOT_SIGNED_UP,
             State.CONNECTION_FAILED, State.CAPTCHA_REQUIRED, State.ACCOUNT_DELETED,
             State.ACCOUNT_DISABLED, State.SERVICE_UNAVAILABLE, State.TWO_FACTOR,
-            State.REQUEST_CANCELED})
+            State.REQUEST_CANCELED, State.UNEXPECTED_SERVICE_RESPONSE, State.SERVICE_ERROR,
+            State.WEB_LOGIN_REQUIRED})
     @Retention(RetentionPolicy.SOURCE)
     public @interface State {
         // The user is authenticated.
@@ -61,9 +62,20 @@
 
         // HOSTED accounts are deprecated; left in enumeration to match
         // GoogleServiceAuthError enum in histograms.xml.
-        // int HOSTED_NOT_ALLOWED = 10;
+        // int HOSTED_NOT_ALLOWED_DEPRECATED = 10;
 
-        int NUM_ENTRIES = 11;
+        // Indicates the service responded to a request, but we cannot
+        // interpret the response.
+        int UNEXPECTED_SERVICE_RESPONSE = 11;
+
+        // Indicates the service responded and response carried details of the
+        // application error.
+        int SERVICE_ERROR = 12;
+
+        // The password is valid but web login is required to get a token.
+        int WEB_LOGIN_REQUIRED = 13;
+
+        int NUM_ENTRIES = 14;
     }
 
     public static int getMessageID(@State int state) {
@@ -81,7 +93,9 @@
             // case State.ACCOUNT_DISABLED:
             // case State.TWO_FACTOR:
             // case State.REQUEST_CANCELED:
-            // case State.HOSTED_NOT_ALLOWED:
+            // case State.UNEXPECTED_SERVICE_RESPONSE:
+            // case State.SERVICE_ERROR:
+            // case State.WEB_LOGIN_REQUIRED:
             default:
                 return R.string.sync_error_generic;
         }
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
index c382f3e1..ebc31133 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -271,7 +271,7 @@
 <translation id="3115898365077584848">Vis oplysninger</translation>
 <translation id="3137521801621304719">Slå inkognitotilstand fra</translation>
 <translation id="3148434565183091099">Log ind på Chrome for at se dine bogmærker på alle dine enheder.</translation>
-<translation id="3157842584138209013">Se, hvor meget data du har gemt via knappen Flere valgmuligheder</translation>
+<translation id="3157842584138209013">Se, hvor meget data du har sparet via knappen Flere valgmuligheder</translation>
 <translation id="3166827708714933426">Genveje på faner og i vinduer</translation>
 <translation id="3190152372525844641">Aktivér tilladelse for Chrome i <ph name="BEGIN_LINK" />Indstillinger for Android<ph name="END_LINK" />.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> gemte data</translation>
@@ -292,7 +292,7 @@
 <translation id="3298243779924642547">Lite</translation>
 <translation id="3303414029551471755">Vil du fortsætte og downloade indholdet?</translation>
 <translation id="3328801116991980348">Webstedoplysninger</translation>
-<translation id="3341058695485821946">Se, hvor meget data du har gemt</translation>
+<translation id="3341058695485821946">Se, hvor meget data du har sparet</translation>
 <translation id="3350687908700087792">Luk alle inkognitofaner</translation>
 <translation id="3365671512111106261">Ikke tilgængelig, når Datasparefunktion er slået til.</translation>
 <translation id="3367813778245106622">Log ind igen for at starte synkroniseringen</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
index d598a86e..70d612a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -569,7 +569,7 @@
 <translation id="5530766185686772672">סגור כרטיסיות גלישה בסתר</translation>
 <translation id="5534640966246046842">האתר הועתק</translation>
 <translation id="5537099431952529648">‏אתה וההורים שלך יכולים לנהל את סנכרון Chrome וההתאמה האישית ב<ph name="BEGIN_LINK1" />הגדרות<ph name="END_LINK1" /></translation>
-<translation id="5556459405103347317">טען שוב</translation>
+<translation id="5556459405103347317">ניסיון טעינה נוסף</translation>
 <translation id="5561549206367097665">ממתין לרשת…</translation>
 <translation id="557283862590186398">‏Chrome זקוק להרשאת גישה אל המיקרופון בשביל האתר הזה.</translation>
 <translation id="55737423895878184">יש הרשאה לגישה אל המיקום ולהצגת הודעות</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/VideoFullscreenOrientationLockChromeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/VideoFullscreenOrientationLockChromeTest.java
index c7981c0..38443d9 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/VideoFullscreenOrientationLockChromeTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/VideoFullscreenOrientationLockChromeTest.java
@@ -8,7 +8,6 @@
 import android.content.pm.ActivityInfo;
 import android.net.Uri;
 import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.MediumTest;
 import android.view.KeyEvent;
 
 import org.junit.Assert;
@@ -18,8 +17,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.Feature;
-import org.chromium.base.test.util.RetryOnFailure;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.chrome.browser.media.MediaViewerUtils;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -105,9 +103,12 @@
     }
 
     @Test
-    @MediumTest
-    @Feature({"VideoFullscreenOrientationLock"})
-    @RetryOnFailure // The final waitForContentsFullscreenState(false) is flaky - crbug.com/711005.
+    // Test is disabled due to flakiness - crbug.com/888161
+    // @MediumTest
+    // @Feature({"VideoFullscreenOrientationLock"})
+    // @RetryOnFailure // The final waitForContentsFullscreenState(false) is flaky -
+    // crbug.com/711005.
+    @DisabledTest
     public void testUnlockWithDownloadViewerActivity() throws Exception {
         if (mActivityTestRule.getActivity().isTablet()) {
             return;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingIntegrationTest.java
index 1ef99d9..a06f34a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingIntegrationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingIntegrationTest.java
@@ -31,6 +31,7 @@
 
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Restriction;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.ChromeSwitches;
@@ -44,6 +45,7 @@
 import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.content_public.browser.test.util.CriteriaHelper;
 import org.chromium.ui.DropdownPopupWindowInterface;
+import org.chromium.ui.test.util.UiRestriction;
 
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
@@ -229,6 +231,7 @@
 
     @Test
     @SmallTest
+    @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
     public void testInvokingTabSwitcherHidesAccessory()
             throws InterruptedException, TimeoutException {
         mHelper.loadTestPage(false);
@@ -243,10 +246,10 @@
         mHelper.waitForKeyboardToDisappear();
         whenDisplayed(withId(R.id.keyboard_accessory_sheet));
 
-        ThreadUtils.runOnUiThreadBlocking(() -> {
-            mActivityTestRule.getActivity().getLayoutManager().showOverview(false);
-            mActivityTestRule.getActivity().getLayoutManager().hideOverview(false);
-        });
+        ThreadUtils.runOnUiThreadBlocking(
+                () -> { mActivityTestRule.getActivity().getLayoutManager().showOverview(false); });
+        ThreadUtils.runOnUiThreadBlocking(
+                () -> { mActivityTestRule.getActivity().getLayoutManager().hideOverview(false); });
 
         mHelper.waitToBeHidden(withId(R.id.keyboard_accessory_sheet));
     }
@@ -280,8 +283,8 @@
         ThreadUtils.runOnUiThreadBlocking(
                 () -> { mActivityTestRule.getActivity().onResumeWithNative(); });
 
-        // Clicking the field should bring it back up
-        mHelper.clickPasswordField();
+        // Clicking the field should bring the accessory back up.
+        mHelper.clickEmailField();
         mHelper.waitForKeyboard();
 
         // Click the tab to show the sheet and hide the keyboard.
@@ -351,7 +354,11 @@
         mHelper.waitForKeyboardToDisappear();
         whenDisplayed(withId(R.id.keyboard_accessory_sheet));
         assertThat(mActivityTestRule.getInfoBarContainer().getVisibility(), is(not(View.VISIBLE)));
-        Espresso.pressBack();
+
+        // Reopen the keyboard, then close it.
+        whenDisplayed(withId(R.id.tabs)).perform(selectTabAtPosition(0));
+        mHelper.waitForKeyboard();
+        mActivityTestRule.getKeyboardDelegate().hideKeyboard(null);
 
         mHelper.waitToBeHidden(withId(R.id.keyboard_accessory_sheet));
         mHelper.waitToBeHidden(withId(R.id.keyboard_accessory));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingTestHelper.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingTestHelper.java
index b696f89e..903cc48 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingTestHelper.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/keyboard_accessory/ManualFillingTestHelper.java
@@ -59,7 +59,8 @@
     private TestInputMethodManagerWrapper mInputMethodManagerWrapper;
 
     private class FakeKeyboard extends KeyboardVisibilityDelegate {
-        static final int KEYBOARD_HEIGHT = 400;
+        static final int KEYBOARD_HEIGHT = 234;
+
         private boolean mIsShowing;
 
         @Override
@@ -91,6 +92,11 @@
             return mIsShowing ? KEYBOARD_HEIGHT : 0;
         }
 
+        @Override
+        protected int calculateKeyboardDetectionThreshold(Context context, View rootView) {
+            return 0;
+        }
+
         /**
          * Creates an inset observer view calculating the bottom inset based on the fake keyboard.
          * @param context Context used to instantiate this view.
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index affbe68a..529b0e4 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -650,7 +650,7 @@
     Get <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> tips and updates on Google products and share feedback. Unsubscribe anytime.
   </message>
   <message name="IDS_LOGIN_MARKETING_OPT_IN_SCREEN_GET_PLAY_UPDATES" desc="A label next to the checkbox that controls user subscription to marketing updates from Google about Google Play Store.">
-    Get the lastest updates and recommendations on Play Store apps
+    Get the latest updates and recommendations on Play Store apps
   </message>
   <message name="IDS_LOGIN_MARKETING_OPT_IN_SCREEN_GET_CHROMEBOOK_UPDATES" desc="A lablel next to the checkbox that controls user subscription to marketing updates and useful information about the user's Chrome device.">
     Tips and updates on <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index d3f3a85..abf476e 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5190,9 +5190,6 @@
         <message name="IDS_PASSWORD_MANAGER_PASSWORD_LABEL" desc="Label for the password field in a prompt to store new credential">
           Password
         </message>
-        <message name="IDS_PASSWORD_MANAGER_SIGNIN_VIA_FEDERATION" desc="Text for password replacement for federated credential in save prompt.">
-          Sign in with <ph name="PROVIDER">$1<ex>facebook.com</ex></ph>
-        </message>
       </if>
       <if expr="is_android">
         <message name="IDS_PASSWORD_MANAGER_SAVE_BUTTON" desc="Mobile: Button text for the 'Save Password' infobar's 'Remember password' option">
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 68cc34e..5194a9f 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -3735,7 +3735,6 @@
 <translation id="6619801788773578757">የኪዮስክ መተግበሪያ አክል</translation>
 <translation id="6619990499523117484">የእርስዎን ፒን ያረጋግጡ</translation>
 <translation id="662080504995468778">ቆይ</translation>
-<translation id="6621639333161417145">በ<ph name="PROVIDER" /> በመለያ ይግቡ</translation>
 <translation id="6621715389962683284">የአውታረ መረብ ግንኙነት ሊመሰረት አልቻለም።</translation>
 <translation id="6622980291894852883">ምስሎችን ማገድ ቀጥል</translation>
 <translation id="6624687053722465643">Sweetness</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 21524ffd..7913ce3 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -3733,7 +3733,6 @@
 <translation id="6619801788773578757">إضافة تطبيق الكشك</translation>
 <translation id="6619990499523117484">تأكيد رقم التعريف الشخصي</translation>
 <translation id="662080504995468778">البقاء</translation>
-<translation id="6621639333161417145">تسجيل الدخول من خلال <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">تعذَّر إنشاء اتصال بالشبكة.</translation>
 <translation id="6622980291894852883">متابعة منع عرض الصور</translation>
 <translation id="6624687053722465643">الطعم اللذيذ</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index f30f0c34..a8e76bc 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Добавяне на павилионно приложение</translation>
 <translation id="6619990499523117484">Потвърдете своя ПИН</translation>
 <translation id="662080504995468778">Оставане</translation>
-<translation id="6621639333161417145">Влизане чрез <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Не може да се установи мрежова връзка.</translation>
 <translation id="6622980291894852883">Блокирането на изображения да продължи</translation>
 <translation id="6624687053722465643">Сладкиш</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index f48fb13d..ce624f6 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -3735,7 +3735,6 @@
 <translation id="6619801788773578757">কিয়স্ক অ্যাপ্লিকেশান যোগ করুন</translation>
 <translation id="6619990499523117484">আপনার পিন নিশ্চিত করুন</translation>
 <translation id="662080504995468778">থাকুন</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> দিয়ে সাইন-ইন করুন</translation>
 <translation id="6621715389962683284">নেটওয়ার্ক সংযোগ স্থাপন করা যাবে না।</translation>
 <translation id="6622980291894852883">চিত্রগুলিকে ব্লক করা চালিয়ে যান</translation>
 <translation id="6624687053722465643">মিষ্ঠতা</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 80fec40..93ba475 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -3737,7 +3737,6 @@
 <translation id="6619801788773578757">Afegeix l'aplicació de quiosc</translation>
 <translation id="6619990499523117484">Confirma el teu PIN</translation>
 <translation id="662080504995468778">No surtis</translation>
-<translation id="6621639333161417145">Inicia la sessió amb <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">No es pot establir cap connexió de xarxa.</translation>
 <translation id="6622980291894852883">Continua bloquejant les imatges</translation>
 <translation id="6624687053722465643">Pastisset</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index bf8d2b30..5d8a264 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -3734,7 +3734,6 @@
 <translation id="6619801788773578757">Přidat aplikaci pro režim veřejného terminálu</translation>
 <translation id="6619990499523117484">Potvrďte PIN</translation>
 <translation id="662080504995468778">Zůstat</translation>
-<translation id="6621639333161417145">Přihlásit se pomocí účtu <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Nelze navázat síťové připojení.</translation>
 <translation id="6622980291894852883">Pokračovat v blokování obrázků</translation>
 <translation id="6624687053722465643">Zákusek</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 2e8b6d0c..780cde9 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -2006,7 +2006,7 @@
 <translation id="3983586614702900908">enheder fra en ukendt leverandør</translation>
 <translation id="3984159763196946143">Demotilstand kunne ikke startes</translation>
 <translation id="3985261842049607969">Sikkerhedskopiér til Google Drev. Du kan til enhver tid nemt gendanne dine data eller skifte til en anden enhed. Din backup omfatter appdata. <ph name="BEGIN_LINK1" />Få flere oplysninger<ph name="END_LINK1" /></translation>
-<translation id="3987348946546879621">Gemte data</translation>
+<translation id="3987348946546879621">Sparede data</translation>
 <translation id="3987938432087324095">Det forstod jeg ikke.</translation>
 <translation id="3988996860813292272">Vælg tidszone</translation>
 <translation id="399179161741278232">Importeret</translation>
@@ -3737,7 +3737,6 @@
 <translation id="6619801788773578757">Tilføj terminalapp</translation>
 <translation id="6619990499523117484">Bekræft din pinkode</translation>
 <translation id="662080504995468778">Bliv her</translation>
-<translation id="6621639333161417145">Log ind med <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Der kan ikke oprettes en netværksforbindelse</translation>
 <translation id="6622980291894852883">Fortsæt blokering af billeder</translation>
 <translation id="6624687053722465643">Sukkersød</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 449fb5f..17c21f4 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -3734,7 +3734,6 @@
 <translation id="6619801788773578757">Kioskanwendung hinzufügen</translation>
 <translation id="6619990499523117484">PIN bestätigen</translation>
 <translation id="662080504995468778">Bleiben</translation>
-<translation id="6621639333161417145">Mit <ph name="PROVIDER" /> anmelden</translation>
 <translation id="6621715389962683284">Netzwerkverbindung kann nicht hergestellt werden.</translation>
 <translation id="6622980291894852883">Bilder weiterhin blockieren</translation>
 <translation id="6624687053722465643">Törtchen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index adbd959..bd0659f 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">Προσθήκη εφαρμογής Kiosk</translation>
 <translation id="6619990499523117484">Επιβεβαιώστε το PIN σας</translation>
 <translation id="662080504995468778">Παραμονή</translation>
-<translation id="6621639333161417145">Σύνδεση με <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Δεν είναι δυνατή η δημιουργία σύνδεσης με το διαδίκτυο.</translation>
 <translation id="6622980291894852883">Συνέχιση αποκλεισμού εικόνων</translation>
 <translation id="6624687053722465643">Γλυκό</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index dbcee63..689970b 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -3737,7 +3737,6 @@
 <translation id="6619801788773578757">Add kiosk application</translation>
 <translation id="6619990499523117484">Confirm your PIN</translation>
 <translation id="662080504995468778">Stay</translation>
-<translation id="6621639333161417145">Sign in with <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Network connection cannot be established.</translation>
 <translation id="6622980291894852883">Continue blocking images</translation>
 <translation id="6624687053722465643">Sweetness</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 782080a..c52a3df 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -3735,7 +3735,6 @@
 <translation id="6619801788773578757">Agregar app del kiosco</translation>
 <translation id="6619990499523117484">Confirma el PIN</translation>
 <translation id="662080504995468778">Permanecer aquí</translation>
-<translation id="6621639333161417145">Acceder con <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">No se puede establecer una conexión de red.</translation>
 <translation id="6622980291894852883">Continuar con el bloqueo de imágenes</translation>
 <translation id="6624687053722465643">Dulzura</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index b7041a7..186355ba 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -3733,7 +3733,6 @@
 <translation id="6619801788773578757">Añadir aplicación de kiosco</translation>
 <translation id="6619990499523117484">Confirma el número PIN</translation>
 <translation id="662080504995468778">Seguir aquí</translation>
-<translation id="6621639333161417145">Inicia sesión con <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">No se puede establecer la conexión red.</translation>
 <translation id="6622980291894852883">Seguir bloqueando imágenes</translation>
 <translation id="6624687053722465643">Dulzura</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index c17656e..0b28830 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Kioskirakenduse lisamine</translation>
 <translation id="6619990499523117484">Kinnitage PIN-kood</translation>
 <translation id="662080504995468778">Jää siia</translation>
-<translation id="6621639333161417145">Logi sisse teenusega <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Võrguühendust ei saa luua.</translation>
 <translation id="6622980291894852883">Jätka piltide blokeerimist</translation>
 <translation id="6624687053722465643">Magus</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index f0e406ce..2d5e4ec 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -3734,7 +3734,6 @@
 <translation id="6619801788773578757">افزودن برنامه کیوسک</translation>
 <translation id="6619990499523117484">پین را تأیید کنید</translation>
 <translation id="662080504995468778">ماندن</translation>
-<translation id="6621639333161417145">ورود به سیستم با <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">برقراری اتصال شبکه امکان‌پذیر نیست.</translation>
 <translation id="6622980291894852883">ادامه مسدودکردن تصاویر</translation>
 <translation id="6624687053722465643">شیرین</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index b599d09..273b3750 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Lisää kioskisovellus</translation>
 <translation id="6619990499523117484">Vahvista PIN-koodi.</translation>
 <translation id="662080504995468778">Jää</translation>
-<translation id="6621639333161417145">Kirjaudu <ph name="PROVIDER" />-tunnuksilla</translation>
 <translation id="6621715389962683284">Verkkoyhteyttä ei voi muodostaa.</translation>
 <translation id="6622980291894852883">Estä kuvat edelleen</translation>
 <translation id="6624687053722465643">Herkku</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index a314828..befc6dba 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Magdagdag ng kiosk application</translation>
 <translation id="6619990499523117484">Kumpirmahin ang iyong PIN</translation>
 <translation id="662080504995468778">Manatili</translation>
-<translation id="6621639333161417145">Mag-sign in sa pamamagitan ng <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Hindi makakonekta sa network.</translation>
 <translation id="6622980291894852883">Magpatuloy sa paghaharang ng mga larawan</translation>
 <translation id="6624687053722465643">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 6d25785..efe134c 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">Ajouter une application kiosque</translation>
 <translation id="6619990499523117484">Confirmez votre code.</translation>
 <translation id="662080504995468778">Rester</translation>
-<translation id="6621639333161417145">Se connecter avec <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Impossible d'établir la connexion au réseau.</translation>
 <translation id="6622980291894852883">Continuer à bloquer les images</translation>
 <translation id="6624687053722465643">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 139bc2bf..92de102 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -3737,7 +3737,6 @@
 <translation id="6619801788773578757">કિઓસ્ક ઍપ્લિકેશન ઉમેરો</translation>
 <translation id="6619990499523117484">તમારા PIN ની પુષ્ટિ કરો</translation>
 <translation id="662080504995468778">પૃષ્ઠ પર રહો</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> વડે સાઇન ઇન કરો</translation>
 <translation id="6621715389962683284">નેટવર્ક કનેક્શન સ્થાપિત કરી શકાતું નથી.</translation>
 <translation id="6622980291894852883">છબીઓને અવરોધિત કરવાનું ચાલુ રાખો</translation>
 <translation id="6624687053722465643">મીઠાશ</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 226bbe2..f3ea0bc 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -3737,7 +3737,6 @@
 <translation id="6619801788773578757">किओस्क ऐप्लिकेशन जोड़ें</translation>
 <translation id="6619990499523117484">अपने पिन की पुष्टि करें</translation>
 <translation id="662080504995468778">इसपर रहें</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> के ज़रिए साइन इन करें</translation>
 <translation id="6621715389962683284">नेटवर्क कनेक्शन जोड़ा नहीं जा सकता.</translation>
 <translation id="6622980291894852883">छवियों को अवरोधित करना जारी रखें</translation>
 <translation id="6624687053722465643">स्वीटनेस</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 34abe1f..3fdcfa9 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Dodaj aplikaciju kioska</translation>
 <translation id="6619990499523117484">Potvrdite PIN</translation>
 <translation id="662080504995468778">Ostani</translation>
-<translation id="6621639333161417145">Prijavite se putem <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Mrežna veza ne može se upostaviti.</translation>
 <translation id="6622980291894852883">Nastavi blokirati slike</translation>
 <translation id="6624687053722465643">Slastica</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index ae36ab1c5..b55f85a 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -3740,7 +3740,6 @@
 <translation id="6619801788773578757">Kioszkalkalmazás hozzáadása</translation>
 <translation id="6619990499523117484">PIN-kód megerősítése</translation>
 <translation id="662080504995468778">Mégse</translation>
-<translation id="6621639333161417145">Bejelentkezés a következővel: <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Nem lehet hálózati kapcsolatot létrehozni.</translation>
 <translation id="6622980291894852883">Képek letiltásának fenntartása</translation>
 <translation id="6624687053722465643">Édesség</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index af4966c..2fd1429 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Tambahkan aplikasi kios</translation>
 <translation id="6619990499523117484">Konfirmasikan PIN</translation>
 <translation id="662080504995468778">Tinggal</translation>
-<translation id="6621639333161417145">Login dengan <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Tidak dapat tersambung ke jaringan.</translation>
 <translation id="6622980291894852883">Lanjutkan mencekal gambar</translation>
 <translation id="6624687053722465643">Legit</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index a9e4e95..869b5d60 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -3734,7 +3734,6 @@
 <translation id="6619801788773578757">Aggiungi applicazione kiosk</translation>
 <translation id="6619990499523117484">Conferma il codice PIN</translation>
 <translation id="662080504995468778">Rimani</translation>
-<translation id="6621639333161417145">Accedi con <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Impossibile stabilire una connessione di rete.</translation>
 <translation id="6622980291894852883">Continua a bloccare le immagini</translation>
 <translation id="6624687053722465643">Dolcezza</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index dfa9120..1a8a017 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -3013,7 +3013,7 @@
 <translation id="5554489410841842733">סמל זה יוצג כאשר ההרחבה תוכל לפעול בדף הנוכחי.</translation>
 <translation id="5554720593229208774">רשות אישורי אימייל</translation>
 <translation id="5556206011531515970">לחץ על 'הבא' כדי לבחור את דפדפן ברירת המחדל.</translation>
-<translation id="5556459405103347317">טען שוב</translation>
+<translation id="5556459405103347317">ניסיון טעינה נוסף</translation>
 <translation id="555746285996217175">נעילה / הפעלה</translation>
 <translation id="5557991081552967863">‏ה-Wi-Fi ימשיך לפעול בזמן שינה</translation>
 <translation id="5558129378926964177">הת&amp;קרב</translation>
@@ -3736,7 +3736,6 @@
 <translation id="6619801788773578757">הוספת יישום קיוסק</translation>
 <translation id="6619990499523117484">‏אשר את מספר ה-PIN</translation>
 <translation id="662080504995468778">הישאר</translation>
-<translation id="6621639333161417145">כניסה בעזרת <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">לא ניתן ליצור חיבור לרשת.</translation>
 <translation id="6622980291894852883">המשך לחסום תמונות</translation>
 <translation id="6624687053722465643">מתוקי</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index ed949f1..1fbe5a5 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">キオスク アプリケーションを追加</translation>
 <translation id="6619990499523117484">PIN を確認してください</translation>
 <translation id="662080504995468778">とどまる</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> でログイン</translation>
 <translation id="6621715389962683284">ネットワーク接続を確立できません。</translation>
 <translation id="6622980291894852883">画像を引き続きブロックする</translation>
 <translation id="6624687053722465643">スイーツ</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 90d8841..9acfee7 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -3736,7 +3736,6 @@
 <translation id="6619801788773578757">ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ಸೇರಿಸಿ</translation>
 <translation id="6619990499523117484">ನಿಮ್ಮ ಪಿನ್ ದೃಢೀಕರಿಸಿ</translation>
 <translation id="662080504995468778">ಉಳಿಯಿರಿ</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> ಅವರ ಮೂಲಕ ಸೈನ್‌ ಇನ್‌ ಮಾಡಿ</translation>
 <translation id="6621715389962683284">ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="6622980291894852883">ಚಿತ್ರಗಳನ್ನು ನಿರ್ಬಂಧಿಸುವುದನ್ನು ಮುಂದುವರಿಸಿ</translation>
 <translation id="6624687053722465643">ಸ್ವೀಟ್‌ನೆಸ್</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index ee8f89d..8fb64f5e 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3736,7 +3736,6 @@
 <translation id="6619801788773578757">키오스크 애플리케이션 추가</translation>
 <translation id="6619990499523117484">PIN 확인</translation>
 <translation id="662080504995468778">머무르기</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" />(으)로 로그인</translation>
 <translation id="6621715389962683284">네트워크 연결을 설정할 수 없습니다.</translation>
 <translation id="6622980291894852883">이미지 계속 차단</translation>
 <translation id="6624687053722465643">달콤</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 9b53f7b0..3d297a2a4 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">Pridėkite viešojo terminalo programą</translation>
 <translation id="6619990499523117484">Patvirtinkite PIN kodą</translation>
 <translation id="662080504995468778">Likti</translation>
-<translation id="6621639333161417145">Prisijunkite naudodami <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Nepavyko užmegzti tinklo ryšio.</translation>
 <translation id="6622980291894852883">Tęsti vaizdų blokavimą</translation>
 <translation id="6624687053722465643">Saldumas</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index b19e699..842b4dd1 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Pievienot kioska lietojumprogrammu</translation>
 <translation id="6619990499523117484">Apstipriniet PIN kodu</translation>
 <translation id="662080504995468778">Palikt</translation>
-<translation id="6621639333161417145">Pierakstīties, izmantojot <ph name="PROVIDER" /> kontu</translation>
 <translation id="6621715389962683284">Nevar izveidot tīkla savienojumu.</translation>
 <translation id="6622980291894852883">Turpināt bloķēt attēlus</translation>
 <translation id="6624687053722465643">Kārums</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index ec9624d4..077ae32 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -3737,7 +3737,6 @@
 <translation id="6619801788773578757">കിയോസ്ക് ആപ്പ് ചേർക്കുക</translation>
 <translation id="6619990499523117484">നിങ്ങളുടെ പിൻ സ്ഥിരീകരിക്കുക</translation>
 <translation id="662080504995468778">തുടരുക</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="6621715389962683284">നെറ്റ്‌വർക്ക് കണക്ഷൻ സ്ഥാപിക്കാനാവില്ല.</translation>
 <translation id="6622980291894852883">ചിത്രങ്ങൾ‌ തടയുന്നത് തുടരുക</translation>
 <translation id="6624687053722465643">സ്വീറ്റ്നസ്സ്</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 27d99d0..78e8a4f 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -3741,7 +3741,6 @@
 <translation id="6619801788773578757">कियोस्क अॅप्लिकेशन जोडा</translation>
 <translation id="6619990499523117484">आपल्या पिन ची पुष्टी करा</translation>
 <translation id="662080504995468778">यावर रहा</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> सोबत साइन इन करा</translation>
 <translation id="6621715389962683284">नेटवर्क कनेक्शन इंस्टॉल केले जाऊ शकत नाही.</translation>
 <translation id="6622980291894852883">इमेज अवरोधित करणे सुरू ठेवा</translation>
 <translation id="6624687053722465643">गोडवा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 4fb955c..3a5c1a9 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">Tambahkan aplikasi kios</translation>
 <translation id="6619990499523117484">Sahkan PIN anda</translation>
 <translation id="662080504995468778">Kekal di sini</translation>
-<translation id="6621639333161417145">Log masuk dengan <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Sambungan rangkaian tidak dapat diwujudkan.</translation>
 <translation id="6622980291894852883">Terus menyekat imej</translation>
 <translation id="6624687053722465643">Manis</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 5adf97a..10b8e08 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">Kiosk-app toevoegen</translation>
 <translation id="6619990499523117484">Je pincode bevestigen</translation>
 <translation id="662080504995468778">Blijven</translation>
-<translation id="6621639333161417145">Inloggen met <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Netwerkverbinding kan niet tot stand worden gebracht.</translation>
 <translation id="6622980291894852883">Afbeeldingen blijven blokkeren</translation>
 <translation id="6624687053722465643">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 2cca9b2..2c05d4c 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -3729,7 +3729,6 @@
 <translation id="6619801788773578757">Legg til kioskapp</translation>
 <translation id="6619990499523117484">Bekreft PIN-koden din</translation>
 <translation id="662080504995468778">Bli her</translation>
-<translation id="6621639333161417145">Logg på med <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Det kan ikke opprettes noen nettverkstilkobling.</translation>
 <translation id="6622980291894852883">Fortsett blokkering av bilder</translation>
 <translation id="6624687053722465643">Kakemons</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 74259cc..dd15e85 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Dodaj aplikację kiosku</translation>
 <translation id="6619990499523117484">Potwierdź kod PIN</translation>
 <translation id="662080504995468778">Zostań</translation>
-<translation id="6621639333161417145">Zaloguj się przez: <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Nie można nawiązać połączenia z siecią.</translation>
 <translation id="6622980291894852883">Nadal blokuj pokazywanie grafik</translation>
 <translation id="6624687053722465643">Słodycz</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 252d1de..4c27ff3 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -3740,7 +3740,6 @@
 <translation id="6619801788773578757">Adicionar aplicativo em quiosque</translation>
 <translation id="6619990499523117484">Confirme seu PIN</translation>
 <translation id="662080504995468778">Ficar</translation>
-<translation id="6621639333161417145">Fazer login com <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Não foi possível estabelecer a conexão de rede.</translation>
 <translation id="6622980291894852883">Continuar bloqueando imagens</translation>
 <translation id="6624687053722465643">Docinho</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index b25c714d..94d2d6d7 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -3740,7 +3740,6 @@
 <translation id="6619801788773578757">Adicionar aplicação de quiosque</translation>
 <translation id="6619990499523117484">Confirme o PIN</translation>
 <translation id="662080504995468778">Ficar</translation>
-<translation id="6621639333161417145">Iniciar sessão com <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Não é possível estabelecer ligação à rede.</translation>
 <translation id="6622980291894852883">Continuar a bloquear imagens</translation>
 <translation id="6624687053722465643">Doce</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index f7a565c..533e3c9 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Adaugă o aplicație de tip chioșc</translation>
 <translation id="6619990499523117484">Confirmă codul PIN</translation>
 <translation id="662080504995468778">Rămâi pe pagină</translation>
-<translation id="6621639333161417145">Conectează-te cu <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Conexiunea la rețea nu poate fi stabilită.</translation>
 <translation id="6622980291894852883">Continuă blocarea imaginilor</translation>
 <translation id="6624687053722465643">Dulcineea</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 5fd93c42..5ca5d879 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">Добавить киоск-приложение</translation>
 <translation id="6619990499523117484">Подтвердите PIN-код</translation>
 <translation id="662080504995468778">Остаться</translation>
-<translation id="6621639333161417145">Войти с аккаунтом <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Невозможно подключиться к сети.</translation>
 <translation id="6622980291894852883">Всегда блокировать изображения</translation>
 <translation id="6624687053722465643">Пирожное</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 0cfa96f..6df5503 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Pridať aplikáciu pre režim kiosku</translation>
 <translation id="6619990499523117484">Potvrďte kód PIN</translation>
 <translation id="662080504995468778">Zostať</translation>
-<translation id="6621639333161417145">Prihlásiť sa pomocou služby <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Nie je možné nadviazať pripojenie k sieti.</translation>
 <translation id="6622980291894852883">Pokračovať v blokovaní obrázkov</translation>
 <translation id="6624687053722465643">Sladkosť</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index d70b243..7fbf32d 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Dodaj aplikacijo za kiosk</translation>
 <translation id="6619990499523117484">Potrdite kodo PIN</translation>
 <translation id="662080504995468778">Ostani</translation>
-<translation id="6621639333161417145">Prijava s ponudnikom <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Omrežne povezave ni mogoče vzpostaviti.</translation>
 <translation id="6622980291894852883">Še naprej blokiraj slike</translation>
 <translation id="6624687053722465643">Sladkorček</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 187ca4de..8178c7b 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -3735,7 +3735,6 @@
 <translation id="6619801788773578757">Додајте киоск апликацију</translation>
 <translation id="6619990499523117484">Потврдите PIN</translation>
 <translation id="662080504995468778">Не затварај</translation>
-<translation id="6621639333161417145">Пријавите се на <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Успостављање мрежне везе није успело.</translation>
 <translation id="6622980291894852883">Настави блокирање слика</translation>
 <translation id="6624687053722465643">Слаткиш</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index fe8c250..81dc7bb 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -3737,7 +3737,6 @@
 <translation id="6619801788773578757">Lägg till en kioskapp</translation>
 <translation id="6619990499523117484">Bekräfta pinkoden</translation>
 <translation id="662080504995468778">Stanna kvar</translation>
-<translation id="6621639333161417145">Logga in med <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Det gick inte att upprätta en nätverksanslutning.</translation>
 <translation id="6622980291894852883">Fortsätt att blockera bilder</translation>
 <translation id="6624687053722465643">Sockersöt</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index ab734a0..2deb8fc 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -2001,7 +2001,7 @@
 <translation id="3983586614702900908">vifaa kutoka kwa mchuuzi asiyejulikana</translation>
 <translation id="3984159763196946143">Imeshindwa kuanzisha hali ya onyesho</translation>
 <translation id="3985261842049607969">Weka nakala kwenye Hifadhi ya Google. Rejesha data yako au ubadilishe kifaa kwa urahisi wakati wowote. Nakala unazohifadhi zinajumuisha data ya programu. <ph name="BEGIN_LINK1" />Pata maelezo zaidi<ph name="END_LINK1" /></translation>
-<translation id="3987348946546879621">Data iliyohifadhiwa</translation>
+<translation id="3987348946546879621">Data imeokolewa</translation>
 <translation id="3987938432087324095">Samahani, haikurekodi sauti hiyo.</translation>
 <translation id="3988996860813292272">Chagua saa za eneo</translation>
 <translation id="399179161741278232">Zilizoingizwa</translation>
@@ -3729,7 +3729,6 @@
 <translation id="6619801788773578757">Ongeza programu ya skrini nzima</translation>
 <translation id="6619990499523117484">Thibitisha PIN yako</translation>
 <translation id="662080504995468778">Usiondoke</translation>
-<translation id="6621639333161417145">Ingia katika akaunti ukitumia <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Muunganisho wa mtandao haujatambuliwa.</translation>
 <translation id="6622980291894852883">Endelea kuzuia picha</translation>
 <translation id="6624687053722465643">Utamu</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index cfa0e45b..f042cd783e 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">கியோஸ்க் பயன்பாட்டைச் சேர்</translation>
 <translation id="6619990499523117484">பின்னை உறுதிசெய்யவும்</translation>
 <translation id="662080504995468778">வேண்டாம்</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> மூலம் உள்நுழைக</translation>
 <translation id="6621715389962683284">நெட்வொர்க் இணைப்பை ஏற்படுத்த முடியவில்லை.</translation>
 <translation id="6622980291894852883">படங்களைத் தடுப்பதைத் தொடர்க</translation>
 <translation id="6624687053722465643">ஸ்வீட்னஸ்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 07d51db6..7101fe5 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">కియోస్క్ అప్లికేషన్‌ని జోడించండి</translation>
 <translation id="6619990499523117484">మీ PINను నిర్ధారించండి</translation>
 <translation id="662080504995468778">ఇందులోనే ఉంచు</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" />తో సైన్ ఇన్ చేయండి</translation>
 <translation id="6621715389962683284">నెట్‌వర్క్ కనెక్షన్‌ను ఏర్పాటు చేయడం సాధ్యపడదు.</translation>
 <translation id="6622980291894852883">చిత్రాలను నిరోధించడాన్ని కొనసాగించు</translation>
 <translation id="6624687053722465643">తియ్యదనం</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 40a476f8..93d447b 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">เพิ่มแอปพลิเคชันคีออสก์</translation>
 <translation id="6619990499523117484">ยืนยัน PIN</translation>
 <translation id="662080504995468778">อยู่ต่อ</translation>
-<translation id="6621639333161417145">ลงชื่อเข้าใช้ด้วย <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">ไม่สามารถเริ่มการเชื่อมต่อเครือข่าย</translation>
 <translation id="6622980291894852883">บล็อกการแสดงภาพ</translation>
 <translation id="6624687053722465643">สวีทเนส</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index fe24aae..4a69e6a 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -3739,7 +3739,6 @@
 <translation id="6619801788773578757">Kiosk uygulaması ekle</translation>
 <translation id="6619990499523117484">PIN'inizi onaylayın</translation>
 <translation id="662080504995468778">Kal</translation>
-<translation id="6621639333161417145"><ph name="PROVIDER" /> ile oturum açın</translation>
 <translation id="6621715389962683284">Ağ bağlantısı kurulamıyor.</translation>
 <translation id="6622980291894852883">Görselleri engellemeye devam et</translation>
 <translation id="6624687053722465643">Tatlı</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index cd2edc5..64c941f 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Додати додаток для терміналів</translation>
 <translation id="6619990499523117484">Підтвердьте PIN-код</translation>
 <translation id="662080504995468778">Залишитися</translation>
-<translation id="6621639333161417145">Увійдіть через <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Не вдається встановити з’єднання з мережею.</translation>
 <translation id="6622980291894852883">Продовжити блокування зображень</translation>
 <translation id="6624687053722465643">Смакота</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index ad3fa7a..5690f70 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -3738,7 +3738,6 @@
 <translation id="6619801788773578757">Thêm ứng dụng kiosk</translation>
 <translation id="6619990499523117484">Xác nhận mã PIN của bạn</translation>
 <translation id="662080504995468778">Ở lại</translation>
-<translation id="6621639333161417145">Đăng nhập bằng <ph name="PROVIDER" /></translation>
 <translation id="6621715389962683284">Không thể thiết lập kết nối mạng.</translation>
 <translation id="6622980291894852883">Tiếp tục chặn hình ảnh</translation>
 <translation id="6624687053722465643">Ngọt ngào</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index af021018..ff206a4 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -3724,7 +3724,6 @@
 <translation id="6619801788773578757">添加自助服务终端应用</translation>
 <translation id="6619990499523117484">确认您的 PIN 码</translation>
 <translation id="662080504995468778">留下</translation>
-<translation id="6621639333161417145">通过 <ph name="PROVIDER" /> 登录</translation>
 <translation id="6621715389962683284">无法建立网络连接。</translation>
 <translation id="6622980291894852883">继续拦截图片</translation>
 <translation id="6624687053722465643">杯型蛋糕</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index fe9f0b2..d064e20 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -3735,7 +3735,6 @@
 <translation id="6619801788773578757">新增 Kiosk 應用程式</translation>
 <translation id="6619990499523117484">確認你的 PIN 碼</translation>
 <translation id="662080504995468778">不離開</translation>
-<translation id="6621639333161417145">使用 <ph name="PROVIDER" /> 帳戶登入</translation>
 <translation id="6621715389962683284">無法建立網路連線。</translation>
 <translation id="6622980291894852883">繼續封鎖圖片</translation>
 <translation id="6624687053722465643">小蛋糕</translation>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 672eaca..7faa7f6f2 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4435,6 +4435,11 @@
      flag_descriptions::kUseAngleDescription, kOsWin,
      MULTI_VALUE_TYPE(kUseAngleChoices)},
 #endif
+#if defined(OS_ANDROID)
+    {"android-site-settings-ui", flag_descriptions::kAndroidSiteSettingsUIName,
+     flag_descriptions::kAndroidSiteSettingsUIDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(chrome::android::kAndroidSiteSettingsUI)},
+#endif
 };
 
 class FlagsStateSingleton {
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index f01dbb2..5065047d 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -74,6 +74,7 @@
     &kAndroidPayIntegrationV1,
     &kAndroidPayIntegrationV2,
     &kAndroidPaymentApps,
+    &kAndroidSiteSettingsUI,
     &kAutofillAssistant,
     &kCastDeviceFilter,
     &kCCTBackgroundTab,
@@ -195,6 +196,8 @@
 
 const base::Feature kAndroidPaymentApps{"AndroidPaymentApps",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
+const base::Feature kAndroidSiteSettingsUI{"AndroidSiteSettingsUI",
+                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kAutofillAssistant{"AutofillAssistant",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h
index 52d953c7..cdcc586d 100644
--- a/chrome/browser/android/chrome_feature_list.h
+++ b/chrome/browser/android/chrome_feature_list.h
@@ -16,6 +16,7 @@
 extern const base::Feature kAndroidPayIntegrationV1;
 extern const base::Feature kAndroidPayIntegrationV2;
 extern const base::Feature kAndroidPaymentApps;
+extern const base::Feature kAndroidSiteSettingsUI;
 extern const base::Feature kAutofillAssistant;
 extern const base::Feature kBackgroundTaskComponentUpdate;
 extern const base::Feature kCastDeviceFilter;
diff --git a/chrome/browser/android/download/available_offline_content_provider.cc b/chrome/browser/android/download/available_offline_content_provider.cc
index bcd0e420..6f5bb2d 100644
--- a/chrome/browser/android/download/available_offline_content_provider.cc
+++ b/chrome/browser/android/download/available_offline_content_provider.cc
@@ -14,26 +14,33 @@
 #include "chrome/common/chrome_features.h"
 #include "components/offline_items_collection/core/offline_content_aggregator.h"
 #include "components/offline_items_collection/core/offline_item.h"
+#include "components/offline_items_collection/core/offline_item_state.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "ui/base/l10n/time_format.h"
 
 namespace android {
 using chrome::mojom::AvailableContentType;
 using offline_items_collection::OfflineItem;
+using offline_items_collection::OfflineItemState;
 
 namespace {
-bool ItemHasBeenOpened(const OfflineItem& item) {
-  // Typically, items are initialized with an accessed_time equal to the
-  // creation_time.
-  return !item.last_accessed_time.is_null() &&
-         item.last_accessed_time > item.creation_time;
-}
+
+// Minimum number of interesting offline items required to be available for any
+// content card to be presented in the dino page.
+const int kMinInterestingItemCount = 4;
+// Maximum number of items that should be presented in the list of offline
+// items.
+const int kMaxListItemsToReturn = 3;
+static_assert(
+    kMaxListItemsToReturn <= kMinInterestingItemCount,
+    "The number of items to list must be less or equal to the minimum number "
+    "of items that allow offline content to be presented");
 
 // Returns a value that represents the priority of the content type.
 // Smaller priority values are more important.
 int ContentTypePriority(AvailableContentType type) {
   switch (type) {
-    case AvailableContentType::kPrefetchedUnopenedPage:
+    case AvailableContentType::kPrefetchedPage:
       return 0;
     case AvailableContentType::kVideo:
       return 1;
@@ -48,13 +55,14 @@
 }
 
 AvailableContentType ContentType(const OfflineItem& item) {
+  if (item.is_transient || item.is_off_the_record ||
+      item.state != OfflineItemState::COMPLETE || item.is_dangerous) {
+    return AvailableContentType::kUninteresting;
+  }
   switch (item.filter) {
-    case offline_items_collection::FILTER_PAGE:  // fallthrough
-    case offline_items_collection::FILTER_DOCUMENT:
+    case offline_items_collection::FILTER_PAGE:
       if (item.is_suggested)
-        return ItemHasBeenOpened(item)
-                   ? AvailableContentType::kUninteresting
-                   : AvailableContentType::kPrefetchedUnopenedPage;
+        return AvailableContentType::kPrefetchedPage;
       return AvailableContentType::kOtherPage;
       break;
     case offline_items_collection::FILTER_VIDEO:
@@ -171,7 +179,7 @@
     const GURL& thumbnail_url) {
   return chrome::mojom::AvailableOfflineContent::New(
       item.id.id, item.id.name_space, item.title, item.description,
-      base::UTF16ToASCII(ui::TimeFormat::Simple(
+      base::UTF16ToUTF8(ui::TimeFormat::Simple(
           ui::TimeFormat::FORMAT_ELAPSED, ui::TimeFormat::LENGTH_SHORT,
           base::Time::Now() - item.creation_time)),
       "",  // TODO(crbug.com/852872): Add attribution
@@ -239,20 +247,33 @@
     const std::vector<OfflineItem>& all_items) {
   auto summary = chrome::mojom::AvailableOfflineContentSummary::New();
   summary->total_items = base::saturated_cast<uint32_t>(all_items.size());
+  // Decrement the total item count to find the interesting item count.
+  size_t interesting_items = all_items.size();
   for (const OfflineItem& item : all_items) {
-    if (item.filter == offline_items_collection::FILTER_PAGE) {
-      if (item.is_suggested)
+    switch (ContentType(item)) {
+      case AvailableContentType::kPrefetchedPage:
         summary->has_prefetched_page = true;
-      summary->has_offline_page = true;
-    }
-    if (item.filter == offline_items_collection::FILTER_VIDEO) {
-      summary->has_video = true;
-    }
-    if (item.filter == offline_items_collection::FILTER_AUDIO) {
-      summary->has_audio = true;
+        break;
+      case AvailableContentType::kVideo:
+        summary->has_video = true;
+        break;
+      case AvailableContentType::kAudio:
+        summary->has_audio = true;
+        break;
+      case AvailableContentType::kOtherPage:
+        summary->has_offline_page = true;
+        break;
+      case AvailableContentType::kUninteresting:
+        interesting_items--;
+        break;
     }
   }
   has_prefetched_content_ = summary->has_prefetched_page;
+
+  // If the number of interesting items is lower then the minimum required then
+  // reset all summary data so avoid presenting the card.
+  if (interesting_items < kMinInterestingItemCount)
+    summary = chrome::mojom::AvailableOfflineContentSummary::New();
   std::move(callback).Run(std::move(summary));
 }
 
@@ -261,17 +282,20 @@
     AvailableOfflineContentProvider::ListCallback callback,
     offline_items_collection::OfflineContentAggregator* aggregator,
     const std::vector<OfflineItem>& all_items) {
-  // Save the best 3 or fewer times to |selected|.
-  const int kMaxItemsToReturn = 3;
-  std::vector<OfflineItem> selected(kMaxItemsToReturn);
+  std::vector<OfflineItem> selected(kMinInterestingItemCount);
   const auto end = std::partial_sort_copy(all_items.begin(), all_items.end(),
                                           selected.begin(), selected.end(),
                                           CompareItemsByUsefulness);
-  selected.resize(end - selected.begin());
-
-  while (!selected.empty() &&
-         ContentType(selected.back()) == AvailableContentType::kUninteresting)
-    selected.pop_back();
+  // If the number of interesting items is lower then the minimum don't show any
+  // suggestions. Otherwise trim it down to the number of expected items.
+  size_t copied_count = end - selected.begin();
+  if (copied_count == kMinInterestingItemCount &&
+      ContentType(selected[kMinInterestingItemCount - 1]) !=
+          AvailableContentType::kUninteresting) {
+    selected.resize(kMaxListItemsToReturn);
+  } else {
+    selected.clear();
+  }
 
   std::vector<offline_items_collection::ContentId> selected_ids;
   for (const OfflineItem& item : selected)
diff --git a/chrome/browser/android/download/available_offline_content_provider_unittest.cc b/chrome/browser/android/download/available_offline_content_provider_unittest.cc
index 7c9cc06..f596540 100644
--- a/chrome/browser/android/download/available_offline_content_provider_unittest.cc
+++ b/chrome/browser/android/download/available_offline_content_provider_unittest.cc
@@ -4,6 +4,9 @@
 
 #include "chrome/browser/android/download/available_offline_content_provider.h"
 
+#include <memory>
+#include <utility>
+
 #include "base/bind.h"
 #include "base/strings/string_util.h"
 #include "base/test/bind_test_util.h"
@@ -13,6 +16,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "components/offline_items_collection/core/offline_content_aggregator.h"
 #include "components/offline_items_collection/core/offline_item.h"
+#include "components/offline_items_collection/core/offline_item_state.h"
 #include "components/offline_items_collection/core/test_support/mock_offline_content_provider.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -23,6 +27,9 @@
 namespace {
 
 using offline_items_collection::OfflineContentAggregator;
+using offline_items_collection::OfflineItem;
+using offline_items_collection::OfflineItemState;
+using offline_items_collection::OfflineItemVisuals;
 using testing::_;
 const char kProviderNamespace[] = "offline_pages";
 
@@ -31,31 +38,32 @@
   return std::make_unique<OfflineContentAggregator>();
 }
 
-offline_items_collection::OfflineItem UselessItem() {
-  offline_items_collection::OfflineItem item;
-  item.original_url = GURL("https://useless");
+OfflineItem UninterestingImageItem() {
+  OfflineItem item;
+  item.original_url = GURL("https://uninteresting");
   item.filter = offline_items_collection::FILTER_IMAGE;
-  item.id.id = "Useless";
+  item.id.id = "UninterestingItem";
   item.id.name_space = kProviderNamespace;
   return item;
 }
 
-offline_items_collection::OfflineItem OldOfflinePage() {
-  offline_items_collection::OfflineItem item;
+OfflineItem OfflinePageItem() {
+  OfflineItem item;
   item.original_url = GURL("https://already_read");
   item.filter = offline_items_collection::FILTER_PAGE;
-  item.id.id = "AlreadyRead";
+  item.id.id = "NonSuggestedOfflinePage";
   item.id.name_space = kProviderNamespace;
-  item.is_suggested = true;
+  // Configuring this item as being read to make sure that's not taken into
+  // account for filtering and prioritization.
   item.last_accessed_time = base::Time::Now();
   return item;
 }
 
-offline_items_collection::OfflineItem SuggestedOfflinePageItem() {
-  offline_items_collection::OfflineItem item;
-  item.original_url = GURL("https://page");
+OfflineItem SuggestedOfflinePageItem() {
+  OfflineItem item;
+  item.original_url = GURL("https://read_prefetched_page");
   item.filter = offline_items_collection::FILTER_PAGE;
-  item.id.id = "SuggestedPage";
+  item.id.id = "SuggestedOfflinePage";
   item.id.name_space = kProviderNamespace;
   item.is_suggested = true;
   item.title = "Page Title";
@@ -64,11 +72,14 @@
   // even if the test takes 1 hour to run.
   item.creation_time =
       base::Time::Now() - base::TimeDelta::FromMinutes(60 * 3.5);
+  // Configuring this item as being read to make sure that's not taken into
+  // account for filtering and prioritization.
+  item.last_accessed_time = base::Time::Now();
   return item;
 }
 
-offline_items_collection::OfflineItem VideoItem() {
-  offline_items_collection::OfflineItem item;
+OfflineItem VideoItem() {
+  OfflineItem item;
   item.original_url = GURL("https://video");
   item.filter = offline_items_collection::FILTER_VIDEO;
   item.id.id = "VideoItem";
@@ -76,8 +87,8 @@
   return item;
 }
 
-offline_items_collection::OfflineItem AudioItem() {
-  offline_items_collection::OfflineItem item;
+OfflineItem AudioItem() {
+  OfflineItem item;
   item.original_url = GURL("https://audio");
   item.filter = offline_items_collection::FILTER_AUDIO;
   item.id.id = "AudioItem";
@@ -85,8 +96,32 @@
   return item;
 }
 
-offline_items_collection::OfflineItemVisuals TestThumbnail() {
-  offline_items_collection::OfflineItemVisuals visuals;
+OfflineItem TransientItem() {
+  OfflineItem item = VideoItem();
+  item.is_transient = true;
+  return item;
+}
+
+OfflineItem OffTheRecordItem() {
+  OfflineItem item = VideoItem();
+  item.is_off_the_record = true;
+  return item;
+}
+
+OfflineItem IncompleteItem() {
+  OfflineItem item = VideoItem();
+  item.state = OfflineItemState::PAUSED;
+  return item;
+}
+
+OfflineItem DangerousItem() {
+  OfflineItem item = VideoItem();
+  item.is_dangerous = true;
+  return item;
+}
+
+OfflineItemVisuals TestThumbnail() {
+  OfflineItemVisuals visuals;
   visuals.icon = gfx::test::CreateImage(2, 4);
   return visuals;
 }
@@ -128,6 +163,7 @@
 };
 
 TEST_F(AvailableOfflineContentTest, NoContent) {
+  scoped_feature_list_.InitAndEnableFeature(features::kNewNetErrorPageUI);
   std::vector<chrome::mojom::AvailableOfflineContentPtr> suggestions =
       ListAndWait();
   chrome::mojom::AvailableOfflineContentSummaryPtr summary = SummarizeAndWait();
@@ -140,29 +176,37 @@
   EXPECT_TRUE(suggestions.empty());
 }
 
-TEST_F(AvailableOfflineContentTest, ListAllContentFilteredOut) {
+TEST_F(AvailableOfflineContentTest, TooFewInterestingItems) {
   scoped_feature_list_.InitAndEnableFeature(features::kNewNetErrorPageUI);
-  content_provider_.SetItems({UselessItem(), OldOfflinePage()});
+  // Adds items so that we're one-ff of reaching the minimum required count so
+  // that any extra item considered interesting would effect the results.
+  content_provider_.SetItems({UninterestingImageItem(), OfflinePageItem(),
+                              SuggestedOfflinePageItem(), VideoItem(),
+                              TransientItem(), OffTheRecordItem(),
+                              IncompleteItem(), DangerousItem()});
 
   // Call List() and Summary().
   std::vector<chrome::mojom::AvailableOfflineContentPtr> suggestions =
       ListAndWait();
   chrome::mojom::AvailableOfflineContentSummaryPtr summary = SummarizeAndWait();
 
-  EXPECT_EQ(2u, summary->total_items);
-  EXPECT_TRUE(summary->has_prefetched_page);
-  EXPECT_TRUE(summary->has_offline_page);
+  // As interesting items are below the minimum to show, nothing should be
+  // reported.
+  EXPECT_EQ(0u, summary->total_items);
+  EXPECT_FALSE(summary->has_prefetched_page);
+  EXPECT_FALSE(summary->has_offline_page);
   EXPECT_FALSE(summary->has_video);
   EXPECT_FALSE(summary->has_audio);
 
   EXPECT_TRUE(suggestions.empty());
 }
 
-TEST_F(AvailableOfflineContentTest, ListThreeItems) {
+TEST_F(AvailableOfflineContentTest, FourInterestingItems) {
   scoped_feature_list_.InitAndEnableFeature(features::kNewNetErrorPageUI);
-  content_provider_.SetItems({
-      UselessItem(), VideoItem(), SuggestedOfflinePageItem(), AudioItem(),
-  });
+  // We need at least 4 interesting items for anything to show up at all.
+  content_provider_.SetItems({UninterestingImageItem(), VideoItem(),
+                              SuggestedOfflinePageItem(), AudioItem(),
+                              OfflinePageItem()});
 
   content_provider_.SetVisuals(
       {{SuggestedOfflinePageItem().id, TestThumbnail()}});
@@ -173,7 +217,7 @@
   chrome::mojom::AvailableOfflineContentSummaryPtr summary = SummarizeAndWait();
 
   // Check summary.
-  EXPECT_EQ(4u, summary->total_items);
+  EXPECT_EQ(5u, summary->total_items);
   EXPECT_TRUE(summary->has_prefetched_page);
   EXPECT_TRUE(summary->has_offline_page);
   EXPECT_TRUE(summary->has_video);
@@ -188,8 +232,7 @@
   // For a single suggestion, make sure all the fields are correct. We can
   // assume the other items match.
   const chrome::mojom::AvailableOfflineContentPtr& first = suggestions[0];
-  const offline_items_collection::OfflineItem page_item =
-      SuggestedOfflinePageItem();
+  const OfflineItem page_item = SuggestedOfflinePageItem();
   EXPECT_EQ(page_item.id.id, first->id);
   EXPECT_EQ(page_item.id.name_space, first->name_space);
   EXPECT_EQ(page_item.title, first->title);
diff --git a/chrome/browser/apps/platform_apps/api/BUILD.gn b/chrome/browser/apps/platform_apps/api/BUILD.gn
index bde5f9d..066162a 100644
--- a/chrome/browser/apps/platform_apps/api/BUILD.gn
+++ b/chrome/browser/apps/platform_apps/api/BUILD.gn
@@ -17,6 +17,7 @@
   root_namespace = apps_api_root_namespace
 
   deps = [
+    "//chrome/browser/apps/platform_apps/api",
     "//extensions/browser",
   ]
 }
@@ -43,7 +44,6 @@
     # remove), but any that depend on //chrome/browser:browser can't.
     "//chrome/browser/apps/platform_apps/api/music_manager_private",
     "//chrome/browser/extensions",
-    "//chrome/browser/ui",
     "//chrome/common",
     "//chrome/common/apps/platform_apps/api",
     "//chrome/services/media_gallery_util/public/cpp",
@@ -64,7 +64,6 @@
 
     deps += [
       "//chrome:strings",
-      "//chrome/browser/chromeos",
       "//chromeos/components/proximity_auth",
       "//chromeos/components/proximity_auth/logging",
       "//components/account_id",
@@ -76,5 +75,10 @@
     ]
   }
 
-  visibility = [ "//chrome/browser" ]
+  visibility = [
+    "//chrome/browser",
+    "//chrome/browser/chromeos",
+    "//chrome/browser/ui",
+    ":api_registration",
+  ]
 }
diff --git a/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc b/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc
index 1f208ec..d8e40dc9d 100644
--- a/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc
+++ b/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc
@@ -11,15 +11,14 @@
 #include "chrome/browser/browsing_data/counters/signin_data_counter.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/account_consistency_mode_manager.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/browsing_data/core/pref_names.h"
 #include "components/prefs/pref_service.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-#include "components/signin/core/browser/signin_manager.h"
 #include "components/strings/grit/components_strings.h"
+#include "services/identity/public/cpp/identity_manager.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/text/bytes_formatting.h"
 
@@ -48,11 +47,13 @@
 
 bool ShouldShowCookieException(Profile* profile) {
   if (AccountConsistencyModeManager::IsMirrorEnabledForProfile(profile)) {
-    auto* signin_manager = SigninManagerFactory::GetForProfile(profile);
-    return signin_manager->IsAuthenticated();
+    auto* identity_manager = IdentityManagerFactory::GetForProfile(profile);
+    return identity_manager->HasPrimaryAccount();
   }
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
   if (AccountConsistencyModeManager::IsDiceEnabledForProfile(profile)) {
+    // TODO(http://crbug.com/890796): Migrate this part once sync_ui_util has
+    // been migrated to the IdentityManager.
     sync_ui_util::MessageType sync_status = sync_ui_util::GetStatus(
         profile, ProfileSyncServiceFactory::GetForProfile(profile),
         *SigninManagerFactory::GetForProfile(profile));
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index b160893c..f2d4129 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -61,6 +61,7 @@
     "//chrome/app/vector_icons",
     "//chrome/browser/apps/foundation/app_service:lib",
     "//chrome/browser/apps/platform_apps",
+    "//chrome/browser/apps/platform_apps/api",
     "//chrome/browser/chromeos/android_sms:android_sms_urls",
     "//chrome/browser/chromeos/power/ml:user_activity_ukm_logger_helpers",
     "//chrome/browser/chromeos/power/ml/smart_dim",
@@ -256,6 +257,7 @@
 
   allow_circular_includes_from = [
     "//chrome/browser/extensions",
+    "//chrome/browser/apps/platform_apps/api",
     "//chrome/browser/web_applications/bookmark_apps",
   ]
 
diff --git a/chrome/browser/chromeos/base/locale_util.cc b/chrome/browser/chromeos/base/locale_util.cc
index aba8c11b..aace281 100644
--- a/chrome/browser/chromeos/base/locale_util.cc
+++ b/chrome/browser/chromeos/base/locale_util.cc
@@ -12,7 +12,9 @@
 #include "chrome/browser/chromeos/login/session/user_session_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
+#include "components/language/core/common/locale_util.h"
 #include "components/prefs/pref_service.h"
+#include "components/translate/core/browser/translate_prefs.h"
 #include "content/public/browser/browser_thread.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
 #include "ui/base/ime/chromeos/input_method_util.h"
@@ -62,13 +64,6 @@
   if (data->result.success) {
     g_browser_process->SetApplicationLocale(data->result.loaded_locale);
 
-    // If the language switch was triggered by enterprise policy, it is possible
-    // that the locale is not in the user's list of preferred languages yet,
-    // which would lead to an inconsistent state in the settings UI. Make sure
-    // to add it in that case.
-    locale_util::AddLocaleToPreferredLanguages(data->result.loaded_locale,
-                                               data->profile->GetPrefs());
-
     if (data->enable_locale_keyboard_layouts) {
       input_method::InputMethodManager* manager =
           input_method::InputMethodManager::Get();
@@ -110,11 +105,20 @@
     data->callback.Run(data->result);
 }
 
+// Get parsed list of preferred languages from the 'kLanguagePreferredLanguages'
+// setting.
+std::vector<std::string> GetPreferredLanguagesList(const PrefService* prefs) {
+  std::string preferred_languages_string =
+      prefs->GetString(prefs::kLanguagePreferredLanguages);
+  return base::SplitString(preferred_languages_string, ",",
+                           base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+}
+
 }  // namespace
 
 namespace locale_util {
 
-constexpr const char* kAllowedUILocalesFallbackLocale = "en-US";
+constexpr const char* kAllowedUILanguageFallback = "en-US";
 
 LanguageSwitchResult::LanguageSwitchResult(const std::string& requested_locale,
                                            const std::string& loaded_locale,
@@ -140,56 +144,90 @@
       base::Bind(&FinishSwitchLanguage, base::Passed(std::move(data))));
 }
 
-bool IsAllowedUILocale(const std::string& locale, const PrefService* prefs) {
-  const base::Value::ListStorage& allowed_ui_locales =
-      prefs->GetList(prefs::kAllowedUILocales)->GetList();
+bool IsAllowedLanguage(const std::string& language, const PrefService* prefs) {
+  const base::Value::ListStorage& allowed_languages =
+      prefs->GetList(prefs::kAllowedLanguages)->GetList();
 
-  // Empty list means all locales are allowed.
-  if (allowed_ui_locales.empty())
+  // Empty list means all languages are allowed.
+  if (allowed_languages.empty())
     return true;
 
-  // Only locale codes with native UI support can be allowed.
-  if (!IsNativeUILocale(locale))
-    return false;
-
   // Check if locale is in list of allowed UI locales.
-  return base::ContainsValue(allowed_ui_locales, base::Value(locale));
+  return base::ContainsValue(allowed_languages, base::Value(language));
 }
 
-bool IsNativeUILocale(const std::string& locale) {
+bool IsAllowedUILanguage(const std::string& language,
+                         const PrefService* prefs) {
+  return IsAllowedLanguage(language, prefs) && IsNativeUILanguage(language);
+}
+
+bool IsNativeUILanguage(const std::string& locale) {
   std::string resolved_locale;
+
+  // The locale is supported as a UI language
   if (l10n_util::CheckAndResolveLocale(locale, &resolved_locale) &&
       locale == resolved_locale) {
     return true;
   }
 
+  // The locale can be converted to a UI locale
+  if (base::FeatureList::IsEnabled(translate::kRegionalLocalesAsDisplayUI) &&
+      language::ConvertToActualUILocale(&resolved_locale)) {
+    return true;
+  }
+
   return false;
 }
 
-std::string GetAllowedFallbackUILocale(const PrefService* prefs) {
+void RemoveDisallowedLanguagesFromPreferred(PrefService* prefs) {
+  // Do nothing if all languages are allowed
+  if (prefs->GetList(prefs::kAllowedLanguages)->GetList().empty())
+    return;
+
+  std::vector<std::string> preferred_languages =
+      GetPreferredLanguagesList(prefs);
+  std::vector<std::string> updated_preferred_languages;
+  bool have_ui_language = false;
+  for (const std::string& language : preferred_languages) {
+    if (IsAllowedLanguage(language, prefs)) {
+      updated_preferred_languages.push_back(language);
+      if (IsNativeUILanguage(language))
+        have_ui_language = true;
+    }
+  }
+  if (!have_ui_language)
+    updated_preferred_languages.push_back(GetAllowedFallbackUILanguage(prefs));
+
+  // Do not set setting if it did not change to not cause the update callback
+  if (preferred_languages != updated_preferred_languages) {
+    prefs->SetString(prefs::kLanguagePreferredLanguages,
+                     base::JoinString(updated_preferred_languages, ","));
+  }
+}
+
+std::string GetAllowedFallbackUILanguage(const PrefService* prefs) {
   // Check the user's preferred languages if one of them is an allowed UI
   // locale.
   std::string preferred_languages_string =
       prefs->GetString(prefs::kLanguagePreferredLanguages);
   std::vector<std::string> preferred_languages =
-      base::SplitString(preferred_languages_string, ",", base::TRIM_WHITESPACE,
-                        base::SPLIT_WANT_NONEMPTY);
+      GetPreferredLanguagesList(prefs);
   for (const std::string& language : preferred_languages) {
-    if (IsAllowedUILocale(language, prefs))
+    if (IsAllowedUILanguage(language, prefs))
       return language;
   }
 
   // Check the allowed UI locales and return the first valid entry.
-  const base::Value::ListStorage& allowed_ui_locales =
-      prefs->GetList(prefs::kAllowedUILocales)->GetList();
-  for (const base::Value& value : allowed_ui_locales) {
+  const base::Value::ListStorage& allowed_languages =
+      prefs->GetList(prefs::kAllowedLanguages)->GetList();
+  for (const base::Value& value : allowed_languages) {
     const std::string& locale = value.GetString();
-    if (IsAllowedUILocale(locale, prefs))
+    if (IsAllowedUILanguage(locale, prefs))
       return locale;
   }
 
   // default fallback
-  return kAllowedUILocalesFallbackLocale;
+  return kAllowedUILanguageFallback;
 }
 
 bool AddLocaleToPreferredLanguages(const std::string& locale,
diff --git a/chrome/browser/chromeos/base/locale_util.h b/chrome/browser/chromeos/base/locale_util.h
index 2d01fac..fdb6cc1 100644
--- a/chrome/browser/chromeos/base/locale_util.h
+++ b/chrome/browser/chromeos/base/locale_util.h
@@ -52,23 +52,40 @@
                     const SwitchLanguageCallback& callback,
                     Profile* profile);
 
-// This function checks if the given locale is allowed according to the list of
-// allowed UI locales (stored in |prefs|, managed by 'AllowedUILocales'
-// policy). If the list is empty, every locale is allowed.
-bool IsAllowedUILocale(const std::string& locale, const PrefService* prefs);
+// This function checks if the given language is allowed according to the list
+// of allowed languages (stored in |prefs|, managed by 'AllowedLanguages'
+// policy). If the list is empty, every language is allowed.
+bool IsAllowedLanguage(const std::string& language, const PrefService* prefs);
 
-// This functions checks if the given locale is a native UI locale (e.g.,
-// 'en-US', 'en-GB', 'fr', etc. are all valid, but 'en', 'en-WS' or 'fr-CH' are
-// not)
-bool IsNativeUILocale(const std::string& locale);
+// This function checks if the given language is allowed
+// by 'AllowedLanguages' and also can be used as a UI locale.
+// (see |IsAllowedLanguage|).
+bool IsAllowedUILanguage(const std::string& language, const PrefService* prefs);
 
-// This function returns an allowed UI locale based on the list of allowed UI
-// locales (stored in |prefs|, managed by 'AllowedUILocales' policy). If none of
-// the user's preferred languages is an allowed UI locale, the function returns
-// the first valid entry in the allowed UI locales list. If the list contains no
-// valid entries, the default fallback will be 'en-US'
-// (kAllowedUILocalesFallbackLocale);
-std::string GetAllowedFallbackUILocale(const PrefService* prefs);
+// This functions checks if the given language is a native UI language or can be
+// converted to one. (e.g., 'en-US', 'fr', 'de', 'de-CH', 'fr-CH' etc. are all
+// valid, but 'az' is not.
+bool IsNativeUILanguage(const std::string& locale);
+
+// This function removes languages that are disallowed by the
+// 'AllowedLanguages' policy from the list of preferred languages.
+// If no current preferred languages are allowed, this functions sets
+// a language provided by GetAllowedFallbackLanguage() as the only preferred
+// language.
+void RemoveDisallowedLanguagesFromPreferred(PrefService* prefs);
+
+// This function returns a fallback language that is allowed by the
+// 'AllowedLanguages' policy and can be used as a UI language
+// (see |IsNativeUILanguage|) as well. We check the user's preferred language
+// for any of these conditions. If none of them match, we will take the first
+// valid UI language in the list of allowed languages. If none of them are UI
+// languages, we default to "en-US" (see kAllowedUILanguageFallback).
+// languages (stored in |prefs|, managed by 'AllowedLanguages' policy). If none
+// of the user's preferred languages is allowed, the function returns the first
+// valid entry in the allowed languages list. If the list contains no valid
+// entries, the default fallback will be 'en-US'
+// (kAllowedLanguagesFallbackLocale);
+std::string GetAllowedFallbackUILanguage(const PrefService* prefs);
 
 // This function adds the |locale| to the list of preferred languages (pref
 // |kLanguagePreferredLanguages|). Returns true if the locale was newly added
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
index f87dd0ff..67f487b 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -388,6 +388,10 @@
                       TestCase("openQuickView").TabletMode(),
                       TestCase("openQuickViewImage"),
                       TestCase("openQuickViewVideo"),
+// QuickView PDF test fails on MSAN, crbug.com/768070 crbug.com/891150
+#if !defined(MEMORY_SANITIZER)
+                      TestCase("openQuickViewPdf"),
+#endif
                       TestCase("openQuickViewScrollText"),
                       TestCase("openQuickViewScrollHtml"),
                       TestCase("openQuickViewBackgroundColorText"),
diff --git a/chrome/browser/chromeos/locale_change_guard.cc b/chrome/browser/chromeos/locale_change_guard.cc
index 8e1dae9..d5a76b3a 100644
--- a/chrome/browser/chromeos/locale_change_guard.cc
+++ b/chrome/browser/chromeos/locale_change_guard.cc
@@ -168,7 +168,7 @@
 
     // Ensure that synchronization does not change the locale to a value not
     // allowed by enterprise policy.
-    if (!chromeos::locale_util::IsAllowedUILocale(to_locale, prefs))
+    if (!chromeos::locale_util::IsAllowedUILanguage(to_locale, prefs))
       prefs->SetString(language::prefs::kApplicationLocale, cur_locale);
     return;
   }
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index a43c475..158261f 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -244,13 +244,13 @@
       input_method_ids, &candidates);
   for (size_t i = 0; i < candidates.size(); ++i) {
     const std::string& candidate = candidates[i];
-    // Skip if it's already in language_codes.
+    // Add a candidate if it's not yet in language_codes and is allowed.
     if (std::count(language_codes.begin(), language_codes.end(), candidate) ==
-        0) {
+            0 &&
+        locale_util::IsAllowedLanguage(candidate, prefs)) {
       language_codes.push_back(candidate);
     }
   }
-
   // Save the preferred languages in the user's preferences.
   prefs->SetString(prefs::kLanguagePreferredLanguages,
                    base::JoinString(language_codes, ","));
@@ -785,7 +785,7 @@
   if (user_manager->GetLoggedInUsers().size() != 1)
     return false;
 
-  const PrefService* prefs = profile->GetPrefs();
+  PrefService* prefs = profile->GetPrefs();
   if (prefs == NULL)
     return false;
 
@@ -801,7 +801,7 @@
 
   const std::string* account_locale = NULL;
   if (pref_locale.empty() && user->has_gaia_account() &&
-      prefs->GetList(prefs::kAllowedUILocales)->GetList().empty()) {
+      prefs->GetList(prefs::kAllowedLanguages)->GetList().empty()) {
     if (user->GetAccountLocale() == NULL)
       return false;  // wait until Account profile is loaded.
     account_locale = user->GetAccountLocale();
@@ -826,9 +826,9 @@
           ? Profile::APP_LOCALE_CHANGED_VIA_PUBLIC_SESSION_LOGIN
           : Profile::APP_LOCALE_CHANGED_VIA_LOGIN;
 
-  // check if pref_locale is allowed by policy (AllowedUILocales)
-  if (!chromeos::locale_util::IsAllowedUILocale(pref_locale, prefs)) {
-    pref_locale = chromeos::locale_util::GetAllowedFallbackUILocale(prefs);
+  // check if pref_locale is allowed by policy (AllowedLanguages)
+  if (!chromeos::locale_util::IsAllowedUILanguage(pref_locale, prefs)) {
+    pref_locale = chromeos::locale_util::GetAllowedFallbackUILanguage(prefs);
     app_locale_changed_via = Profile::APP_LOCALE_CHANGED_VIA_POLICY;
   }
 
diff --git a/chrome/browser/chromeos/oauth2_token_service_delegate.cc b/chrome/browser/chromeos/oauth2_token_service_delegate.cc
index 3a4197b..3e02ede 100644
--- a/chrome/browser/chromeos/oauth2_token_service_delegate.cc
+++ b/chrome/browser/chromeos/oauth2_token_service_delegate.cc
@@ -105,7 +105,7 @@
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
     OAuth2AccessTokenConsumer* consumer) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state_);
+  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state());
 
   ValidateAccountId(account_id);
 
@@ -139,7 +139,7 @@
 
 bool ChromeOSOAuth2TokenServiceDelegate::RefreshTokenIsAvailable(
     const std::string& account_id) const {
-  if (load_credentials_state_ != LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS) {
+  if (load_credentials_state() != LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS) {
     return false;
   }
 
@@ -192,7 +192,7 @@
 
 std::vector<std::string> ChromeOSOAuth2TokenServiceDelegate::GetAccounts() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state_);
+  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state());
 
   std::vector<std::string> accounts;
   for (auto& account_key : account_keys_) {
@@ -210,11 +210,11 @@
     const std::string& primary_account_id) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (load_credentials_state_ != LOAD_CREDENTIALS_NOT_STARTED) {
+  if (load_credentials_state() != LOAD_CREDENTIALS_NOT_STARTED) {
     return;
   }
 
-  load_credentials_state_ = LOAD_CREDENTIALS_IN_PROGRESS;
+  set_load_credentials_state(LOAD_CREDENTIALS_IN_PROGRESS);
 
   DCHECK(account_manager_);
   account_manager_->AddObserver(this);
@@ -227,7 +227,7 @@
     const std::string& account_id,
     const std::string& refresh_token) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state_);
+  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state());
   DCHECK(!account_id.empty());
   DCHECK(!refresh_token.empty());
 
@@ -246,21 +246,16 @@
   return account_manager_->GetUrlLoaderFactory();
 }
 
-OAuth2TokenServiceDelegate::LoadCredentialsState
-ChromeOSOAuth2TokenServiceDelegate::GetLoadCredentialsState() const {
-  return load_credentials_state_;
-}
-
 void ChromeOSOAuth2TokenServiceDelegate::GetAccountsCallback(
     std::vector<AccountManager::AccountKey> account_keys) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // This callback should only be triggered during |LoadCredentials|, which
-  // implies that |load_credentials_state_| should in
+  // implies that |load_credentials_state())| should in
   // |LOAD_CREDENTIALS_IN_PROGRESS| state.
-  DCHECK_EQ(LOAD_CREDENTIALS_IN_PROGRESS, load_credentials_state_);
+  DCHECK_EQ(LOAD_CREDENTIALS_IN_PROGRESS, load_credentials_state());
 
-  load_credentials_state_ = LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS;
+  set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
 
   // The typical order of |OAuth2TokenService::Observer| callbacks is:
   // 1. OnStartBatchChanges
@@ -304,7 +299,7 @@
 void ChromeOSOAuth2TokenServiceDelegate::OnAccountRemoved(
     const AccountManager::AccountKey& account_key) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state_);
+  DCHECK_EQ(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS, load_credentials_state());
 
   auto it = account_keys_.find(account_key);
   if (it == account_keys_.end()) {
diff --git a/chrome/browser/chromeos/oauth2_token_service_delegate.h b/chrome/browser/chromeos/oauth2_token_service_delegate.h
index a0688d75a..ce5907d 100644
--- a/chrome/browser/chromeos/oauth2_token_service_delegate.h
+++ b/chrome/browser/chromeos/oauth2_token_service_delegate.h
@@ -57,7 +57,6 @@
                          const std::string& refresh_token) override;
   scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory()
       const override;
-  LoadCredentialsState GetLoadCredentialsState() const override;
   void RevokeCredentials(const std::string& account_id) override;
   void RevokeAllCredentials() override;
   const net::BackoffEntry* BackoffEntry() const override;
@@ -85,9 +84,6 @@
   void GetAccountsCallback(
       std::vector<AccountManager::AccountKey> account_keys);
 
-  LoadCredentialsState load_credentials_state_ =
-      LoadCredentialsState::LOAD_CREDENTIALS_NOT_STARTED;
-
   std::unique_ptr<AccountMapperUtil> account_mapper_util_;
 
   // A non-owning pointer to |AccountManager|. |AccountManager| is available
diff --git a/chrome/browser/chromeos/oauth2_token_service_delegate_unittest.cc b/chrome/browser/chromeos/oauth2_token_service_delegate_unittest.cc
index b47d993..8ebba45e 100644
--- a/chrome/browser/chromeos/oauth2_token_service_delegate_unittest.cc
+++ b/chrome/browser/chromeos/oauth2_token_service_delegate_unittest.cc
@@ -227,7 +227,7 @@
 TEST_F(CrOSOAuthDelegateTest, RefreshTokenIsAvailableForGaiaAccounts) {
   EXPECT_EQ(OAuth2TokenServiceDelegate::LoadCredentialsState::
                 LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            delegate_->GetLoadCredentialsState());
+            delegate_->load_credentials_state());
 
   EXPECT_FALSE(delegate_->RefreshTokenIsAvailable(account_info_.account_id));
 
diff --git a/chrome/browser/chromeos/policy/active_directory_policy_manager.cc b/chrome/browser/chromeos/policy/active_directory_policy_manager.cc
index dbf7c60..793538d 100644
--- a/chrome/browser/chromeos/policy/active_directory_policy_manager.cc
+++ b/chrome/browser/chromeos/policy/active_directory_policy_manager.cc
@@ -30,7 +30,7 @@
 namespace policy {
 namespace {
 
-// List of policies where variables like ${machine_name} should be expanded.
+// List of policies where variables like ${MACHINE_NAME} should be expanded.
 constexpr const char* kPoliciesToExpand[] = {key::kNativePrinters};
 
 // Fetch policy every 90 minutes which matches the Windows default:
@@ -173,7 +173,7 @@
   policy_map.SetSourceForAll(POLICY_SOURCE_ACTIVE_DIRECTORY);
   SetEnterpriseUsersDefaults(&policy_map);
 
-  // Expand e.g. ${machine_name} for a selected set of policies.
+  // Expand e.g. ${MACHINE_NAME} for a selected set of policies.
   ExpandVariables(&policy_map);
 
   // Policy is ready, send it off.
@@ -224,8 +224,11 @@
     return;
   }
 
+  // TODO(rsorokin): remove "machine_name" in M72 (see
+  // https://crbug.com/875876).
   chromeos::VariableExpander expander(
-      {{"machine_name", policy->machine_name()}});
+      {{"MACHINE_NAME", policy->machine_name()},
+       {"machine_name", policy->machine_name()}});
   for (const char* policy_name : kPoliciesToExpand) {
     base::Value* value = policy_map->GetMutableValue(policy_name);
     if (value) {
diff --git a/chrome/browser/chromeos/policy/active_directory_policy_manager.h b/chrome/browser/chromeos/policy/active_directory_policy_manager.h
index ccaac42..f44090c 100644
--- a/chrome/browser/chromeos/policy/active_directory_policy_manager.h
+++ b/chrome/browser/chromeos/policy/active_directory_policy_manager.h
@@ -101,7 +101,7 @@
   // the policy, the store needs to be reloaded from session manager.)
   void OnPolicyFetched(bool success);
 
-  // Called right before policy is published. Expands e.g. ${machine_name} for
+  // Called right before policy is published. Expands e.g. ${MACHINE_NAME} for
   // a selected set of policies.
   void ExpandVariables(PolicyMap* policy_map);
 
diff --git a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc
index 50eecc8..8454ae2 100644
--- a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc
+++ b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc
@@ -277,6 +277,13 @@
   return std::string();
 }
 
+std::string BrowserPolicyConnectorChromeOS::GetMachineName() const {
+  const em::PolicyData* policy = GetDevicePolicy();
+  if (policy && policy->has_machine_name())
+    return policy->machine_name();
+  return std::string();
+}
+
 std::string BrowserPolicyConnectorChromeOS::GetDeviceAnnotatedLocation() const {
   const em::PolicyData* policy = GetDevicePolicy();
   if (policy && policy->has_annotated_location())
diff --git a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h
index 6efe825..f899f6c 100644
--- a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h
+++ b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h
@@ -96,6 +96,9 @@
   // Returns the device asset ID if it is set.
   std::string GetDeviceAssetID() const;
 
+  // Returns the machine name if it is set.
+  std::string GetMachineName() const;
+
   // Returns the device annotated location if it is set.
   std::string GetDeviceAnnotatedLocation() const;
 
diff --git a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos_browsertest.cc b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos_browsertest.cc
index d5ff7c9..bf14bea 100644
--- a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos_browsertest.cc
+++ b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos_browsertest.cc
@@ -21,6 +21,7 @@
 namespace policy {
 
 const char kCustomDisplayDomain[] = "acme.corp";
+const char kMachineName[] = "machine_name";
 
 void WaitUntilPolicyLoaded() {
   BrowserPolicyConnectorChromeOS* connector =
@@ -76,4 +77,18 @@
   EXPECT_EQ(MarketSegment::EDUCATION, connector->GetEnterpriseMarketSegment());
 }
 
+// Test that GetEnterpriseEnrollmentDomain and GetEnterpriseDisplayDomain work
+// as expected.
+IN_PROC_BROWSER_TEST_F(BrowserPolicyConnectorChromeOSTest, MachineName) {
+  BrowserPolicyConnectorChromeOS* connector =
+      g_browser_process->platform_part()->browser_policy_connector_chromeos();
+  EXPECT_EQ(std::string(), connector->GetMachineName());
+  device_policy()->policy_data().set_machine_name(kMachineName);
+  RefreshDevicePolicy();
+  WaitUntilPolicyLoaded();
+  // At this point custom display domain is set and policy is loaded so expect
+  // to see the custom display domain.
+  EXPECT_EQ(kMachineName, connector->GetMachineName());
+}
+
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/hostname_handler.cc b/chrome/browser/chromeos/policy/hostname_handler.cc
index a1dd977..19e8c5d 100644
--- a/chrome/browser/chromeos/policy/hostname_handler.cc
+++ b/chrome/browser/chromeos/policy/hostname_handler.cc
@@ -19,6 +19,7 @@
 namespace {
 
 constexpr char kAssetIDPlaceholder[] = "${ASSET_ID}";
+constexpr char kMachineNamePlaceholder[] = "${MACHINE_NAME}";
 constexpr char kSerialNumPlaceholder[] = "${SERIAL_NUM}";
 constexpr char kMACAddressPlaceholder[] = "${MAC_ADDR}";
 
@@ -71,11 +72,14 @@
 std::string HostnameHandler::FormatHostname(const std::string& name_template,
                                             const std::string& asset_id,
                                             const std::string& serial,
-                                            const std::string& mac) {
+                                            const std::string& mac,
+                                            const std::string& machine_name) {
   std::string result = name_template;
   base::ReplaceSubstringsAfterOffset(&result, 0, kAssetIDPlaceholder, asset_id);
   base::ReplaceSubstringsAfterOffset(&result, 0, kSerialNumPlaceholder, serial);
   base::ReplaceSubstringsAfterOffset(&result, 0, kMACAddressPlaceholder, mac);
+  base::ReplaceSubstringsAfterOffset(&result, 0, kMachineNamePlaceholder,
+                                     machine_name);
 
   if (!IsValidHostname(result))
     return std::string();
@@ -116,6 +120,10 @@
                                    ->browser_policy_connector_chromeos()
                                    ->GetDeviceAssetID();
 
+  const std::string machine_name = g_browser_process->platform_part()
+                                       ->browser_policy_connector_chromeos()
+                                       ->GetMachineName();
+
   chromeos::NetworkStateHandler* handler =
       chromeos::NetworkHandler::Get()->network_state_handler();
 
@@ -131,7 +139,7 @@
   }
 
   handler->SetHostname(
-      FormatHostname(hostname_template, asset_id, serial, mac));
+      FormatHostname(hostname_template, asset_id, serial, mac, machine_name));
 }
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/hostname_handler.h b/chrome/browser/chromeos/policy/hostname_handler.h
index f7b7d52b..1b18e46 100644
--- a/chrome/browser/chromeos/policy/hostname_handler.h
+++ b/chrome/browser/chromeos/policy/hostname_handler.h
@@ -37,7 +37,8 @@
   static std::string FormatHostname(const std::string& name_template,
                                     const std::string& asset_id,
                                     const std::string& serial,
-                                    const std::string& mac);
+                                    const std::string& mac,
+                                    const std::string& machine_name);
 
   void OnDeviceHostnamePropertyChanged();
 
diff --git a/chrome/browser/chromeos/policy/hostname_handler_unittest.cc b/chrome/browser/chromeos/policy/hostname_handler_unittest.cc
index 06dc55f..13a26fa 100644
--- a/chrome/browser/chromeos/policy/hostname_handler_unittest.cc
+++ b/chrome/browser/chromeos/policy/hostname_handler_unittest.cc
@@ -16,68 +16,78 @@
                        const std::string& name_template,
                        const std::string& asset_id,
                        const std::string& serial,
-                       const std::string& mac) {
-    auto result =
-        HostnameHandler::FormatHostname(name_template, asset_id, serial, mac);
+                       const std::string& mac,
+                       const std::string& machine_name) {
+    auto result = HostnameHandler::FormatHostname(name_template, asset_id,
+                                                  serial, mac, machine_name);
     ASSERT_EQ(expected, result);
   }
 };
 
 TEST_F(HostnameHandlerTest, Basic) {
-  formatAndAssert("name", "name", "asset123", "SER1AL123", "0000deadbeef");
+  formatAndAssert("name", "name", "asset123", "SER1AL123", "0000deadbeef",
+                  "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, SubstituteValidAssetId) {
   formatAndAssert("chromebook-asset123", "chromebook-${ASSET_ID}", "asset123",
-                  "SER1AL123", "0000deadbeef");
+                  "SER1AL123", "0000deadbeef", "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, SubstituteValidSerial) {
   formatAndAssert("chromebook-SER1AL123", "chromebook-${SERIAL_NUM}",
-                  "asset123", "SER1AL123", "0000deadbeef");
+                  "asset123", "SER1AL123", "0000deadbeef", "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, SubstituteValidMAC) {
   formatAndAssert("chromebook-0000deadbeef", "chromebook-${MAC_ADDR}",
-                  "asset123", "SER1AL123", "0000deadbeef");
+                  "asset123", "SER1AL123", "0000deadbeef", "chrome_machine");
+}
+
+TEST_F(HostnameHandlerTest, SubstituteMachineName) {
+  formatAndAssert("chromebook-chrome_machine", "chromebook-${MACHINE_NAME}",
+                  "asset123", "SER1AL123", "0000deadbeef", "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, MixedSubstitution) {
-  formatAndAssert("chromebook-0000deadbeef-SER1AL123-asset123",
-                  "chromebook-${MAC_ADDR}-${SERIAL_NUM}-${ASSET_ID}",
-                  "asset123", "SER1AL123", "0000deadbeef");
+  formatAndAssert(
+      "chromebook-0000deadbeef-SER1AL123-asset123-chrome_machine",
+      "chromebook-${MAC_ADDR}-${SERIAL_NUM}-${ASSET_ID}-${MACHINE_NAME}",
+      "asset123", "SER1AL123", "0000deadbeef", "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, MultipleSubstitution) {
   formatAndAssert("chromebook-asset123-asset123-asset123",
                   "chromebook-${ASSET_ID}-${ASSET_ID}-${ASSET_ID}", "asset123",
-                  "SER1AL123", "0000deadbeef");
+                  "SER1AL123", "0000deadbeef", "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, SubstituteInvalidSerial) {
   formatAndAssert("", "chromebook-${SERIAL_NUM}", "asset123", "Serial number",
-                  "0000deadbeef");
+                  "0000deadbeef", "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, IncorrectTemplateVariable) {
   formatAndAssert("", "chromebook-${SERIAL_NUMBER}", "asset123", "SERIAL123",
-                  "0000deadbeef");
+                  "0000deadbeef", "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, InvalidFirstCharacter) {
-  formatAndAssert("", "-somename", "asset123", "Serial number", "0000deadbeef");
+  formatAndAssert("", "-somename", "asset123", "Serial number", "0000deadbeef",
+                  "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, HostnameTooLong) {
   formatAndAssert("", "${ASSET_ID}${ASSET_ID}${ASSET_ID}",
-                  "1234567890123456789012345678901", "serial", "0000deadbeef");
+                  "1234567890123456789012345678901", "serial", "0000deadbeef",
+                  "chrome_machine");
 }
 
 TEST_F(HostnameHandlerTest, HostnameExactly63Chars) {
   formatAndAssert(
       "1234567890123456789012345678901-1234567890123456789012345678901",
       "${ASSET_ID}-${ASSET_ID}", "1234567890123456789012345678901", "serial",
-      "0000deadbeef");
+      "0000deadbeef", "chrome_machine");
 }
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
index 0aeed73..fe6abec 100644
--- a/chrome/browser/chromeos/preferences.cc
+++ b/chrome/browser/chromeos/preferences.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
+#include "chrome/browser/chromeos/base/locale_util.h"
 #include "chrome/browser/chromeos/drive/file_system_util.h"
 #include "chrome/browser/chromeos/input_method/input_method_syncer.h"
 #include "chrome/browser/chromeos/login/session/user_session_manager.h"
@@ -324,6 +325,8 @@
   registry->RegisterStringPref(prefs::kLanguagePreviousInputMethod, "");
   registry->RegisterListPref(prefs::kLanguageAllowedInputMethods,
                              std::make_unique<base::ListValue>());
+  registry->RegisterListPref(prefs::kAllowedLanguages,
+                             std::make_unique<base::ListValue>());
   registry->RegisterStringPref(prefs::kLanguagePreferredLanguages,
                                kFallbackInputMethodLocale);
   registry->RegisterStringPref(prefs::kLanguagePreloadEngines,
@@ -539,6 +542,9 @@
                               prefs, callback);
   allowed_input_methods_.Init(prefs::kLanguageAllowedInputMethods, prefs,
                               callback);
+  allowed_languages_.Init(prefs::kAllowedLanguages, prefs, callback);
+  preferred_languages_.Init(prefs::kLanguagePreferredLanguages, prefs,
+                            callback);
   ime_menu_activated_.Init(prefs::kLanguageImeMenuActivated, prefs, callback);
   // Notifies the system tray to remove the IME items.
   if (base::FeatureList::IsEnabled(features::kOptInImeMenu) &&
@@ -809,6 +815,15 @@
           base::JoinString(ime_state_->GetActiveInputMethodIds(), ","));
     }
   }
+  if (reason != REASON_PREF_CHANGED || pref_name == prefs::kAllowedLanguages)
+    locale_util::RemoveDisallowedLanguagesFromPreferred(prefs_);
+
+  if (reason != REASON_PREF_CHANGED ||
+      pref_name == prefs::kLanguagePreferredLanguages) {
+    // In case setting has been changed with sync it can contain disallowed
+    // values.
+    locale_util::RemoveDisallowedLanguagesFromPreferred(prefs_);
+  }
 
   if (reason == REASON_INITIALIZATION)
     SetInputMethodList();
diff --git a/chrome/browser/chromeos/preferences.h b/chrome/browser/chromeos/preferences.h
index 931d0d5..5b5f683b 100644
--- a/chrome/browser/chromeos/preferences.h
+++ b/chrome/browser/chromeos/preferences.h
@@ -127,6 +127,9 @@
   BooleanPrefMember mouse_reverse_scroll_;
   FilePathPrefMember download_default_directory_;
 
+  StringListPrefMember allowed_languages_;
+  StringPrefMember preferred_languages_;
+
   // Input method preferences.
   StringPrefMember preload_engines_;
   StringPrefMember current_input_method_;
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
index 19df435..804e993 100644
--- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
+++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
@@ -87,13 +87,14 @@
 }
 
 // Returns the set of allowed UI locales.
-std::unordered_set<std::string> GetAllowedUILocales(PrefService* prefs) {
-  std::unordered_set<std::string> allowed_ui_locales;
+std::unordered_set<std::string> GetAllowedLanguages(PrefService* prefs) {
+  std::unordered_set<std::string> allowed_languages;
   const base::Value::ListStorage& pref_value =
-      prefs->GetList(prefs::kAllowedUILocales)->GetList();
+      prefs->GetList(prefs::kAllowedLanguages)->GetList();
   for (const base::Value& locale_value : pref_value)
-    allowed_ui_locales.insert(locale_value.GetString());
-  return allowed_ui_locales;
+    allowed_languages.insert(locale_value.GetString());
+
+  return allowed_languages;
 }
 
 // Sorts the input methods by the order of their associated languages. For
@@ -215,7 +216,7 @@
   std::unique_ptr<base::ListValue> language_list(new base::ListValue);
 #if defined(OS_CHROMEOS)
   const std::unordered_set<std::string> allowed_ui_locales(
-      GetAllowedUILocales(chrome_details_.GetProfile()->GetPrefs()));
+      GetAllowedLanguages(chrome_details_.GetProfile()->GetPrefs()));
 #endif  // defined(OS_CHROMEOS)
   for (const auto& entry : languages) {
     language_settings_private::Language language;
@@ -242,7 +243,7 @@
 #if defined(OS_CHROMEOS)
     if (!allowed_ui_locales.empty() &&
         allowed_ui_locales.count(language.code) == 0) {
-      language.is_prohibited_ui_locale.reset(new bool(true));
+      language.is_prohibited_language.reset(new bool(true));
     }
 #endif  // defined(OS_CHROMEOS)
 
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
index 83532ae9..98b183bb 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
@@ -355,7 +355,7 @@
     content::RunAllPendingInMessageLoop();
 
     NetworkingPrivateDelegateFactory::GetInstance()->SetTestingFactory(
-        profile(), &CreateNetworkingPrivateDelegate);
+        profile(), base::BindRepeating(&CreateNetworkingPrivateDelegate));
 
     InitializeSanitizedUsername();
 
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_service_client_apitest.cc b/chrome/browser/extensions/api/networking_private/networking_private_service_client_apitest.cc
index 12ca21e..1fb3a24 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_service_client_apitest.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_service_client_apitest.cc
@@ -132,7 +132,7 @@
     extensions::ExtensionApiTest::SetUpOnMainThread();
     content::RunAllPendingInMessageLoop();
     NetworkingPrivateDelegateFactory::GetInstance()->SetTestingFactory(
-        profile(), &CreateNetworkingPrivateServiceClient);
+        profile(), base::BindRepeating(&CreateNetworkingPrivateServiceClient));
   }
 
   void TearDownOnMainThread() override {
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
index 51b7173..dac6454 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
@@ -6,6 +6,7 @@
 
 #include <sstream>
 
+#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
@@ -215,7 +216,8 @@
   void SetUpOnMainThread() override {
     ExtensionApiTest::SetUpOnMainThread();
     PasswordsPrivateDelegateFactory::GetInstance()->SetTestingFactory(
-        profile(), &PasswordsPrivateApiTest::GetPasswordsPrivateDelegate);
+        profile(), base::BindRepeating(
+                       &PasswordsPrivateApiTest::GetPasswordsPrivateDelegate));
     s_test_delegate_->SetProfile(profile());
     content::RunAllPendingInMessageLoop();
   }
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc
index 4b8102b..2278116e 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc
@@ -152,14 +152,15 @@
 
 void PasswordsPrivateDelegateImplTest::SetUpPasswordStore(
     std::vector<autofill::PasswordForm> forms) {
-  scoped_refptr<password_manager::TestPasswordStore>
-  password_store(static_cast<password_manager::TestPasswordStore*>(
-      PasswordStoreFactory::GetInstance()
-          ->SetTestingFactoryAndUse(
-              &profile_,
-              password_manager::BuildPasswordStore<
-                  content::BrowserContext, password_manager::TestPasswordStore>)
-          .get()));
+  scoped_refptr<password_manager::TestPasswordStore> password_store(
+      static_cast<password_manager::TestPasswordStore*>(
+          PasswordStoreFactory::GetInstance()
+              ->SetTestingFactoryAndUse(
+                  &profile_,
+                  base::BindRepeating(&password_manager::BuildPasswordStore<
+                                      content::BrowserContext,
+                                      password_manager::TestPasswordStore>))
+              .get()));
   for (const autofill::PasswordForm& form : forms) {
     password_store->AddLogin(form);
   }
@@ -173,7 +174,7 @@
   // factory, because at some point during the preceding initialization, a null
   // factory is set, resulting in nul PasswordsPrivateEventRouter.
   PasswordsPrivateEventRouterFactory::GetInstance()->SetTestingFactory(
-      &profile_, BuildPasswordsPrivateEventRouter);
+      &profile_, base::BindRepeating(&BuildPasswordsPrivateEventRouter));
 }
 
 TEST_F(PasswordsPrivateDelegateImplTest, GetSavedPasswordsList) {
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index 79816a1b..0086f00b 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -58,7 +58,6 @@
 #include "content/public/test/test_utils.h"
 #include "extensions/browser/browsertest_util.h"
 #include "extensions/browser/disable_reason.h"
-#include "extensions/browser/extension_creator.h"
 #include "extensions/browser/extension_dialog_auto_confirm.h"
 #include "extensions/browser/extension_host.h"
 #include "extensions/browser/extension_prefs.h"
@@ -306,7 +305,8 @@
 }
 
 base::FilePath ExtensionBrowserTest::PackExtension(
-    const base::FilePath& dir_path) {
+    const base::FilePath& dir_path,
+    ExtensionCreator::RunFlags extra_run_flags) {
   base::ScopedAllowBlockingForTesting allow_blocking;
   base::FilePath crx_path = temp_dir_.GetPath().AppendASCII("temp.crx");
   if (!base::DeleteFile(crx_path, false)) {
@@ -328,14 +328,16 @@
     }
   }
 
-  return PackExtensionWithOptions(dir_path, crx_path, pem_path, pem_path_out);
+  return PackExtensionWithOptions(dir_path, crx_path, pem_path, pem_path_out,
+                                  extra_run_flags);
 }
 
 base::FilePath ExtensionBrowserTest::PackExtensionWithOptions(
     const base::FilePath& dir_path,
     const base::FilePath& crx_path,
     const base::FilePath& pem_path,
-    const base::FilePath& pem_out_path) {
+    const base::FilePath& pem_out_path,
+    ExtensionCreator::RunFlags extra_run_flags) {
   base::ScopedAllowBlockingForTesting allow_blocking;
   if (!base::PathExists(dir_path)) {
     ADD_FAILURE() << "Extension dir not found: " << dir_path.value();
@@ -348,11 +350,8 @@
   }
 
   std::unique_ptr<ExtensionCreator> creator(new ExtensionCreator());
-  if (!creator->Run(dir_path,
-                    crx_path,
-                    pem_path,
-                    pem_out_path,
-                    ExtensionCreator::kOverwriteCRX)) {
+  if (!creator->Run(dir_path, crx_path, pem_path, pem_out_path,
+                    extra_run_flags | ExtensionCreator::kOverwriteCRX)) {
     ADD_FAILURE() << "ExtensionCreator::Run() failed: "
                   << creator->error_message();
     return base::FilePath();
@@ -452,7 +451,11 @@
     //                 and then always pack the extension here.
     base::FilePath crx_path = path;
     if (crx_path.Extension() != FILE_PATH_LITERAL(".crx")) {
-      crx_path = PackExtension(path);
+      ExtensionCreator::RunFlags run_flags = ExtensionCreator::kNoRunFlags;
+      if (creation_flags & Extension::FROM_BOOKMARK)
+        run_flags = ExtensionCreator::kBookmarkApp;
+
+      crx_path = PackExtension(path, run_flags);
     }
     if (crx_path.empty())
       return NULL;
diff --git a/chrome/browser/extensions/extension_browsertest.h b/chrome/browser/extensions/extension_browsertest.h
index 7396ef8..860eb988 100644
--- a/chrome/browser/extensions/extension_browsertest.h
+++ b/chrome/browser/extensions/extension_browsertest.h
@@ -20,6 +20,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/browser/browsertest_util.h"
+#include "extensions/browser/extension_creator.h"
 #include "extensions/browser/extension_host.h"
 #include "extensions/browser/extension_protocols.h"
 #include "extensions/browser/extension_system.h"
@@ -134,16 +135,21 @@
 
   // Pack the extension in |dir_path| into a crx file and return its path.
   // Return an empty FilePath if there were errors.
-  base::FilePath PackExtension(const base::FilePath& dir_path);
+  base::FilePath PackExtension(const base::FilePath& dir_path,
+                               ExtensionCreator::RunFlags extra_run_flags =
+                                   ExtensionCreator::kNoRunFlags);
 
   // Pack the extension in |dir_path| into a crx file at |crx_path|, using the
   // key |pem_path|. If |pem_path| does not exist, create a new key at
   // |pem_out_path|.
   // Return the path to the crx file, or an empty FilePath if there were errors.
-  base::FilePath PackExtensionWithOptions(const base::FilePath& dir_path,
-                                          const base::FilePath& crx_path,
-                                          const base::FilePath& pem_path,
-                                          const base::FilePath& pem_out_path);
+  base::FilePath PackExtensionWithOptions(
+      const base::FilePath& dir_path,
+      const base::FilePath& crx_path,
+      const base::FilePath& pem_path,
+      const base::FilePath& pem_out_path,
+      ExtensionCreator::RunFlags extra_run_flags =
+          ExtensionCreator::kNoRunFlags);
 
   // |expected_change| indicates how many extensions should be installed (or
   // disabled, if negative).
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 969d9d2..ea84174 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -53,6 +53,11 @@
     "For Android Messages integration, point to the prod endpoint instead of "
     "sandbox.";
 
+const char kAndroidSiteSettingsUIName[] = "Android Site Settings UI changes.";
+const char kAndroidSiteSettingsUIDescription[] =
+    "Enable the new UI "
+    "changes in Site Settings in Android.";
+
 const char kAppBannersName[] = "App Banners";
 const char kAppBannersDescription[] =
     "Enable the display of Progressive Web App banners, which prompt a user to "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index aed0b7c..29b7251d 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -58,6 +58,9 @@
 extern const char kAndroidMessagesProdEndpointName[];
 extern const char kAndroidMessagesProdEndpointDescription[];
 
+extern const char kAndroidSiteSettingsUIName[];
+extern const char kAndroidSiteSettingsUIDescription[];
+
 extern const char kAppBannersName[];
 extern const char kAppBannersDescription[];
 
diff --git a/chrome/browser/media/webrtc/webrtc_logging_handler_host.cc b/chrome/browser/media/webrtc/webrtc_logging_handler_host.cc
index 6758af75..c8d9840 100644
--- a/chrome/browser/media/webrtc/webrtc_logging_handler_host.cc
+++ b/chrome/browser/media/webrtc/webrtc_logging_handler_host.cc
@@ -473,6 +473,8 @@
   std::unique_ptr<WebRtcLogBuffer> log_buffer;
   std::unique_ptr<MetaDataMap> meta_data;
   text_log_handler_->ReleaseLog(&log_buffer, &meta_data);
+  CHECK(log_buffer.get()) << "State=" << text_log_handler_->GetState()
+                          << ", uorc=" << upload_log_on_render_close_;
 
   log_uploader_->background_task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&WebRtcLogUploader::LoggingStoppedDoStore,
@@ -504,6 +506,8 @@
   std::unique_ptr<WebRtcLogBuffer> log_buffer;
   std::unique_ptr<MetaDataMap> meta_data;
   text_log_handler_->ReleaseLog(&log_buffer, &meta_data);
+  CHECK(log_buffer.get()) << "State=" << text_log_handler_->GetState()
+                          << ", uorc=" << upload_log_on_render_close_;
 
   log_uploader_->background_task_runner()->PostTask(
       FROM_HERE,
diff --git a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.cc b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.cc
index b4ebdb7..cbb4511 100644
--- a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.cc
+++ b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.h"
 
 #include "base/metrics/histogram_macros.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "components/sync/driver/sync_service.h"
 #include "content/public/browser/browser_context.h"
 
@@ -13,13 +13,13 @@
 
 DesktopProfileSessionDurationsService::DesktopProfileSessionDurationsService(
     browser_sync::ProfileSyncService* sync_service,
-    OAuth2TokenService* oauth2_token_service,
+    identity::IdentityManager* identity_manager,
     GaiaCookieManagerService* cookie_manager,
     DesktopSessionDurationTracker* tracker)
     : sync_service_(sync_service),
-      oauth2_token_service_(oauth2_token_service),
+      identity_manager_(identity_manager),
       sync_observer_(this),
-      oauth2_token_observer_(this),
+      identity_manager_observer_(this),
       gaia_cookie_observer_(this),
       session_duration_observer_(this) {
   gaia_cookie_observer_.Add(cookie_manager);
@@ -35,7 +35,7 @@
   if (sync_service) {
     sync_observer_.Add(sync_service_);
   }
-  oauth2_token_observer_.Add(oauth2_token_service_);
+  identity_manager_observer_.Add(identity_manager_);
 
   // Since this is created after the profile itself is created, we need to
   // handle the initial state.
@@ -137,20 +137,21 @@
   HandleSyncAndAccountChange();
 }
 
+void DesktopProfileSessionDurationsService::OnRefreshTokenUpdatedForAccount(
+    const AccountInfo& account_info,
+    bool is_valid) {
+  DVLOG(1) << __func__;
+  HandleSyncAndAccountChange();
+}
+
+void DesktopProfileSessionDurationsService::OnRefreshTokenRemovedForAccount(
+    const std::string& account_id) {
+  DVLOG(1) << __func__;
+  HandleSyncAndAccountChange();
+}
+
 void DesktopProfileSessionDurationsService::OnRefreshTokensLoaded() {
-  DVLOG(1) << "OnRefreshTokensLoaded";
-  HandleSyncAndAccountChange();
-}
-
-void DesktopProfileSessionDurationsService::OnRefreshTokenAvailable(
-    const std::string& account_id) {
-  DVLOG(1) << "OnRefreshTokenAvailable";
-  HandleSyncAndAccountChange();
-}
-
-void DesktopProfileSessionDurationsService::OnRefreshTokenRevoked(
-    const std::string& account_id) {
-  DVLOG(1) << "OnRefreshTokenRevoked";
+  DVLOG(1) << __func__;
   HandleSyncAndAccountChange();
 }
 
@@ -180,8 +181,9 @@
   // if the token service has accounts, because the reconcilor will take care of
   // removing accounts in error state from that list.
   FeatureState non_sync_account_status =
-      oauth2_token_service_->GetAccounts().empty() ? FeatureState::OFF
-                                                   : FeatureState::ON;
+      identity_manager_->GetAccountsWithRefreshTokens().empty()
+          ? FeatureState::OFF
+          : FeatureState::ON;
   if (sync_service_ && sync_service_->CanSyncFeatureStart()) {
     // Sync has potential to turn on, or get into account error state.
     if (sync_service_->GetAuthError().state() ==
@@ -264,7 +266,7 @@
   session_duration_observer_.RemoveAll();
   gaia_cookie_observer_.RemoveAll();
   sync_observer_.RemoveAll();
-  oauth2_token_observer_.RemoveAll();
+  identity_manager_observer_.RemoveAll();
 }
 
 }  // namespace metrics
diff --git a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.h b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.h
index 19e61bf..8db368c9 100644
--- a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.h
+++ b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.h
@@ -13,6 +13,7 @@
 #include "components/signin/core/browser/gaia_cookie_manager_service.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "components/sync/driver/sync_service_observer.h"
+#include "services/identity/public/cpp/identity_manager.h"
 
 namespace metrics {
 
@@ -22,13 +23,13 @@
     : public KeyedService,
       public DesktopSessionDurationTracker::Observer,
       public GaiaCookieManagerService::Observer,
-      public OAuth2TokenService::Observer,
-      public syncer::SyncServiceObserver {
+      public syncer::SyncServiceObserver,
+      public identity::IdentityManager::Observer {
  public:
   // Callers must ensure that the parameters outlive this object.
   DesktopProfileSessionDurationsService(
       browser_sync::ProfileSyncService* sync_service,
-      OAuth2TokenService* oath2_token_service,
+      identity::IdentityManager* identity_manager,
       GaiaCookieManagerService* cookie_manager,
       DesktopSessionDurationTracker* tracker);
   ~DesktopProfileSessionDurationsService() override;
@@ -46,9 +47,10 @@
   // syncer::SyncServiceObserver:
   void OnStateChanged(syncer::SyncService* sync) override;
 
-  // OAuth2TokenService::Observer:
-  void OnRefreshTokenAvailable(const std::string& account_id) override;
-  void OnRefreshTokenRevoked(const std::string& account_id) override;
+  // IdentityManager::Observer:
+  void OnRefreshTokenUpdatedForAccount(const AccountInfo& account_info,
+                                       bool is_valid) override;
+  void OnRefreshTokenRemovedForAccount(const std::string& account_id) override;
   void OnRefreshTokensLoaded() override;
 
  private:
@@ -72,12 +74,12 @@
   void HandleSyncAndAccountChange();
 
   browser_sync::ProfileSyncService* sync_service_;
-  OAuth2TokenService* oauth2_token_service_;
+  identity::IdentityManager* identity_manager_;
 
   ScopedObserver<syncer::SyncService, syncer::SyncServiceObserver>
       sync_observer_;
-  ScopedObserver<OAuth2TokenService, OAuth2TokenService::Observer>
-      oauth2_token_observer_;
+  ScopedObserver<identity::IdentityManager, identity::IdentityManager::Observer>
+      identity_manager_observer_;
   ScopedObserver<GaiaCookieManagerService, GaiaCookieManagerService::Observer>
       gaia_cookie_observer_;
   ScopedObserver<DesktopSessionDurationTracker,
diff --git a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc
index a8fc772..9c33b4a 100644
--- a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc
+++ b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
@@ -49,13 +50,13 @@
   Profile* profile = Profile::FromBrowserContext(context);
   browser_sync::ProfileSyncService* sync_service =
       ProfileSyncServiceFactory::GetForProfile(profile);
-  OAuth2TokenService* oauth2_token_service =
-      ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
   GaiaCookieManagerService* cookie_manager =
       GaiaCookieManagerServiceFactory::GetForProfile(profile);
   DesktopSessionDurationTracker* tracker = DesktopSessionDurationTracker::Get();
+  identity::IdentityManager* identity_manager =
+      IdentityManagerFactory::GetForProfile(profile);
   return new DesktopProfileSessionDurationsService(
-      sync_service, oauth2_token_service, cookie_manager, tracker);
+      sync_service, identity_manager, cookie_manager, tracker);
 }
 
 content::BrowserContext*
diff --git a/chrome/browser/offline_pages/android/evaluation/offline_page_evaluation_bridge.cc b/chrome/browser/offline_pages/android/evaluation/offline_page_evaluation_bridge.cc
index f4604f0..24c66c0 100644
--- a/chrome/browser/offline_pages/android/evaluation/offline_page_evaluation_bridge.cc
+++ b/chrome/browser/offline_pages/android/evaluation/offline_page_evaluation_bridge.cc
@@ -185,7 +185,8 @@
   }
   return static_cast<RequestCoordinator*>(
       RequestCoordinatorFactory::GetInstance()->SetTestingFactoryAndUse(
-          profile, &GetTestBackgroundLoaderRequestCoordinator));
+          profile,
+          base::BindRepeating(&GetTestBackgroundLoaderRequestCoordinator)));
 }
 
 }  // namespace
diff --git a/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc b/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc
index 74973e4..7b14053 100644
--- a/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc
+++ b/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc
@@ -9,6 +9,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/bind.h"
 #include "base/callback.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
@@ -602,7 +603,9 @@
   public_archives_dir_ = public_archives_temp_base_dir_.GetPath().AppendASCII(
       kPublicOfflineFileDir);
   OfflinePageModelFactory::GetInstance()->SetTestingFactoryAndUse(
-      profile(), &OfflinePageRequestHandlerTestBase::BuildTestOfflinePageModel);
+      profile(),
+      base::BindRepeating(
+          &OfflinePageRequestHandlerTestBase::BuildTestOfflinePageModel));
 
   // Initialize OfflinePageModel.
   OfflinePageModelTaskified* model = static_cast<OfflinePageModelTaskified*>(
diff --git a/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc b/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc
index 0f5174a..af18fb3 100644
--- a/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc
+++ b/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/bind.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/offline_pages/prefetch/prefetch_service_factory.h"
@@ -102,7 +103,7 @@
   content::RenderViewHostTestHarness::SetUp();
 
   PrefetchServiceFactory::GetInstance()->SetTestingFactoryAndUse(
-      browser_context(), BuildTestPrefetchService);
+      browser_context(), base::BindRepeating(&BuildTestPrefetchService));
   prefetch_service_ =
       PrefetchServiceFactory::GetForBrowserContext(browser_context());
 
diff --git a/chrome/browser/offline_pages/offline_page_utils_unittest.cc b/chrome/browser/offline_pages/offline_page_utils_unittest.cc
index 5b05a2a..dd66bb2 100644
--- a/chrome/browser/offline_pages/offline_page_utils_unittest.cc
+++ b/chrome/browser/offline_pages/offline_page_utils_unittest.cc
@@ -7,6 +7,7 @@
 #include <stdint.h>
 #include <utility>
 
+#include "base/bind.h"
 #include "base/callback.h"
 #include "base/command_line.h"
 #include "base/files/file.h"
@@ -143,11 +144,11 @@
 
   // Set up the factory for testing.
   OfflinePageModelFactory::GetInstance()->SetTestingFactoryAndUse(
-      &profile_, BuildTestOfflinePageModel);
+      &profile_, base::BindRepeating(&BuildTestOfflinePageModel));
   RunUntilIdle();
 
   RequestCoordinatorFactory::GetInstance()->SetTestingFactoryAndUse(
-      &profile_, BuildTestRequestCoordinator);
+      &profile_, base::BindRepeating(&BuildTestRequestCoordinator));
   RunUntilIdle();
 
   // Make sure to create offline pages and requests.
diff --git a/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy_unittest.cc b/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy_unittest.cc
index a717e76..236d5462 100644
--- a/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy_unittest.cc
+++ b/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy.h"
 
+#include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_task_environment.h"
@@ -73,7 +74,7 @@
   proxy_ = std::make_unique<PrefetchInstanceIDProxy>(kAppIdForTest, &profile_);
   gcm_profile_service_ = static_cast<gcm::FakeGCMProfileService*>(
       gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactoryAndUse(
-          &profile_, &gcm::FakeGCMProfileService::Build));
+          &profile_, base::BindRepeating(&gcm::FakeGCMProfileService::Build)));
 }
 
 void PrefetchInstanceIDProxyTest::TearDown() {
diff --git a/chrome/browser/offline_pages/recent_tab_helper_unittest.cc b/chrome/browser/offline_pages/recent_tab_helper_unittest.cc
index f9e943a..42d10c0 100644
--- a/chrome/browser/offline_pages/recent_tab_helper_unittest.cc
+++ b/chrome/browser/offline_pages/recent_tab_helper_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/bind.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -214,10 +215,10 @@
 
   // Sets up the factories for testing.
   OfflinePageModelFactory::GetInstance()->SetTestingFactoryAndUse(
-      browser_context(), BuildTestOfflinePageModel);
+      browser_context(), base::BindRepeating(&BuildTestOfflinePageModel));
   RunUntilIdle();
   RequestCoordinatorFactory::GetInstance()->SetTestingFactoryAndUse(
-      browser_context(), BuildTestRequestCoordinator);
+      browser_context(), base::BindRepeating(&BuildTestRequestCoordinator));
   RunUntilIdle();
 
   RecentTabHelper::CreateForWebContents(web_contents());
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
index 7a32956..b3dfb22 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
@@ -397,8 +397,10 @@
   if (!navigation_handle->HasCommitted() &&
       navigation_handle->GetNetErrorCode() == net::ERR_ABORTED &&
       navigation_handle->GetResponseHeaders()) {
-    if (finished_nav)
+    if (finished_nav) {
+      finished_nav->DidInternalNavigationAbort(navigation_handle);
       finished_nav->StopTracking();
+    }
     return;
   }
 
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
index 6424469..54bae62 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
@@ -60,13 +60,15 @@
       std::vector<mojom::PageLoadTimingPtr>* complete_timings,
       std::vector<ExtraRequestCompleteInfo>* loaded_resources,
       std::vector<GURL>* observed_committed_urls,
+      std::vector<GURL>* observed_aborted_urls,
       std::vector<mojom::PageLoadFeatures>* observed_features)
       : updated_timings_(updated_timings),
         updated_subframe_timings_(updated_subframe_timings),
         complete_timings_(complete_timings),
         loaded_resources_(loaded_resources),
         observed_features_(observed_features),
-        observed_committed_urls_(observed_committed_urls) {}
+        observed_committed_urls_(observed_committed_urls),
+        observed_aborted_urls_(observed_aborted_urls) {}
 
   ObservePolicy OnStart(content::NavigationHandle* navigation_handle,
                const GURL& currently_committed_url,
@@ -107,6 +109,11 @@
     observed_features_->push_back(features);
   }
 
+  void OnDidInternalNavigationAbort(
+      content::NavigationHandle* navigation_handle) override {
+    observed_aborted_urls_->push_back(navigation_handle->GetURL());
+  }
+
  private:
   std::vector<mojom::PageLoadTimingPtr>* const updated_timings_;
   std::vector<mojom::PageLoadTimingPtr>* const updated_subframe_timings_;
@@ -114,6 +121,7 @@
   std::vector<ExtraRequestCompleteInfo>* const loaded_resources_;
   std::vector<mojom::PageLoadFeatures>* const observed_features_;
   std::vector<GURL>* const observed_committed_urls_;
+  std::vector<GURL>* const observed_aborted_urls_;
 };
 
 // Test PageLoadMetricsObserver that stops observing page loads with certain
@@ -159,7 +167,8 @@
   void RegisterObservers(PageLoadTracker* tracker) override {
     tracker->AddObserver(std::make_unique<TestPageLoadMetricsObserver>(
         &updated_timings_, &updated_subframe_timings_, &complete_timings_,
-        &loaded_resources_, &observed_committed_urls_, &observed_features_));
+        &loaded_resources_, &observed_committed_urls_, &observed_aborted_urls_,
+        &observed_features_));
     tracker->AddObserver(std::make_unique<FilteringPageLoadMetricsObserver>(
         &completed_filtered_urls_));
   }
@@ -184,6 +193,10 @@
     return observed_committed_urls_;
   }
 
+  const std::vector<GURL>& observed_aborted_urls() const {
+    return observed_aborted_urls_;
+  }
+
   const std::vector<mojom::PageLoadFeatures>& observed_features() const {
     return observed_features_;
   }
@@ -202,6 +215,7 @@
   std::vector<mojom::PageLoadTimingPtr> updated_subframe_timings_;
   std::vector<mojom::PageLoadTimingPtr> complete_timings_;
   std::vector<GURL> observed_committed_urls_;
+  std::vector<GURL> observed_aborted_urls_;
   std::vector<ExtraRequestCompleteInfo> loaded_resources_;
   std::vector<GURL> completed_filtered_urls_;
   std::vector<mojom::PageLoadFeatures> observed_features_;
@@ -313,6 +327,10 @@
     return embedder_interface_->observed_committed_urls_from_on_start();
   }
 
+  const std::vector<GURL>& observed_aborted_urls() const {
+    return embedder_interface_->observed_aborted_urls();
+  }
+
   const std::vector<mojom::PageLoadFeatures>& observed_features() const {
     return embedder_interface_->observed_features();
   }
@@ -369,6 +387,16 @@
   CheckNoErrorEvents();
 }
 
+TEST_F(MetricsWebContentsObserverTest, MainFrameNavigationInternalAbort) {
+  content::WebContentsTester* web_contents_tester =
+      content::WebContentsTester::For(web_contents());
+  web_contents_tester->NavigateAndFail(
+      GURL(kDefaultTestUrl), net::ERR_ABORTED,
+      base::MakeRefCounted<net::HttpResponseHeaders>("some_headers"));
+  ASSERT_EQ(1u, observed_aborted_urls().size());
+  ASSERT_EQ(kDefaultTestUrl, observed_aborted_urls().front().spec());
+}
+
 TEST_F(MetricsWebContentsObserverTest, SubFrame) {
   mojom::PageLoadTiming timing;
   page_load_metrics::InitPageLoadTimingForTest(&timing);
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_observer.h b/chrome/browser/page_load_metrics/page_load_metrics_observer.h
index 471272b..1fbf65f 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/page_load_metrics_observer.h
@@ -318,6 +318,13 @@
   virtual ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
                                  ukm::SourceId source_id);
 
+  // OnDidInternalNavigationAbort is triggered when the main frame navigation
+  // aborts with HTTP responses that don't commit, such as HTTP 204 responses
+  // and downloads. Note that |navigation_handle| will be destroyed
+  // soon after this call. Don't hold a reference to it.
+  virtual void OnDidInternalNavigationAbort(
+      content::NavigationHandle* navigation_handle) {}
+
   // OnDidFinishSubFrameNavigation is triggered when a sub-frame of the
   // committed page has finished navigating. It has either committed, aborted,
   // was a same document navigation, or has been replaced. It is up to the
diff --git a/chrome/browser/page_load_metrics/page_load_tracker.cc b/chrome/browser/page_load_metrics/page_load_tracker.cc
index f0f34f99..2a447ae2 100644
--- a/chrome/browser/page_load_metrics/page_load_tracker.cc
+++ b/chrome/browser/page_load_metrics/page_load_tracker.cc
@@ -356,6 +356,13 @@
   }
 }
 
+void PageLoadTracker::DidInternalNavigationAbort(
+    content::NavigationHandle* navigation_handle) {
+  for (const auto& observer : observers_) {
+    observer->OnDidInternalNavigationAbort(navigation_handle);
+  }
+}
+
 void PageLoadTracker::DidFinishSubFrameNavigation(
     content::NavigationHandle* navigation_handle) {
   for (const auto& observer : observers_) {
diff --git a/chrome/browser/page_load_metrics/page_load_tracker.h b/chrome/browser/page_load_metrics/page_load_tracker.h
index 183eca92..6a8e5b05 100644
--- a/chrome/browser/page_load_metrics/page_load_tracker.h
+++ b/chrome/browser/page_load_metrics/page_load_tracker.h
@@ -189,6 +189,7 @@
   void Commit(content::NavigationHandle* navigation_handle);
   void DidCommitSameDocumentNavigation(
       content::NavigationHandle* navigation_handle);
+  void DidInternalNavigationAbort(content::NavigationHandle* navigation_handle);
   void DidFinishSubFrameNavigation(
       content::NavigationHandle* navigation_handle);
   void FailedProvisionalLoad(content::NavigationHandle* navigation_handle,
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 0d80b28..c676085 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -654,8 +654,8 @@
   { key::kUserNativePrintersAllowed,
     prefs::kUserNativePrintersAllowed,
     base::Value::Type::BOOLEAN },
-  { key::kAllowedUILocales,
-    prefs::kAllowedUILocales,
+  { key::kAllowedLanguages,
+    prefs::kAllowedLanguages,
     base::Value::Type::LIST },
   { key::kAllowedInputMethods,
     prefs::kLanguageAllowedInputMethods,
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index 81993d0..fe35e4d 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -1233,7 +1233,7 @@
 #endif
 
 #if defined(OS_CHROMEOS)
-IN_PROC_BROWSER_TEST_F(LoginPolicyTestBase, PRE_AllowedUILocales) {
+IN_PROC_BROWSER_TEST_F(LoginPolicyTestBase, PRE_AllowedLanguages) {
   SkipToLoginScreen();
   LogIn(kAccountId, kAccountPassword, kEmptyServices);
 
@@ -1250,13 +1250,13 @@
   // Set policy to only allow "fr" as locale.
   std::unique_ptr<base::DictionaryValue> policy =
       std::make_unique<base::DictionaryValue>();
-  base::ListValue allowed_ui_locales;
-  allowed_ui_locales.AppendString("fr");
-  policy->SetKey(key::kAllowedUILocales, std::move(allowed_ui_locales));
+  base::ListValue allowed_languages;
+  allowed_languages.AppendString("fr");
+  policy->SetKey(key::kAllowedLanguages, std::move(allowed_languages));
   user_policy_helper()->UpdatePolicy(*policy, base::DictionaryValue(), profile);
 }
 
-IN_PROC_BROWSER_TEST_F(LoginPolicyTestBase, AllowedUILocales) {
+IN_PROC_BROWSER_TEST_F(LoginPolicyTestBase, AllowedLanguages) {
   LogIn(kAccountId, kAccountPassword, kEmptyServices);
 
   const user_manager::User* const user =
@@ -1285,7 +1285,7 @@
 
   // Verifiy that the enforced locale is added into the list of
   // preferred languages.
-  EXPECT_EQ("en-US,fr", prefs->GetString(prefs::kLanguagePreferredLanguages));
+  EXPECT_EQ("fr", prefs->GetString(prefs::kLanguagePreferredLanguages));
 }
 
 IN_PROC_BROWSER_TEST_F(LoginPolicyTestBase, AllowedInputMethods) {
diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc
index 3bb5207d..2913a5c 100644
--- a/chrome/browser/profiles/profile.cc
+++ b/chrome/browser/profiles/profile.cc
@@ -181,8 +181,6 @@
   registry->RegisterStringPref(prefs::kApplicationLocaleBackup, std::string());
   registry->RegisterStringPref(prefs::kApplicationLocaleAccepted,
                                std::string());
-  registry->RegisterListPref(prefs::kAllowedUILocales,
-                             std::make_unique<base::ListValue>());
 #endif
 
   registry->RegisterBooleanPref(prefs::kDataSaverEnabled, false);
diff --git a/chrome/browser/profiles/profile.h b/chrome/browser/profiles/profile.h
index e52b848..897a23b 100644
--- a/chrome/browser/profiles/profile.h
+++ b/chrome/browser/profiles/profile.h
@@ -232,7 +232,7 @@
     APP_LOCALE_CHANGED_VIA_LOGIN,
     // From login to a public session.
     APP_LOCALE_CHANGED_VIA_PUBLIC_SESSION_LOGIN,
-    // From AllowedUILocales policy
+    // From AllowedLanguages policy
     APP_LOCALE_CHANGED_VIA_POLICY,
     // Source unknown.
     APP_LOCALE_CHANGED_VIA_UNKNOWN
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
index 635e21c..4b8f1c5 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
@@ -1764,7 +1764,12 @@
           .expectSpeech('tab2')
           .clearPendingOutput()
           .call(press(82  /* R */, {ctrl: true}))
-          .expectSpeech('tab2')
+
+          // ChromeVox stays on the same node due to tree path recovery.
+          .call(() => {
+            assertEquals('tab2',
+                         ChromeVoxState.instance.currentRange.start.node.name);
+          })
           .replay();
     });
   });
@@ -1784,3 +1789,31 @@
         .replay();
   });
 });
+
+TEST_F('BackgroundTest', 'ReinsertedNodeRecovery', function() {
+  var mockFeedback = this.createMockFeedback();
+  this.runWithLoadedTree(function(root) {/*
+    <div>
+      <button id="start">start</button>
+      <button id="hot">hot</button>
+    </div>
+    <button id="end">end</button>
+    <script>
+      var div =       document.body.firstElementChild;
+      var start =       document.getElementById('start');
+      document.getElementById('hot').addEventListener('focus', (evt) => {
+        var hot = evt.target;
+        hot.remove();
+        div.insertAfter(hot, start);
+      });
+    </script>
+  */}, function(root) {
+    mockFeedback.expectSpeech('start')
+        .clearPendingOutput()
+        .call(doCmd('nextObject'))
+        .call(doCmd('nextObject'))
+        .call(doCmd('nextObject'))
+        .expectSpeech('end', 'Button')
+        .replay();
+  });
+});
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
index 8ddb5612..9c3572ce 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
@@ -103,7 +103,7 @@
   /** @type {number} @private */
   this.index_ = index;
   /** @type {RecoveryStrategy} */
-  this.recovery_ = new AncestryRecoveryStrategy(node);
+  this.recovery_ = new TreePathRecoveryStrategy(node);
 };
 
 /**
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output_test.extjs
index 563892f..a676b7f 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output_test.extjs
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output_test.extjs
@@ -229,18 +229,18 @@
           .withoutHints()
           .withSpeechAndBraille(range, null, 'navigate');
 
-      checkSpeechOutput('play|Disabled|Button|audio|Tool bar',
+      checkSpeechOutput('play|Button|audio|Tool bar',
           [
             {value: new Output.EarconAction('BUTTON'), start: 0, end: 4},
-            {value: 'name', start: 21, end: 26},
-            {value: 'role', start: 27, end: 35}
+            {value: 'name', start: 12, end: 17},
+            {value: 'role', start: 18, end: 26}
           ],
           o);
 
       checkBrailleOutput(
-          'play xx btn audio tlbar',
-          [{value: new Output.NodeSpan(el), start: 0, end: 11},
-           {value: new Output.NodeSpan(el.parent), start: 12, end: 23}],
+          'play btn audio tlbar',
+          [{value: new Output.NodeSpan(el), start: 0, end: 8},
+           {value: new Output.NodeSpan(el.parent), start: 9, end: 20}],
           o);
 
       // TODO(dmazzoni/dtseng): Replace with a query.
diff --git a/chrome/browser/resources/settings/languages_page/add_languages_dialog.js b/chrome/browser/resources/settings/languages_page/add_languages_dialog.js
index 77c6b94a..610e3d7 100644
--- a/chrome/browser/resources/settings/languages_page/add_languages_dialog.js
+++ b/chrome/browser/resources/settings/languages_page/add_languages_dialog.js
@@ -84,15 +84,9 @@
     const filterValue =
         this.filterValue_ ? this.filterValue_.toLowerCase() : null;
     return this.languages.supported.filter(language => {
-      const isAvailableLanguage =
-          !this.languageHelper.isLanguageEnabled(language.code);
-
-      if (!isAvailableLanguage)
+      if (!this.languageHelper.canEnableLanguage(language))
         return false;
 
-      if (this.languageHelper.isLanguageCodeForArcIme(language.code))
-        return false;  // internal use only
-
       if (filterValue === null)
         return true;
 
diff --git a/chrome/browser/resources/settings/languages_page/languages.js b/chrome/browser/resources/settings/languages_page/languages.js
index 6c81d0d..50a2d02 100644
--- a/chrome/browser/resources/settings/languages_page/languages.js
+++ b/chrome/browser/resources/settings/languages_page/languages.js
@@ -427,7 +427,7 @@
       language.supportsUI = !!language.supportsUI;
       language.supportsTranslate = !!language.supportsTranslate;
       language.supportsSpellcheck = !!language.supportsSpellcheck;
-      language.isProhibitedUILocale = !!language.isProhibitedUILocale;
+      language.isProhibitedLanguage = !!language.isProhibitedLanguage;
       this.supportedLanguageMap_.set(language.code, language);
     }
 
@@ -811,6 +811,17 @@
   },
 
   /**
+   * @param {!chrome.languageSettingsPrivate.Language} language
+   * @return {boolean} true if the given language can be enabled
+   */
+  canEnableLanguage(language) {
+    return !(
+        this.isLanguageEnabled(language.code) ||
+        language.isProhibitedLanguage ||
+        this.isLanguageCodeForArcIme(language.code) /* internal use only */);
+  },
+
+  /**
    * Moves the language in the list of enabled languages either up (toward the
    * front of the list) or down (toward the back).
    * @param {string} languageCode
diff --git a/chrome/browser/resources/settings/languages_page/languages_page.html b/chrome/browser/resources/settings/languages_page/languages_page.html
index a979b391..948ac4e 100644
--- a/chrome/browser/resources/settings/languages_page/languages_page.html
+++ b/chrome/browser/resources/settings/languages_page/languages_page.html
@@ -177,6 +177,7 @@
             </template>
             <div class="list-item">
               <a is="action-link" class="list-button" id="addLanguages"
+                  disabled="[[!canEnableSomeSupportedLanguage_(languages)]]"
                   on-click="onAddLanguagesTap_">
                 $i18n{addLanguages}
               </a>
@@ -333,7 +334,7 @@
                       detailLanguage_, languages.prospectiveUILanguage)]]">
                 <span>$i18n{displayInThisLanguage}</span>
                 <iron-icon class="policy" icon="cr20:domain" hidden$="[[
-                    !detailLanguage_.language.isProhibitedUILocale]]">
+                    !detailLanguage_.language.isProhibitedLanguage]]">
                 </iron-icon>
               </cr-checkbox>
 </if>
diff --git a/chrome/browser/resources/settings/languages_page/languages_page.js b/chrome/browser/resources/settings/languages_page/languages_page.js
index 1e7beeb2..f365561 100644
--- a/chrome/browser/resources/settings/languages_page/languages_page.js
+++ b/chrome/browser/resources/settings/languages_page/languages_page.js
@@ -155,6 +155,19 @@
   },
 
   /**
+   * Checks if there are supported languages that are not enabled but can be
+   * enabled.
+   * @param {LanguagesModel|undefined} languages
+   * @return {boolean} True if there is at least one available language.
+   * @private
+   */
+  canEnableSomeSupportedLanguage_: function(languages) {
+    return languages == undefined || languages.supported.some(language => {
+      return this.languageHelper.canEnableLanguage(language);
+    });
+  },
+
+  /**
    * Used to determine which "Move" buttons to show for ordering enabled
    * languages.
    * @param {number} n
@@ -304,9 +317,9 @@
     if (languageState.language.code == prospectiveUILanguage)
       return true;
 
-    // Check if the language is prohibited by the current "AllowedUILocales"
+    // Check if the language is prohibited by the current "AllowedLanguages"
     // policy.
-    if (languageState.language.isProhibitedUILocale)
+    if (languageState.language.isProhibitedLanguage)
       return true;
 
     // Otherwise, the prospective language can be changed to this language.
diff --git a/chrome/browser/resources/settings/languages_page/languages_types.js b/chrome/browser/resources/settings/languages_page/languages_types.js
index 2186c69..e86905d 100644
--- a/chrome/browser/resources/settings/languages_page/languages_types.js
+++ b/chrome/browser/resources/settings/languages_page/languages_types.js
@@ -132,6 +132,12 @@
   canDisableLanguage(languageCode) {}
 
   /**
+   * @param {!chrome.languageSettingsPrivate.Language} language
+   * @return {boolean} true if the given language can be enabled
+   */
+  canEnableLanguage(language) {}
+
+  /**
    * Moves the language in the list of enabled languages by the given offset.
    * @param {string} languageCode
    * @param {boolean} upDirection True if we need to move toward the front,
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
index d16fd33..94d7adb2 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
@@ -9,17 +9,15 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/signin/account_tracker_service_factory.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/common/safe_browsing_prefs.h"
 #include "components/safe_browsing/features.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-#include "components/signin/core/browser/signin_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/gaia/oauth2_id_token_decoder.h"
+#include "services/identity/public/cpp/primary_account_access_token_fetcher.h"
 
 using content::BrowserThread;
 
@@ -34,38 +32,13 @@
 }  // namespace
 
 ////////////////////////////////////////////////////////////////////////////////
-// AdvancedProtectionTokenConsumer
-////////////////////////////////////////////////////////////////////////////////
-AdvancedProtectionStatusManager::AdvancedProtectionTokenConsumer::
-    AdvancedProtectionTokenConsumer(const std::string& account_id,
-                                    AdvancedProtectionStatusManager* manager)
-    : OAuth2TokenService::Consumer(account_id), manager_(manager) {}
-
-AdvancedProtectionStatusManager::AdvancedProtectionTokenConsumer::
-    ~AdvancedProtectionTokenConsumer() {}
-
-void AdvancedProtectionStatusManager::AdvancedProtectionTokenConsumer::
-    OnGetTokenSuccess(
-        const OAuth2TokenService::Request* request,
-        const OAuth2AccessTokenConsumer::TokenResponse& token_response) {
-  manager_->OnGetIDToken(request->GetAccountId(), token_response.id_token);
-  manager_->OnTokenRefreshDone(
-      request, GoogleServiceAuthError(GoogleServiceAuthError::NONE));
-}
-
-void AdvancedProtectionStatusManager::AdvancedProtectionTokenConsumer::
-    OnGetTokenFailure(const OAuth2TokenService::Request* request,
-                      const GoogleServiceAuthError& error) {
-  manager_->OnTokenRefreshDone(request, error);
-}
-
-////////////////////////////////////////////////////////////////////////////////
 // AdvancedProtectionStatusManager
 ////////////////////////////////////////////////////////////////////////////////
 AdvancedProtectionStatusManager::AdvancedProtectionStatusManager(
     Profile* profile)
     : profile_(profile),
-      signin_manager_(nullptr),
+      identity_manager_(nullptr),
+      access_token_fetcher_(nullptr),
       account_tracker_service_(nullptr),
       is_under_advanced_protection_(false),
       minimum_delay_(kMinimumRefreshDelay) {
@@ -78,7 +51,7 @@
 }
 
 void AdvancedProtectionStatusManager::Initialize() {
-  signin_manager_ = SigninManagerFactory::GetForProfile(profile_);
+  identity_manager_ = IdentityManagerFactory::GetForProfile(profile_);
   account_tracker_service_ =
       AccountTrackerServiceFactory::GetForProfile(profile_);
   SubscribeToSigninEvents();
@@ -86,7 +59,7 @@
 
 void AdvancedProtectionStatusManager::MaybeRefreshOnStartUp() {
   // Retrieves advanced protection service status from primary account's info.
-  AccountInfo info = signin_manager_->GetAuthenticatedAccountInfo();
+  AccountInfo info = identity_manager_->GetPrimaryAccountInfo();
   if (info.account_id.empty())
     return;
 
@@ -122,12 +95,12 @@
 
 void AdvancedProtectionStatusManager::SubscribeToSigninEvents() {
   AccountTrackerServiceFactory::GetForProfile(profile_)->AddObserver(this);
-  SigninManagerFactory::GetForProfile(profile_)->AddObserver(this);
+  IdentityManagerFactory::GetForProfile(profile_)->AddObserver(this);
 }
 
 void AdvancedProtectionStatusManager::UnsubscribeFromSigninEvents() {
   AccountTrackerServiceFactory::GetForProfile(profile_)->RemoveObserver(this);
-  SigninManagerFactory::GetForProfile(profile_)->RemoveObserver(this);
+  IdentityManagerFactory::GetForProfile(profile_)->RemoveObserver(this);
 }
 
 bool AdvancedProtectionStatusManager::IsRefreshScheduled() {
@@ -163,13 +136,13 @@
   }
 }
 
-void AdvancedProtectionStatusManager::GoogleSigninSucceeded(
+void AdvancedProtectionStatusManager::OnPrimaryAccountSet(
     const AccountInfo& account_info) {
   if (account_info.is_under_advanced_protection)
     OnAdvancedProtectionEnabled();
 }
 
-void AdvancedProtectionStatusManager::GoogleSignedOut(
+void AdvancedProtectionStatusManager::OnPrimaryAccountCleared(
     const AccountInfo& account_info) {
   OnAdvancedProtectionDisabled();
 }
@@ -186,27 +159,50 @@
   CancelFutureRefresh();
 }
 
+void AdvancedProtectionStatusManager::OnAccessTokenFetchComplete(
+    std::string account_id,
+    GoogleServiceAuthError error,
+    identity::AccessTokenInfo token_info) {
+  DCHECK(access_token_fetcher_);
+
+  if (error.state() == GoogleServiceAuthError::NONE)
+    OnGetIDToken(account_id, token_info.id_token);
+
+  UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.AdvancedProtection.TokenFetchStatus",
+                            error.state(), GoogleServiceAuthError::NUM_STATES);
+
+  access_token_fetcher_.reset();
+
+  // If failure is transient, we'll retry in 5 minutes.
+  if (error.IsTransientError()) {
+    timer_.Start(
+        FROM_HERE, kRetryDelay, this,
+        &AdvancedProtectionStatusManager::RefreshAdvancedProtectionStatus);
+  }
+}
+
 void AdvancedProtectionStatusManager::RefreshAdvancedProtectionStatus() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-  auto* token_service =
-      ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
-
   std::string primary_account_id = GetPrimaryAccountId();
-  if (!token_service || primary_account_id.empty())
+  if (!identity_manager_ || primary_account_id.empty())
     return;
+
+  // If there's already a request going on, do nothing.
+  if (access_token_fetcher_)
+    return;
+
   // Refresh OAuth access token.
   OAuth2TokenService::ScopeSet scopes;
   scopes.insert(GaiaConstants::kOAuth1LoginScope);
 
-  // If there's already a request going on, do nothing.
-  if (access_token_request_)
-    return;
-
-  token_consumer_.reset(
-      new AdvancedProtectionTokenConsumer(primary_account_id, this));
-  access_token_request_ = token_service->StartRequest(
-      primary_account_id, scopes, token_consumer_.get());
+  access_token_fetcher_ =
+      std::make_unique<identity::PrimaryAccountAccessTokenFetcher>(
+          "advanced_protection_status_manager", identity_manager_, scopes,
+          base::BindOnce(
+              &AdvancedProtectionStatusManager::OnAccessTokenFetchComplete,
+              base::Unretained(this), primary_account_id),
+          identity::PrimaryAccountAccessTokenFetcher::Mode::kImmediate);
 }
 
 void AdvancedProtectionStatusManager::ScheduleNextRefresh() {
@@ -279,28 +275,11 @@
   }
 }
 
-void AdvancedProtectionStatusManager::OnTokenRefreshDone(
-    const OAuth2TokenService::Request* request,
-    const GoogleServiceAuthError& error) {
-  DCHECK(request == access_token_request_.get());
-
-  UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.AdvancedProtection.TokenFetchStatus",
-                            error.state(), GoogleServiceAuthError::NUM_STATES);
-  access_token_request_.reset();
-
-  // If failure is transient, we'll retry in 5 minutes.
-  if (error.IsTransientError()) {
-    timer_.Start(
-        FROM_HERE, kRetryDelay, this,
-        &AdvancedProtectionStatusManager::RefreshAdvancedProtectionStatus);
-  }
-}
-
 AdvancedProtectionStatusManager::AdvancedProtectionStatusManager(
     Profile* profile,
     const base::TimeDelta& min_delay)
     : profile_(profile),
-      signin_manager_(nullptr),
+      identity_manager_(nullptr),
       account_tracker_service_(nullptr),
       is_under_advanced_protection_(false),
       minimum_delay_(min_delay) {
@@ -311,8 +290,8 @@
 }
 
 std::string AdvancedProtectionStatusManager::GetPrimaryAccountId() const {
-  return signin_manager_ ? signin_manager_->GetAuthenticatedAccountId()
-                         : std::string();
+  return identity_manager_ ? identity_manager_->GetPrimaryAccountId()
+                           : std::string();
 }
 
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager.h b/chrome/browser/safe_browsing/advanced_protection_status_manager.h
index 1892245..682bd39 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager.h
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager.h
@@ -8,8 +8,12 @@
 #include "base/timer/timer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/core/browser/account_tracker_service.h"
-#include "components/signin/core/browser/signin_manager_base.h"
-#include "google_apis/gaia/oauth2_token_service.h"
+#include "services/identity/public/cpp/access_token_info.h"
+#include "services/identity/public/cpp/identity_manager.h"
+
+namespace identity {
+class PrimaryAccountAccessTokenFetcher;
+}
 
 class Profile;
 
@@ -21,30 +25,11 @@
 // advanced protection.
 // For incognito profile Chrome returns users' advanced protection status
 // of its original profile.
-class AdvancedProtectionStatusManager : public KeyedService,
-                                        public AccountTrackerService::Observer,
-                                        public SigninManagerBase::Observer {
+class AdvancedProtectionStatusManager
+    : public KeyedService,
+      public AccountTrackerService::Observer,
+      public identity::IdentityManager::Observer {
  public:
-  class AdvancedProtectionTokenConsumer : public OAuth2TokenService::Consumer {
-   public:
-    AdvancedProtectionTokenConsumer(const std::string& account_id,
-                                    AdvancedProtectionStatusManager* manager);
-
-    ~AdvancedProtectionTokenConsumer() override;
-
-    // OAuth2TokenService::Consumer implementation.
-    void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
-                           const OAuth2AccessTokenConsumer::TokenResponse&
-                               token_response) override;
-    void OnGetTokenFailure(const OAuth2TokenService::Request* request,
-                           const GoogleServiceAuthError& error) override;
-
-   private:
-    AdvancedProtectionStatusManager* manager_;
-
-    DISALLOW_COPY_AND_ASSIGN(AdvancedProtectionTokenConsumer);
-  };
-
   explicit AdvancedProtectionStatusManager(Profile* profile);
   ~AdvancedProtectionStatusManager() override;
 
@@ -100,14 +85,18 @@
   void OnAccountUpdated(const AccountInfo& info) override;
   void OnAccountRemoved(const AccountInfo& info) override;
 
-  // SigninManagerBase::Observer implementations.
-  void GoogleSigninSucceeded(const AccountInfo& account_info) override;
-  void GoogleSignedOut(const AccountInfo& account_info) override;
+  // IdentityManager::Observer implementations.
+  void OnPrimaryAccountSet(const AccountInfo& account_info) override;
+  void OnPrimaryAccountCleared(const AccountInfo& account_info) override;
 
   void OnAdvancedProtectionEnabled();
 
   void OnAdvancedProtectionDisabled();
 
+  void OnAccessTokenFetchComplete(std::string account_id,
+                                  GoogleServiceAuthError error,
+                                  identity::AccessTokenInfo token_info);
+
   // Requests Gaia refresh token to obtain advanced protection status.
   void RefreshAdvancedProtectionStatus();
 
@@ -125,9 +114,6 @@
   // Decodes |id_token| to get advanced protection status.
   void OnGetIDToken(const std::string& account_id, const std::string& id_token);
 
-  void OnTokenRefreshDone(const OAuth2TokenService::Request* request,
-                          const GoogleServiceAuthError& error);
-
   // Only called in tests.
   void SetMinimumRefreshDelay(const base::TimeDelta& delay);
 
@@ -141,16 +127,14 @@
 
   Profile* const profile_;
 
-  SigninManagerBase* signin_manager_;
+  identity::IdentityManager* identity_manager_;
+  std::unique_ptr<identity::PrimaryAccountAccessTokenFetcher>
+      access_token_fetcher_;
   AccountTrackerService* account_tracker_service_;
 
   // Is the profile account under advanced protection.
   bool is_under_advanced_protection_;
 
-  std::unique_ptr<AdvancedProtectionTokenConsumer> token_consumer_;
-
-  std::unique_ptr<OAuth2TokenService::Request> access_token_request_;
-
   base::OneShotTimer timer_;
   base::Time last_refreshed_;
   base::TimeDelta minimum_delay_;
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc
index 9b649fba..e12b955 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc
@@ -6,10 +6,8 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
 #include "chrome/browser/signin/account_tracker_service_factory.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/signin/core/browser/signin_manager.h"
 #include "content/public/browser/browser_context.h"
 
 namespace safe_browsing {
@@ -33,8 +31,7 @@
           "AdvancedProtectionStatusManager",
           BrowserContextDependencyManager::GetInstance()) {
   DependsOn(AccountTrackerServiceFactory::GetInstance());
-  DependsOn(SigninManagerFactory::GetInstance());
-  DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
+  DependsOn(IdentityManagerFactory::GetInstance());
 }
 
 AdvancedProtectionStatusManagerFactory::
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc
index ca0b7df..7a40365f5 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc
@@ -241,8 +241,17 @@
   aps_manager.UnsubscribeFromSigninEvents();
 }
 
+#if defined(OS_CHROMEOS)
+// https://crbug.com/892117
+#define MAYBE_AlreadySignedInAndUnderAPIncognito \
+  DISABLED_AlreadySignedInAndUnderAPIncognito
+#else
+#define MAYBE_AlreadySignedInAndUnderAPIncognito \
+  AlreadySignedInAndUnderAPIncognito
+#endif
+// Rediret to the actual download URL.
 TEST_F(AdvancedProtectionStatusManagerTest,
-       AlreadySignedInAndUnderAPIncognito) {
+       MAYBE_AlreadySignedInAndUnderAPIncognito) {
   testing_profile_->GetPrefs()->SetInt64(
       prefs::kAdvancedProtectionLastRefreshInUs,
       base::Time::Now().ToDeltaSinceWindowsEpoch().InMicroseconds());
@@ -260,8 +269,16 @@
       testing_profile_.get()));
 }
 
+#if defined(OS_CHROMEOS)
+// https://crbug.com/892117
+#define MAYBE_AlreadySignedInAndNotUnderAPIncognito \
+  DISABLED_AlreadySignedInAndNotUnderAPIncognito
+#else
+#define MAYBE_AlreadySignedInAndNotUnderAPIncognito \
+  AlreadySignedInAndNotUnderAPIncognito
+#endif
 TEST_F(AdvancedProtectionStatusManagerTest,
-       AlreadySignedInAndNotUnderAPIncognito) {
+       MAYBE_AlreadySignedInAndNotUnderAPIncognito) {
   testing_profile_->GetPrefs()->SetInt64(
       prefs::kAdvancedProtectionLastRefreshInUs,
       base::Time::Now().ToDeltaSinceWindowsEpoch().InMicroseconds());
diff --git a/chrome/browser/signin/dice_browsertest.cc b/chrome/browser/signin/dice_browsertest.cc
index 328576de..c5e910af 100644
--- a/chrome/browser/signin/dice_browsertest.cc
+++ b/chrome/browser/signin/dice_browsertest.cc
@@ -1057,9 +1057,7 @@
   EXPECT_TRUE(GetSigninManager()->GetAuthenticatedAccountId().empty());
   EXPECT_TRUE(GetSigninManager()->GetAccountIdForAuthInProgress().empty());
   EXPECT_FALSE(GetTokenService()->RefreshTokenIsAvailable(GetMainAccountID()));
-  // TODO(msarda): We still load the old primary account from prefs, so the
-  // AccountTrackerService is non-empty.
-  // EXPECT_TRUE(GetAccountTrackerService()->GetAccounts().empty());
+  EXPECT_TRUE(GetAccountTrackerService()->GetAccounts().empty());
 }
 
 // Checks that Dice is disabled in incognito mode.
diff --git a/chrome/browser/signin/dice_response_handler_unittest.cc b/chrome/browser/signin/dice_response_handler_unittest.cc
index 9ea632c1..548f86c 100644
--- a/chrome/browser/signin/dice_response_handler_unittest.cc
+++ b/chrome/browser/signin/dice_response_handler_unittest.cc
@@ -145,6 +145,7 @@
     EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
     AboutSigninInternals::RegisterPrefs(pref_service_.registry());
     AccountTrackerService::RegisterPrefs(pref_service_.registry());
+    ProfileOAuth2TokenService::RegisterProfilePrefs(pref_service_.registry());
     SigninManager::RegisterProfilePrefs(pref_service_.registry());
     auto account_reconcilor_delegate =
         std::make_unique<signin::DiceAccountReconcilorDelegate>(
diff --git a/chrome/browser/signin/force_signin_verifier.cc b/chrome/browser/signin/force_signin_verifier.cc
index bfdeeef..6ad8616 100644
--- a/chrome/browser/signin/force_signin_verifier.cc
+++ b/chrome/browser/signin/force_signin_verifier.cc
@@ -92,8 +92,7 @@
   if (backoff_request_timer_.IsRunning())
     backoff_request_timer_.Stop();
 
-  if (type != network::mojom::ConnectionType::CONNECTION_NONE)
-    SendRequest();
+  SendRequestIfNetworkAvailable(type);
 }
 
 void ForceSigninVerifier::Cancel() {
@@ -108,8 +107,21 @@
 }
 
 void ForceSigninVerifier::SendRequest() {
-  if (!ShouldSendRequest())
+  auto type = network::mojom::ConnectionType::CONNECTION_NONE;
+  if (content::GetNetworkConnectionTracker()->GetConnectionType(
+          &type,
+          base::BindOnce(&ForceSigninVerifier::SendRequestIfNetworkAvailable,
+                         base::Unretained(this)))) {
+    SendRequestIfNetworkAvailable(type);
+  }
+}
+
+void ForceSigninVerifier::SendRequestIfNetworkAvailable(
+    network::mojom::ConnectionType network_type) {
+  if (network_type == network::mojom::ConnectionType::CONNECTION_NONE ||
+      !ShouldSendRequest()) {
     return;
+  }
 
   std::string account_id = signin_manager_->GetAuthenticatedAccountId();
   OAuth2TokenService::ScopeSet oauth2_scopes;
@@ -119,11 +131,7 @@
 }
 
 bool ForceSigninVerifier::ShouldSendRequest() {
-  auto type = network::mojom::ConnectionType::CONNECTION_NONE;
-  content::GetNetworkConnectionTracker()->GetConnectionType(&type,
-                                                            base::DoNothing());
   return !has_token_verified_ && access_token_request_.get() == nullptr &&
-         type != network::mojom::ConnectionType::CONNECTION_NONE &&
          signin_manager_->IsAuthenticated();
 }
 
diff --git a/chrome/browser/signin/force_signin_verifier.h b/chrome/browser/signin/force_signin_verifier.h
index 0c4be64..1df2c5e1 100644
--- a/chrome/browser/signin/force_signin_verifier.h
+++ b/chrome/browser/signin/force_signin_verifier.h
@@ -57,7 +57,12 @@
   //
   void SendRequest();
 
-  virtual bool ShouldSendRequest();
+  // Send the request if |network_type| is not CONNECTION_NONE and
+  // ShouldSendRequest returns true.
+  void SendRequestIfNetworkAvailable(
+      network::mojom::ConnectionType network_type);
+
+  bool ShouldSendRequest();
 
   virtual void CloseAllBrowserWindows();
 
diff --git a/chrome/browser/signin/force_signin_verifier_unittest.cc b/chrome/browser/signin/force_signin_verifier_unittest.cc
index 9de003f..5edf531 100644
--- a/chrome/browser/signin/force_signin_verifier_unittest.cc
+++ b/chrome/browser/signin/force_signin_verifier_unittest.cc
@@ -4,9 +4,18 @@
 
 #include "chrome/browser/signin/force_signin_verifier.h"
 
+#include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
+#include "chrome/browser/signin/fake_signin_manager_builder.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
+#include "content/public/browser/network_service_instance.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "services/network/test/test_network_connection_tracker.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -15,10 +24,6 @@
   explicit MockForceSigninVerifier(Profile* profile)
       : ForceSigninVerifier(profile) {}
 
-  bool ShouldSendRequest() override { return true; }
-
-  void SendTestRequest() { SendRequest(); }
-
   bool IsDelayTaskPosted() { return GetOneShotTimerForTesting()->IsRunning(); }
 
   int FailureCount() { return GetBackoffEntryForTesting()->failure_count(); }
@@ -28,17 +33,42 @@
   MOCK_METHOD0(CloseAllBrowserWindows, void(void));
 };
 
-class ForceSigninVerifierTest : public ::testing::Test {
+class ForceSigninVerifierTest
+    : public ::testing::Test,
+      public network::NetworkConnectionTracker::NetworkConnectionObserver {
  public:
   void SetUp() override {
-    verifier_ = std::make_unique<MockForceSigninVerifier>(&profile_);
+    TestingProfile::Builder builder;
+    builder.AddTestingFactory(SigninManagerFactory::GetInstance(),
+                              BuildFakeSigninManagerBase);
+    builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
+                              BuildFakeProfileOAuth2TokenService);
+    profile_ = builder.Build();
+    FakeSigninManager* signin_manager_ = static_cast<FakeSigninManager*>(
+        SigninManagerFactory::GetForProfile(profile_.get()));
+    signin_manager_->SignIn("fake_id", "fake_username", "fake_password");
+
+    oauth2_token_service()->GetDelegate()->UpdateCredentials("fake_id",
+                                                             "fake_token");
   }
 
   void TearDown() override { verifier_.reset(); }
 
+  void OnConnectionChanged(network::mojom::ConnectionType type) override {
+    wait_for_network_type_change_.QuitWhenIdle();
+  }
+
+  FakeProfileOAuth2TokenService* oauth2_token_service() {
+    return static_cast<FakeProfileOAuth2TokenService*>(
+        ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()));
+  }
+
   std::unique_ptr<MockForceSigninVerifier> verifier_;
   content::TestBrowserThreadBundle bundle_;
-  TestingProfile profile_;
+  std::unique_ptr<TestingProfile> profile_;
+
+  base::RunLoop wait_for_network_type_change_;
+  base::RunLoop wait_for_network_type_async_return_;
 
   GoogleServiceAuthError persistent_error_ = GoogleServiceAuthError(
       GoogleServiceAuthError::State::INVALID_GAIA_CREDENTIALS);
@@ -49,22 +79,23 @@
 };
 
 TEST_F(ForceSigninVerifierTest, OnGetTokenSuccess) {
-  ASSERT_EQ(nullptr, verifier_->request());
-
-  verifier_->SendTestRequest();
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
 
   ASSERT_NE(nullptr, verifier_->request());
   ASSERT_FALSE(verifier_->HasTokenBeenVerified());
   ASSERT_FALSE(verifier_->IsDelayTaskPosted());
   EXPECT_CALL(*verifier_.get(), CloseAllBrowserWindows()).Times(0);
 
-  verifier_->OnGetTokenSuccess(verifier_->request(),
-                               OAuth2AccessTokenConsumer::TokenResponse());
+  FakeProfileOAuth2TokenService* service = oauth2_token_service();
+  ASSERT_EQ(1u, service->GetPendingRequests().size());
+  service->IssueAllTokensForAccount("fake_id",
+                                    OAuth2AccessTokenConsumer::TokenResponse());
+
   ASSERT_EQ(nullptr, verifier_->request());
   ASSERT_TRUE(verifier_->HasTokenBeenVerified());
   ASSERT_FALSE(verifier_->IsDelayTaskPosted());
   ASSERT_EQ(0, verifier_->FailureCount());
-  histogram_tester_.ExpectBucketCount(kForceSigninVerificationMetricsName, 0,
+  histogram_tester_.ExpectBucketCount(kForceSigninVerificationMetricsName, 1,
                                       1);
   histogram_tester_.ExpectTotalCount(
       kForceSigninVerificationSuccessTimeMetricsName, 1);
@@ -73,21 +104,22 @@
 }
 
 TEST_F(ForceSigninVerifierTest, OnGetTokenPersistentFailure) {
-  ASSERT_EQ(nullptr, verifier_->request());
-
-  verifier_->SendTestRequest();
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
 
   ASSERT_NE(nullptr, verifier_->request());
   ASSERT_FALSE(verifier_->HasTokenBeenVerified());
   ASSERT_FALSE(verifier_->IsDelayTaskPosted());
   EXPECT_CALL(*verifier_.get(), CloseAllBrowserWindows()).Times(1);
 
-  verifier_->OnGetTokenFailure(verifier_->request(), persistent_error_);
+  FakeProfileOAuth2TokenService* service = oauth2_token_service();
+  ASSERT_EQ(1u, service->GetPendingRequests().size());
+  service->IssueErrorForAllPendingRequests(persistent_error_);
+
   ASSERT_EQ(nullptr, verifier_->request());
   ASSERT_TRUE(verifier_->HasTokenBeenVerified());
   ASSERT_FALSE(verifier_->IsDelayTaskPosted());
   ASSERT_EQ(0, verifier_->FailureCount());
-  histogram_tester_.ExpectBucketCount(kForceSigninVerificationMetricsName, 0,
+  histogram_tester_.ExpectBucketCount(kForceSigninVerificationMetricsName, 1,
                                       1);
   histogram_tester_.ExpectTotalCount(
       kForceSigninVerificationSuccessTimeMetricsName, 0);
@@ -96,20 +128,22 @@
 }
 
 TEST_F(ForceSigninVerifierTest, OnGetTokenTransientFailure) {
-  ASSERT_EQ(nullptr, verifier_->request());
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
 
-  verifier_->SendTestRequest();
   ASSERT_NE(nullptr, verifier_->request());
   ASSERT_FALSE(verifier_->HasTokenBeenVerified());
   ASSERT_FALSE(verifier_->IsDelayTaskPosted());
   EXPECT_CALL(*verifier_.get(), CloseAllBrowserWindows()).Times(0);
 
-  verifier_->OnGetTokenFailure(verifier_->request(), transient_error_);
+  FakeProfileOAuth2TokenService* service = oauth2_token_service();
+  ASSERT_EQ(1u, service->GetPendingRequests().size());
+  service->IssueErrorForAllPendingRequests(transient_error_);
+
   ASSERT_EQ(nullptr, verifier_->request());
   ASSERT_FALSE(verifier_->HasTokenBeenVerified());
   ASSERT_TRUE(verifier_->IsDelayTaskPosted());
   ASSERT_EQ(1, verifier_->FailureCount());
-  histogram_tester_.ExpectBucketCount(kForceSigninVerificationMetricsName, 0,
+  histogram_tester_.ExpectBucketCount(kForceSigninVerificationMetricsName, 1,
                                       1);
   histogram_tester_.ExpectTotalCount(
       kForceSigninVerificationSuccessTimeMetricsName, 0);
@@ -118,14 +152,22 @@
 }
 
 TEST_F(ForceSigninVerifierTest, OnLostConnection) {
-  verifier_->SendTestRequest();
-  verifier_->OnGetTokenFailure(verifier_->request(), transient_error_);
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
+
+  content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
+
+  FakeProfileOAuth2TokenService* service = oauth2_token_service();
+  ASSERT_EQ(1u, service->GetPendingRequests().size());
+  service->IssueErrorForAllPendingRequests(transient_error_);
+
   ASSERT_EQ(1, verifier_->FailureCount());
   ASSERT_EQ(nullptr, verifier_->request());
   ASSERT_TRUE(verifier_->IsDelayTaskPosted());
 
-  verifier_->OnConnectionChanged(
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
       network::mojom::ConnectionType::CONNECTION_NONE);
+  wait_for_network_type_change_.Run();
+  content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
 
   ASSERT_EQ(0, verifier_->FailureCount());
   ASSERT_EQ(nullptr, verifier_->request());
@@ -133,16 +175,140 @@
 }
 
 TEST_F(ForceSigninVerifierTest, OnReconnected) {
-  verifier_->SendTestRequest();
-  verifier_->OnGetTokenFailure(verifier_->request(), transient_error_);
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
+
+  content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
+
+  FakeProfileOAuth2TokenService* service = oauth2_token_service();
+  ASSERT_EQ(1u, service->GetPendingRequests().size());
+  service->IssueErrorForAllPendingRequests(transient_error_);
+
   ASSERT_EQ(1, verifier_->FailureCount());
   ASSERT_EQ(nullptr, verifier_->request());
   ASSERT_TRUE(verifier_->IsDelayTaskPosted());
 
-  verifier_->OnConnectionChanged(
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
       network::mojom::ConnectionType::CONNECTION_WIFI);
+  wait_for_network_type_change_.Run();
+  content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
 
   ASSERT_EQ(0, verifier_->FailureCount());
   ASSERT_NE(nullptr, verifier_->request());
   ASSERT_FALSE(verifier_->IsDelayTaskPosted());
 }
+
+TEST_F(ForceSigninVerifierTest, GetNetworkStatusAsync) {
+  network::TestNetworkConnectionTracker::GetInstance()->SetRespondSynchronously(
+      false);
+
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
+
+  // There is no network type at first.
+  ASSERT_EQ(nullptr, verifier_->request());
+
+  // Waiting for the network type returns.
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, wait_for_network_type_async_return_.QuitClosure());
+  wait_for_network_type_async_return_.Run();
+
+  // Get the type and send the request.
+  ASSERT_NE(nullptr, verifier_->request());
+}
+
+TEST_F(ForceSigninVerifierTest, LaunchVerifierWithoutNetwork) {
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_NONE);
+  network::TestNetworkConnectionTracker::GetInstance()->SetRespondSynchronously(
+      false);
+
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
+
+  // There is no network type.
+  ASSERT_EQ(nullptr, verifier_->request());
+
+  // Waiting for the network type returns.
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, wait_for_network_type_async_return_.QuitClosure());
+  wait_for_network_type_async_return_.Run();
+
+  // Get the type, there is no network connection, don't send the request.
+  ASSERT_EQ(nullptr, verifier_->request());
+
+  // Network is resumed.
+  content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
+  wait_for_network_type_change_.Run();
+  content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
+
+  // Send the request.
+  ASSERT_NE(nullptr, verifier_->request());
+}
+
+TEST_F(ForceSigninVerifierTest, ChangeNetworkFromWIFITo4GWithOnGoingRequest) {
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
+  network::TestNetworkConnectionTracker::GetInstance()->SetRespondSynchronously(
+      false);
+
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
+  FakeProfileOAuth2TokenService* service = oauth2_token_service();
+
+  EXPECT_EQ(nullptr, verifier_->request());
+
+  // Waiting for the network type returns.
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, wait_for_network_type_async_return_.QuitClosure());
+  wait_for_network_type_async_return_.Run();
+
+  // The network type if wifi, send the request.
+  auto* first_request = verifier_->request();
+  EXPECT_NE(nullptr, first_request);
+  EXPECT_EQ(1u, service->GetPendingRequests().size());
+
+  // Network is changed to 4G.
+  content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_4G);
+  wait_for_network_type_change_.Run();
+  content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
+
+  // There is still one on-going request.
+  EXPECT_EQ(first_request, verifier_->request());
+  EXPECT_EQ(1u, service->GetPendingRequests().size());
+}
+
+TEST_F(ForceSigninVerifierTest, ChangeNetworkFromWIFITo4GWithFinishedRequest) {
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
+  network::TestNetworkConnectionTracker::GetInstance()->SetRespondSynchronously(
+      false);
+
+  verifier_ = std::make_unique<MockForceSigninVerifier>(profile_.get());
+  FakeProfileOAuth2TokenService* service = oauth2_token_service();
+
+  EXPECT_EQ(nullptr, verifier_->request());
+
+  // Waiting for the network type returns.
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, wait_for_network_type_async_return_.QuitClosure());
+  wait_for_network_type_async_return_.Run();
+
+  // The network type if wifi, send the request.
+  EXPECT_NE(nullptr, verifier_->request());
+
+  // Finishes the request.
+  service->IssueAllTokensForAccount("fake_id",
+                                    OAuth2AccessTokenConsumer::TokenResponse());
+  EXPECT_EQ(nullptr, verifier_->request());
+
+  // Network is changed to 4G.
+  content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_4G);
+  wait_for_network_type_change_.Run();
+  content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
+
+  // No more request because it's verfied already.
+  EXPECT_EQ(nullptr, verifier_->request());
+}
diff --git a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
index 3df34e9..0a511f4 100644
--- a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
+++ b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
@@ -173,7 +173,8 @@
       return OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS;
   }
   NOTREACHED();
-  return OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_UNKNOWN;
+  return OAuth2TokenServiceDelegate::
+      LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS;
 }
 
 // Returns whether the token service should be migrated to Dice.
@@ -339,7 +340,6 @@
         bool revoke_all_tokens_on_load,
         bool can_revoke_credentials)
     : web_data_service_request_(0),
-      load_credentials_state_(LOAD_CREDENTIALS_NOT_STARTED),
       backoff_entry_(&backoff_policy_),
       backoff_error_(GoogleServiceAuthError::NONE),
       client_(client),
@@ -476,25 +476,20 @@
   return client_->GetURLLoaderFactory();
 }
 
-OAuth2TokenServiceDelegate::LoadCredentialsState
-MutableProfileOAuth2TokenServiceDelegate::GetLoadCredentialsState() const {
-  return load_credentials_state_;
-}
-
 void MutableProfileOAuth2TokenServiceDelegate::LoadCredentials(
     const std::string& primary_account_id) {
-  if (load_credentials_state_ == LOAD_CREDENTIALS_IN_PROGRESS) {
+  if (load_credentials_state() == LOAD_CREDENTIALS_IN_PROGRESS) {
     VLOG(1) << "Load credentials operation already in progress";
     return;
   }
 
-  load_credentials_state_ = LOAD_CREDENTIALS_IN_PROGRESS;
+  set_load_credentials_state(LOAD_CREDENTIALS_IN_PROGRESS);
 
 #if defined(OS_CHROMEOS)
   // ChromeOS OOBE loads credentials without a primary account and expects this
   // to be a no-op. See htttp://crbug.com/891818
   if (primary_account_id.empty()) {
-    load_credentials_state_ = LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS;
+    set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
     FinishLoadingCredentials();
     return;
   }
@@ -510,7 +505,7 @@
   if (!token_web_data_) {
     // This case only exists in unit tests that do not care about loading
     // credentials.
-    load_credentials_state_ = LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS;
+    set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS);
     FinishLoadingCredentials();
     return;
   }
@@ -542,10 +537,10 @@
     const WDResult<TokenResult>* token_result =
         static_cast<const WDResult<TokenResult>*>(result.get());
     LoadAllCredentialsIntoMemory(token_result->GetValue().tokens);
-    load_credentials_state_ =
-        LoadCredentialsStateFromTokenResult(token_result->GetValue().db_result);
+    set_load_credentials_state(LoadCredentialsStateFromTokenResult(
+        token_result->GetValue().db_result));
   } else {
-    load_credentials_state_ = LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS;
+    set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS);
   }
 
   // Make sure that we have an entry for |loading_primary_account_id_| in the
@@ -553,9 +548,9 @@
   // while this profile is connected to an account.
   if (!loading_primary_account_id_.empty() &&
       refresh_tokens_.count(loading_primary_account_id_) == 0) {
-    if (load_credentials_state_ == LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS) {
-      load_credentials_state_ =
-          LOAD_CREDENTIALS_FINISHED_WITH_NO_TOKEN_FOR_PRIMARY_ACCOUNT;
+    if (load_credentials_state() == LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS) {
+      set_load_credentials_state(
+          LOAD_CREDENTIALS_FINISHED_WITH_NO_TOKEN_FOR_PRIMARY_ACCOUNT);
     }
     AddAccountStatus(loading_primary_account_id_, kInvalidRefreshToken,
                      GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
@@ -902,8 +897,5 @@
 }
 
 void MutableProfileOAuth2TokenServiceDelegate::FinishLoadingCredentials() {
-  DCHECK(load_credentials_state_ != LOAD_CREDENTIALS_UNKNOWN);
-  DCHECK(load_credentials_state_ != LOAD_CREDENTIALS_NOT_STARTED);
-  DCHECK(load_credentials_state_ != LOAD_CREDENTIALS_IN_PROGRESS);
   FireRefreshTokensLoaded();
 }
diff --git a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.h b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.h
index 529742e..0148fdf 100644
--- a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.h
+++ b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.h
@@ -72,7 +72,6 @@
 
   // Overridden from OAuth2TokenServiceDelegate.
   void Shutdown() override;
-  LoadCredentialsState GetLoadCredentialsState() const override;
 
   // Overridden from NetworkConnectionTracker::NetworkConnectionObserver.
   void OnConnectionChanged(network::mojom::ConnectionType type) override;
@@ -207,9 +206,6 @@
   // credentials.  This member is empty otherwise.
   std::string loading_primary_account_id_;
 
-  // The state of the load credentials operation.
-  LoadCredentialsState load_credentials_state_;
-
   std::vector<std::unique_ptr<RevokeServerRefreshToken>> server_revokes_;
 
   // Used to verify that certain methods are called only on the thread on which
diff --git a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate_unittest.cc b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate_unittest.cc
index e11a44f..ffb081b 100644
--- a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate_unittest.cc
+++ b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate_unittest.cc
@@ -374,11 +374,11 @@
   oauth2_service_delegate_->RevokeAllCredentials();
 
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_NOT_STARTED,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   oauth2_service_delegate_->LoadCredentials("");
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
 }
 
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest,
@@ -391,14 +391,14 @@
 
   // Perform a load from an empty DB.
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_NOT_STARTED,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   oauth2_service_delegate_->LoadCredentials("account_id");
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(OAuth2TokenServiceDelegate::
                 LOAD_CREDENTIALS_FINISHED_WITH_NO_TOKEN_FOR_PRIMARY_ACCOUNT,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   EXPECT_EQ(GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
                 GoogleServiceAuthError::InvalidGaiaCredentialsReason::
                     CREDENTIALS_MISSING),
@@ -438,10 +438,10 @@
 
   oauth2_service_delegate_->LoadCredentials("account_id");
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
             signin_error_controller_.auth_error());
   EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
@@ -478,13 +478,13 @@
   ResetObserverCounts();
   // Perform a load from an empty DB.
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_NOT_STARTED,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   oauth2_service_delegate_->LoadCredentials("");
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   EXPECT_EQ(1, start_batch_changes_);
   EXPECT_EQ(1, end_batch_changes_);
   EXPECT_EQ(0, auth_error_changed_count_);
@@ -505,10 +505,10 @@
 
   oauth2_service_delegate_->LoadCredentials("");
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
   EXPECT_EQ(2, token_available_count_);
   EXPECT_EQ(0, token_revoked_count_);
   EXPECT_EQ(1, tokens_loaded_count_);
@@ -565,7 +565,7 @@
   EXPECT_TRUE(oauth2_service_delegate_->RefreshTokenIsAvailable(
       secondary_account.account_id));
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
 
   EXPECT_FALSE(pref_service_.GetBoolean(prefs::kTokenServiceDiceCompatible));
 }
@@ -606,7 +606,7 @@
   EXPECT_TRUE(oauth2_service_delegate_->RefreshTokenIsAvailable(
       secondary_account.account_id));
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
 
   EXPECT_TRUE(pref_service_.GetBoolean(prefs::kTokenServiceDiceCompatible));
 }
@@ -645,7 +645,7 @@
   EXPECT_TRUE(oauth2_service_delegate_->RefreshTokenIsAvailable(
       primary_account.account_id));
   EXPECT_EQ(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
 
   EXPECT_TRUE(pref_service_.GetBoolean(prefs::kTokenServiceDiceCompatible));
 }
@@ -692,7 +692,7 @@
           .GetInvalidGaiaCredentialsReason());
   EXPECT_EQ(OAuth2TokenServiceDelegate::
                 LOAD_CREDENTIALS_FINISHED_WITH_NO_TOKEN_FOR_PRIMARY_ACCOUNT,
-            oauth2_service_delegate_->GetLoadCredentialsState());
+            oauth2_service_delegate_->load_credentials_state());
 
   EXPECT_TRUE(pref_service_.GetBoolean(prefs::kTokenServiceDiceCompatible));
 }
diff --git a/chrome/browser/signin/oauth2_token_service_delegate_android.cc b/chrome/browser/signin/oauth2_token_service_delegate_android.cc
index a8cc59c..647e264 100644
--- a/chrome/browser/signin/oauth2_token_service_delegate_android.cc
+++ b/chrome/browser/signin/oauth2_token_service_delegate_android.cc
@@ -463,6 +463,10 @@
 
 void OAuth2TokenServiceDelegateAndroid::FireRefreshTokensLoaded() {
   DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::FireRefreshTokensLoaded";
+
+  DCHECK_EQ(LOAD_CREDENTIALS_IN_PROGRESS, load_credentials_state());
+  set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
+
   JNIEnv* env = AttachCurrentThread();
   Java_OAuth2TokenService_notifyRefreshTokensLoaded(env, java_ref_);
   OAuth2TokenServiceDelegate::FireRefreshTokensLoaded();
@@ -486,6 +490,8 @@
 
 void OAuth2TokenServiceDelegateAndroid::LoadCredentials(
     const std::string& primary_account_id) {
+  DCHECK_EQ(LOAD_CREDENTIALS_NOT_STARTED, load_credentials_state());
+  set_load_credentials_state(LOAD_CREDENTIALS_IN_PROGRESS);
   if (primary_account_id.empty()) {
     FireRefreshTokensLoaded();
     return;
diff --git a/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc b/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc
index fd1f8aa..fb001fc 100644
--- a/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc
+++ b/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc
@@ -47,6 +47,7 @@
         email_("foo@bar.com"),
         auth_error_(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS) {
     AccountTrackerService::RegisterPrefs(pref_service_.registry());
+    ProfileOAuth2TokenService::RegisterProfilePrefs(pref_service_.registry());
     SigninManager::RegisterProfilePrefs(pref_service_.registry());
     account_tracker_service_.Initialize(&pref_service_, base::FilePath());
   }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index cde0af8..9df30a8 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -3406,6 +3406,7 @@
       "//apps",
       "//chrome/browser/apps",
       "//chrome/browser/apps/platform_apps",  # TODO(loyso): Remove this dep.
+      "//chrome/browser/apps/platform_apps/api",
       "//chrome/browser/extensions",
       "//chrome/common/extensions/api",
       "//components/drive",
@@ -3417,6 +3418,7 @@
     ]
     allow_circular_includes_from += [
       "//chrome/browser/apps/platform_apps",
+      "//chrome/browser/apps/platform_apps/api",
       "//chrome/browser/extensions",
     ]
     sources += [
diff --git a/chrome/browser/ui/app_list/app_context_menu_unittest.cc b/chrome/browser/ui/app_list/app_context_menu_unittest.cc
index 7637972c..738f8b7 100644
--- a/chrome/browser/ui/app_list/app_context_menu_unittest.cc
+++ b/chrome/browser/ui/app_list/app_context_menu_unittest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "ash/public/cpp/app_menu_constants.h"
+#include "base/bind.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
@@ -143,7 +144,7 @@
       arc::IconDecodeRequest::DisableSafeDecodingForTesting();
     }
     extensions::MenuManagerFactory::GetInstance()->SetTestingFactory(
-        profile(), MenuManagerFactory);
+        profile(), base::BindRepeating(&MenuManagerFactory));
     controller_ = std::make_unique<FakeAppListControllerDelegate>();
     menu_delegate_ = std::make_unique<FakeAppContextMenuDelegate>();
     model_updater_ = std::make_unique<FakeAppListModelUpdater>();
diff --git a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
index 4681e70..5ddd291 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
@@ -520,7 +520,7 @@
   // ArcAppModelBuilderTest:
   void OnBeforeArcTestSetup() override {
     arc::ArcPackageSyncableServiceFactory::GetInstance()->SetTestingFactory(
-        profile_.get(), nullptr);
+        profile_.get(), BrowserContextKeyedServiceFactory::TestingFactory());
   }
 
  private:
diff --git a/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider_unittest.cc b/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider_unittest.cc
index fcd40fc3..a0b1846c 100644
--- a/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider_unittest.cc
+++ b/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider_unittest.cc
@@ -10,6 +10,7 @@
 #include <utility>
 
 #include "ash/public/cpp/app_list/app_list_features.h"
+#include "base/bind.h"
 #include "base/macros.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/field_trial_params.h"
@@ -159,7 +160,7 @@
     std::unique_ptr<AnswerCardContents> contents0(contents0_);
     std::unique_ptr<AnswerCardContents> contents1(contents1_);
     TemplateURLServiceFactory::GetInstance()->SetTestingFactory(
-        profile_.get(), CreateTemplateURLService);
+        profile_.get(), base::BindRepeating(&CreateTemplateURLService));
     // Provider will own the MockAnswerCardContents instance.
     provider_ = std::make_unique<AnswerCardSearchProvider>(
         profile_.get(), model_updater_.get(), nullptr, std::move(contents0),
diff --git a/chrome/browser/ui/ash/session_controller_client_unittest.cc b/chrome/browser/ui/ash/session_controller_client_unittest.cc
index 3ce04dd5..d144f6e 100644
--- a/chrome/browser/ui/ash/session_controller_client_unittest.cc
+++ b/chrome/browser/ui/ash/session_controller_client_unittest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "ash/public/cpp/ash_pref_names.h"
+#include "base/bind.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
@@ -393,7 +394,7 @@
   g_policy_cert_verifier_for_factory = cert_verifier_.get();
   ASSERT_TRUE(
       policy::PolicyCertServiceFactory::GetInstance()->SetTestingFactoryAndUse(
-          user_profile, CreateTestPolicyCertService));
+          user_profile, base::BindRepeating(&CreateTestPolicyCertService)));
   policy::PolicyCertService* service =
       policy::PolicyCertServiceFactory::GetForProfile(user_profile);
   ASSERT_TRUE(service);
diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc b/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc
index 185ddc5..62b0386 100644
--- a/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc
+++ b/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc
@@ -560,41 +560,41 @@
 
   // Test Normal state <--> Tab fullscreen mode.
   EXPECT_FALSE(context->IsFullscreen());
-  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+  EXPECT_TRUE(browser()->window()->IsToolbarVisible());
 
   EnterActiveTabFullscreen();
   EXPECT_TRUE(context->IsFullscreen());
-  EXPECT_TRUE(context->ShouldHideUIForFullscreen());
+  EXPECT_FALSE(browser()->window()->IsToolbarVisible());
 
   SendEscapeToFullscreenController();
   EXPECT_FALSE(context->IsFullscreen());
-  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+  EXPECT_TRUE(browser()->window()->IsToolbarVisible());
 
   // Test Normal state <--> Browser fullscreen mode <--> Tab fullscreen mode.
   ToggleBrowserFullscreen();
   EXPECT_TRUE(context->IsFullscreen());
 #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
-  bool should_hide_top_ui = false;
+  bool should_show_top_ui = true;
 #else
-  bool should_hide_top_ui = true;
+  bool should_show_top_ui = false;
 #endif
-  EXPECT_EQ(should_hide_top_ui, context->ShouldHideUIForFullscreen());
+  EXPECT_EQ(should_show_top_ui, browser()->window()->IsToolbarVisible());
 
   EnterActiveTabFullscreen();
   EXPECT_TRUE(context->IsFullscreen());
 #if defined(OS_CHROMEOS)
-  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+  EXPECT_TRUE(browser()->window()->IsToolbarVisible());
 #else
-  EXPECT_TRUE(context->ShouldHideUIForFullscreen());
+  EXPECT_FALSE(browser()->window()->IsToolbarVisible());
 #endif
 
   SendEscapeToFullscreenController();
   EXPECT_TRUE(context->IsFullscreen());
-  EXPECT_EQ(should_hide_top_ui, context->ShouldHideUIForFullscreen());
+  EXPECT_EQ(should_show_top_ui, browser()->window()->IsToolbarVisible());
 
   ToggleBrowserFullscreen();
   EXPECT_FALSE(context->IsFullscreen());
-  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+  EXPECT_TRUE(browser()->window()->IsToolbarVisible());
 
   // Test exiting tab fullscreen mode by toggling browser fullscreen mode.
   // This is to simulate pressing fullscreen shortcut key during tab fullscreen
@@ -603,13 +603,13 @@
   // tab fullscreen.
   EnterActiveTabFullscreen();
   EXPECT_TRUE(context->IsFullscreen());
-  EXPECT_TRUE(context->ShouldHideUIForFullscreen());
+  EXPECT_FALSE(browser()->window()->IsToolbarVisible());
 
   ToggleBrowserFullscreen();
   EXPECT_FALSE(context->IsFullscreen());
-  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+  EXPECT_TRUE(browser()->window()->IsToolbarVisible());
 
   ToggleBrowserFullscreen();
   EXPECT_TRUE(context->IsFullscreen());
-  EXPECT_EQ(should_hide_top_ui, context->ShouldHideUIForFullscreen());
+  EXPECT_EQ(should_show_top_ui, browser()->window()->IsToolbarVisible());
 }
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
index e03d133..f832ef7 100644
--- a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
@@ -25,6 +25,7 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/renderer_preferences.h"
+#include "content/public/common/url_constants.h"
 #include "content/public/common/web_preferences.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
@@ -39,20 +40,6 @@
 
 namespace {
 
-// Returns the scheme that page URLs should be, in order to be considered
-// "secure", for an app URL of scheme |scheme|.
-//
-// All pages (even if the app was created with scheme "http") are expected to
-// have scheme "https", since "http" is not secure. As a special exception,
-// pages for "chrome-extension" apps are expected to have the same scheme (since
-// that scheme is secure).
-base::StringPiece ExpectedSchemeForApp(base::StringPiece scheme) {
-  if (scheme == kExtensionScheme)
-    return scheme;
-
-  return url::kHttpsScheme;
-}
-
 bool IsSiteSecure(const content::WebContents* web_contents) {
   const SecurityStateTabHelper* helper =
       SecurityStateTabHelper::FromWebContents(web_contents);
@@ -76,15 +63,12 @@
   return false;
 }
 
-// Returns true if |page_url| is both secure (not http) and on the same origin
-// as |app_url|. Note that even if |app_url| is http, this still returns true as
-// long as |page_url| is https. To avoid breaking Hosted Apps and Bookmark Apps
-// that might redirect to sites in the same domain but with "www.", this returns
-// true if |page_url| is secure and in the same origin as |app_url| with "www.".
-bool IsSameOriginAndSecure(const GURL& app_url, const GURL& page_url) {
-  return ExpectedSchemeForApp(app_url.scheme_piece()) ==
-             page_url.scheme_piece() &&
-         (app_url.host_piece() == page_url.host_piece() ||
+// Returns true if |app_url| and |page_url| are the same origin. To avoid
+// breaking Hosted Apps and Bookmark Apps that might redirect to sites in the
+// same domain but with "www.", this returns true if |page_url| is secure and in
+// the same origin as |app_url| with "www.".
+bool IsSameHostAndPort(const GURL& app_url, const GURL& page_url) {
+  return (app_url.host_piece() == page_url.host_piece() ||
           std::string("www.") + app_url.host() == page_url.host_piece()) &&
          app_url.port() == page_url.port();
 }
@@ -163,40 +147,58 @@
 }
 
 bool HostedAppBrowserController::ShouldShowLocationBar() const {
+  // The extension can be null if this is invoked after uninstall.
   const Extension* extension = GetExtension();
+  if (!extension)
+    return false;
+
+  DCHECK(extension->is_hosted_app());
 
   const content::WebContents* web_contents =
       browser_->tab_strip_model()->GetActiveWebContents();
 
-  // Default to not showing the location bar if either |extension| or
-  // |web_contents| are null. |extension| is null for the dev tools.
-  if (!extension || !web_contents)
-    return false;
-
-  if (!extension->is_hosted_app())
-    return false;
-
   // Don't show a location bar until a navigation has occurred.
-  if (web_contents->GetLastCommittedURL().is_empty())
+  if (!web_contents || web_contents->GetLastCommittedURL().is_empty())
     return false;
 
   GURL launch_url = AppLaunchInfo::GetLaunchWebURL(extension);
-  if (!IsSameOriginAndSecure(launch_url, web_contents->GetLastCommittedURL()))
-    return true;
+  base::StringPiece launch_scheme = launch_url.scheme_piece();
 
-  // Check the visible URL, because we would like to indicate to the user that
-  // they are navigating to a different origin than that of the app as soon as
-  // the navigation starts, even if the navigation hasn't committed yet.
-  if (!IsSameOriginAndSecure(launch_url, web_contents->GetVisibleURL()))
-    return true;
+  bool is_internal_launch_scheme = launch_scheme == kExtensionScheme ||
+                                   launch_scheme == content::kChromeUIScheme;
 
-  // We consider URLs with kExtensionScheme secure.
-  if (!(IsSiteSecure(web_contents) ||
-        web_contents->GetLastCommittedURL().scheme_piece() ==
-            kExtensionScheme)) {
+  GURL last_committed_url = web_contents->GetLastCommittedURL();
+
+  // We check the visible URL to indicate to the user that they are navigating
+  // to a different origin than that of the app as soon as the navigation
+  // starts, even if the navigation hasn't committed yet.
+  GURL visible_url = web_contents->GetVisibleURL();
+
+  // The current page must be secure for us to hide the location bar. However,
+  // the chrome-extension:// and chrome:// launch URL apps can hide the location
+  // bar, if the current WebContents URLs are the same as the launch scheme.
+  //
+  // Note that the launch scheme may be insecure, but as long as the current
+  // page's scheme is secure, we can hide the location bar.
+  base::StringPiece secure_page_scheme =
+      is_internal_launch_scheme ? launch_scheme : url::kHttpsScheme;
+
+  // Insecure page schemes show the location bar.
+  if (last_committed_url.scheme_piece() != secure_page_scheme ||
+      visible_url.scheme_piece() != secure_page_scheme) {
     return true;
   }
 
+  // Page URLs that do not match the launch URL's host and port show the
+  // location bar.
+  if (!IsSameHostAndPort(launch_url, last_committed_url) ||
+      !IsSameHostAndPort(launch_url, visible_url))
+    return true;
+
+  // Insecure external web sites show the location bar.
+  if (!is_internal_launch_scheme && !IsSiteSecure(web_contents))
+    return true;
+
   return false;
 }
 
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
index 104651d1..89b0fda 100644
--- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -45,6 +45,7 @@
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/web_application_info.h"
+#include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/security_interstitials/core/controller_client.h"
 #include "content/public/browser/child_process_security_policy.h"
@@ -701,47 +702,6 @@
                                  app_url.ReplaceComponents(scheme_http), true);
 }
 
-// Check that location bar is not shown for apps hosted within extensions pages.
-// This simulates a case where the user has manually navigated to a page hosted
-// within an extension, then added it as a bookmark app.
-// Regression test for https://crbug.com/828233.
-IN_PROC_BROWSER_TEST_P(HostedAppTest, ShouldShowLocationBarForExtensionPage) {
-  // Test only applies for bookmark apps.
-  if (app_type() != AppType::BOOKMARK_APP)
-    return;
-
-  // Note: This involves the creation of *two* extensions: The first is a
-  // regular (non-app) extension with a popup page. The second is a bookmark app
-  // created from the popup page URL (allowing the extension's popup page to be
-  // loaded in a window).
-
-  // Install the extension that has the popup page.
-  ASSERT_TRUE(LoadExtension(
-      test_data_dir_.AppendASCII("ui").AppendASCII("browser_action_popup")));
-  base::RunLoop().RunUntilIdle();  // Ensure the extension is fully loaded.
-
-  // Install the bookmark app that links to the extension's popup page.
-  GURL popup_url("chrome-extension://" + last_loaded_extension_id() +
-                 "/popup.html");
-  // TODO(mgiuca): Abstract this logic to share code with InstallPWA (which does
-  // almost the same thing, but also sets a scope).
-  WebApplicationInfo web_app_info;
-  web_app_info.app_url = popup_url;
-  app_ = InstallBookmarkApp(web_app_info);
-
-  ui_test_utils::UrlLoadObserver url_observer(
-      popup_url, content::NotificationService::AllSources());
-  app_browser_ = LaunchAppBrowser(app_);
-  url_observer.Wait();
-
-  CHECK(app_browser_);
-  CHECK(app_browser_ != browser());
-
-  // Navigate to the app's launch page; the location bar should not be visible,
-  // because extensions pages are secure.
-  NavigateAndCheckForLocationBar(app_browser_, popup_url, false);
-}
-
 // Check that the location bar is shown correctly for apps that specify start
 // URLs without the 'www.' prefix.
 IN_PROC_BROWSER_TEST_P(HostedAppTest, ShouldShowLocationBarForAppWithoutWWW) {
@@ -851,38 +811,6 @@
   EXPECT_EQ("This page has no title.", result);
 }
 
-IN_PROC_BROWSER_TEST_P(HostedAppTest, BookmarkAppThemeColor) {
-  if (app_type() != AppType::BOOKMARK_APP)
-    return;
-
-  {
-    WebApplicationInfo web_app_info;
-    web_app_info.app_url = GURL(kExampleURL);
-    web_app_info.scope = GURL(kExampleURL);
-    web_app_info.theme_color = SkColorSetA(SK_ColorBLUE, 0xF0);
-    const extensions::Extension* app = InstallBookmarkApp(web_app_info);
-    Browser* app_browser = LaunchAppBrowser(app);
-
-    EXPECT_EQ(web_app::GetAppIdFromApplicationName(app_browser->app_name()),
-              app->id());
-    EXPECT_EQ(SkColorSetA(*web_app_info.theme_color, SK_AlphaOPAQUE),
-              app_browser->hosted_app_controller()->GetThemeColor().value());
-  }
-  {
-    WebApplicationInfo web_app_info;
-    web_app_info.app_url = GURL("http://example.org/2");
-    web_app_info.scope = GURL("http://example.org/");
-    web_app_info.theme_color = base::Optional<SkColor>();
-    const extensions::Extension* app = InstallBookmarkApp(web_app_info);
-    Browser* app_browser = LaunchAppBrowser(app);
-
-    EXPECT_EQ(web_app::GetAppIdFromApplicationName(app_browser->app_name()),
-              app->id());
-    EXPECT_FALSE(
-        app_browser->hosted_app_controller()->GetThemeColor().has_value());
-  }
-}
-
 // Check that no assertions are hit when showing a permission request bubble.
 IN_PROC_BROWSER_TEST_P(HostedAppTest, PermissionBubble) {
   ASSERT_TRUE(https_server()->Start());
@@ -904,29 +832,6 @@
       "navigator.geolocation.getCurrentPosition(function(){});"));
 }
 
-// Ensure that hosted app windows with blank titles don't display the URL as a
-// default window title.
-IN_PROC_BROWSER_TEST_P(HostedAppTest, Title) {
-  if (app_type() != AppType::BOOKMARK_APP)
-    return;
-
-  ASSERT_TRUE(embedded_test_server()->Start());
-  GURL url = embedded_test_server()->GetURL("app.site.com", "/empty.html");
-  WebApplicationInfo web_app_info;
-  web_app_info.app_url = url;
-  const extensions::Extension* app = InstallBookmarkApp(web_app_info);
-
-  Browser* app_browser = LaunchAppBrowser(app);
-  content::WebContents* web_contents =
-      app_browser->tab_strip_model()->GetActiveWebContents();
-  content::WaitForLoadStop(web_contents);
-  EXPECT_EQ(base::string16(), app_browser->GetWindowTitleForCurrentTab(false));
-  NavigateToURLAndWait(app_browser, embedded_test_server()->GetURL(
-                                        "app.site.com", "/simple.html"));
-  EXPECT_EQ(base::ASCIIToUTF16("OK"),
-            app_browser->GetWindowTitleForCurrentTab(false));
-}
-
 // Tests that regular Hosted Apps and Bookmark Apps can still load mixed
 // content.
 IN_PROC_BROWSER_TEST_P(HostedAppTest, MixedContentInBookmarkApp) {
@@ -1415,6 +1320,17 @@
 }
 #endif
 
+// Check that the location bar is shown correctly with a System App.
+IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest,
+                       ShouldShowLocationBarForSystemApp) {
+  const GURL app_url(chrome::kChromeUISettingsURL);
+
+  SetupAppWithURL(app_url);
+
+  // Navigate to the app's launch page; the location bar should be hidden.
+  NavigateAndCheckForLocationBar(app_browser_, app_url, false);
+}
+
 IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, EngagementHistogram) {
   base::HistogramTester histograms;
   WebApplicationInfo web_app_info;
@@ -2524,6 +2440,95 @@
                             "window.open('', 'bg2').document.body.innerText"));
 }
 
+using BookmarkAppOnlyTest = HostedAppTest;
+
+IN_PROC_BROWSER_TEST_P(BookmarkAppOnlyTest, ThemeColor) {
+  {
+    WebApplicationInfo web_app_info;
+    web_app_info.app_url = GURL(kExampleURL);
+    web_app_info.scope = GURL(kExampleURL);
+    web_app_info.theme_color = SkColorSetA(SK_ColorBLUE, 0xF0);
+    const extensions::Extension* app = InstallBookmarkApp(web_app_info);
+    Browser* app_browser = LaunchAppBrowser(app);
+
+    EXPECT_EQ(web_app::GetAppIdFromApplicationName(app_browser->app_name()),
+              app->id());
+    EXPECT_EQ(SkColorSetA(*web_app_info.theme_color, SK_AlphaOPAQUE),
+              app_browser->hosted_app_controller()->GetThemeColor().value());
+  }
+  {
+    WebApplicationInfo web_app_info;
+    web_app_info.app_url = GURL("http://example.org/2");
+    web_app_info.scope = GURL("http://example.org/");
+    web_app_info.theme_color = base::Optional<SkColor>();
+    const extensions::Extension* app = InstallBookmarkApp(web_app_info);
+    Browser* app_browser = LaunchAppBrowser(app);
+
+    EXPECT_EQ(web_app::GetAppIdFromApplicationName(app_browser->app_name()),
+              app->id());
+    EXPECT_FALSE(
+        app_browser->hosted_app_controller()->GetThemeColor().has_value());
+  }
+}
+
+// Check that location bar is not shown for apps hosted within extensions pages.
+// This simulates a case where the user has manually navigated to a page hosted
+// within an extension, then added it as a bookmark app.
+// Regression test for https://crbug.com/828233.
+IN_PROC_BROWSER_TEST_P(BookmarkAppOnlyTest,
+                       ShouldShowLocationBarForExtensionPage) {
+  // Note: This involves the creation of *two* extensions: The first is a
+  // regular (non-app) extension with a popup page. The second is a bookmark app
+  // created from the popup page URL (allowing the extension's popup page to be
+  // loaded in a window).
+
+  // Install the extension that has the popup page.
+  ASSERT_TRUE(LoadExtension(
+      test_data_dir_.AppendASCII("ui").AppendASCII("browser_action_popup")));
+  base::RunLoop().RunUntilIdle();  // Ensure the extension is fully loaded.
+
+  // Install the bookmark app that links to the extension's popup page.
+  GURL popup_url("chrome-extension://" + last_loaded_extension_id() +
+                 "/popup.html");
+  // TODO(mgiuca): Abstract this logic to share code with InstallPWA (which does
+  // almost the same thing, but also sets a scope).
+  WebApplicationInfo web_app_info;
+  web_app_info.app_url = popup_url;
+  app_ = InstallBookmarkApp(web_app_info);
+
+  ui_test_utils::UrlLoadObserver url_observer(
+      popup_url, content::NotificationService::AllSources());
+  app_browser_ = LaunchAppBrowser(app_);
+  url_observer.Wait();
+
+  CHECK(app_browser_);
+  CHECK(app_browser_ != browser());
+
+  // Navigate to the app's launch page; the location bar should not be visible,
+  // because extensions pages are secure.
+  NavigateAndCheckForLocationBar(app_browser_, popup_url, false);
+}
+
+// Ensure that hosted app windows with blank titles don't display the URL as a
+// default window title.
+IN_PROC_BROWSER_TEST_P(BookmarkAppOnlyTest, Title) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url = embedded_test_server()->GetURL("app.site.com", "/empty.html");
+  WebApplicationInfo web_app_info;
+  web_app_info.app_url = url;
+  const extensions::Extension* app = InstallBookmarkApp(web_app_info);
+
+  Browser* app_browser = LaunchAppBrowser(app);
+  content::WebContents* web_contents =
+      app_browser->tab_strip_model()->GetActiveWebContents();
+  content::WaitForLoadStop(web_contents);
+  EXPECT_EQ(base::string16(), app_browser->GetWindowTitleForCurrentTab(false));
+  NavigateToURLAndWait(app_browser, embedded_test_server()->GetURL(
+                                        "app.site.com", "/simple.html"));
+  EXPECT_EQ(base::ASCIIToUTF16("OK"),
+            app_browser->GetWindowTitleForCurrentTab(false));
+}
+
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
                         HostedAppTest,
                         ::testing::Combine(kAppTypeValues, ::testing::Bool()));
@@ -2533,6 +2538,12 @@
                             AppType::BOOKMARK_APP, true}));
 INSTANTIATE_TEST_CASE_P(
     /* no prefix */,
+    BookmarkAppOnlyTest,
+    ::testing::Combine(::testing::Values(AppType::BOOKMARK_APP),
+                       ::testing::Bool()));
+
+INSTANTIATE_TEST_CASE_P(
+    /* no prefix */,
     HostedAppProcessModelTest,
     ::testing::Combine(::testing::Values(AppType::HOSTED_APP),
                        ::testing::Bool()));
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
index 7242589..84e68c92 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
@@ -396,12 +396,6 @@
     delegate_->NavigateToPasswordManagerAccountDashboard();
 }
 
-void ManagePasswordsBubbleModel::OnBrandLinkClicked() {
-  interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_BRAND_NAME);
-  if (delegate_)
-    delegate_->NavigateToSmartLockHelpPage();
-}
-
 void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() {
   interaction_keeper_->set_dismissal_reason(
       metrics_util::AUTO_SIGNIN_TOAST_TIMEOUT);
@@ -467,9 +461,7 @@
 bool ManagePasswordsBubbleModel::ShouldShowFooter() const {
   return (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
           state_ == password_manager::ui::PENDING_PASSWORD_STATE) &&
-         IsSyncUser(GetProfile()) &&
-         // TODO(crbug.com/862269): Remove when "Smart Lock" is gone.
-         pending_password_.federation_origin.opaque();
+         IsSyncUser(GetProfile());
 }
 
 const base::string16& ManagePasswordsBubbleModel::GetCurrentUsername() const {
@@ -487,7 +479,6 @@
   if (password_bubble_experiment::ShouldShowChromeSignInPasswordPromo(
           prefs, sync_service)) {
     interaction_keeper_->ReportInteractions(this);
-    title_brand_link_range_ = gfx::Range();
     title_ =
         l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_CONFIRM_SAVED_TITLE);
     state_ = password_manager::ui::CHROME_SIGN_IN_PROMO_STATE;
@@ -505,7 +496,6 @@
           profile,
           desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE)) {
     interaction_keeper_->ReportInteractions(this);
-    title_brand_link_range_ = gfx::Range();
     title_ = desktop_ios_promotion::GetPromoTitle(
         desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE);
     state_ = password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE;
@@ -528,7 +518,6 @@
 }
 
 void ManagePasswordsBubbleModel::UpdatePendingStateTitle() {
-  title_brand_link_range_ = gfx::Range();
   PasswordTitleType type =
       state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE
           ? PasswordTitleType::UPDATE_PASSWORD
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.h b/chrome/browser/ui/passwords/manage_passwords_bubble_model.h
index 6141d53..c566692 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.h
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.h
@@ -70,10 +70,6 @@
   // clicked by the user.
   void OnNavigateToPasswordManagerAccountDashboardLinkClicked();
 
-  // Called by the view code when the brand name link is clicked by the user.
-  // TODO(crbug.com/862269): Remove when "Smart Lock" is gone.
-  void OnBrandLinkClicked();
-
   // Called by the view code when the auto-signin toast is about to close due to
   // timeout.
   void OnAutoSignInToastTimeout();
@@ -110,10 +106,6 @@
     return save_confirmation_link_range_;
   }
 
-  const gfx::Range& title_brand_link_range() const {
-    return title_brand_link_range_;
-  }
-
   bool are_passwords_revealed_when_bubble_is_opened() const {
     return are_passwords_revealed_when_bubble_is_opened_;
   }
@@ -161,8 +153,7 @@
 
  private:
   class InteractionKeeper;
-  // Updates |title_| and |title_brand_link_range_| for the
-  // PENDING_PASSWORD_STATE.
+  // Updates |title_| for the PENDING_PASSWORD_STATE.
   void UpdatePendingStateTitle();
   // Updates |title_| for the MANAGE_STATE.
   void UpdateManageStateTitle();
@@ -171,10 +162,6 @@
   GURL origin_;
   password_manager::ui::State state_;
   base::string16 title_;
-  // Range of characters in the title that contains the Smart Lock Brand and
-  // should point to an article. For the default title the range is empty.
-  // TODO(crbug/890336): remove.
-  gfx::Range title_brand_link_range_;
   autofill::PasswordForm pending_password_;
   std::vector<autofill::PasswordForm> local_credentials_;
   base::string16 manage_link_;
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
index 98b13c55..6d3dfaa 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
@@ -443,13 +443,6 @@
   DestroyModelAndVerifyControllerExpectations();
 }
 
-TEST_F(ManagePasswordsBubbleModelTest, OnBrandLinkClicked) {
-  PretendPasswordWaiting();
-
-  EXPECT_CALL(*controller(), NavigateToSmartLockHelpPage());
-  model()->OnBrandLinkClicked();
-}
-
 TEST_F(ManagePasswordsBubbleModelTest, SuppressSignInPromo) {
   prefs()->SetBoolean(password_manager::prefs::kWasSignInPasswordPromoClicked,
                       true);
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
index 962a19e..06985ea7 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -449,14 +449,6 @@
   UpdateBubbleAndIconVisibility();
 }
 
-void ManagePasswordsUIController::NavigateToSmartLockHelpPage() {
-  NavigateParams params(chrome::FindBrowserWithWebContents(web_contents()),
-                        GURL(chrome::kSmartLockHelpPage),
-                        ui::PAGE_TRANSITION_LINK);
-  params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
-  Navigate(&params);
-}
-
 void ManagePasswordsUIController::NavigateToPasswordManagerSettingsPage() {
   chrome::ShowSettingsSubPage(
       chrome::FindBrowserWithWebContents(web_contents()),
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
index ef064a1..de6277c8 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
@@ -125,7 +125,6 @@
   void ChooseCredential(
       const autofill::PasswordForm& form,
       password_manager::CredentialType credential_type) override;
-  void NavigateToSmartLockHelpPage() override;
   void NavigateToPasswordManagerAccountDashboard() override;
   void NavigateToPasswordManagerSettingsPage() override;
   void EnableSync(const AccountInfo& account,
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h
index ef99365..81c6566 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h
@@ -38,8 +38,6 @@
                void(const base::string16&, const base::string16&));
   MOCK_METHOD2(ChooseCredential, void(const autofill::PasswordForm&,
                                       password_manager::CredentialType));
-  MOCK_METHOD0(NavigateToSmartLockPage, void());
-  MOCK_METHOD0(NavigateToSmartLockHelpPage, void());
   MOCK_METHOD0(NavigateToPasswordManagerSettingsPage, void());
   MOCK_METHOD0(NavigateToChromeSignIn, void());
   MOCK_METHOD0(OnDialogHidden, void());
diff --git a/chrome/browser/ui/passwords/manage_passwords_view_utils.cc b/chrome/browser/ui/passwords/manage_passwords_view_utils.cc
index 3dd2618..c96451c 100644
--- a/chrome/browser/ui/passwords/manage_passwords_view_utils.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_view_utils.cc
@@ -55,11 +55,8 @@
 std::pair<base::string16, base::string16> GetCredentialLabelsForAccountChooser(
     const autofill::PasswordForm& form) {
   base::string16 federation;
-  if (!form.federation_origin.opaque()) {
-    federation = l10n_util::GetStringFUTF16(
-        IDS_PASSWORDS_VIA_FEDERATION,
-        base::UTF8ToUTF16(form.federation_origin.host()));
-  }
+  if (!form.federation_origin.opaque())
+    federation = base::UTF8ToUTF16(form.federation_origin.host());
 
   if (form.display_name.empty())
     return std::make_pair(form.username_value, std::move(federation));
diff --git a/chrome/browser/ui/passwords/password_dialog_controller.h b/chrome/browser/ui/passwords/password_dialog_controller.h
index 967084d..fea1e0a 100644
--- a/chrome/browser/ui/passwords/password_dialog_controller.h
+++ b/chrome/browser/ui/passwords/password_dialog_controller.h
@@ -26,10 +26,8 @@
   // Returns forms from the password database for the current site.
   virtual const FormsVector& GetLocalForms() const = 0;
 
-  // Returns a title of the account chooser and a range of the Smart Lock
-  // hyperlink if it exists. If the range is empty then no hyperlink is shown.
-  virtual std::pair<base::string16, gfx::Range> GetAccoutChooserTitle() const
-      = 0;
+  // Returns a title of the account chooser.
+  virtual base::string16 GetAccoutChooserTitle() const = 0;
 
   // Whether the account chooser should display the "Sign in" button.
   virtual bool ShouldShowSignInButton() const = 0;
@@ -37,12 +35,11 @@
   // Returns the title for the autosignin first run dialog.
   virtual base::string16 GetAutoSigninPromoTitle() const = 0;
 
-  // Returns a text of the auto signin first run promo and a range of the Smart
-  // Lock hyperlink if it exists. The empty range means no hyperlink is shown.
-  virtual std::pair<base::string16, gfx::Range> GetAutoSigninText() const = 0;
+  // Returns a text of the auto signin first run promo.
+  virtual base::string16 GetAutoSigninText() const = 0;
 
-  // Called when the Smart Lock hyperlink is clicked.
-  virtual void OnSmartLockLinkClicked() = 0;
+  // Returns true if the footer about Google Account should be shown.
+  virtual bool ShouldShowFooter() const = 0;
 
   // Called when the user chooses a credential.
   virtual void OnChooseCredentials(
diff --git a/chrome/browser/ui/passwords/password_dialog_controller_impl.cc b/chrome/browser/ui/passwords/password_dialog_controller_impl.cc
index 791b516..7bc3164 100644
--- a/chrome/browser/ui/passwords/password_dialog_controller_impl.cc
+++ b/chrome/browser/ui/passwords/password_dialog_controller_impl.cc
@@ -57,12 +57,8 @@
   return local_credentials_;
 }
 
-std::pair<base::string16, gfx::Range>
-PasswordDialogControllerImpl::GetAccoutChooserTitle() const {
-  std::pair<base::string16, gfx::Range> result;
-  result.first =
-      l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_ACCOUNT_CHOOSER_TITLE);
-  return result;
+base::string16 PasswordDialogControllerImpl::GetAccoutChooserTitle() const {
+  return l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_ACCOUNT_CHOOSER_TITLE);
 }
 
 bool PasswordDialogControllerImpl::ShouldShowSignInButton() const {
@@ -76,17 +72,16 @@
   return l10n_util::GetStringUTF16(message_id);
 }
 
-std::pair<base::string16, gfx::Range>
-PasswordDialogControllerImpl::GetAutoSigninText() const {
-  std::pair<base::string16, gfx::Range> result;
-  result.first = l10n_util::GetStringFUTF16(
+base::string16 PasswordDialogControllerImpl::GetAutoSigninText() const {
+  return l10n_util::GetStringFUTF16(
       IDS_AUTO_SIGNIN_FIRST_RUN_TEXT,
       l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_TITLE_BRAND));
-  return result;
 }
 
-void PasswordDialogControllerImpl::OnSmartLockLinkClicked() {
-  delegate_->NavigateToSmartLockHelpPage();
+bool PasswordDialogControllerImpl::ShouldShowFooter() const {
+  const browser_sync::ProfileSyncService* sync_service =
+      ProfileSyncServiceFactory::GetForProfile(profile_);
+  return password_bubble_experiment::IsSmartLockUser(sync_service);
 }
 
 void PasswordDialogControllerImpl::OnChooseCredentials(
diff --git a/chrome/browser/ui/passwords/password_dialog_controller_impl.h b/chrome/browser/ui/passwords/password_dialog_controller_impl.h
index d9520544..c511fcd 100644
--- a/chrome/browser/ui/passwords/password_dialog_controller_impl.h
+++ b/chrome/browser/ui/passwords/password_dialog_controller_impl.h
@@ -34,13 +34,11 @@
 
   // PasswordDialogController:
   const FormsVector& GetLocalForms() const override;
-  // TODO(890336): get rid of the range.
-  std::pair<base::string16, gfx::Range> GetAccoutChooserTitle() const override;
+  base::string16 GetAccoutChooserTitle() const override;
   bool ShouldShowSignInButton() const override;
   base::string16 GetAutoSigninPromoTitle() const override;
-  // TODO(890336): get rid of the range.
-  std::pair<base::string16, gfx::Range> GetAutoSigninText() const override;
-  void OnSmartLockLinkClicked() override;
+  base::string16 GetAutoSigninText() const override;
+  bool ShouldShowFooter() const override;
   void OnChooseCredentials(
       const autofill::PasswordForm& password_form,
       password_manager::CredentialType credential_type) override;
diff --git a/chrome/browser/ui/passwords/password_dialog_controller_impl_unittest.cc b/chrome/browser/ui/passwords/password_dialog_controller_impl_unittest.cc
index defb512c..557860c 100644
--- a/chrome/browser/ui/passwords/password_dialog_controller_impl_unittest.cc
+++ b/chrome/browser/ui/passwords/password_dialog_controller_impl_unittest.cc
@@ -211,9 +211,4 @@
        password_manager::metrics_util::AUTO_SIGNIN_TURN_OFF, 1);
 }
 
-TEST_F(PasswordDialogControllerTest, OnBrandLinkClicked) {
-  EXPECT_CALL(ui_controller_mock(), NavigateToSmartLockHelpPage());
-  controller().OnSmartLockLinkClicked();
-}
-
 }  // namespace
diff --git a/chrome/browser/ui/passwords/password_dialog_controller_mock.h b/chrome/browser/ui/passwords/password_dialog_controller_mock.h
index ba0b667..90032c8 100644
--- a/chrome/browser/ui/passwords/password_dialog_controller_mock.h
+++ b/chrome/browser/ui/passwords/password_dialog_controller_mock.h
@@ -15,12 +15,11 @@
   ~PasswordDialogControllerMock() override;
 
   MOCK_CONST_METHOD0(GetLocalForms, const FormsVector&());
-  MOCK_CONST_METHOD0(GetAccoutChooserTitle,
-                     std::pair<base::string16, gfx::Range>());
+  MOCK_CONST_METHOD0(GetAccoutChooserTitle, base::string16());
   MOCK_CONST_METHOD0(ShouldShowSignInButton, bool());
   MOCK_CONST_METHOD0(GetAutoSigninPromoTitle, base::string16());
-  MOCK_CONST_METHOD0(GetAutoSigninText,
-                     std::pair<base::string16, gfx::Range>());
+  MOCK_CONST_METHOD0(GetAutoSigninText, base::string16());
+  MOCK_CONST_METHOD0(ShouldShowFooter, bool());
   MOCK_METHOD0(OnSmartLockLinkClicked, void());
   MOCK_METHOD2(OnChooseCredentials, void(
       const autofill::PasswordForm& password_form,
diff --git a/chrome/browser/ui/passwords/password_manager_presenter.cc b/chrome/browser/ui/passwords/password_manager_presenter.cc
index 5b65052..5273437 100644
--- a/chrome/browser/ui/passwords/password_manager_presenter.cc
+++ b/chrome/browser/ui/passwords/password_manager_presenter.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ui/passwords/password_manager_presenter.h"
 
 #include <algorithm>
+#include <iterator>
 #include <utility>
 
 #include "base/bind.h"
@@ -137,9 +138,7 @@
 
 PasswordManagerPresenter::PasswordManagerPresenter(
     PasswordUIView* password_view)
-    : populater_(this),
-      exception_populater_(this),
-      password_view_(password_view) {
+    : password_view_(password_view) {
   DCHECK(password_view_);
 }
 
@@ -174,8 +173,12 @@
   password_exception_list_.clear();
   password_exception_duplicates_.clear();
 
-  populater_.Populate();
-  exception_populater_.Populate();
+  PasswordStore* store = GetPasswordStore();
+  if (!store)
+    return;
+
+  CancelAllRequests();
+  store->GetAllLoginsWithAffiliationAndBrandingInformation(this);
 }
 
 void PasswordManagerPresenter::RemoveSavedPassword(size_t index) {
@@ -319,55 +322,20 @@
   store->RemoveLogin(form);
 }
 
-PasswordManagerPresenter::ListPopulater::ListPopulater(
-    PasswordManagerPresenter* page) : page_(page) {
-}
-
-PasswordManagerPresenter::ListPopulater::~ListPopulater() {
-}
-
-PasswordManagerPresenter::PasswordListPopulater::PasswordListPopulater(
-    PasswordManagerPresenter* page) : ListPopulater(page) {
-}
-
-void PasswordManagerPresenter::PasswordListPopulater::Populate() {
-  PasswordStore* store = page_->GetPasswordStore();
-  if (store != NULL) {
-    CancelAllRequests();
-    store->GetAutofillableLoginsWithAffiliationAndBrandingInformation(this);
-  } else {
-    LOG(ERROR) << "No password store! Cannot display passwords.";
-  }
-}
-
-void PasswordManagerPresenter::PasswordListPopulater::OnGetPasswordStoreResults(
+void PasswordManagerPresenter::OnGetPasswordStoreResults(
     std::vector<std::unique_ptr<autofill::PasswordForm>> results) {
-  page_->password_list_ = std::move(results);
-  password_manager::SortEntriesAndHideDuplicates(&page_->password_list_,
-                                                 &page_->password_duplicates_);
-  page_->SetPasswordList();
-}
+  std::partition_copy(std::make_move_iterator(results.begin()),
+                      std::make_move_iterator(results.end()),
+                      std::back_inserter(password_exception_list_),
+                      std::back_inserter(password_list_), [](const auto& form) {
+                        return form->blacklisted_by_user;
+                      });
 
-PasswordManagerPresenter::PasswordExceptionListPopulater::
-    PasswordExceptionListPopulater(PasswordManagerPresenter* page)
-        : ListPopulater(page) {
-}
-
-void PasswordManagerPresenter::PasswordExceptionListPopulater::Populate() {
-  PasswordStore* store = page_->GetPasswordStore();
-  if (store != NULL) {
-    CancelAllRequests();
-    store->GetBlacklistLoginsWithAffiliationAndBrandingInformation(this);
-  } else {
-    LOG(ERROR) << "No password store! Cannot display exceptions.";
-  }
-}
-
-void PasswordManagerPresenter::PasswordExceptionListPopulater::
-    OnGetPasswordStoreResults(
-        std::vector<std::unique_ptr<autofill::PasswordForm>> results) {
-  page_->password_exception_list_ = std::move(results);
+  password_manager::SortEntriesAndHideDuplicates(&password_list_,
+                                                 &password_duplicates_);
   password_manager::SortEntriesAndHideDuplicates(
-      &page_->password_exception_list_, &page_->password_exception_duplicates_);
-  page_->SetPasswordExceptionList();
+      &password_exception_list_, &password_exception_duplicates_);
+
+  SetPasswordList();
+  SetPasswordExceptionList();
 }
diff --git a/chrome/browser/ui/passwords/password_manager_presenter.h b/chrome/browser/ui/passwords/password_manager_presenter.h
index 93bbf706..dca393a 100644
--- a/chrome/browser/ui/passwords/password_manager_presenter.h
+++ b/chrome/browser/ui/passwords/password_manager_presenter.h
@@ -32,6 +32,7 @@
 // PasswordStore operations and updates the view on PasswordStore changes.
 class PasswordManagerPresenter
     : public password_manager::PasswordStore::Observer,
+      public password_manager::PasswordStoreConsumer,
       public password_manager::CredentialProviderInterface {
  public:
   // |password_view| the UI view that owns this presenter, must not be NULL.
@@ -83,6 +84,10 @@
  private:
   friend class PasswordManagerPresenterTest;
 
+  // PasswordStoreConsumer:
+  void OnGetPasswordStoreResults(
+      std::vector<std::unique_ptr<autofill::PasswordForm>> results) override;
+
   // Sets the password and exception list of the UI view.
   void SetPasswordList();
   void SetPasswordExceptionList();
@@ -90,49 +95,6 @@
   // Returns the password store associated with the currently active profile.
   password_manager::PasswordStore* GetPasswordStore();
 
-  // A short class to mediate requests to the password store.
-  class ListPopulater : public password_manager::PasswordStoreConsumer {
-   public:
-    explicit ListPopulater(PasswordManagerPresenter* page);
-    ~ListPopulater() override;
-
-    // Send a query to the password store to populate a list.
-    virtual void Populate() = 0;
-
-   protected:
-    PasswordManagerPresenter* page_;
-  };
-
-  // A short class to mediate requests to the password store for passwordlist.
-  class PasswordListPopulater : public ListPopulater {
-   public:
-    explicit PasswordListPopulater(PasswordManagerPresenter* page);
-
-    // Send a query to the password store to populate a password list.
-    void Populate() override;
-
-    // Send the password store's reply back to the handler.
-    void OnGetPasswordStoreResults(
-        std::vector<std::unique_ptr<autofill::PasswordForm>> results) override;
-  };
-
-  // A short class to mediate requests to the password store for exceptions.
-  class PasswordExceptionListPopulater : public ListPopulater {
-   public:
-    explicit PasswordExceptionListPopulater(PasswordManagerPresenter* page);
-
-    // Send a query to the password store to populate a passwordException list.
-    void Populate() override;
-
-    // Send the password store's reply back to the handler.
-    void OnGetPasswordStoreResults(
-        std::vector<std::unique_ptr<autofill::PasswordForm>> results) override;
-  };
-
-  // Password store consumer for populating the password list and exceptions.
-  PasswordListPopulater populater_;
-  PasswordExceptionListPopulater exception_populater_;
-
   std::vector<std::unique_ptr<autofill::PasswordForm>> password_list_;
   std::vector<std::unique_ptr<autofill::PasswordForm>> password_exception_list_;
   password_manager::DuplicatesMap password_duplicates_;
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate.h b/chrome/browser/ui/passwords/passwords_model_delegate.h
index 7c3e291..a74155c 100644
--- a/chrome/browser/ui/passwords/passwords_model_delegate.h
+++ b/chrome/browser/ui/passwords/passwords_model_delegate.h
@@ -100,9 +100,6 @@
       const autofill::PasswordForm& form,
       password_manager::CredentialType credential_type) = 0;
 
-  // Open a new tab, pointing to the Smart Lock help article.
-  // TODO(crbug.com/862269): remove when "Smart Lock" is gone.
-  virtual void NavigateToSmartLockHelpPage() = 0;
   // Open a new tab, pointing to passwords.google.com.
   virtual void NavigateToPasswordManagerAccountDashboard() = 0;
   // Open a new tab, pointing to the password manager settings page.
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
index 254b2d2e..3f6ef75 100644
--- a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
+++ b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
@@ -45,8 +45,6 @@
                void(const base::string16&, const base::string16&));
   MOCK_METHOD2(ChooseCredential, void(const autofill::PasswordForm&,
                                       password_manager::CredentialType));
-  MOCK_METHOD0(NavigateToSmartLockPage, void());
-  MOCK_METHOD0(NavigateToSmartLockHelpPage, void());
   MOCK_METHOD0(NavigateToPasswordManagerAccountDashboard, void());
   MOCK_METHOD0(NavigateToPasswordManagerSettingsPage, void());
   MOCK_METHOD2(EnableSync,
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 71c7095..be9a915 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -397,9 +397,20 @@
 // LocationBarView, public LocationBar implementation:
 
 void LocationBarView::FocusLocation(bool select_all) {
+  bool already_focused = omnibox_view_->HasFocus();
   omnibox_view_->SetFocus();
-  if (select_all)
-    omnibox_view_->SelectAll(true);
+
+  if (!select_all)
+    return;
+
+  omnibox_view_->SelectAll(true);
+
+  // If the location bar is already focused, a second command to focus it
+  // should expose the full URL, temporarily disabling Steady State Elisions
+  // and Query in Omnibox. This behavior is currently gated on the Query in
+  // Omnibox flag, as it's still under active experimentation.
+  if (already_focused && base::FeatureList::IsEnabled(omnibox::kQueryInOmnibox))
+    omnibox_view()->model()->SetUserTextToURLForEditing();
 }
 
 void LocationBarView::Revert() {
diff --git a/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc b/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc
index 8713c700a..1f1f7d8 100644
--- a/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc
+++ b/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
 #include "chrome/browser/ui/passwords/password_dialog_controller.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
+#include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/browser/ui/views/passwords/credentials_item_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/autofill/core/common/password_form.h"
@@ -27,7 +28,6 @@
 #include "ui/views/bubble/bubble_border.h"
 #include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/controls/scroll_view.h"
-#include "ui/views/controls/styled_label.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/fill_layout.h"
 #include "ui/views/layout/layout_provider.h"
@@ -39,12 +39,6 @@
 // Maximum height of the credential list. The unit is one row's height.
 constexpr double kMaxHeightAccounts = 3.5;
 
-views::StyledLabel::RangeStyleInfo GetLinkStyle() {
-  auto result = views::StyledLabel::RangeStyleInfo::CreateForLink();
-  result.disable_line_wrapping = false;
-  return result;
-}
-
 // Creates a list view of credentials in |forms|.
 views::ScrollView* CreateCredentialsView(
     const PasswordDialogController::FormsVector& forms,
@@ -113,24 +107,13 @@
 }
 
 base::string16 AccountChooserDialogView::GetWindowTitle() const {
-  return controller_->GetAccoutChooserTitle().first;
+  return controller_->GetAccoutChooserTitle();
 }
 
 bool AccountChooserDialogView::ShouldShowCloseButton() const {
   return false;
 }
 
-void AccountChooserDialogView::AddedToWidget() {
-  std::pair<base::string16, gfx::Range> title_content =
-      controller_->GetAccoutChooserTitle();
-  std::unique_ptr<views::StyledLabel> title_label =
-      std::make_unique<views::StyledLabel>(title_content.first, this);
-  title_label->SetTextContext(views::style::CONTEXT_DIALOG_TITLE);
-  if (!title_content.second.is_empty())
-    title_label->AddStyleRange(title_content.second, GetLinkStyle());
-  GetBubbleFrameView()->SetTitleView(std::move(title_label));
-}
-
 void AccountChooserDialogView::WindowClosing() {
   if (controller_)
     controller_->OnCloseDialog();
@@ -162,13 +145,15 @@
   return l10n_util::GetStringUTF16(message_id);
 }
 
-void AccountChooserDialogView::StyledLabelLinkClicked(views::StyledLabel* label,
-                                                      const gfx::Range& range,
-                                                      int event_flags) {
-  // On Mac the button click event may be dispatched after the dialog was
-  // hidden. Thus, the controller can be NULL.
-  if (controller_)
-    controller_->OnSmartLockLinkClicked();
+views::View* AccountChooserDialogView::CreateFootnoteView() {
+  if (!controller_->ShouldShowFooter())
+    return nullptr;
+  views::Label* label = new views::Label(
+      l10n_util::GetStringUTF16(IDS_SAVE_PASSWORD_FOOTER),
+      ChromeTextContext::CONTEXT_BODY_TEXT_SMALL, STYLE_SECONDARY);
+  label->SetMultiLine(true);
+  label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+  return label;
 }
 
 void AccountChooserDialogView::ButtonPressed(views::Button* sender,
diff --git a/chrome/browser/ui/views/passwords/account_chooser_dialog_view.h b/chrome/browser/ui/views/passwords/account_chooser_dialog_view.h
index c986f61..27c000d 100644
--- a/chrome/browser/ui/views/passwords/account_chooser_dialog_view.h
+++ b/chrome/browser/ui/views/passwords/account_chooser_dialog_view.h
@@ -9,7 +9,6 @@
 #include "chrome/browser/ui/passwords/password_dialog_prompts.h"
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 #include "ui/views/controls/button/button.h"
-#include "ui/views/controls/styled_label_listener.h"
 
 namespace content {
 class WebContents;
@@ -18,7 +17,6 @@
 class PasswordDialogController;
 
 class AccountChooserDialogView : public views::BubbleDialogDelegateView,
-                                 public views::StyledLabelListener,
                                  public views::ButtonListener,
                                  public AccountChooserPrompt {
  public:
@@ -35,18 +33,13 @@
   ui::ModalType GetModalType() const override;
   base::string16 GetWindowTitle() const override;
   bool ShouldShowCloseButton() const override;
-  void AddedToWidget() override;
   void WindowClosing() override;
 
   // DialogDelegate:
   bool Accept() override;
   int GetDialogButtons() const override;
   base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
-
-  // StyledLabelListener:
-  void StyledLabelLinkClicked(views::StyledLabel* label,
-                              const gfx::Range& range,
-                              int event_flags) override;
+  views::View* CreateFootnoteView() override;
 
   // ButtonListener:
   void ButtonPressed(views::Button* sender, const ui::Event& event) override;
diff --git a/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc b/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc
index e4ef262c..3a5f826 100644
--- a/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc
+++ b/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc
@@ -13,7 +13,7 @@
 #include "components/constrained_window/constrained_window_views.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/views/border.h"
-#include "ui/views/controls/styled_label.h"
+#include "ui/views/controls/label.h"
 #include "ui/views/layout/fill_layout.h"
 #include "ui/views/widget/widget.h"
 
@@ -83,28 +83,17 @@
                                        : IDS_AUTO_SIGNIN_FIRST_RUN_TURN_OFF);
 }
 
-void AutoSigninFirstRunDialogView::StyledLabelLinkClicked(
-    views::StyledLabel* label,
-    const gfx::Range& range,
-    int event_flags) {
-  controller_->OnSmartLockLinkClicked();
-}
-
 void AutoSigninFirstRunDialogView::InitWindow() {
   set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType(
       views::TEXT, views::TEXT));
   SetLayoutManager(std::make_unique<views::FillLayout>());
 
-  std::pair<base::string16, gfx::Range> text_content =
-      controller_->GetAutoSigninText();
-  auto text = std::make_unique<views::StyledLabel>(text_content.first, this);
-  text->SetTextContext(CONTEXT_BODY_TEXT_LARGE);
-  text->SetDefaultTextStyle(STYLE_SECONDARY);
-  if (!text_content.second.is_empty()) {
-    text->AddStyleRange(text_content.second,
-                        views::StyledLabel::RangeStyleInfo::CreateForLink());
-  }
-  AddChildView(text.release());
+  auto label =
+      std::make_unique<views::Label>(controller_->GetAutoSigninText(),
+                                     CONTEXT_BODY_TEXT_LARGE, STYLE_SECONDARY);
+  label->SetMultiLine(true);
+  label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+  AddChildView(label.release());
 }
 
 AutoSigninFirstRunPrompt* CreateAutoSigninPromptView(
diff --git a/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.h b/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.h
index 817501ce..4979f3a 100644
--- a/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.h
+++ b/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.h
@@ -7,15 +7,9 @@
 
 #include "base/macros.h"
 #include "chrome/browser/ui/passwords/password_dialog_prompts.h"
-#include "ui/views/controls/styled_label_listener.h"
 #include "ui/views/window/dialog_delegate.h"
 
-namespace views {
-class StyledLabel;
-}
-
 class AutoSigninFirstRunDialogView : public views::DialogDelegateView,
-                                     public views::StyledLabelListener,
                                      public AutoSigninFirstRunPrompt {
  public:
   AutoSigninFirstRunDialogView(PasswordDialogController* controller,
@@ -38,11 +32,6 @@
   bool Close() override;
   base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
 
-  // views::StyledLabelListener:
-  void StyledLabelLinkClicked(views::StyledLabel* label,
-                              const gfx::Range& range,
-                              int event_flags) override;
-
   // Sets up the child views.
   void InitWindow();
 
diff --git a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
index 187774f..216ecac 100644
--- a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
+++ b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
@@ -79,11 +79,12 @@
   static void BuildColumnSet(views::GridLayout* layout) {
     views::ColumnSet* column_set = layout->AddColumnSet(0);
     column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
-                          1.0, views::GridLayout::USE_PREF, 0, 0);
+                          0 /* resize_percent */, views::GridLayout::USE_PREF,
+                          0, 0);
     column_set->AddPaddingColumn(0 /* resize_percent */,
                                  AutofillPopupBaseView::kValueLabelPadding);
     column_set->AddColumn(views::GridLayout::TRAILING,
-                          views::GridLayout::CENTER, 1.0,
+                          views::GridLayout::CENTER, 1.0 /* resize_percent */,
                           views::GridLayout::USE_PREF, 0, 0);
   }
 
diff --git a/chrome/browser/ui/views/passwords/password_pending_view.cc b/chrome/browser/ui/views/passwords/password_pending_view.cc
index bcc79b01..794dfe0 100644
--- a/chrome/browser/ui/views/passwords/password_pending_view.cc
+++ b/chrome/browser/ui/views/passwords/password_pending_view.cc
@@ -11,12 +11,17 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
+#include "chrome/browser/ui/passwords/password_dialog_prompts.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/chrome_typography.h"
+#include "chrome/browser/ui/views/passwords/credentials_item_view.h"
 #include "chrome/browser/ui/views/passwords/password_items_view.h"
 #include "chrome/browser/ui/views/passwords/password_sign_in_promo_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/theme_resources.h"
+#include "content/public/browser/storage_partition.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/combobox_model.h"
 #include "ui/base/models/combobox_model_observer.h"
@@ -25,7 +30,6 @@
 #include "ui/views/controls/button/image_button.h"
 #include "ui/views/controls/button/md_text_button.h"
 #include "ui/views/controls/combobox/combobox.h"
-#include "ui/views/controls/styled_label.h"
 #include "ui/views/controls/textfield/textfield.h"
 #include "ui/views/layout/fill_layout.h"
 #include "ui/views/layout/grid_layout.h"
@@ -88,6 +92,52 @@
   }
 }
 
+// Builds a credential row, adds the given elements to the layout.
+// |password_view_button| is an optional field. If it is a nullptr, a
+// DOUBLE_VIEW_COLUMN_SET_PASSWORD will be used for password row instead of
+// TRIPLE_VIEW_COLUMN_SET.
+void BuildCredentialRows(views::GridLayout* layout,
+                         views::View* username_field,
+                         views::View* password_field,
+                         views::ToggleImageButton* password_view_button) {
+  // Username row.
+  BuildColumnSet(layout, DOUBLE_VIEW_COLUMN_SET_USERNAME);
+  layout->StartRow(views::GridLayout::kFixedSize,
+                   DOUBLE_VIEW_COLUMN_SET_USERNAME);
+  std::unique_ptr<views::Label> username_label(new views::Label(
+      l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_USERNAME_LABEL),
+      views::style::CONTEXT_LABEL, views::style::STYLE_PRIMARY));
+  username_label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
+  std::unique_ptr<views::Label> password_label(new views::Label(
+      l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_PASSWORD_LABEL),
+      views::style::CONTEXT_LABEL, views::style::STYLE_PRIMARY));
+  password_label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
+  int labels_width = std::max(username_label->GetPreferredSize().width(),
+                              password_label->GetPreferredSize().width());
+
+  layout->AddView(username_label.release(), 1, 1, views::GridLayout::LEADING,
+                  views::GridLayout::FILL, labels_width, 0);
+  layout->AddView(username_field);
+
+  layout->AddPaddingRow(views::GridLayout::kFixedSize,
+                        ChromeLayoutProvider::Get()->GetDistanceMetric(
+                            DISTANCE_CONTROL_LIST_VERTICAL));
+
+  // Password row.
+  PasswordPendingViewColumnSetType type = password_view_button
+                                              ? TRIPLE_VIEW_COLUMN_SET
+                                              : DOUBLE_VIEW_COLUMN_SET_PASSWORD;
+  BuildColumnSet(layout, type);
+  layout->StartRow(views::GridLayout::kFixedSize, type);
+  layout->AddView(password_label.release(), 1, 1, views::GridLayout::LEADING,
+                  views::GridLayout::FILL, labels_width, 0);
+  layout->AddView(password_field);
+  // The eye icon is also added to the layout if it was passed.
+  if (password_view_button) {
+    layout->AddView(password_view_button);
+  }
+}
+
 // Create a vector which contains only the values in |items| and no elements.
 std::vector<base::string16> ToValues(
     const autofill::ValueElementVector& items) {
@@ -210,88 +260,57 @@
          model()->state() ==
              password_manager::ui::PENDING_PASSWORD_UPDATE_STATE);
   const autofill::PasswordForm& password_form = model()->pending_password();
-  if (model()->enable_editing()) {
-    views::Textfield* username_field =
-        CreateUsernameEditable(model()->GetCurrentUsername()).release();
-    username_field->set_controller(this);
-    username_field_ = username_field;
+  if (!password_form.federation_origin.opaque()) {
+    // The credential to be saved doesn't contain password but just the identity
+    // provider (e.g. "Sign in with Google"). Thus, the layout is different.
+    SetLayoutManager(std::make_unique<views::FillLayout>());
+    std::pair<base::string16, base::string16> titles =
+        GetCredentialLabelsForAccountChooser(password_form);
+    CredentialsItemView* credential_view = new CredentialsItemView(
+        this, titles.first, titles.second, kButtonHoverColor, &password_form,
+        content::BrowserContext::GetDefaultStoragePartition(
+            model()->GetProfile())
+            ->GetURLLoaderFactoryForBrowserProcess()
+            .get());
+    credential_view->SetEnabled(false);
+    AddChildView(credential_view);
   } else {
-    username_field_ = CreateUsernameLabel(password_form).release();
-  }
+    if (model()->enable_editing()) {
+      views::Textfield* username_field =
+          CreateUsernameEditable(model()->GetCurrentUsername()).release();
+      username_field->set_controller(this);
+      username_field_ = username_field;
+    } else {
+      username_field_ = CreateUsernameLabel(password_form).release();
+    }
 
-  if (password_form.all_possible_passwords.size() > 1 &&
-      model()->enable_editing()) {
-    password_dropdown_ =
-        CreatePasswordDropdownView(password_form, are_passwords_revealed_)
-            .release();
-  } else {
-    password_label_ =
-        CreatePasswordLabel(password_form,
-                            IDS_PASSWORD_MANAGER_SIGNIN_VIA_FEDERATION,
-                            are_passwords_revealed_)
-            .release();
-  }
+    if (password_form.all_possible_passwords.size() > 1 &&
+        model()->enable_editing()) {
+      password_dropdown_ =
+          CreatePasswordDropdownView(password_form, are_passwords_revealed_)
+              .release();
+    } else {
+      password_label_ = CreatePasswordLabel(password_form,
+                                            /*federation_message_id*/ 0,
+                                            are_passwords_revealed_)
+                            .release();
+    }
 
-  const bool is_password_credential = password_form.federation_origin.opaque();
-  if (is_password_credential) {
     password_view_button_ =
         CreatePasswordViewButton(this, are_passwords_revealed_).release();
-  }
 
-  CreateAndSetLayout(is_password_credential);
-  if (model()->enable_editing() &&
-      model()->pending_password().username_value.empty()) {
-    initially_focused_view_ = username_field_;
-  }
-}
+    views::GridLayout* layout =
+        SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
-// Builds a credential row, adds the given elements to the layout.
-// |password_view_button| is an optional field. If it is a nullptr, a
-// DOUBLE_VIEW_COLUMN_SET_PASSWORD will be used for password row instead of
-// TRIPLE_VIEW_COLUMN_SET.
-void PasswordPendingView::BuildCredentialRows(
-    views::GridLayout* layout,
-    views::View* username_field,
-    views::View* password_field,
-    views::ToggleImageButton* password_view_button,
-    bool show_password_label) {
-  // Username row.
-  BuildColumnSet(layout, DOUBLE_VIEW_COLUMN_SET_USERNAME);
-  layout->StartRow(views::GridLayout::kFixedSize,
-                   DOUBLE_VIEW_COLUMN_SET_USERNAME);
-  std::unique_ptr<views::Label> username_label(new views::Label(
-      l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_USERNAME_LABEL),
-      views::style::CONTEXT_LABEL, views::style::STYLE_PRIMARY));
-  username_label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
-  std::unique_ptr<views::Label> password_label(new views::Label(
-      show_password_label
-          ? l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_PASSWORD_LABEL)
-          : base::string16(),
-      views::style::CONTEXT_LABEL, views::style::STYLE_PRIMARY));
-  password_label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
-  int labels_width = std::max(username_label->GetPreferredSize().width(),
-                              password_label->GetPreferredSize().width());
-
-  layout->AddView(username_label.release(), 1, 1, views::GridLayout::LEADING,
-                  views::GridLayout::FILL, labels_width, 0);
-  layout->AddView(username_field);
-
-  layout->AddPaddingRow(views::GridLayout::kFixedSize,
-                        ChromeLayoutProvider::Get()->GetDistanceMetric(
-                            DISTANCE_CONTROL_LIST_VERTICAL));
-
-  // Password row.
-  PasswordPendingViewColumnSetType type = password_view_button
-                                              ? TRIPLE_VIEW_COLUMN_SET
-                                              : DOUBLE_VIEW_COLUMN_SET_PASSWORD;
-  BuildColumnSet(layout, type);
-  layout->StartRow(views::GridLayout::kFixedSize, type);
-  layout->AddView(password_label.release(), 1, 1, views::GridLayout::LEADING,
-                  views::GridLayout::FILL, labels_width, 0);
-  layout->AddView(password_field);
-  // The eye icon is also added to the layout if it was passed.
-  if (password_view_button) {
-    layout->AddView(password_view_button);
+    views::View* password_field =
+        password_dropdown_ ? static_cast<views::View*>(password_dropdown_)
+                           : static_cast<views::View*>(password_label_);
+    BuildCredentialRows(layout, username_field_, password_field,
+                        password_view_button_);
+    if (model()->enable_editing() &&
+        model()->pending_password().username_value.empty()) {
+      initially_focused_view_ = username_field_;
+    }
   }
 }
 
@@ -339,13 +358,6 @@
   TogglePasswordVisibility();
 }
 
-void PasswordPendingView::StyledLabelLinkClicked(views::StyledLabel* label,
-                                                 const gfx::Range& range,
-                                                 int event_flags) {
-  DCHECK_EQ(model()->title_brand_link_range(), range);
-  model()->OnBrandLinkClicked();
-}
-
 void PasswordPendingView::ContentsChanged(views::Textfield* sender,
                                           const base::string16& new_contents) {
   bool is_update_before = model()->IsCurrentStateUpdate();
@@ -420,14 +432,6 @@
   return gfx::ImageSkia();
 }
 
-void PasswordPendingView::AddedToWidget() {
-  auto title_view =
-      std::make_unique<views::StyledLabel>(base::string16(), this);
-  title_view->SetTextContext(views::style::CONTEXT_DIALOG_TITLE);
-  UpdateTitleText(title_view.get());
-  GetBubbleFrameView()->SetTitleView(std::move(title_view));
-}
-
 bool PasswordPendingView::ShouldShowWindowIcon() const {
   return desktop_ios_promo_ != nullptr;
 }
@@ -436,17 +440,6 @@
   return true;
 }
 
-void PasswordPendingView::CreateAndSetLayout(bool show_password_label) {
-  views::GridLayout* layout =
-      SetLayoutManager(std::make_unique<views::GridLayout>(this));
-
-  views::View* password_field =
-      password_dropdown_ ? static_cast<views::View*>(password_dropdown_)
-                         : static_cast<views::View*>(password_label_);
-  BuildCredentialRows(layout, username_field_, password_field,
-                      password_view_button_, show_password_label);
-}
-
 void PasswordPendingView::TogglePasswordVisibility() {
   if (!are_passwords_revealed_ && !model()->RevealPasswords())
     return;
@@ -506,18 +499,8 @@
     NOTREACHED();
   }
   GetWidget()->UpdateWindowIcon();
-  UpdateTitleText(
-      static_cast<views::StyledLabel*>(GetBubbleFrameView()->title()));
+  GetWidget()->UpdateWindowTitle();
   DialogModelChanged();
 
   SizeToContents();
 }
-
-void PasswordPendingView::UpdateTitleText(views::StyledLabel* title_view) {
-  title_view->SetText(GetWindowTitle());
-  if (!model()->title_brand_link_range().is_empty()) {
-    auto link_style = views::StyledLabel::RangeStyleInfo::CreateForLink();
-    link_style.disable_line_wrapping = false;
-    title_view->AddStyleRange(model()->title_brand_link_range(), link_style);
-  }
-}
diff --git a/chrome/browser/ui/views/passwords/password_pending_view.h b/chrome/browser/ui/views/passwords/password_pending_view.h
index e331d29..fb3ed536 100644
--- a/chrome/browser/ui/views/passwords/password_pending_view.h
+++ b/chrome/browser/ui/views/passwords/password_pending_view.h
@@ -7,15 +7,12 @@
 
 #include "chrome/browser/ui/views/passwords/password_bubble_view_base.h"
 #include "ui/views/controls/button/button.h"
-#include "ui/views/controls/styled_label_listener.h"
 #include "ui/views/controls/textfield/textfield_controller.h"
 #include "ui/views/view.h"
 
 namespace views {
 class Combobox;
-class GridLayout;
 class Label;
-class StyledLabel;
 class ToggleImageButton;
 }  // namespace views
 
@@ -27,7 +24,6 @@
 // "Save"/"Update" button and a "Never"/"Nope" button.
 class PasswordPendingView : public PasswordBubbleViewBase,
                             public views::ButtonListener,
-                            public views::StyledLabelListener,
                             public views::TextfieldController {
  public:
   PasswordPendingView(content::WebContents* web_contents,
@@ -35,13 +31,6 @@
                       const gfx::Point& anchor_point,
                       DisplayReason reason);
 
-  static void BuildCredentialRows(
-      views::GridLayout* layout,
-      views::View* username_field,
-      views::View* password_field,
-      views::ToggleImageButton* password_view_button,
-      bool show_password_label);
-
 #if defined(UNIT_TEST)
   const View* username_field() const { return username_field_; }
 #endif
@@ -52,11 +41,6 @@
   // views::ButtonListener:
   void ButtonPressed(views::Button* sender, const ui::Event& event) override;
 
-  // views::StyledLabelListener:
-  void StyledLabelLinkClicked(views::StyledLabel* label,
-                              const gfx::Range& range,
-                              int event_flags) override;
-
   // views::TextfieldController:
   void ContentsChanged(views::Textfield* sender,
                        const base::string16& new_contents) override;
@@ -67,7 +51,6 @@
   views::View* GetInitiallyFocusedView() override;
   int GetDialogButtons() const override;
   base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
-  void AddedToWidget() override;
   gfx::ImageSkia GetWindowIcon() override;
   bool ShouldShowWindowIcon() const override;
   bool ShouldShowCloseButton() const override;
@@ -75,11 +58,9 @@
   bool Cancel() override;
   bool Close() override;
 
-  void CreateAndSetLayout(bool show_password_label);
   void TogglePasswordVisibility();
   void UpdateUsernameAndPasswordInModel();
   void ReplaceWithPromo();
-  void UpdateTitleText(views::StyledLabel* title_view);
 
   // True iff it is an update password bubble on creation. False iff it is a
   // save bubble.
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
index 663dd8a..6caa1ca 100644
--- a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
+++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/signin/account_consistency_mode_manager.h"
 #include "chrome/browser/signin/account_tracker_service_factory.h"
 #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/signin/signin_ui_util.h"
 #include "chrome/browser/sync/sync_ui_util.h"
@@ -24,7 +25,7 @@
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/grit/generated_resources.h"
-#include "components/signin/core/browser/signin_manager.h"
+#include "services/identity/public/cpp/identity_manager.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/material_design/material_design_controller.h"
 #include "ui/base/models/menu_model.h"
@@ -219,7 +220,7 @@
          g_browser_process->profile_manager()
                  ->GetProfileAttributesStorage()
                  .GetNumberOfProfiles() == 1 &&
-         !SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated();
+         !IdentityManagerFactory::GetForProfile(profile_)->HasPrimaryAccount();
 }
 
 base::string16 AvatarToolbarButton::GetAvatarTooltipText() const {
@@ -302,7 +303,7 @@
   //  - the user isn't signed in
   //  - the profile icon wasn't explicitly changed
   if (AccountConsistencyModeManager::IsDiceEnabledForProfile(profile_) &&
-      !SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated() &&
+      !IdentityManagerFactory::GetForProfile(profile_)->HasPrimaryAccount() &&
       entry->IsUsingDefaultAvatar()) {
     std::vector<AccountInfo> promo_accounts =
         signin_ui_util::GetAccountsForDicePromos(profile_);
@@ -318,17 +319,19 @@
 
 AvatarToolbarButton::SyncState AvatarToolbarButton::GetSyncState() const {
 #if !defined(OS_CHROMEOS)
-  SigninManager* signin_manager = SigninManagerFactory::GetForProfile(profile_);
-  if (signin_manager && signin_manager->IsAuthenticated() &&
+  identity::IdentityManager* identity_manager =
+      IdentityManagerFactory::GetForProfile(profile_);
+  if (identity_manager && identity_manager->HasPrimaryAccount() &&
       profile_->IsSyncAllowed() && error_controller_.HasAvatarError()) {
     // When DICE is enabled and the error is an auth error, the sync-paused
     // icon is shown.
     int unused;
     const bool should_show_sync_paused_ui =
         AccountConsistencyModeManager::IsDiceEnabledForProfile(profile_) &&
-        sync_ui_util::GetMessagesForAvatarSyncError(profile_, *signin_manager,
-                                                    &unused, &unused) ==
-            sync_ui_util::AUTH_ERROR;
+        // TODO(http://crbug.com/890796): Migrate to passing an IdentityManager
+        sync_ui_util::GetMessagesForAvatarSyncError(
+            profile_, *SigninManagerFactory::GetForProfile(profile_), &unused,
+            &unused) == sync_ui_util::AUTH_ERROR;
     return should_show_sync_paused_ui ? SyncState::kPaused : SyncState::kError;
   }
 #endif  // !defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc
index f30ce4c..f69e29c 100644
--- a/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/bind.h"
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h"
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_factory.h"
 #include "chrome/test/base/testing_profile.h"
@@ -105,8 +106,9 @@
 
   void SetUp() override {
     TestingProfile::Builder builder;
-    builder.AddTestingFactory(EasyUnlockServiceFactory::GetInstance(),
-                              &CreateEasyUnlockServiceForTest);
+    builder.AddTestingFactory(
+        EasyUnlockServiceFactory::GetInstance(),
+        base::BindRepeating(&CreateEasyUnlockServiceForTest));
     profile_ = builder.Build();
   }
 
@@ -119,8 +121,9 @@
 
   void MakeEasyUnlockServiceNull() {
     TestingProfile::Builder builder;
-    builder.AddTestingFactory(EasyUnlockServiceFactory::GetInstance(),
-                              &CreateNullEasyUnlockServiceForTest);
+    builder.AddTestingFactory(
+        EasyUnlockServiceFactory::GetInstance(),
+        base::BindRepeating(&CreateNullEasyUnlockServiceForTest));
     profile_ = builder.Build();
   }
 
diff --git a/chrome/browser/ui/webui/settings/languages_handler.cc b/chrome/browser/ui/webui/settings/languages_handler.cc
index 0346fa1..68aa5288 100644
--- a/chrome/browser/ui/webui/settings/languages_handler.cc
+++ b/chrome/browser/ui/webui/settings/languages_handler.cc
@@ -70,14 +70,6 @@
   std::string language_code;
   CHECK(args->GetString(0, &language_code));
 
-#if defined(OS_CHROMEOS)
-  // check if prospectiveUILanguage is allowed by policy (AllowedUILocales)
-  if (!chromeos::locale_util::IsAllowedUILocale(language_code,
-                                                profile_->GetPrefs())) {
-    return;
-  }
-#endif
-
 #if defined(OS_WIN)
   PrefService* prefs = g_browser_process->local_state();
   prefs->SetString(language::prefs::kApplicationLocale, language_code);
diff --git a/chrome/browser/ui/webui/settings/people_handler_unittest.cc b/chrome/browser/ui/webui/settings/people_handler_unittest.cc
index d2f47257..02cc830 100644
--- a/chrome/browser/ui/webui/settings/people_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/people_handler_unittest.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <vector>
 
+#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/json/json_writer.h"
 #include "base/macros.h"
@@ -212,7 +213,7 @@
 
     mock_pss_ = static_cast<ProfileSyncServiceMock*>(
         ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
-            profile(), BuildMockProfileSyncService));
+            profile(), base::BindRepeating(&BuildMockProfileSyncService)));
     ON_CALL(*mock_pss_, GetAuthError()).WillByDefault(ReturnRef(error_));
     ON_CALL(*mock_pss_, GetPassphraseType())
         .WillByDefault(Return(syncer::PassphraseType::IMPLICIT_PASSPHRASE));
diff --git a/chrome/common/available_offline_content.mojom b/chrome/common/available_offline_content.mojom
index 9c27590..2bf374d 100644
--- a/chrome/common/available_offline_content.mojom
+++ b/chrome/common/available_offline_content.mojom
@@ -14,7 +14,7 @@
 // components/neterror/resources/neterror.js.
 enum AvailableContentType {
   // The offline page is prefetched suggested content.
-  kPrefetchedUnopenedPage = 0,
+  kPrefetchedPage = 0,
   kVideo = 1,
   kAudio = 2,
   // The offline page was downloaded in some other way.
@@ -43,7 +43,8 @@
 
 // A summary of available offline content.
 struct AvailableOfflineContentSummary {
-  // Total number of offline content items.
+  // Total number of offline content items (not limited to the categories listed
+  // below).
   uint32 total_items;
   // True if at least one prefetched article (Articles For You) is available.
   bool has_prefetched_page;
@@ -57,9 +58,12 @@
 
 // Provides access to items available while offline.
 interface AvailableOfflineContentProvider {
-  // Returns some available pieces of content from downloads.
+  // Returns some available pieces of content from downloads. If not there's not
+  // enough available content deemed interesting, the returned array will be
+  // empty.
   List() => (array<AvailableOfflineContent> out);
-  // Returns summary of available offline content.
+  // Returns a summary of available offline content. If not there's not enough
+  // available content deemed interesting, the returned summary will be empty.
   Summarize() => (AvailableOfflineContentSummary out);
   // Opens one of the items returned by List().
   LaunchItem(string item_id, string name_space);
diff --git a/chrome/common/extensions/api/language_settings_private.idl b/chrome/common/extensions/api/language_settings_private.idl
index 3a30cb0..e0492c4 100644
--- a/chrome/common/extensions/api/language_settings_private.idl
+++ b/chrome/common/extensions/api/language_settings_private.idl
@@ -33,8 +33,8 @@
     boolean? supportsTranslate;
 
     // Whether this language is prohibited as a UI locale (not in the list of
-    // the 'AllowedUILocales' policy). Defaults to false.
-    boolean? isProhibitedUILocale;
+    // the 'AllowedLanguages' policy). Defaults to false.
+    boolean? isProhibitedLanguage;
   };
 
   dictionary SpellcheckDictionaryStatus {
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 6cd80827..f09813a5 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -231,7 +231,7 @@
 
 // List of locales the UI is allowed to be displayed in by policy. The list is
 // empty if no restriction is being enforced.
-const char kAllowedUILocales[] = "intl.allowed_ui_locales";
+const char kAllowedLanguages[] = "intl.allowed_languages";
 #endif
 
 // The default character encoding to assume for a web page in the
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index d724b117..c6ddc29 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -70,7 +70,7 @@
 extern const char kApplicationLocaleBackup[];
 extern const char kApplicationLocaleAccepted[];
 extern const char kOwnerLocale[];
-extern const char kAllowedUILocales[];
+extern const char kAllowedLanguages[];
 #endif
 
 extern const char kDefaultCharset[];
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc
index cfaf2746..e72219a 100644
--- a/chrome/common/url_constants.cc
+++ b/chrome/common/url_constants.cc
@@ -203,9 +203,6 @@
     "https://support.google.com/chrome/?p=settings_search_help";
 #endif
 
-const char kSmartLockHelpPage[] =
-    "https://support.google.com/accounts/answer/6197437";
-
 const char kSyncAndGoogleServicesLearnMoreURL[] =
     "https://support.google.com/chrome?p=syncgoogleservices";
 
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h
index 5e3098f..70e18fc 100644
--- a/chrome/common/url_constants.h
+++ b/chrome/common/url_constants.h
@@ -167,8 +167,6 @@
 // Help URL for the settings page's search feature.
 extern const char kSettingsSearchHelpURL[];
 
-extern const char kSmartLockHelpPage[];
-
 // The URL for the Learn More page about Sync and Google services.
 extern const char kSyncAndGoogleServicesLearnMoreURL[];
 
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index 42ce514..1d681f9 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -523,8 +523,10 @@
 void NetErrorHelper::OfflineContentAvailable(
     const std::string& offline_content_json) {
 #if defined(OS_ANDROID)
-  render_frame()->ExecuteJavaScript(base::UTF8ToUTF16(
-      base::StrCat({"offlineContentAvailable(", offline_content_json, ");"})));
+  if (!offline_content_json.empty()) {
+    render_frame()->ExecuteJavaScript(base::UTF8ToUTF16(base::StrCat(
+        {"offlineContentAvailable(", offline_content_json, ");"})));
+  }
 #endif
 }
 
diff --git a/chrome/renderer/net/net_error_helper_core_unittest.cc b/chrome/renderer/net/net_error_helper_core_unittest.cc
index 0c337a3..82de7af0 100644
--- a/chrome/renderer/net/net_error_helper_core_unittest.cc
+++ b/chrome/renderer/net/net_error_helper_core_unittest.cc
@@ -2637,8 +2637,7 @@
   std::vector<chrome::mojom::AvailableOfflineContentPtr> content;
   content.push_back(chrome::mojom::AvailableOfflineContent::New(
       "ID", "name_space", "title", "snippet", "date_modified", "attribution",
-      GURL(kDataURI),
-      chrome::mojom::AvailableContentType::kPrefetchedUnopenedPage));
+      GURL(kDataURI), chrome::mojom::AvailableContentType::kPrefetchedPage));
   content.push_back(chrome::mojom::AvailableOfflineContent::New(
       "ID2", "name_space2", "title2", "snippet2", "date_modified2",
       "attribution2", GURL(kDataURI),
@@ -2662,7 +2661,7 @@
   void Summarize(SummarizeCallback callback) override {
     auto summary = chrome::mojom::AvailableOfflineContentSummary::New();
     if (return_content_) {
-      summary->total_items = 2;
+      summary->total_items = 3;
       summary->has_offline_page = true;
       summary->has_prefetched_page = true;
     }
@@ -2718,7 +2717,7 @@
   DoErrorLoad(net::ERR_INTERNET_DISCONNECTED);
   task_environment()->RunUntilIdle();
   // Note: content_type is an AvailableContentType enum value.
-  // Below, 0=kPrefetchedUnopenedPage and 3=kOtherPage.
+  // Below, 0=kPrefetchedPage and 3=kOtherPage.
   std::string want_json = R"([
       {
         "ID": "ID",
@@ -2748,7 +2747,7 @@
                                      2);
   histogram_tester_.ExpectBucketCount(
       "Net.ErrorPageCounts.SuggestionPresented",
-      chrome::mojom::AvailableContentType::kPrefetchedUnopenedPage, 1);
+      chrome::mojom::AvailableContentType::kPrefetchedPage, 1);
   histogram_tester_.ExpectBucketCount(
       "Net.ErrorPageCounts.SuggestionPresented",
       chrome::mojom::AvailableContentType::kOtherPage, 1);
@@ -2759,7 +2758,7 @@
   core()->LaunchOfflineItem("ID", "name_space");
   histogram_tester_.ExpectBucketCount(
       "Net.ErrorPageCounts.SuggestionPresented",
-      chrome::mojom::AvailableContentType::kPrefetchedUnopenedPage, 1);
+      chrome::mojom::AvailableContentType::kPrefetchedPage, 1);
   histogram_tester_.ExpectBucketCount(
       "Net.ErrorPageCounts",
       error_page::NETWORK_ERROR_PAGE_OFFLINE_SUGGESTION_CLICKED, 1);
@@ -2793,7 +2792,7 @@
     "has_offline_page": true,
     "has_prefetched_page": true,
     "has_video": false,
-    "total_items": 2
+    "total_items": 3
   })";
   base::ReplaceChars(want_json, base::kWhitespaceASCII, "", &want_json);
   EXPECT_EQ(want_json, offline_content_summary_json());
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index 51cb30c..eb63fce 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -3287,12 +3287,12 @@
     ]
   },
 
-  "AllowedUILocales": {
+  "AllowedLanguages": {
     "os": ["chromeos"],
     "can_be_recommended": false,
-    "test_policy": { "AllowedUILocales": ["en-US", "de"] },
+    "test_policy": { "AllowedLanguages": ["en-US", "de"] },
     "pref_mappings": [
-      { "pref": "intl.allowed_ui_locales" }
+      { "pref": "intl.allowed_languages" }
     ]
   },
 
diff --git a/chromeos/services/assistant/platform/audio_output_provider_impl.cc b/chromeos/services/assistant/platform/audio_output_provider_impl.cc
index 94b32ad..151f148 100644
--- a/chromeos/services/assistant/platform/audio_output_provider_impl.cc
+++ b/chromeos/services/assistant/platform/audio_output_provider_impl.cc
@@ -4,7 +4,11 @@
 
 #include "chromeos/services/assistant/platform/audio_output_provider_impl.h"
 
+#include <algorithm>
+#include <utility>
+
 #include "ash/public/interfaces/constants.mojom.h"
+#include "base/bind.h"
 #include "chromeos/services/assistant/platform/audio_stream_handler.h"
 #include "chromeos/services/assistant/public/mojom/assistant_audio_decoder.mojom.h"
 #include "chromeos/services/assistant/public/mojom/constants.mojom.h"
@@ -161,7 +165,9 @@
 }  // namespace
 
 VolumeControlImpl::VolumeControlImpl(service_manager::Connector* connector)
-    : binding_(this) {
+    : binding_(this),
+      main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+      weak_factory_(this) {
   connector->BindInterface(ash::mojom::kServiceName, &volume_control_ptr_);
   ash::mojom::VolumeObserverPtr observer;
   binding_.Bind(mojo::MakeRequest(&observer));
@@ -178,7 +184,10 @@
 }
 
 void VolumeControlImpl::SetSystemVolume(float new_volume, bool user_initiated) {
-  volume_control_ptr_->SetVolume(new_volume * 100.0, user_initiated);
+  main_thread_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(&VolumeControlImpl::SetSystemVolumeOnMainThread,
+                     weak_factory_.GetWeakPtr(), new_volume, user_initiated));
 }
 
 float VolumeControlImpl::GetAlarmVolume() {
@@ -195,7 +204,9 @@
 }
 
 void VolumeControlImpl::SetSystemMuted(bool muted) {
-  volume_control_ptr_->SetMuted(muted);
+  main_thread_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(&VolumeControlImpl::SetSystemMutedOnMainThread,
+                                weak_factory_.GetWeakPtr(), muted));
 }
 
 void VolumeControlImpl::OnVolumeChanged(int volume) {
@@ -206,6 +217,17 @@
   mute_ = mute;
 }
 
+void VolumeControlImpl::SetSystemVolumeOnMainThread(float new_volume,
+                                                    bool user_initiated) {
+  DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence());
+  volume_control_ptr_->SetVolume(new_volume * 100.0, user_initiated);
+}
+
+void VolumeControlImpl::SetSystemMutedOnMainThread(bool muted) {
+  DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence());
+  volume_control_ptr_->SetMuted(muted);
+}
+
 AudioOutputProviderImpl::AudioOutputProviderImpl(
     service_manager::Connector* connector,
     scoped_refptr<base::SequencedTaskRunner> background_task_runner)
@@ -344,11 +366,11 @@
   int available_frames = audio_fifo_->GetAvailableFrames();
   if (available_frames < dest->frames()) {
     // In our setting, dest->frames() == frames per block in |audio_fifo_|.
-    DCHECK(audio_fifo_->available_blocks() == 0);
+    DCHECK_EQ(audio_fifo_->available_blocks(), 0);
 
     int frames_to_fill = audio_param_.frames_per_buffer() - available_frames;
 
-    DCHECK(frames_to_fill >= 0);
+    DCHECK_GE(frames_to_fill, 0);
 
     // Fill up to one block with zero data so that |audio_fifo_| has 1 block
     // to consume. This avoids DCHECK in audio_fifo_->Consume() and also
diff --git a/chromeos/services/assistant/platform/audio_output_provider_impl.h b/chromeos/services/assistant/platform/audio_output_provider_impl.h
index 504ac27..641b6bc 100644
--- a/chromeos/services/assistant/platform/audio_output_provider_impl.h
+++ b/chromeos/services/assistant/platform/audio_output_provider_impl.h
@@ -5,6 +5,9 @@
 #ifndef CHROMEOS_SERVICES_ASSISTANT_PLATFORM_AUDIO_OUTPUT_PROVIDER_IMPL_H_
 #define CHROMEOS_SERVICES_ASSISTANT_PLATFORM_AUDIO_OUTPUT_PROVIDER_IMPL_H_
 
+#include <memory>
+#include <vector>
+
 #include "ash/public/interfaces/assistant_volume_control.mojom.h"
 #include "base/macros.h"
 #include "base/single_thread_task_runner.h"
@@ -43,12 +46,18 @@
   void OnMuteStateChanged(bool mute) override;
 
  private:
+  void SetSystemVolumeOnMainThread(float new_volume, bool user_initiated);
+  void SetSystemMutedOnMainThread(bool muted);
+
   ash::mojom::AssistantVolumeControlPtr volume_control_ptr_;
   mojo::Binding<ash::mojom::VolumeObserver> binding_;
+  scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner_;
 
   int volume_ = 100;
   bool mute_ = false;
 
+  base::WeakPtrFactory<VolumeControlImpl> weak_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(VolumeControlImpl);
 };
 
diff --git a/components/browser_sync/profile_sync_test_util.cc b/components/browser_sync/profile_sync_test_util.cc
index cc898c06..9e72b16 100644
--- a/components/browser_sync/profile_sync_test_util.cc
+++ b/components/browser_sync/profile_sync_test_util.cc
@@ -175,6 +175,7 @@
     user_prefs::PrefRegistrySyncable* registry) {
   syncer::SyncPrefs::RegisterProfilePrefs(registry);
   AccountTrackerService::RegisterPrefs(registry);
+  ProfileOAuth2TokenService::RegisterProfilePrefs(registry);
   SigninManagerBase::RegisterProfilePrefs(registry);
   SigninManagerBase::RegisterPrefs(registry);
 }
diff --git a/components/error_page/common/net_error_info.h b/components/error_page/common/net_error_info.h
index 306ef28..4208007d 100644
--- a/components/error_page/common/net_error_info.h
+++ b/components/error_page/common/net_error_info.h
@@ -7,7 +7,8 @@
 
 namespace error_page {
 
-// Network error page events.  Used for UMA statistics.
+// Network error page events.  Used for UMA statistics and its values must be
+// mirrored in NetErrorPageEvents in enums.xml.
 enum NetworkErrorPageEvent {
   NETWORK_ERROR_PAGE_SHOWN = 0,  // Error pages shown.
 
diff --git a/components/history/core/browser/sync/history_delete_directives_model_type_controller.cc b/components/history/core/browser/sync/history_delete_directives_model_type_controller.cc
index 49e56cec..07a537e 100644
--- a/components/history/core/browser/sync/history_delete_directives_model_type_controller.cc
+++ b/components/history/core/browser/sync/history_delete_directives_model_type_controller.cc
@@ -50,7 +50,7 @@
 }
 
 void HistoryDeleteDirectivesModelTypeController::Stop(
-    syncer::SyncStopMetadataFate metadata_fate,
+    syncer::ShutdownReason shutdown_reason,
     StopCallback callback) {
   DCHECK(CalledOnValidThread());
 
@@ -58,7 +58,7 @@
     sync_client_->GetSyncService()->RemoveObserver(this);
   }
 
-  SyncableServiceBasedModelTypeController::Stop(metadata_fate,
+  SyncableServiceBasedModelTypeController::Stop(shutdown_reason,
                                                 std::move(callback));
 }
 
diff --git a/components/history/core/browser/sync/history_delete_directives_model_type_controller.h b/components/history/core/browser/sync/history_delete_directives_model_type_controller.h
index ba0e706..0e113f6 100644
--- a/components/history/core/browser/sync/history_delete_directives_model_type_controller.h
+++ b/components/history/core/browser/sync/history_delete_directives_model_type_controller.h
@@ -32,7 +32,7 @@
   bool ReadyForStart() const override;
   void LoadModels(const syncer::ConfigureContext& configure_context,
                   const ModelLoadCallback& model_load_callback) override;
-  void Stop(syncer::SyncStopMetadataFate metadata_fate,
+  void Stop(syncer::ShutdownReason shutdown_reason,
             StopCallback callback) override;
 
   // syncer::SyncServiceObserver implementation.
diff --git a/components/neterror/resources/neterror.js b/components/neterror/resources/neterror.js
index 206592e..86b1b34 100644
--- a/components/neterror/resources/neterror.js
+++ b/components/neterror/resources/neterror.js
@@ -174,8 +174,10 @@
 
 // Populates a summary of suggested offline content.
 function offlineContentSummaryAvailable(summary) {
-  if (!summary || !loadTimeData.valueExists('offlineContentSummary'))
+  if (!summary || summary.total_items == 0 ||
+      !loadTimeData.valueExists('offlineContentSummary')) {
     return;
+  }
 
   document.getElementById('offline-content-summary').hidden = false;
 }
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc
index f352325..4c9881a 100644
--- a/components/omnibox/browser/omnibox_edit_model.cc
+++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -334,9 +334,13 @@
   if (sel_min != 0)
     return;
 
-  // Check whether the user is trying to copy the current page's URL by checking
-  // if |text| is the whole permanent URL.
-  if (!user_input_in_progress_ && *text == GetPermanentDisplayText()) {
+  // If the user has not modified the display text and is copying the whole
+  // display text, copy the current page's full URL.
+  //
+  // This early exit is meant for cases where we elide portions of the URL, so
+  // it's inappropriate for the Query in Omnibox case.
+  if (!user_input_in_progress_ && *text == GetPermanentDisplayText() &&
+      !GetQueryInOmniboxSearchTerms(nullptr)) {
     // It's safe to copy the underlying URL.  These lines ensure that if the
     // scheme was stripped it's added back, and the URL is unescaped (we escape
     // parts of it for display).
@@ -346,6 +350,10 @@
     return;
   }
 
+  // This code early exits if the copied text looks like a search query. It's
+  // not at the very top of this method, as it would interpret the intranet URL
+  // "printer/path" as a search query instead of a URL.
+  //
   // We can't use CurrentTextIsURL() or GetDataForURLExport() because right now
   // the user is probably holding down control to cause the copy, which will
   // screw up our calculation of the desired_tld.
@@ -355,6 +363,7 @@
                                                  &match_from_text, nullptr);
   if (AutocompleteMatch::IsSearchType(match_from_text.type))
     return;
+
   *url_from_text = match_from_text.destination_url;
 
   GURL current_page_url = PermanentURL();
diff --git a/components/omnibox/browser/omnibox_edit_model.h b/components/omnibox/browser/omnibox_edit_model.h
index 8705198..3748f40 100644
--- a/components/omnibox/browser/omnibox_edit_model.h
+++ b/components/omnibox/browser/omnibox_edit_model.h
@@ -136,11 +136,14 @@
   // URL/navigation, as opposed to a search.
   bool CurrentTextIsURL() const;
 
-  // Invoked to adjust the text before writting to the clipboard for a copy
-  // (e.g. by adding 'http' to the front). |sel_min| gives the minimum position
-  // of the selection e.g. min(selection_start, selection_end). |text| is the
-  // currently selected text. If the url should be copied to the clipboard
-  // |write_url| is set to true and |url_from_text| set to the url to write.
+  // Adjusts the copied text before writing it to the clipboard. If the copied
+  // text is a URL with the scheme elided, this method reattaches the scheme.
+  // Copied text that looks like a search query, including the Query in Omnibox
+  // case, will not be modified.
+  //
+  // |sel_min| gives the minimum of the selection, e.g. min(sel_start, sel_end).
+  // |text| is the currently selected text. If the copied text is interpreted
+  // as a URL, |write_url| is set to true and |url_from_text| set to the URL.
   void AdjustTextForCopy(int sel_min,
                          base::string16* text,
                          GURL* url_from_text,
diff --git a/components/omnibox/browser/omnibox_edit_model_unittest.cc b/components/omnibox/browser/omnibox_edit_model_unittest.cc
index 6340603b..3607bd3 100644
--- a/components/omnibox/browser/omnibox_edit_model_unittest.cc
+++ b/components/omnibox/browser/omnibox_edit_model_unittest.cc
@@ -155,6 +155,43 @@
   }
 }
 
+// Tests that AdjustTextForCopy behaves properly with Query in Omnibox enabled.
+// For more general tests of copy adjustment, see the AdjustTextForCopy test.
+TEST_F(OmniboxEditModelTest, AdjustTextForCopyQueryInOmnibox) {
+  toolbar_model()->set_formatted_full_url(
+      base::ASCIIToUTF16("https://www.example.com/"));
+  toolbar_model()->set_url_for_display(base::ASCIIToUTF16("example.com"));
+
+  TestOmniboxClient* client =
+      static_cast<TestOmniboxClient*>(model()->client());
+  client->SetFakeSearchTermsForQueryInOmnibox(base::ASCIIToUTF16("foobar"));
+  model()->ResetDisplayTexts();
+
+  // Verify that we copy the query verbatim when nothing has been modified.
+  {
+    base::string16 result = base::ASCIIToUTF16("foobar");
+    GURL url;
+    bool write_url;
+    model()->AdjustTextForCopy(0, &result, &url, &write_url);
+
+    EXPECT_EQ(base::ASCIIToUTF16("foobar"), result);
+    EXPECT_EQ(GURL(), url);
+    EXPECT_FALSE(write_url);
+  }
+
+  // Verify we copy the query verbatim even if the user has refined the query.
+  {
+    base::string16 result = base::ASCIIToUTF16("something else");
+    GURL url;
+    bool write_url;
+    model()->AdjustTextForCopy(0, &result, &url, &write_url);
+
+    EXPECT_EQ(base::ASCIIToUTF16("something else"), result);
+    EXPECT_EQ(GURL(), url);
+    EXPECT_FALSE(write_url);
+  }
+}
+
 TEST_F(OmniboxEditModelTest, InlineAutocompleteText) {
   // Test if the model updates the inline autocomplete text in the view.
   EXPECT_EQ(base::string16(), view()->inline_autocomplete_text());
diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc
index 1558a0a..24a66fcab 100644
--- a/components/omnibox/browser/omnibox_field_trial.cc
+++ b/components/omnibox/browser/omnibox_field_trial.cc
@@ -186,7 +186,7 @@
 // Feature used to allow breaking words at underscores in building
 // URLIndexPrivateData.
 const base::Feature kBreakWordsAtUnderscores{"OmniboxBreakWordsAtUnderscores",
-                                             base::FEATURE_DISABLED_BY_DEFAULT};
+                                             base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Feature used to fetch document suggestions.
 const base::Feature kDocumentProvider{"OmniboxDocumentProvider",
diff --git a/components/omnibox/browser/scored_history_match_unittest.cc b/components/omnibox/browser/scored_history_match_unittest.cc
index 2f4b67b..cb73dfe 100644
--- a/components/omnibox/browser/scored_history_match_unittest.cc
+++ b/components/omnibox/browser/scored_history_match_unittest.cc
@@ -649,7 +649,7 @@
 // This function only tests scoring of single terms that match exactly
 // once somewhere in the URL or title.
 TEST_F(ScoredHistoryMatchTest, GetTopicalityScore) {
-  GURL url("http://abc.def.com/path1/path2?arg1=val1&arg2=val2#hash_component");
+  GURL url("http://abc.def.com/path1/path2?arg1=val1&arg2=val2#hash_fragment");
   base::string16 title = ASCIIToUTF16("here is a title");
   auto Score = [&](const char* term) {
     return GetTopicalityScoreOfTermAgainstURLAndTitle(ASCIIToUTF16(term), url,
diff --git a/components/password_manager/core/browser/DEPS b/components/password_manager/core/browser/DEPS
index 52061ac..2010f779 100644
--- a/components/password_manager/core/browser/DEPS
+++ b/components/password_manager/core/browser/DEPS
@@ -29,6 +29,9 @@
   "hsts_query_unittest\.cc": [
     "+services/network",
   ],
+  "new_password_form_manager_unittest\.cc": [
+    "+components/ukm",
+  ],
   "password_autofill_manager_unittest\.cc": [
     "+components/ukm",
   ],
diff --git a/components/password_manager/core/browser/form_parsing/form_parser.cc b/components/password_manager/core/browser/form_parsing/form_parser.cc
index cb9866cf..899f7b69 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser.cc
+++ b/components/password_manager/core/browser/form_parsing/form_parser.cc
@@ -269,23 +269,31 @@
 // useless). This ignores all passwords with Interactability below
 // |best_interactability| and also fields with names which sound like CVC
 // fields. Stores the iterator to the first relevant password in
-// |first_relevant_password|.
+// |first_relevant_password|. |readonly_status| will be updated according to the
+// processing of the parsed fields; it must not be null.
 std::vector<const FormFieldData*> GetRelevantPasswords(
     const std::vector<ProcessedField>& processed_fields,
     FormDataParser::Mode mode,
     Interactability best_interactability,
-    std::vector<ProcessedField>::const_iterator* first_relevant_password) {
+    std::vector<ProcessedField>::const_iterator* first_relevant_password,
+    FormDataParser::ReadonlyPasswordFields* readonly_status) {
   DCHECK(first_relevant_password);
   *first_relevant_password = processed_fields.end();
   std::vector<const FormFieldData*> result;
   result.reserve(processed_fields.size());
+  DCHECK(readonly_status);
 
   const bool consider_only_non_empty = mode == FormDataParser::Mode::kSaving;
 
+  // These two counters are used to determine the ReadonlyPassowrdFields value
+  // corresponding to this form.
+  size_t all_passwords_seen = 0;
+  size_t ignored_readonly = 0;
   for (auto it = processed_fields.begin(); it != processed_fields.end(); ++it) {
     const ProcessedField& processed_field = *it;
     if (!processed_field.is_password)
       continue;
+    ++all_passwords_seen;
     if (!MatchesInteractability(processed_field, best_interactability))
       continue;
     if (consider_only_non_empty && processed_field.field->value.empty())
@@ -299,6 +307,7 @@
         !(processed_field.field->properties_mask &
           (FieldPropertiesFlags::USER_TYPED |
            FieldPropertiesFlags::AUTOFILLED))) {
+      ++ignored_readonly;
       continue;
     }
     if (IsFieldCVC(*processed_field.field))
@@ -308,6 +317,15 @@
     result.push_back(processed_field.field);
   }
 
+  DCHECK_NE(0u, all_passwords_seen);
+  DCHECK_LE(ignored_readonly, all_passwords_seen);
+  if (ignored_readonly == 0)
+    *readonly_status = FormDataParser::ReadonlyPasswordFields::kNoneIgnored;
+  else if (ignored_readonly < all_passwords_seen)
+    *readonly_status = FormDataParser::ReadonlyPasswordFields::kSomeIgnored;
+  else
+    *readonly_status = FormDataParser::ReadonlyPasswordFields::kAllIgnored;
+
   return result;
 }
 
@@ -432,12 +450,14 @@
 // complete it. The result is stored back in |found_fields|. The best
 // interactability for usernames, which depends on position of the found
 // passwords as well, is returned through |username_max| to be used in other
-// kinds of analysis.
+// kinds of analysis. If password fields end up being parsed, |readonly_status|
+// will be updated according to that processing.
 void ParseUsingBaseHeuristics(
     const std::vector<ProcessedField>& processed_fields,
     FormDataParser::Mode mode,
     SignificantFields* found_fields,
-    Interactability* username_max) {
+    Interactability* username_max,
+    FormDataParser::ReadonlyPasswordFields* readonly_status) {
   // If there is both the username and the minimal set of fields to build a
   // PasswordForm, return early -- no more work to do.
   if (found_fields->HasPasswords() && found_fields->username)
@@ -458,8 +478,9 @@
     // Try to find password elements (current, new, confirmation) among those
     // with best interactability.
     first_relevant_password = processed_fields.end();
-    std::vector<const FormFieldData*> passwords = GetRelevantPasswords(
-        processed_fields, mode, password_max, &first_relevant_password);
+    std::vector<const FormFieldData*> passwords =
+        GetRelevantPasswords(processed_fields, mode, password_max,
+                             &first_relevant_password, readonly_status);
     if (passwords.empty())
       return;
     LocateSpecificPasswords(passwords, &found_fields->password,
@@ -692,6 +713,7 @@
 std::unique_ptr<PasswordForm> FormDataParser::Parse(
     const autofill::FormData& form_data,
     Mode mode) {
+  readonly_status_ = ReadonlyPasswordFields::kNoHeuristics;
   autofill::ValueElementVector all_possible_passwords;
   autofill::ValueElementVector all_possible_usernames;
   std::vector<ProcessedField> processed_fields = ProcessFields(
@@ -731,7 +753,7 @@
   // Try to parse with base heuristic.
   Interactability username_max = Interactability::kUnlikely;
   ParseUsingBaseHeuristics(processed_fields, mode, significant_fields.get(),
-                           &username_max);
+                           &username_max, &readonly_status_);
   if (username_detection_method ==
           UsernameDetectionMethod::kNoUsernameDetected &&
       significant_fields && significant_fields->username) {
diff --git a/components/password_manager/core/browser/form_parsing/form_parser.h b/components/password_manager/core/browser/form_parsing/form_parser.h
index 6a997133..fd551751 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser.h
+++ b/components/password_manager/core/browser/form_parsing/form_parser.h
@@ -42,6 +42,29 @@
     kCount
   };
 
+  // Records whether password fields with a "readonly" attribute were ignored
+  // during form parsing.
+  enum class ReadonlyPasswordFields {
+    // Local heuristics, which only consider the readonly attribute, were not
+    // used for the parsing. This means that either the form was unsuitable for
+    // parsing (e.g., no fields at all), or some of the more trusted methods
+    // (server hints, autocomplete attributes) succeeded.
+    kNoHeuristics = 0,
+    //
+    // The rest of the values refer to the case when local heuristics were used.
+    // In that case there are always some password fields.
+    //
+    // No password fields with "readonly" ignored but some password fields
+    // present.
+    kNoneIgnored = 2,
+    // At least one password with "readonly" was ignored and at least one other
+    // password field was not ignored (whether readonly or not).
+    kSomeIgnored = 3,
+    // At least one password with "readonly" was ignored and every password
+    // field was ignored because of being readonly.
+    kAllIgnored = 4,
+  };
+
   FormDataParser();
 
   ~FormDataParser();
@@ -52,6 +75,8 @@
 
   const base::Optional<FormPredictions>& predictions() { return predictions_; }
 
+  ReadonlyPasswordFields readonly_status() { return readonly_status_; }
+
   // Parse DOM information |form_data| into Password Manager's form
   // representation PasswordForm. Return nullptr when parsing is unsuccessful.
   std::unique_ptr<autofill::PasswordForm> Parse(
@@ -63,6 +88,11 @@
   // types.
   base::Optional<FormPredictions> predictions_;
 
+  // Records whether readonly password fields were seen during the last call to
+  // Parse().
+  ReadonlyPasswordFields readonly_status_ =
+      ReadonlyPasswordFields::kNoHeuristics;
+
   DISALLOW_COPY_AND_ASSIGN(FormDataParser);
 };
 
diff --git a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
index c53f605..2b1c203 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
+++ b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
@@ -10,6 +10,7 @@
 #include <set>
 #include <utility>
 
+#include "base/optional.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
@@ -87,6 +88,7 @@
   const autofill::ValueElementVector* all_possible_passwords = nullptr;
   const autofill::ValueElementVector* all_possible_usernames = nullptr;
   bool username_may_use_prefilled_placeholder = false;
+  base::Optional<FormDataParser::ReadonlyPasswordFields> readonly_status;
 };
 
 // Returns numbers which are distinct from each other within the scope of one
@@ -353,6 +355,9 @@
                     parsed_form->other_possible_usernames);
         }
       }
+      if (test_case.readonly_status) {
+        EXPECT_EQ(*test_case.readonly_status, parser.readonly_status());
+      }
     }
   }
 }
@@ -1335,6 +1340,83 @@
   });
 }
 
+// Check that "readonly status" is reported accordingly.
+TEST(FormParserTest, ReadonlyStatus) {
+  CheckTestData({
+      {
+          "Server hints prevent heuristics from using readonly.",
+          {
+              {.role = ElementRole::USERNAME, .form_control_type = "text"},
+              {.role = ElementRole::CURRENT_PASSWORD,
+               .prediction = {.type = autofill::PASSWORD},
+               .is_readonly = true,
+               .form_control_type = "password"},
+          },
+          .readonly_status =
+              FormDataParser::ReadonlyPasswordFields::kNoHeuristics,
+      },
+      {
+          "Autocomplete attributes prevent heuristics from using readonly.",
+          {
+              {.role = ElementRole::USERNAME, .form_control_type = "text"},
+              {.role = ElementRole::CURRENT_PASSWORD,
+               .autocomplete_attribute = "current-password",
+               .is_readonly = true,
+               .form_control_type = "password"},
+          },
+          .readonly_status =
+              FormDataParser::ReadonlyPasswordFields::kNoHeuristics,
+      },
+      {
+          "No password fields are a special case of not going through local "
+          "heuristics.",
+          {
+              {.form_control_type = "text"},
+          },
+          .readonly_status =
+              FormDataParser::ReadonlyPasswordFields::kNoHeuristics,
+      },
+      {
+          "No readonly passwords ignored.",
+          {
+              {.role = ElementRole::USERNAME, .form_control_type = "text"},
+              {.role = ElementRole::CURRENT_PASSWORD,
+               // While readonly, this field is not ignored because it was
+               // autofilled before.
+               .is_readonly = true,
+               .properties_mask = FieldPropertiesFlags::AUTOFILLED_ON_PAGELOAD,
+               .form_control_type = "password"},
+              {.role = ElementRole::NEW_PASSWORD,
+               .is_readonly = false,
+               .form_control_type = "password"},
+          },
+          .readonly_status =
+              FormDataParser::ReadonlyPasswordFields::kNoneIgnored,
+      },
+      {
+          "Some readonly passwords ignored.",
+          {
+              {.role = ElementRole::USERNAME, .form_control_type = "text"},
+              {.is_readonly = true, .form_control_type = "password"},
+              {.role = ElementRole::CURRENT_PASSWORD,
+               .is_readonly = false,
+               .form_control_type = "password"},
+          },
+          .readonly_status =
+              FormDataParser::ReadonlyPasswordFields::kSomeIgnored,
+      },
+      {
+          "All readonly passwords ignored.",
+          {
+              {.form_control_type = "text"},
+              {.is_readonly = true, .form_control_type = "password"},
+          },
+          .readonly_status =
+              FormDataParser::ReadonlyPasswordFields::kAllIgnored,
+      },
+  });
+}
+
 TEST(FormParserTest, HistogramsForUsernameDetectionMethod) {
   struct HistogramTestCase {
     FormParsingTestCase parsing_data;
diff --git a/components/password_manager/core/browser/new_password_form_manager.cc b/components/password_manager/core/browser/new_password_form_manager.cc
index e7b4e95..fe8f2cd7 100644
--- a/components/password_manager/core/browser/new_password_form_manager.cc
+++ b/components/password_manager/core/browser/new_password_form_manager.cc
@@ -405,6 +405,8 @@
   is_submitted_ = true;
   parsed_submitted_form_ =
       ParseFormAndMakeLogging(submitted_form_, FormDataParser::Mode::kSaving);
+  RecordMetricOnReadonly(parser_.readonly_status(), !!parsed_submitted_form_,
+                         FormDataParser::Mode::kSaving);
   CreatePendingCredentials();
   return true;
 }
@@ -433,6 +435,8 @@
   // parse result, but to parse each time again.
   std::unique_ptr<PasswordForm> observed_password_form =
       ParseFormAndMakeLogging(observed_form_, FormDataParser::Mode::kFilling);
+  RecordMetricOnReadonly(parser_.readonly_status(), !!observed_password_form,
+                         FormDataParser::Mode::kFilling);
   if (!observed_password_form)
     return;
 
@@ -490,6 +494,25 @@
   }
 }
 
+void NewPasswordFormManager::RecordMetricOnReadonly(
+    FormDataParser::ReadonlyPasswordFields readonly_status,
+    bool parsing_successful,
+    FormDataParser::Mode mode) {
+  // The reported value is combined of the |readonly_status| shifted by one bit
+  // to the left, and the success bit put in the least significant bit. Note:
+  // C++ guarantees that bool->int conversions map false to 0 and true to 1.
+  uint64_t value = static_cast<uint64_t>(parsing_successful) +
+                   (static_cast<uint64_t>(readonly_status) << 1);
+  switch (mode) {
+    case FormDataParser::Mode::kSaving:
+      metrics_recorder_->RecordReadonlyWhenSaving(value);
+      break;
+    case FormDataParser::Mode::kFilling:
+      metrics_recorder_->RecordReadonlyWhenFilling(value);
+      break;
+  }
+}
+
 void NewPasswordFormManager::ReportTimeBetweenStoreAndServerUMA() {
   if (!received_stored_credentials_time_.is_null()) {
     UMA_HISTOGRAM_TIMES("PasswordManager.TimeBetweenStoreAndServer",
diff --git a/components/password_manager/core/browser/new_password_form_manager.h b/components/password_manager/core/browser/new_password_form_manager.h
index da80add..28b628e 100644
--- a/components/password_manager/core/browser/new_password_form_manager.h
+++ b/components/password_manager/core/browser/new_password_form_manager.h
@@ -157,6 +157,14 @@
   void RecordMetricOnCompareParsingResult(
       const autofill::PasswordForm& parsed_form);
 
+  // Records the status of readonly fields during parsing, combined with the
+  // overall success of the parsing. It reports through two different metrics,
+  // depending on whether |mode| indicates parsing for saving or filling.
+  void RecordMetricOnReadonly(
+      FormDataParser::ReadonlyPasswordFields readonly_status,
+      bool parsing_successful,
+      FormDataParser::Mode mode);
+
   // Report the time between receiving credentials from the password store and
   // the autofill server responding to the lookup request.
   void ReportTimeBetweenStoreAndServerUMA();
diff --git a/components/password_manager/core/browser/new_password_form_manager_unittest.cc b/components/password_manager/core/browser/new_password_form_manager_unittest.cc
index ca29178e..00f32a4 100644
--- a/components/password_manager/core/browser/new_password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/new_password_form_manager_unittest.cc
@@ -15,6 +15,7 @@
 #include "components/password_manager/core/browser/stub_form_saver.h"
 #include "components/password_manager/core/browser/stub_password_manager_client.h"
 #include "components/password_manager/core/browser/stub_password_manager_driver.h"
+#include "components/ukm/test_ukm_recorder.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -97,8 +98,6 @@
   DISALLOW_COPY_AND_ASSIGN(MockFormSaver);
 };
 
-}  // namespace
-
 // TODO(https://crbug.com/831123): Test sending metrics.
 // TODO(https://crbug.com/831123): Test create pending credentials when
 // generation happened.
@@ -840,4 +839,121 @@
             cloned_manager->metrics_recorder());
 }
 
+// Extracts the information whether parsing was successful from a metric
+// specified by |metric_name| stored in |entry|. The metric name should be one
+// of ukm::builders::PasswordForm::kReadonlyWhenSavingName and
+// ukm::builders::PasswordForm::kReadonlyWhenFillingName.
+bool ParsingSuccessReported(const ukm::mojom::UkmEntry* entry,
+                            base::StringPiece metric_name) {
+  const int64_t* value =
+      ukm::TestUkmRecorder::GetEntryMetric(entry, metric_name);
+  EXPECT_TRUE(value);
+  // Ideally, an ASSERT_TRUE above would prevent the test suite from crashing on
+  // dereferencing |value| below. But ASSERT_* is not available in non-void
+  // returning functions, so the null value is handled explicitly.
+  if (!value)
+    return false;  // Value does not matter, the test already failed.
+  return 1 == (1 & *value);
+}
+
+// Test that an attempt to log to ReadonlyWhenFilling UKM is made when filling.
+TEST_F(NewPasswordFormManagerTest, RecordReadonlyWhenFilling) {
+  TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get());
+  ukm::TestAutoSetUkmRecorder test_ukm_recorder;
+  EXPECT_CALL(driver_, AllowPasswordGenerationForForm(_));
+  EXPECT_CALL(driver_, FillPasswordForm(_));
+  fetcher_->SetNonFederated({&saved_match_}, 0u);
+
+  task_runner_->FastForwardUntilNoTasksRemain();
+
+  // Destroy the form manager to destroy the UKM recorder it owns. The recorder
+  // only records metrics in its destructor.
+  form_manager_.reset();
+
+  auto entries = test_ukm_recorder.GetEntriesByName(
+      ukm::builders::PasswordForm::kEntryName);
+  ASSERT_EQ(1u, entries.size());
+
+  EXPECT_TRUE(ParsingSuccessReported(
+      entries[0], ukm::builders::PasswordForm::kReadonlyWhenFillingName));
+}
+
+// Test that an attempt to log to ReadonlyWhenFilling UKM is made when filling,
+// even when the parsing itself is unsuccessful.
+TEST_F(NewPasswordFormManagerTest, RecordReadonlyWhenFilling_ParsingFailed) {
+  TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get());
+
+  FormData malformed_form = observed_form_;
+  malformed_form.fields.clear();
+  CreateFormManager(malformed_form);
+  // Only create the recorder after the current form manager is created,
+  // otherwise the destruction of the previous one will add unwanted UKM entries
+  // in it.
+  ukm::TestAutoSetUkmRecorder test_ukm_recorder;
+  fetcher_->SetNonFederated({&saved_match_}, 0u);
+
+  task_runner_->FastForwardUntilNoTasksRemain();
+
+  // Destroy the form manager to destroy the UKM recorder it owns. The recorder
+  // only records metrics in its destructor.
+  form_manager_.reset();
+
+  auto entries = test_ukm_recorder.GetEntriesByName(
+      ukm::builders::PasswordForm::kEntryName);
+  ASSERT_EQ(1u, entries.size());
+
+  EXPECT_FALSE(ParsingSuccessReported(
+      entries[0], ukm::builders::PasswordForm::kReadonlyWhenFillingName));
+}
+
+// Test that an attempt to log to ReadonlyWhenSaving UKM is made when creating
+// pending credentials.
+TEST_F(NewPasswordFormManagerTest, RecordReadonlyWhenSaving) {
+  // The scoped context is needed for the UKM recorder.
+  TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get());
+  ukm::TestAutoSetUkmRecorder test_ukm_recorder;
+  fetcher_->SetNonFederated({&saved_match_}, 0u);
+
+  EXPECT_TRUE(
+      form_manager_->SetSubmittedFormIfIsManaged(submitted_form_, &driver_));
+
+  // Destroy the form manager to destroy the UKM recorder it owns. The recorder
+  // only records metrics in its destructor.
+  form_manager_.reset();
+
+  auto entries = test_ukm_recorder.GetEntriesByName(
+      ukm::builders::PasswordForm::kEntryName);
+  ASSERT_EQ(1u, entries.size());
+
+  EXPECT_TRUE(ParsingSuccessReported(
+      entries[0], ukm::builders::PasswordForm::kReadonlyWhenSavingName));
+}
+
+// Test that an attempt to log to ReadonlyWhenSaving UKM is made when creating
+// pending credentials, even when their parsing itself is unsuccessful.
+TEST_F(NewPasswordFormManagerTest, RecordReadonlyWhenSaving_ParsingFailed) {
+  // The scoped context is needed for the UKM recorder.
+  TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get());
+  ukm::TestAutoSetUkmRecorder test_ukm_recorder;
+  fetcher_->SetNonFederated({&saved_match_}, 0u);
+
+  FormData malformed_form = observed_form_;
+  malformed_form.fields.clear();
+  EXPECT_TRUE(
+      form_manager_->SetSubmittedFormIfIsManaged(malformed_form, &driver_));
+
+  // Destroy the form manager to destroy the UKM recorder it owns. The recorder
+  // only records metrics in its destructor.
+  form_manager_.reset();
+
+  auto entries = test_ukm_recorder.GetEntriesByName(
+      ukm::builders::PasswordForm::kEntryName);
+  ASSERT_EQ(1u, entries.size());
+
+  EXPECT_FALSE(ParsingSuccessReported(
+      entries[0], ukm::builders::PasswordForm::kReadonlyWhenSavingName));
+}
+
+}  // namespace
+
 }  // namespace  password_manager
diff --git a/components/password_manager/core/browser/password_form_metrics_recorder.cc b/components/password_manager/core/browser/password_form_metrics_recorder.cc
index 1222b36..abfb3f2 100644
--- a/components/password_manager/core/browser/password_form_metrics_recorder.cc
+++ b/components/password_manager/core/browser/password_form_metrics_recorder.cc
@@ -39,7 +39,6 @@
 
     // Ignore these for metrics collection:
     case metrics_util::CLICKED_MANAGE:
-    case metrics_util::CLICKED_BRAND_NAME:
     case metrics_util::CLICKED_PASSWORDS_DASHBOARD:
     case metrics_util::AUTO_SIGNIN_TOAST_TIMEOUT:
       break;
@@ -50,6 +49,7 @@
     case metrics_util::CLICKED_UNBLACKLIST_OBSOLETE:
     case metrics_util::CLICKED_CREDENTIAL_OBSOLETE:
     case metrics_util::AUTO_SIGNIN_TOAST_CLICKED_OBSOLETE:
+    case metrics_util::CLICKED_BRAND_NAME_OBSOLETE:
     case metrics_util::NUM_UI_RESPONSES:
       NOTREACHED();
       break;
@@ -288,6 +288,14 @@
   ukm_entry_builder_.SetParsingOnSavingDifference(comparison_result);
 }
 
+void PasswordFormMetricsRecorder::RecordReadonlyWhenFilling(uint64_t value) {
+  ukm_entry_builder_.SetReadonlyWhenFilling(value);
+}
+
+void PasswordFormMetricsRecorder::RecordReadonlyWhenSaving(uint64_t value) {
+  ukm_entry_builder_.SetReadonlyWhenSaving(value);
+}
+
 void PasswordFormMetricsRecorder::RecordShowManualFallbackForSaving(
     bool has_generated_password,
     bool is_update) {
diff --git a/components/password_manager/core/browser/password_form_metrics_recorder.h b/components/password_manager/core/browser/password_form_metrics_recorder.h
index a840460a..b8c0544 100644
--- a/components/password_manager/core/browser/password_form_metrics_recorder.h
+++ b/components/password_manager/core/browser/password_form_metrics_recorder.h
@@ -291,6 +291,18 @@
   // |comparison_result| is a bitmask of values from ParsingOnSavingDifference.
   void RecordParsingOnSavingDifference(uint64_t comparison_result);
 
+  // Records the readonly status encoded with parsing success after parsing for
+  // filling. The |value| is constructed as follows: The least significant bit
+  // says whether parsing succeeded (1) or not (0). The rest, shifted by one
+  // bit to the right is the FormDataParser::ReadonlyPasswordFields
+  // representation of the readonly status.
+  void RecordReadonlyWhenFilling(uint64_t value);
+
+  // Records the readonly status encoded with parsing success after parsing for
+  // creating pending credentials. See RecordReadonlyWhenFilling for the meaning
+  // of |value|.
+  void RecordReadonlyWhenSaving(uint64_t value);
+
   // Records that Chrome noticed that it should show a manual fallback for
   // saving.
   void RecordShowManualFallbackForSaving(bool has_generated_password,
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h
index f34263c0..ea4c21d 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.h
+++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -55,7 +55,7 @@
   CLICKED_CREDENTIAL_OBSOLETE,   // obsolete.
   AUTO_SIGNIN_TOAST_TIMEOUT,
   AUTO_SIGNIN_TOAST_CLICKED_OBSOLETE,  // obsolete.
-  CLICKED_BRAND_NAME,
+  CLICKED_BRAND_NAME_OBSOLETE,         // obsolete.
   CLICKED_PASSWORDS_DASHBOARD,
   NUM_UI_RESPONSES,
 };
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc
index afdd3ea..9af0399c 100644
--- a/components/password_manager/core/browser/password_store.cc
+++ b/components/password_manager/core/browser/password_store.cc
@@ -5,6 +5,7 @@
 #include "components/password_manager/core/browser/password_store.h"
 
 #include <algorithm>
+#include <iterator>
 #include <memory>
 #include <utility>
 
@@ -278,6 +279,13 @@
            consumer);
 }
 
+void PasswordStore::GetAllLoginsWithAffiliationAndBrandingInformation(
+    PasswordStoreConsumer* consumer) {
+  Schedule(
+      &PasswordStore::GetAllLoginsWithAffiliationAndBrandingInformationImpl,
+      consumer);
+}
+
 void PasswordStore::ReportMetrics(const std::string& sync_username,
                                   bool custom_passphrase_sync_enabled) {
   if (background_task_runner_) {
@@ -759,6 +767,27 @@
                      this, std::move(obtained_forms), std::move(request)));
 }
 
+void PasswordStore::GetAllLoginsWithAffiliationAndBrandingInformationImpl(
+    std::unique_ptr<GetLoginsRequest> request) {
+  std::vector<std::unique_ptr<PasswordForm>> results;
+  for (auto fill_logins : {&PasswordStore::FillAutofillableLogins,
+                           &PasswordStore::FillBlacklistLogins}) {
+    std::vector<std::unique_ptr<PasswordForm>> obtained_forms;
+    if ((this->*fill_logins)(&obtained_forms)) {
+      results.insert(results.end(),
+                     std::make_move_iterator(obtained_forms.begin()),
+                     std::make_move_iterator(obtained_forms.end()));
+    }
+  }
+
+  // Since AffiliatedMatchHelper's requests should be sent from UI thread,
+  // post a request to UI thread.
+  main_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(&PasswordStore::InjectAffiliationAndBrandingInformation,
+                     this, std::move(results), std::move(request)));
+}
+
 void PasswordStore::NotifyAllSiteStats(
     std::unique_ptr<GetLoginsRequest> request) {
   request->NotifyWithSiteStatistics(GetAllSiteStatsImpl());
diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h
index 796f4d8..384598f 100644
--- a/components/password_manager/core/browser/password_store.h
+++ b/components/password_manager/core/browser/password_store.h
@@ -222,6 +222,12 @@
   virtual void GetBlacklistLoginsWithAffiliationAndBrandingInformation(
       PasswordStoreConsumer* consumer);
 
+  // Gets the complete list of PasswordForms, regardless of their blacklist
+  // status. Also fills in affiliation and branding information for Android
+  // credentials.
+  virtual void GetAllLoginsWithAffiliationAndBrandingInformation(
+      PasswordStoreConsumer* consumer);
+
   // Reports usage metrics for the database. |sync_username| and
   // |custom_passphrase_sync_enabled| determine some of the UMA stats that
   // may be reported.
@@ -602,6 +608,11 @@
   void GetBlacklistLoginsWithAffiliationAndBrandingInformationImpl(
       std::unique_ptr<GetLoginsRequest> request);
 
+  // Find all PasswordForms, fills in affiliation and branding information for
+  // Android credentials, and notifies the consumer.
+  void GetAllLoginsWithAffiliationAndBrandingInformationImpl(
+      std::unique_ptr<GetLoginsRequest> request);
+
   // Notifies |request| about the stats for all sites.
   void NotifyAllSiteStats(std::unique_ptr<GetLoginsRequest> request);
 
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc
index 3c4ca37..13757ac 100644
--- a/components/password_manager/core/browser/password_store_unittest.cc
+++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -817,6 +817,72 @@
   }
 }
 
+TEST_F(PasswordStoreTest, GetAllLoginsWithAffiliationAndBrandingInformation) {
+  static constexpr PasswordFormData kTestCredentials[] = {
+      {PasswordForm::SCHEME_HTML, kTestAndroidRealm1, "", "", L"", L"", L"",
+       L"username_value_1", L"", true, 1},
+      {PasswordForm::SCHEME_HTML, kTestAndroidRealm2, "", "", L"", L"", L"",
+       L"username_value_2", L"", true, 1},
+      {PasswordForm::SCHEME_HTML, kTestAndroidRealm3, "", "", L"", L"", L"",
+       L"username_value_3", L"", true, 1},
+      {PasswordForm::SCHEME_HTML, kTestWebRealm1, kTestWebOrigin1, "", L"", L"",
+       L"", L"username_value_4", L"", true, 1},
+      // A PasswordFormData with nullptr as the username_value will be converted
+      // in a blacklisted PasswordForm in FillPasswordFormWithData().
+      {PasswordForm::SCHEME_HTML, kTestWebRealm2, kTestWebOrigin2, "", L"", L"",
+       L"", nullptr, L"", true, 1},
+      {PasswordForm::SCHEME_HTML, kTestWebRealm3, kTestWebOrigin3, "", L"", L"",
+       L"", nullptr, L"", true, 1}};
+
+  auto store = base::MakeRefCounted<PasswordStoreDefault>(
+      std::make_unique<LoginDatabase>(test_login_db_file_path()));
+  store->Init(syncer::SyncableService::StartSyncFlare(), nullptr);
+
+  std::vector<std::unique_ptr<PasswordForm>> all_credentials;
+  for (const auto& test_credential : kTestCredentials) {
+    all_credentials.push_back(FillPasswordFormWithData(test_credential));
+    store->AddLogin(*all_credentials.back());
+  }
+
+  MockPasswordStoreConsumer mock_consumer;
+  std::vector<std::unique_ptr<PasswordForm>> expected_results;
+  for (const auto& credential : all_credentials)
+    expected_results.push_back(std::make_unique<PasswordForm>(*credential));
+
+  std::vector<MockAffiliatedMatchHelper::AffiliationAndBrandingInformation>
+      affiliation_info_for_results = {
+          {kTestWebRealm1, kTestAndroidName1, GURL(kTestAndroidIconURL1)},
+          {kTestWebRealm2, kTestAndroidName2, GURL(kTestAndroidIconURL2)},
+          {/* Pretend affiliation or branding info is unavailable. */},
+          {/* Pretend affiliation or branding info is unavailable. */},
+          {/* Pretend affiliation or branding info is unavailable. */},
+          {/* Pretend affiliation or branding info is unavailable. */}};
+
+  auto mock_helper = std::make_unique<MockAffiliatedMatchHelper>();
+  mock_helper->ExpectCallToInjectAffiliationAndBrandingInformation(
+      affiliation_info_for_results);
+  store->SetAffiliatedMatchHelper(std::move(mock_helper));
+  for (size_t i = 0; i < expected_results.size(); ++i) {
+    expected_results[i]->affiliated_web_realm =
+        affiliation_info_for_results[i].affiliated_web_realm;
+    expected_results[i]->app_display_name =
+        affiliation_info_for_results[i].app_display_name;
+    expected_results[i]->app_icon_url =
+        affiliation_info_for_results[i].app_icon_url;
+  }
+
+  EXPECT_CALL(mock_consumer,
+              OnGetPasswordStoreResultsConstRef(
+                  UnorderedPasswordFormElementsAre(&expected_results)));
+  store->GetAllLoginsWithAffiliationAndBrandingInformation(&mock_consumer);
+
+  // Since GetAutofillableLoginsWithAffiliationAndBrandingInformation
+  // schedules a request for affiliation information to UI thread, don't
+  // shutdown UI thread until there are no tasks in the UI queue.
+  WaitForPasswordStore();
+  store->ShutdownOnUIThread();
+}
+
 TEST_F(PasswordStoreTest, GetLoginsForSameOrganizationName) {
   static constexpr const PasswordFormData kSameOrganizationCredentials[] = {
       // Credential that is an exact match of the observed form.
diff --git a/components/password_manager/core/browser/sync_username_test_base.cc b/components/password_manager/core/browser/sync_username_test_base.cc
index 8aee275..2b59d2e 100644
--- a/components/password_manager/core/browser/sync_username_test_base.cc
+++ b/components/password_manager/core/browser/sync_username_test_base.cc
@@ -40,6 +40,9 @@
 #endif
   SigninManagerBase::RegisterProfilePrefs(prefs_.registry());
   AccountTrackerService::RegisterPrefs(prefs_.registry());
+#if !defined(OS_CHROMEOS)
+  ProfileOAuth2TokenService::RegisterProfilePrefs(prefs_.registry());
+#endif
   account_tracker_.Initialize(&prefs_, base::FilePath());
 }
 
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 99f50539..8571f95 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -10747,7 +10747,8 @@
 
       This policy has no effect on whether users can configure printers on individual devices.  It is intended to be supplementary to the configuration of printers by individual users.
 
-      For Active Directory managed devices this policy supports expansion of <ph name="MACHINE_NAME_VARIABLE">${machine_name[,pos[,count]]}</ph> to the Active Directory machine name or a substring of it. For example, if the machine name is <ph name="MACHINE_NAME_EXAMPLE">CHROMEBOOK</ph>, then <ph name="MACHINE_NAME_VARIABLE_EXAMPLE">${machine_name,6,4}</ph> would be replaced by the 4 characters starting after the 6th position, i.e. <ph name="MACHINE_NAME_PART_EXAMPLE">BOOK</ph>. Note that the position is zero-based.
+      For Active Directory managed devices this policy supports expansion of <ph name="MACHINE_NAME_VARIABLE">${MACHINE_NAME[,pos[,count]]}</ph> to the Active Directory machine name or a substring of it. For example, if the machine name is <ph name="MACHINE_NAME_EXAMPLE">CHROMEBOOK</ph>, then <ph name="MACHINE_NAME_VARIABLE_EXAMPLE">${MACHINE_NAME,6,4}</ph> would be replaced by the 4 characters starting after the 6th position, i.e. <ph name="MACHINE_NAME_PART_EXAMPLE">BOOK</ph>. Note that the position is zero-based.
+      <ph name="MACHINE_NAME_VARIABLE_LOWERCASE">${machine_name}</ph> (lowercase) is deprecated in M71 and will be removed in M72.
       ''',
     },
     {
@@ -11959,7 +11960,7 @@
 
       If this policy is set to a non empty string, that string will be used as the device hostname during DHCP request.
 
-      The string can contain variables ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} that would be replaced with values on the device before using as a hostname. Resulting substitution should be a valid hostname (per RFC 1035, section 3.1).
+      The string can contain variables ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, ${MACHINE_NAME} that would be replaced with values on the device before using as a hostname. Resulting substitution should be a valid hostname (per RFC 1035, section 3.1).
 
       If this policy is not set, or the value after substitution is not a valid hostname, no hostname will be set in DHCP request. '''
     },
@@ -12544,13 +12545,13 @@
       This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
     },
     {
-      'name': 'AllowedUILocales',
+      'name': 'AllowedLanguages',
       'type': 'list',
       'schema': {
         'type': 'array',
         'items': { 'type': 'string' },
       },
-      'supported_on': ['chrome_os:68-'],
+      'supported_on': ['chrome_os:71-'],
       'device_only': False,
       'features': {
         'dynamic_refresh': False,
@@ -12559,11 +12560,11 @@
       'example_value': [ 'en-US' ],
       'max_size': 16777216,
       'id': 444,
-      'caption': '''Configure the allowed UI locales in a user session''',
+      'caption': '''Configure the allowed languages in a user session''',
       'tags': [],
-      'desc': '''Configures the locales <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> may be displayed in.
+      'desc': '''Configures the languages that can be used as the preferred languages by <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>.
 
-      If this policy is set, the user can only configure <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> to be displayed in one of the locales specified by this policy. If this policy is not set or set to an empty list, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can be displayed in all supported UI locales. If this policy is set to a list with invalid values, all invalid values will be ignored. If a user previously configured <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> to be displayed in a locale that is not allowed by this policy, the display locale will be switched to an allowed UI locale the next time the user signs in. If the user had configured preferred locales and one of the preferred locales is allowed by this policy, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will switch to this locale. Otherwise, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will switch to the first valid value specified by this policy, or to a fallback locale (currently en-US), if this policy only contains invalid entries.'''
+      If this policy is set, the user can only add one of the languages listed in this policy to the list of preferred languages. If this policy is not set or set to an empty list, user can specify any languages as preferred. If this policy is set to a list with invalid values, all invalid values will be ignored. If a user previously added some languages that are not allowed by this policy to the list of preferred languages they will be removed. If the user had previously configured <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> to be displayed in one of the languages not allowed by this policy, the display language will be switched to an allowed UI language next time user signs in. Otherwise, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will switch to the first valid value specified by this policy, or to a fallback locale (currently en-US), if this policy only contains invalid entries.'''
     },
     {
       'name': 'AllowedInputMethods',
diff --git a/components/policy/resources/policy_templates_am.xtb b/components/policy/resources/policy_templates_am.xtb
index e63f382..79c8104 100644
--- a/components/policy/resources/policy_templates_am.xtb
+++ b/components/policy/resources/policy_templates_am.xtb
@@ -481,20 +481,6 @@
       ፊደል ማረም አሁንም የወረደ መዝገበ ቃላትን በመጠቀም ሊከናወን ይችላል፤ ይህ መመሪያ የመስመር ላይ አገልግሎቱ አጠቃቀም ብቻ ነው የሚቆጣጠረው።
 
       ይህ ቅንብር ካልተዋቀረ ተጠቃሚዎች የፊደል ማረም አገልግሎቱ ጥቅም ላይ ይውል እንደሆነ መምረጥ ይችላሉ።</translation>
-<translation id="2294283832646774959">የማተሚያዎች ዝርዝርን ያዋቅራል።
-
-      ይህ መመሪያ አስተዳዳሪዎች የማተሚያ ውቅረቶችን ለተጠቃሚዎች እንዲያቀርቡ ያስችላቸዋል።
-
-      <ph name="PRINTER_DISPLAY_NAME" /> እና <ph name="PRINTER_DESCRIPTION" /> ለማተሚያ ምርጫ ቅለት ሊበጁ የሚችሉ ነጻ ቅርጽ ያላቸው ሕብረቁምፊዎች ናቸው። <ph name="PRINTER_MANUFACTURER" /> እና <ph name="PRINTER_MODEL" /> የዋና ተጠቃሚዎች የማተሚያ መለየትን ለማቅለል የሚያገለግሉ ናቸው። የማተሚያውን አምራች እና ሞዴል የሚወክሉ ናቸው። <ph name="PRINTER_URI" /> ከደንበኛ ኮምፒውተር ተደራሽ የሆነ አድራሻ መሆን አለበት፣ <ph name="URI_SCHEME" />፣ <ph name="URI_PORT" /> እና <ph name="URI_QUEUE" /> ጨምሮ። <ph name="PRINTER_UUID" /> አማራጭ ነው። ከቀረበ የተባዙ የ<ph name="ZEROCONF_DISCOVERY" /> ማተሚያዎችን መቀልበስ ላይ ያግዛል።
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> የሚደገፍ የ<ph name="PRODUCT_NAME" /> ማተሚያ ከሚደግፉ ሕብረቁምፊዎች ውስጥ ከአንዱ ጋር መዛመድ አለበት። ሕብረቁምፊው ለማተሚያው አግባብ የሆነውን PPD ለመለየትና ለመጫን ስራ ላይ ይውላል። ተጨማሪ መረጃ https://support.google.com/chrome?p=noncloudprint ላይ ማግኘት ይቻላል።
-
-      ማተሚያውን ለመጀመሪያ ጊዜ ሲጠቀሙ የማተሚያ ውቅረት ይጠናቀቃል። ማተሚያው ስራ ላይ እስኪውል ድረስ PPDዎች አይወርዱም። ከዚያ ጊዜ በኋላ በተደጋጋሚነት ስራ ላይ የሚውሉ PPDs ይሸጎጣሉ።
-
-      ይህ መመሪያ ተጠቃሚዎች በተናጠል መሣሪያዎች ላይ ያሉ ማተሚያዎችን የማዋቀር ችሎታ ላይ ምንም ውጤት የለውም። ተናጠል ተጠቃሚዎች ለሚያደርጓቸው የማተሚያዎች ውቅረት እንደ ጭማሪ እንዲሆን የታሰበ ነው።
-
-      በገቢር ማውጫ ለሚተዳደሩ መሣሪያዎች ይህ መመሪያ <ph name="MACHINE_NAME_VARIABLE" /> ወደ የገቢር ማውጫ ማሽን ስም ወይም ወደ የእሱ ንዑስ ሕብረቁምፊ ማስፋፋትን ይደግፋል። ለምሳሌ፣ የማሽኑ ስም <ph name="MACHINE_NAME_EXAMPLE" /> ከሆነ <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> ከ6ኛው ቦታ በሚጀምሩ 4 ሕብረቁምፊዎች ይተካል፤ ማለትም <ph name="MACHINE_NAME_PART_EXAMPLE" />። ቦታው በዜሮ ላይ የተመሠረተ እንደሆነ ልብ ይበሉ።
-      </translation>
 <translation id="2294382669900758280">በAndroid መተግበሪያዎች ውስጥ ቪዲዮን ማጫወት ከግምት ውስጥ አይገባም፣ ይህ መመሪያ ወደ <ph name="TRUE" /> ቢዋቀርም እንኳ።</translation>
 <translation id="2298647742290373702">በ<ph name="PRODUCT_NAME" /> ውስጥ ነባሪውን የአዲስ ትር ገጽ ያዋቅሩ።</translation>
 <translation id="2299220924812062390">የነቁ ተሰኪዎች ዝርዝር ይጥቀሱ</translation>
@@ -608,9 +594,6 @@
 ይሄ ለኋላ ተኳሃኝነት ብቻ ነው መሰናከል ያለበት ሲሆን፣ የማረጋገጥ ደህንነትን ይቀንሳል።
 
           ይህ መመሪያ ካልተዋቀረ ነባሪው እውነት ነው እና NTLMv2 ይነቃል።</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" /> የሚታይባቸውን ቋንቋዎች ያዋቅራል።
-
-      ይህ መመሪያ ከተዋቀረ ተጠቃሚው <ph name="PRODUCT_OS_NAME" />ን በዚህ መመሪያ ከተጠቀሱት ቋንቋዎች ውስጥ በአንዱ ብቻ እንዲታይ ማዋቀር ይችላል። ይህ መመሪያ ካልተዋቀረ ወይም ወደ ባዶ ዝርዝር ከተዋቀረ <ph name="PRODUCT_OS_NAME" /> በሁሉም የሚደገፉ ቋንቋዎች ላይ ሊታይ ይችላል። ይህ መመሪያ የማይሠሩ እሴቶች ወዳለው ዝርዝር ከተዋቀረ ሁሉም የማይሠሩ እሴቶች ችላ ይባላሉ። አንድ ተጠቃሚ ከዚህ ቀደም <ph name="PRODUCT_OS_NAME" />ን በዚህ መመሪያ ወደ የማይፈቀድ ቋንቋ እንዲታይ አድርጎ ካዋቀረ የማሳያ አካባቢ ቋንቋው ተጠቃሚው በሚቀጥለው ጊዜ በመለያ ሲገባ ወደ የሚፈቀድ ቋንቋ ይቀየራል። ተጠቃሚው ተመራጭ ቋንቋዎችን አዋቅሮ ከሆነ እና ከተመራጭ ቋንቋዎቹ ውስጥ ወደ አንዱ አዋቅሮ ከነበረ <ph name="PRODUCT_OS_NAME" /> ወደዚህ ቋንቋ ይቀየራል። አለበለዚያ <ph name="PRODUCT_OS_NAME" /> በዚህ መመሪያ ወደተገለጸው የመጀመሪያው የሚሠራ እሴት ወይም መጠባበቂያ ቋንቋ (አሁን en-US) ይቀየራል፣ ይህም የሚሆነው ይህ መመሪያ የማይሠሩ ግቤቶች ካሉት ብቻ ነው።</translation>
 <translation id="2604182581880595781">ከአውታረ መረብ ፋይል ማጋሪያ ጋር የሚዛመዱ መመሪያዎችን ያዋቅሩ።</translation>
 <translation id="2623014935069176671">የመነሻ የተጠቃሚ እንቅስቃሴን ይጠብቁ</translation>
 <translation id="262740370354162807">የሰነዶች ወደ <ph name="CLOUD_PRINT_NAME" /> መግባትን ያነቃል</translation>
@@ -1503,13 +1486,6 @@
 <translation id="5130288486815037971">በTLS ውስጥ ያሉት የRC4 ስነ መሰውር ጥቅሎች እንደነቁ</translation>
 <translation id="5141670636904227950">ነባሪውን የማጉሊያ አይነት በመግቢያ ገጹ ላይ ያንቁት</translation>
 <translation id="5142301680741828703">በ<ph name="PRODUCT_FRAME_NAME" /> ውስጥ ያሉት የሚከተሉት የዩ አር ኤል ቅጦችን ሁልጊዜ አሳይ</translation>
-<translation id="5147665094011258322">በDHCP ጥያቄዎች ወቅት የመሣሪያውን የአስተናጋጅ ስም ይወስኑ። 
-
-      ይህ መመሪያ እንደ ባዶ ያልሆነ ህብረቁምፊ ከተዋቀረ ያ ህብረቁምፊ በDHCP ጥያቄ ወቅት እንደ የመሣሪያው አስተናጋጅ ስም ሆኖ ስራ ላይ ይውላል።
-
-      ህብረቁምፊው እንደ የአስተናጋጅ ስም ጥቅም ላይ ከመዋሉ በፊት በመሣሪያው ላይ የሚተኩ እሴቶች ${ASSET_ID}፣ ${SERIAL_NUM}፣ ${MAC_ADDR} ተለዋዋጮችን በውስጡ ሊይዝ ይችላል። ምትክ የሚሆነው ውጤት የሚሠራ የአስተናጋጅ ስም መሆን አለበት (በRFC 1035፣ ክፍል 3.1 መሠረት)።
-
-      ይህ መመሪያ ካልተዋቀረ ወይም ከመተካት በኋላ እሴቱ የሚሠራ የአስተናጋጅ ስም ካልሆነ ምንም የአስተናጋጅ ስም በDHCP ጥያቄ ውስጥ አይዋቀርም። </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> <ph name="PRODUCT_NAME" />ን ሲያስጀምር ስራ ላይ የሚውሉ ተጨማሪ ልኬቶችን እንዲገልጹ ያስችልዎታል።
 
           ይህ መመሪያ ካልተዋቀረ ነባሪው የትዕዛዝ መስመር ስራ ላይ ይውላል።</translation>
@@ -1760,7 +1736,6 @@
 <translation id="5835124959204887277">ከደህንነት ቁልፍ የማረጋገጫ ምስክር ወረቀቶች በሚጠየቁበት ጊዜ ለየትኛዎቹ ዩአርኤሎች እና ጎራዎች  ምንም ጥያቄ እንደማይታይ ይጠቅሳል። በተጨማሪም፣ ተናጠል ማረጋገጫ ስራ ላይ ሊውል እንደሚችል የሚጠቁም ሲግናል ወደ ደህንነት ቁልፉ ይላካል። ያለዚህ፣ ጣቢያዎች የደህንነት ቁልፎች ማረጋገጫ በሚጠይቁበት ጊዜ ተጠቃሚዎች በChrome 65+ ውስጥ ጥያቄ ይቀርብላቸዋል።
 
       ዩአርኤሎች (እንደ https://example.com/some/path ያሉ) እንደ U2F appIDs ብቻ ነው የሚዛመዱት። ጎራዎች (እንደ example.com ያሉ) እንደ webauthn RP IDs ብቻ ነው የሚዛመዱት። በመሆኑም፣ ሁለቱንም U2F እና webauthn ኤፒአይዎች ለአንድ የተሰጠ ጣቢያ ለመሸፈን ሁለቱም appID ዩአርኤል እና ጎራ መዘርዘር አለባቸው።</translation>
-<translation id="5835412847081687053">በተጠቃሚ ክፍለ-ጊዜ የተፈቀዱ አካባቢዎችን አዋቅር</translation>
 <translation id="5836064773277134605">በርቀት የመዳረሻ አስተናጋጁ ጥቅም ላይ የዋለውን የUDP ወደብ ምጥጥነ ገጽታ ይገድቡ</translation>
 <translation id="5862253018042179045">የሚነገር ግብረመልስ ተደራሽነት ባህሪ ነባሪ ሁኔታውን በመግቢያ ገጹ ላይ ያዋቅሩ።
 
diff --git a/components/policy/resources/policy_templates_ar.xtb b/components/policy/resources/policy_templates_ar.xtb
index bcdda4bb..6e973dc 100644
--- a/components/policy/resources/policy_templates_ar.xtb
+++ b/components/policy/resources/policy_templates_ar.xtb
@@ -485,20 +485,6 @@
       ولا يزال من الممكن إجراء التدقيق الإملائي باستخدام القواميس التي يتم تنزيلها؛ فلا تتحكم هذه السياسة سوى في استخدام الخدمة على الإنترنت.
 
       إذا لم تتم تهيئة هذا الإعداد، يمكن للمستخدمين اختيار ما إذا كان يجب استخدام خدمة التدقيق الإملائي أم لا.</translation>
-<translation id="2294283832646774959">‏تهيّئ السياسة قائمة بالطابعات.
-
-      تسمح هذه السياسة للمشرفين بتوفير عمليات تهيئة الطابعات
-      للمستخدمين.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> و<ph name="PRINTER_DESCRIPTION" /> هما سلسلتان حرتان يمكن تخصيصهما لتسهيل اختيار الطابعة. يُسهّل <ph name="PRINTER_MANUFACTURER" /> و<ph name="PRINTER_MODEL" /> على المستخدمين مهمّة التعرّف على الطابعة، إذ يمثّلان الشركة المُصنّعة للطابعة وطرازها. يجب أن يكون <ph name="PRINTER_URI" /> عنوانًا يمكن الوصول إليه من كمبيوتر العميل، بما في ذلك <ph name="URI_SCHEME" /> و<ph name="URI_PORT" /> و<ph name="URI_QUEUE" />. ويكون <ph name="PRINTER_UUID" /> اختياريًا، وفي حال توفّره، يتم استخدامه للمساعدة في إزالة تكرار طابعات <ph name="ZEROCONF_DISCOVERY" />.
-
-      يجب أن يُطابِق <ph name="PRINTER_EFFECTIVE_MODEL" /> إحدى السلاسل التي تمثل طابعة <ph name="PRODUCT_NAME" /> مدعومة. سيتم استخدام السلسلة للتعرُّف على ملف PPD المناسب للطابعة وتثبيته. يمكن الحصول على مزيد من المعلومات على الرابط https://support.google.com/chrome?p=noncloudprint.
-
-يكتمل إعداد الطابعة عند استخدامها لأول مرة، ولا يتم تنزيل ملفات PPD حتى يتم استخدام الطابعة. وبعد ذلك، يتم تخزين ملفات PPD المستخدمة بشكل متكرر تخزينًا مؤقتًا.
-
-      لا تؤثِّر هذه السياسة على إمكانية تهيئة المستخدمين للطابعات على الأجهزة الفردية، فقد تم إعدادها لتكون مكمّلة لتهيئة الطابعات من قِبل المستخدمين الفرديين.
-      بالنسبة إلى أجهزة Active Directory المُدارة، تدعم هذه السياسة توسيع <ph name="MACHINE_NAME_VARIABLE" /> ليشمل اسم جهاز Active Directory أو سلسلة فرعية له. على سبيل المثال، إذا كان اسم الجهاز <ph name="MACHINE_NAME_EXAMPLE" />، حينئذٍ يتم استبدال <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> بسلسلة مكونة من 4 أحرف بعد الموضع السادس، مثل <ph name="MACHINE_NAME_PART_EXAMPLE" />. يُذكر أن الموضع يبدأ من الصفر.
-      </translation>
 <translation id="2294382669900758280">‏لا يتم وضع تشغيل الفيديو في تطبيقات Android في الاعتبار، حتى وإن تم تعيين هذه السياسة على <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">تهيئة صفحة علامة التبويب الجديدة التلقائية في <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">تحديد قائمة بالمكونات الإضافية الممكّنة</translation>
@@ -600,9 +586,6 @@
           تدعم جميع الإصدارات الحديثة من خوادم Samba وWindows السياسة NTLMv2. وينبغي إيقاف ذلك فقط للتوافق مع الإصدارات الأقدم وكذلك عمليات الحد من أمان المصادقة.
 
           إذا لم يتم تعيين هذه السياسة، تكون القيمة التلقائية "true" ويتم تفعيل السياسة NTLMv2.</translation>
-<translation id="2598508021807251719">‏تهيئة اللغات التي قد يُعرض <ph name="PRODUCT_OS_NAME" /> بها.
-
-      في حال وضع هذه السياسة، لا يستطيع المستخدم سوى تهيئة <ph name="PRODUCT_OS_NAME" /> ليتم عرضه بإحدى اللغات التي تحدّدها هذه السياسة. إذا لم يتم وضع هذه السياسة أو تم ضبطها على قائمة فارغة، يمكن عرض <ph name="PRODUCT_OS_NAME" /> بكل لغات واجهة المستخدم المدعومة. وإذا تم ضبط هذه السياسة على قائمة ذات قيم غير صالحة، سيتم تجاهل كل القيم غير الصالحة. إذا سبق للمستخدم تهيئة <ph name="PRODUCT_OS_NAME" /> ليتم عرضه بلغة لا تسمح بها هذه السياسة، سيتم تبديل لغة العرض إلى لغة واجهة مستخدم مسموح بها عند تسجيل دخول المستخدم في المرة القادمة. وإذا هيأ المستخدم اللغات المفضّلة وسمحت السياسة بإحدى هذه اللغات المفضّلة، سيتحوّل <ph name="PRODUCT_OS_NAME" /> إلى هذه اللغة. أو سيتحوّل <ph name="PRODUCT_OS_NAME" /> إلى أول قيمة صالحة تحدّدها هذه السياسة، أو إلى لغة بديلة (حاليًا en-US)، إذا كانت السياسة لا تحتوي إلا على إدخالات غير صالحة.</translation>
 <translation id="2604182581880595781">تهيئة السياسات المرتبطة بميزة "خوادم مشاركة الملفات على الشبكة".</translation>
 <translation id="2623014935069176671">انتظار نشاط المستخدم الأولي</translation>
 <translation id="262740370354162807">تفعيل إرسال المستندات إلى <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1449,13 +1432,6 @@
 <translation id="5130288486815037971">‏ما إذا تم تفعيل مجموعات تشفير RC4 في طبقة النقل الآمنة أم لا</translation>
 <translation id="5141670636904227950">تعيين نوع مكبر الشاشة التلقائي على تفعيل في شاشة تسجيل الدخول</translation>
 <translation id="5142301680741828703">‏عرض أنماط عناوين URL التالية دائمًا في <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">‏تحدد اسم مضيف الجهاز المستخدم في طلبات DHCP.
-
-      إذا تم تعيين هذه السياسة إلى سلسلة غير فارغة، سيتم استخدام هذه السلسلة كاسم مضيف للجهاز أثناء طلب DHCP.
-
-      وقد تحتوي هذه السلسة على متغيرات ${ASSET_ID}، و${SERIAL_NUM}، و${MAC_ADDR} التي يتم استبدالها بالقيم على الجهاز قبل الاستخدام كاسم مضيف. وينبغي أن تكون نتيجة التبديل اسم مضيف صالحًا (لكل RFC 1035، قسم 3.1).
-
-      إذا لم يتم تعيين هذه السياسة، أو لم تكن القيمة بعد التبديل اسم مضيف صالحًا، لن يتم تعيين أي اسم مضيف في طلب DHCP. </translation>
 <translation id="5148753489738115745">تسمح لك بتحديد معلمات إضافية يتم استخدامها عند بدء <ph name="PRODUCT_FRAME_NAME" /> تشغيل <ph name="PRODUCT_NAME" />.
 
           إذا لم يتم تعيين هذه السياسة، فسيتم استخدام سطر الأوامر التلقائي.</translation>
@@ -1675,7 +1651,6 @@
 <translation id="5835124959204887277">‏تحدد عناوين URL والنطاقات التي لن يتم عرض أي طلبات لها عندما يتم طلب شهادات التأكيد من مفاتيح الأمان. وإضافةً إلى ذلك، سيتم إرسال إشارة إلى مفتاح الأمان تشير إلى أنه قد يتم استخدام التأكيد الفردي. وبدون إجراء ذلك، ستتم مطالبة المستخدمين في إصدار 65 Chrome والإصدارات الأحدث منه عندما تتطلب المواقع تأكيد مفاتيح الأمان.
 
       ستتم مطابقة عناوين URL (مثل https://example.com/some/path) باعتبارها أرقام تعريف التطبيقات للعامل الثاني العالمي (U2F) فقط. وتتم مطابقة النطاقات (مثل example.com) بصفتها أرقام تعريف RP لمصادقة الويب. وبالتالي، لتغطية كل من العامل الثاني العالمي (U2F) وواجهات برمجة التطبيقات لمصادقة الويب لموقع معين، ينبغي إدراج كلا من عنوان URL لرقم تعريف التطبيق والنطاق.</translation>
-<translation id="5835412847081687053">تهيئة لغات واجهة المستخدم المسموح بها في جلسة مستخدم</translation>
 <translation id="5836064773277134605">‏تقييد نطاق منفذ UDP المستخدم من قبل مضيف الدخول عن بُعد</translation>
 <translation id="5862253018042179045">‏تعيين الحالة التلقائية لميزة الدخول إلى التعليقات المنطوقة في شاشة تسجيل الدخول.
 
diff --git a/components/policy/resources/policy_templates_bg.xtb b/components/policy/resources/policy_templates_bg.xtb
index a8e0d51..196a679 100644
--- a/components/policy/resources/policy_templates_bg.xtb
+++ b/components/policy/resources/policy_templates_bg.xtb
@@ -468,20 +468,6 @@
 Пак може да се изпълнява проверка на правописа посредством изтеглен речник. Това правило контролира само използването на онлайн услугата.
 
 Ако настройката не е конфигурирана, потребителите могат да изберат дали съответната услуга трябва да се ползва, или не.</translation>
-<translation id="2294283832646774959">Конфигурира списък с принтери.
-
-Това правило дава възможност на администраторите да предоставят конфигурации на принтери за потребителите си.
-
-<ph name="PRINTER_DISPLAY_NAME" /> и <ph name="PRINTER_DESCRIPTION" /> са низове в свободна форма, които могат да се персонализират за улесняване на избирането на принтер. <ph name="PRINTER_MANUFACTURER" /> и <ph name="PRINTER_MODEL" /> служат за улесняване на разпознаването на принтерите от крайните потребители и представят производителя и модела на устройството. <ph name="PRINTER_URI" /> трябва да бъде адрес, достъпен от компютър клиент, като съдържа <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> и <ph name="URI_QUEUE" />. Идентификаторът <ph name="PRINTER_UUID" /> не е задължителен. Ако бъде посочен, служи за по-лесно премахване на дублиращите се принтери, открити чрез протокола <ph name="ZEROCONF_DISCOVERY" />.
-
-<ph name="PRINTER_EFFECTIVE_MODEL" /> трябва да съвпада с някой от низовете, които представят поддържан от <ph name="PRODUCT_NAME" /> принтер. Низът ще се използва за идентифициране и инсталиране на подходящия PPD файл за принтера. Повече информация можете да намерите на адрес https://support.google.com/chrome?p=noncloudprint.
-
-Настройването на принтера завършва при първото му използване. PPD файловете не се изтеглят, преди принтерът да влезе в употреба. След това често използваните PPD файлове се кешират.
-
-Това правило няма ефект върху възможността на потребителите да конфигурират принтери на отделни устройства. То е предназначено да допълва конфигурирането на принтери от отделните потребители.
-
-За устройства, управлявани чрез Active Directory, това правило поддържа разширяване на <ph name="MACHINE_NAME_VARIABLE" /> до името на машината в Active Directory или до подниз от него. Ако например името е <ph name="MACHINE_NAME_EXAMPLE" />, променливата <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> ще бъде заменена с четирите знака, започващи след шестата позиция, напр. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Обърнете внимание, че отброяването на позицията започва от нула.
-      </translation>
 <translation id="2294382669900758280">Дори да сте задали <ph name="TRUE" /> за това правило, то няма ефект върху възпроизвеждането на видео в приложения за Android.</translation>
 <translation id="2298647742290373702">Конфигуриране на стандартния нов раздел в <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Посочване на списък с активирани приставки</translation>
@@ -588,9 +574,6 @@
 Всички скорошни версии на Samba и сървърите с Windows поддържат NTLMv2. Този протокол трябва да се деактивира само за обратна съвместимост, тъй като така се понижава сигурността на удостоверяването.
 
 Ако това правило не е зададено, стандартната стойност е true и NTLMv2 е активиран.</translation>
-<translation id="2598508021807251719">Конфигурира локалите, на които да е разрешено показването на <ph name="PRODUCT_OS_NAME" />.
-
-Ако това правило е зададено, локалите за показване на <ph name="PRODUCT_OS_NAME" />, които може да избере потребителят, са ограничени до посочените в правилото. В случай че то не е зададено или е конфигурирано като празен списък, <ph name="PRODUCT_OS_NAME" /> може да се показва на всички поддържани локали на ПИ. При посочване на списък с невалидни стойности те ще бъдат пренебрегнати. Ако по-рано потребителят е конфигурирал <ph name="PRODUCT_OS_NAME" /> да се показва на език, който не е разрешен от това правило, ще се превключи към разрешен локал на ПИ следващия път, когато потребителят влезе в профила си. Ако потребителят е конфигурирал предпочитани локали и един от тях е разрешен от това правило, <ph name="PRODUCT_OS_NAME" /> ще превключи към този локал. В противен случай <ph name="PRODUCT_OS_NAME" /> ще превключи към първата валидна стойност, посочена в правилото, или към резервен локал (който понастоящем е en-US), ако то съдържа само невалидни записи.</translation>
 <translation id="2604182581880595781">Конфигуриране на правилата за споделяне на файлове в мрежата.</translation>
 <translation id="2623014935069176671">Изчакване на първоначална потребителска активност</translation>
 <translation id="262740370354162807">Активиране на изпращането на документи до <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1454,13 +1437,6 @@
 <translation id="5130288486815037971">Дали пакетите шифри RC4 са активирани в TLS</translation>
 <translation id="5141670636904227950">Задаване на стандартния тип екранна лупа, активирана в екрана за вход</translation>
 <translation id="5142301680741828703">Следните образци за URL адреси винаги да се изобразяват от <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Определяне на името на хоста, използвано за устройството при заявки през DHCP.
-
-Ако за това правило е зададен непразен низ, той ще служи като име на хоста за устройството при заявки през DHCP.
-
-Низът може да съдържа променливите ${ASSET_ID}, ${SERIAL_NUM} и ${MAC_ADDR}, които ще бъдат заменени със стойностите от устройството, преди той да се използва като име на хост. Резултатът от замяната трябва да бъде валидно такова име (съгласно RFC 1035, раздел 3.1).
-
-Ако правилото не е зададено или стойността след замяната не е валидна, заявките през DHCP няма да съдържат име на хост. </translation>
 <translation id="5148753489738115745">Позволява да посочите допълнителните параметри, които се използват, когато <ph name="PRODUCT_FRAME_NAME" /> стартира <ph name="PRODUCT_NAME" />.
 
 Ако това правило не е зададено, ще се ползва командният ред по подразбиране.</translation>
@@ -1686,7 +1662,6 @@
 <translation id="5835124959204887277">Посочва URL адресите и домейните, за които няма да се извежда подкана при поискване на сертификати за удостоверяване от ключовете за сигурност. Освен това до ключа за сигурност ще се изпраща сигнал, указващ възможността за използване на индивидуално удостоверяване. Без това правило потребителите на Chrome 65 и по-нови версии ще получават подкана, когато сайтовете поискат удостоверяване на ключовете за сигурност.
 
 URL адресите (като https://example.com/произволен/път) ще съответстват само като идентификатори на приложения (appID) за U2F, а домейните (като example.com) – само като идентификатори на проверяващи страни (RP ID) за Webauthn. Поради тази причина, за да бъдат обезпечени и двата API (U2F и Webauthn) за даден сайт, трябва да се посочи както URL адресът с appID, така и домейнът.</translation>
-<translation id="5835412847081687053">Конфигуриране на разрешените локали на ПИ за потребителските сесии</translation>
 <translation id="5836064773277134605">Ограничаване на диапазона портове за UDP, ползвани от хоста за отдалечен достъп</translation>
 <translation id="5862253018042179045">Задаване на състоянието по подразбиране на функцията за достъпност „обратна връзка с говор“ на екрана за вход.
 
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb
index 17c0e65..6c1bda35 100644
--- a/components/policy/resources/policy_templates_bn.xtb
+++ b/components/policy/resources/policy_templates_bn.xtb
@@ -564,21 +564,6 @@
       একটি ডাউনলোড করা অভিধান ব্যাবহার করে বানান এখনও পরীক্ষা করা যেতে পারে; এই নীতি কেবল অনলাইন পরিষেবার ব্যবহারকে নিয়ন্ত্রণ করে৷
 
       এই সেটিং কনফিগার করা না থাকলে বানান পরীক্ষা পরিষেবা ব্যবহার করা হবে কি না ব্যবহারকারী তা চয়ন করতে পারে৷</translation>
-<translation id="2294283832646774959">প্রিন্টারের তালিকা কনফিগার করে।
-
-      এই নীতির মাধ্যমে অ্যাডমিনিস্ট্রেটররা তাদের ব্যবহারকারীদের প্রিন্টার কনফিগারেশন
-      করার সুবিধা দিতে পারে।
-
-      <ph name="PRINTER_DISPLAY_NAME" /> এবং <ph name="PRINTER_DESCRIPTION" /> এমন দুটি ফ্রি-ফর্ম স্ট্রিং যেগুলি সহজে প্রিন্টার বেছে নেওয়ার জন্য কাস্টমাইজ করা যায়। <ph name="PRINTER_MANUFACTURER" /> এবং <ph name="PRINTER_MODEL" />-এর সাহায্যে ব্যবহারকারীরা সহজে নির্দিষ্ট কোনও প্রিন্টার চিনে নিতে পারেন। এই দুটি স্ট্রিং-এ প্রিন্টারের প্রস্তুতকারক এবং মডেল নম্বর দেখা যায়। <ph name="PRINTER_URI" />-এ এমন একটি ঠিকানা রাখতে হবে যেটি <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> এবং <ph name="URI_QUEUE" /> সহ অন্যান্য ক্লায়েন্ট কম্পিউটার থেকে অ্যাক্সেস করা যাবে। <ph name="PRINTER_UUID" />-এর তথ্যটি ঐচ্ছিক। উল্লেখ করা থাকলে এই তথ্যটি <ph name="ZEROCONF_DISCOVERY" /> প্রিন্টারের ডুপ্লিকেট সরিয়ে দেওয়ার জন্য ব্যবহার করা হয়।
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" />-এর তথ্যটিকে অবশ্যই এমন কোনও একটি স্ট্রিং-এর সাথে মিলতে হবে যেটি <ph name="PRODUCT_NAME" /> সমর্থিত প্রিন্টারকে নির্দেশ করে। প্রিন্টারের জন্য যথাযথ PPD শনাক্ত এবং ইনস্টল করতে এই স্ট্রিংটি ব্যবহার করা হবে। আরও তথ্যের জন্য https://support.google.com/chrome?p=noncloudprint-এ যান।
-
-      কোনও প্রিন্টার প্রথমবার ব্যবহার করার সময় সেটি সেট-আপ করে নেওয়া হয়।  প্রিন্টারের ব্যবহার শুরু না করা পর্যন্ত PPD ডাউনলোড করা হয় না।  তার পর থেকে ঘন ঘন ব্যবহার করা PPD ক্যাশে সেভ করে রাখা হয়।
-
-      ব্যবহারকারীরা বিভিন্ন স্বতন্ত্র ডিভাইসে প্রিন্টার কনফিগার করতে পারছেন কিনা, তা এই নীতির দ্বারা নিয়ন্ত্রিত নয়।  স্বতন্ত্র ব্যবহারকারীর প্রিন্টার কনফিগার করার সম্পূরক হিসেবে কাজ করাই এই নীতির লক্ষ্য।
-
-      অ্যাক্টিভ ডিরেক্টরি পরিচালিত ডিভাইসের জন্য এই নীতির মাধ্যমে <ph name="MACHINE_NAME_VARIABLE" /> নামটি বড় করে অ্যাক্টিভ ডিরেক্টরি মেশিনের নাম বা তার একটি সাবস্ট্রিং-এ পরিবর্তন করা যায়। যেমন, যদি মেশিনের নাম <ph name="MACHINE_NAME_EXAMPLE" /> হয়, তাহলে <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />-এর জায়গায় ৬টি অক্ষরের পরের ৪টি অক্ষর ব্যবহার করা হবে, অর্থাৎ নামটি <ph name="MACHINE_NAME_PART_EXAMPLE" /> হয়ে যাবে। মনে রাখবেন, অবস্থানটি শূন্য ভিত্তিক।
-      </translation>
 <translation id="2294382669900758280">এই নীতিটি <ph name="TRUE" /> এ সেট করা হলেও, Android অ্যাপ্লিকেশানগুলিতে ভিডিও চালানোর বিষয়টি বিবেচনায় আনা হয় না।</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> এ ডিফল্ট নতুন ট্যাব পৃষ্ঠা কনফিগfর করুন।</translation>
 <translation id="2299220924812062390">সক্ষম থাকা প্লাগইনগুলির একটি তালিকা নির্দিষ্ট করুন</translation>
@@ -697,9 +682,6 @@
           Samba এবং Windows সার্ভারের সমস্ত সাম্প্রতিক ভার্সনে NTLMv2 ব্যবহার করা যায়। এটি শুধুমাত্র ব্যাকওয়ার্ডস কম্প্যাটিবিলিটির জন্য বন্ধ করা উচিত এবং এর ফলে যাচাইকরণের নিরাপত্তা কমে যায়।
 
           এই নীতিটি সেট করা না হলে ডিফল্ট মান হিসেবে 'ট্রু' ধরে নেওয়া হবে এবং NTLMv2 চালু করা হবে।</translation>
-<translation id="2598508021807251719">লোকেলগুলির কনফিগার <ph name="PRODUCT_OS_NAME" /> এ প্রদর্শিত হতে পারে।
-
-      যদি এই নীতিটি সেট করা থাকে, ব্যবহারকারী শুধুমাত্র এই নীতি দ্বারা নির্দিষ্ট লোকেলগুলির মধ্যে একটি প্রদর্শিত করতে <ph name="PRODUCT_OS_NAME" /> কনফিগার করতে পারেন। যদি এই নীতিটি সেট না করা হয় বা খালি তালিকাতে সেট করা হয়, তবে <ph name="PRODUCT_OS_NAME" /> সব সমর্থিত লোকেলে প্রদর্শিত হতে পারে। যদি এই নীতিটি একটি ভুল মানগুলির তালিকাতে সেট করা থাকে, তবে সমস্ত ভুল মান উপেক্ষা করা হবে। একজন ব্যবহারকারীকে পূর্বে কনফিগার হলে <ph name="PRODUCT_OS_NAME" /> এই নীতি দ্বারা অনুমোদিত নয় এমনভাবে প্রদর্শিত হবে, পরের বার যখন ব্যবহারকারী সাইন-ইন করবেন তখন প্রদর্শিত লোকেলকে অনুমোদিত UI লোকেলে পাল্টানো হবে। ব্যবহারকারী যদি পছন্দসই লোকেলে কনফিগার করেন এবং এই পছন্দের লোকেলগুলির মধ্যে একটি এই নীতি দ্বারা অনুমোদিত হয়, <ph name="PRODUCT_OS_NAME" /> এই লোকেলে পাল্টে যাবে। অন্যথায়, যদি এই নীতিটিতে কেবল ভুল এন্ট্রি থাকে, তবে এই নীতি দ্বারা নির্দিষ্ট করা প্রথম সঠিক মান বা একটি ফলব্যাক লোকেল (সম্প্রতি en-US) -এ <ph name="PRODUCT_OS_NAME" /> পাল্টানো হবে।</translation>
 <translation id="2604182581880595781">নেটওয়ার্ক ফাইলের সাথে সম্পর্কিত নীতিগুলি কনফিগার করুন।</translation>
 <translation id="2623014935069176671">প্রাথমিক ব্যবহারকারী ক্রিয়াকলাপের জন্য অপেক্ষা করুন</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" />-তে দস্তাবেজ জমা সক্ষম করুন</translation>
@@ -1755,13 +1737,6 @@
 <translation id="5130288486815037971">TLS এ RC4 সাইফার স্যুট সক্ষম আছে কিনা</translation>
 <translation id="5141670636904227950">লগইন স্ক্রিনে সক্রিয় ডিফল্ট স্ক্রিন ম্যাগনিফায়ারের প্রকার সেট করুন</translation>
 <translation id="5142301680741828703">নিম্নলিখিত URL ধরণগুলি সর্বদা <ph name="PRODUCT_FRAME_NAME" />এ রেন্ডার করুন</translation>
-<translation id="5147665094011258322">DHCP অনুরোধের জন্য ব্যবহার করা ডিভাইসের হোস্টনেম নির্ধারণ করুন।
-
-      যদি খালি নয় এমন স্ট্রিং এ সেট করা থাকে, তবে DHCP অনুরোধের এই স্ট্রিংটি ডিভাইসের হোস্টনেম হিসাবে ব্যবহার করা হবে।
-
-      এই স্ট্রিংটিতে $ {ASSET_ID}, $ {SERIAL_NUM}, $ {MAC_ADDR} থাকে, যা হোস্ট-নেম ব্যবহৃত হওয়ার আগে ডিভাইসের মানগুলির সাথে প্রতিস্থাপিত হবে। এর জন্য একটি সঠিক হোস্টনাম থাকা প্রয়োজন (হিসাবে RFC 1035, অনুচ্ছেদ 3.1)।
-
-      যদি এই নীতিটি সেট না করা থাকে বা প্রতিস্থাপনের পর কোনও সঠিক হোস্টনাম না থাকে, তাহলে DHCP অনুরোধে কোনও হোস্টনামগুলি সেট করা হবে না। </translation>
 <translation id="5148753489738115745">যখন <ph name="PRODUCT_FRAME_NAME" />  <ph name="PRODUCT_NAME" /> আরম্ভ করে তখন আপনাকে ব্যবহার করা অতিরিক্তি প্যারামিটার নির্দিষ্ট করতে অনুমতি দেয়৷
 
          যদি এই নীতি সেট করা না হয় ডিফল্ট কম্যান্ড লাইন ব্যবহার করা হবে৷</translation>
@@ -2094,7 +2069,6 @@
 <translation id="5835124959204887277">নিরাপত্তা কী এর প্রমাণীকরণ সার্টিফিকেটের অনুরোধ করা হলে বিশেষ কিছু URL এবং ডোমেনে কোনও প্রম্পট দেখানো হবে না। একইসঙ্গে নিরাপত্তা কী এর একটি সঙ্কেত পাঠানো হবে যে একটি প্রমাণীকরণ সার্টিফিকেট ব্যবহার করা হয়েছে। এটি ছাড়া ব্যবহারকারীদের সাইটে প্রমাণীকরণ সার্টিফিকেটে Chrome 65+ এ প্রম্পট দেখানো হবে।
 
       URL (যেমন https://example.com/some/path) শুধুমাত্র U2F appID এর সাথে মেলে ডোমেন (যেমন example.com) শুধুমাত্র webauthn RP আইডি সাথে মিলবে অতএব, একটি সাইটে U2F এবং webauthn API উভয় এর জন্য আবরণ করার জন্য, এটি অ্যাপ URL এবং ডোমেন তালিকাভুক্ত করা প্রয়োজন হবে।</translation>
-<translation id="5835412847081687053">একজন ব্যবহারকারীর সেশনে অনুমোদিত UI লোকেলগুলি কনফিগার করুন</translation>
 <translation id="5836064773277134605">দূরবর্তী অ্যাক্সেস হোস্ট দ্বারা ব্যবহৃত UDP পোর্ট ব্যাপ্তি সীমাবদ্ধ করুন।</translation>
 <translation id="5862253018042179045">লগইন স্ক্রিনে কথ্য প্রতিক্রিয়া অ্যাক্সেসযোগ্যতা বৈশিষ্ট্যের ডিফল্ট স্থিতি সেট করে৷
 
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb
index 193adbd..cf9c7e70 100644
--- a/components/policy/resources/policy_templates_ca.xtb
+++ b/components/policy/resources/policy_templates_ca.xtb
@@ -468,20 +468,6 @@
       Podeu continuar comprovant la correcció ortogràfica amb un diccionari que hàgiu baixat. Aquesta política només controla l'ús del servei en línia.
 
       Si no configureu aquest paràmetre, els usuaris podran triar si volen utilitzar el servei de correcció automàtica o no.</translation>
-<translation id="2294283832646774959">Configura una llista d'impressores.
-
-      Aquesta política permet als administradors proporcionar configuracions d'impressores als usuaris.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> i <ph name="PRINTER_DESCRIPTION" /> són cadenes de format lliure que es poden personalitzar per facilitar la selecció de la impressora. Les cadenes <ph name="PRINTER_MANUFACTURER" /> i <ph name="PRINTER_MODEL" /> representen el fabricant i el model de la impressora, i serveixen perquè els usuaris finals puguin identificar la impressora més fàcilment. <ph name="PRINTER_URI" /> ha de ser una adreça accessible des d'un ordinador de client, com ara <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> i <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> és opcional. Si s'indica, s'utilitza per eliminar la duplicació d'impressores <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> ha de coincidir amb una de les cadenes que representen una impressora compatible amb <ph name="PRODUCT_NAME" />. La cadena s'utilitzarà per identificar i instal·lar el fitxer PPD adequat per a la impressora. Pots trobar-ne més informació a https://support.google.com/chrome?p=noncloudprint.
-
-      La configuració d'una impressora es completa quan s'utilitza per primera vegada, moment en què es baixen els fitxers PPD. Després, els que s'utilitzen sovint es desen a la memòria cau.
-
-      Aquesta política no té cap efecte en si els usuaris poden configurar impressores en dispositius concrets, sinó que s'ha creat per complementar la configuració d'impressores per part dels usuaris.
-
-      En el cas dels dispositius gestionats d'Active Directory, aquesta política permet ampliar <ph name="MACHINE_NAME_VARIABLE" /> per incloure-hi el nom del dispositiu d'Active Directory o una subcadena d'aquest. Si, per exemple, el nom del dispositiu és <ph name="MACHINE_NAME_EXAMPLE" />, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> se substituirà pels 4 caràcters posteriors a la sisena posició, és a dir, <ph name="MACHINE_NAME_PART_EXAMPLE" />. Fixa't que la posició es basa en zero.
-      </translation>
 <translation id="2294382669900758280">La reproducció de vídeo en aplicacions per a Android no es té en compte encara que aquesta política s'estableixi en "<ph name="TRUE" />".</translation>
 <translation id="2298647742290373702">Configura la pàgina Pestanya nova predeterminada a <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Especifica una llista de connectors activats</translation>
@@ -586,9 +572,6 @@
           Totes les versions recents dels servidors de Samba i de Windows admeten NTLMv2. Aquesta política només s'ha de desactivar per permetre la compatibilitat amb versions anteriors i això redueix la seguretat de l'autenticació.
 
           Si aquesta política no s'estableix, l'opció predeterminada és "true" i s'activa l'autenticació NTLMv2.</translation>
-<translation id="2598508021807251719">Estableix les configuracions regionals en què es pot mostrar <ph name="PRODUCT_OS_NAME" />.
-
-      Si aquesta política s'estableix, l'usuari només podrà configurar <ph name="PRODUCT_OS_NAME" /> perquè es mostri en una de les configuracions regionals especificades per aquesta política. Si aquesta política no s'estableix o s'estableix en una llista buida, <ph name="PRODUCT_OS_NAME" /> es podrà mostrar en totes les configuracions regionals admeses per a IU. Si aquesta política s'estableix en una llista amb valors no vàlids, tots els valors no vàlids s'ignoraran. Si un usuari ha configurat prèviament <ph name="PRODUCT_OS_NAME" /> perquè es mostri en un idioma que aquesta política no admet, la configuració regional de visualització canviarà a una configuració regional permesa per a la IU la propera vegada que l'usuari iniciï la sessió. Si l'usuari havia establert configuracions regionals preferides i aquesta política n'admet una, <ph name="PRODUCT_OS_NAME" /> canviarà a aquesta configuració regional. En canvi, si aquesta política només conté entrades no vàlides, <ph name="PRODUCT_OS_NAME" /> canviarà al primer valor vàlid que especifiqui aquesta política o a una configuració regional alternativa (actualment, en-US).</translation>
 <translation id="2604182581880595781">Configura les polítiques relacionades amb la funció Ús compartit dels fitxers de la xarxa.</translation>
 <translation id="2623014935069176671">Espereu que hi hagi una activitat inicial de l'usuari.</translation>
 <translation id="262740370354162807">Activa l'enviament de documents a <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1450,13 +1433,6 @@
 <translation id="5130288486815037971">Si els sistemes de xifratge RC4 de TLS estan activats</translation>
 <translation id="5141670636904227950">Estableix el tipus de lupa predeterminat activat a la pantalla d'inici de sessió</translation>
 <translation id="5142301680741828703">Renderitza sempre els patrons URL següents a <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Determina el nom d'amfitrió del dispositiu que s'utilitza a les sol·licituds DHCP.
-
-      Si aquesta política es defineix en una cadena que no sigui buida, aquesta cadena s'utilitzarà com a nom d'amfitrió del dispositiu durant les sol·licituds DHCP.
-
-      La cadena pot incloure les variables ${ASSET_ID}, ${SERIAL_NUM} i ${MAC_ADDR}, que se substituirien per valors al dispositiu abans d'utilitzar la cadena com a nom d'amfitrió. La substitució resultant ha de ser un nom d'amfitrió vàlid (d'acord amb la norma RFC 1035, secció 3.1).
-
-      Si aquesta política no es defineix o el valor posterior a la substitució no és un nom d'amfitrió vàlid, no es definirà cap nom d'amfitrió a les sol·licituds DHCP. </translation>
 <translation id="5148753489738115745">Us permet especificar els paràmetres especials que s'utilitzen quan <ph name="PRODUCT_FRAME_NAME" /> inicia <ph name="PRODUCT_NAME" />.
 
           Si no definiu aquesta política, s'utilitzarà la línia d'ordres predeterminada.</translation>
@@ -1680,7 +1656,6 @@
 <translation id="5835124959204887277">Especifica els URL i els dominis per als quals no es mostrarà cap avís quan se sol·licitin certificats de confirmació de les claus de seguretat. A més, s'enviarà un senyal a la clau de seguretat per indicar que es pot utilitzar una confirmació individual. En cas contrari, els usuaris de Chrome 65 i versions posteriors rebran un avís quan els llocs web sol·licitin una confirmació de les claus de seguretat.
 
       Els URL (com ara https://example.com/un/camí) només s'identifiquen com a appID d'U2F. Els dominis (com ara example.com) només tornaran resultats com a identificadors RP de WebAuthn. Per tant, per permetre alhora les API de WebAuthn i d'U2F en un lloc web determinat, s'ha d'incloure tant el domini com l'URL de WebAuthn.</translation>
-<translation id="5835412847081687053">Estableix les configuracions regionals permeses per a IU en una sessió d'usuari</translation>
 <translation id="5836064773277134605">Restringeix l'interval de port UDP utilitzat per l'amfitrió d'accés remot</translation>
 <translation id="5862253018042179045">Estableix l'estat predeterminat de la funció d'accessibilitat de comentaris de veu a la pantalla d'inici de sessió.
 
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb
index 180eccd..03e652a 100644
--- a/components/policy/resources/policy_templates_cs.xtb
+++ b/components/policy/resources/policy_templates_cs.xtb
@@ -461,20 +461,6 @@
       Kontrolu pravopisu lze nicméně provést pomocí staženého slovníku. Tato zásada se vztahuje pouze na používání internetových služeb.
 
       Pokud toto nastavení není nakonfigurováno, uživatelé mohou zvolit, zda službu pro kontrolu pravopisu chtějí použít či nikoli.</translation>
-<translation id="2294283832646774959">Konfiguruje seznam tiskáren.
-
-Tato zásada administrátorům umožňuje poskytnout uživatelům konfigurace tiskáren.
-
-Hodnoty <ph name="PRINTER_DISPLAY_NAME" /> a <ph name="PRINTER_DESCRIPTION" /> jsou volně upravitelné textové řetězce, pomocí kterých lze usnadnit výběr tiskárny. Hodnoty <ph name="PRINTER_MANUFACTURER" /> a <ph name="PRINTER_MODEL" /> koncovým uživatelům umožní snáze tiskárnu rozpoznat. Představují výrobce a model tiskárny. Hodnotou <ph name="PRINTER_URI" /> by měla být adresa přístupná z klientského počítače, včetně údajů <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> a <ph name="URI_QUEUE" />. Hodnota <ph name="PRINTER_UUID" /> je volitelná. Pokud je zadána, slouží k odebrání duplicitních tiskáren <ph name="ZEROCONF_DISCOVERY" />.
-
-Hodnota <ph name="PRINTER_EFFECTIVE_MODEL" /> musí odpovídat jednomu z řetězců, které představují tiskárny podporované systémem <ph name="PRODUCT_NAME" />. Řetězec se použije k identifikaci a instalaci vhodného souboru PPD pro tiskárnu. Další informace naleznete na stránce https://support.google.com/chrome?p=noncloudprint.
-
-Nastavení tiskárny se dokončí při jejím prvním použití. Soubory PPD se stáhnou až při použití tiskárny. Často používané soubory PPD budou následně uloženy do mezipaměti.
-
-Tato zásada nemá vliv na to, zda uživatelé mohou konfigurovat tiskárny na jednotlivých zařízeních. Je zamýšlena jako doplněk ke konfiguraci tiskáren ze strany jednotlivých uživatelů.
-
-U zařízení spravovaných pomocí služby Active Directory tato zásada podporuje rozšíření <ph name="MACHINE_NAME_VARIABLE" /> na název počítače ve službě Active Directory nebo jeho podřetězec. V případě názvu počítače <ph name="MACHINE_NAME_EXAMPLE" /> by byl řetězec <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> nahrazen čtyřmi znaky po šesté pozici, tj. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Pozice se počítají od nuly.
-      </translation>
 <translation id="2294382669900758280">Přehrávání videí v aplikacích Android není bráno v potaz ani v případě, že je tato zásada nastavena na hodnotu <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfiguruje výchozí stránku Nová karta v prohlížeči <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Zadat seznam aktivovaných pluginů</translation>
@@ -587,9 +573,6 @@
           Všechny verze serverů Samba a Windows z poslední doby protokol NTLMv2 podporují. Jeho zakázání snižuje bezpečnost ověřování a měli byste k němu přistupovat jen v případě, že potřebujete zajistit zpětnou kompatibilitu.
 
           Pokud tato zásada není nastavena, použije se výchozí nastavení true a protokol NTLMv2 bude povolen.</translation>
-<translation id="2598508021807251719">Konfiguruje jazyky, ve kterých se <ph name="PRODUCT_OS_NAME" /> může zobrazovat.
-
-      Pokud je tato zásada nastavena, může uživatel nakonfigurovat zobrazení systému <ph name="PRODUCT_OS_NAME" /> jen v jednom z jazyků zadaných v této zásadě. Pokud tato zásada není nastavena nebo je nastavena na prázdný seznam, je možné systém <ph name="PRODUCT_OS_NAME" /> zobrazovat ve všech podporovaných jazycích uživatelského prostředí. Pokud je tato zásada nastavena na seznam s neplatnými hodnotami, všechny neplatné hodnoty budou ignorovány. Pokud uživatel v minulosti systém <ph name="PRODUCT_OS_NAME" /> nastavil na zobrazování v jazyce, který tato zásada nepovoluje, přepne se zobrazovaný jazyk při příštím přihlášení uživatele na povolený jazyk uživatelského rozhraní. Pokud uživatel nakonfiguroval preferované jazyky a tato zásada některý z nich povoluje, přejde <ph name="PRODUCT_OS_NAME" /> na daný jazyk. Jinak <ph name="PRODUCT_OS_NAME" /> přejde na první platnou hodnotu zadanou v této zásadě nebo na záložní jazyk (v současné době en-US), pokud tato zásada obsahuje jen neplatné položky.</translation>
 <translation id="2604182581880595781">Konfigurace zásad souvisejících se sdílenými síťovými složkami.</translation>
 <translation id="2623014935069176671">Počkat na první aktivitu uživatele</translation>
 <translation id="262740370354162807">Povolí odesílání dokumentů do služby <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1471,13 +1454,6 @@
 <translation id="5130288486815037971">Zda jsou v protokolu TLS povoleny šifrovací sady RC4</translation>
 <translation id="5141670636904227950">Nastavení výchozího typu lupy, který je aktivován na přihlašovací obrazovce</translation>
 <translation id="5142301680741828703">Následující vzory adres URL vykreslovat vždy v pluginu <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Určuje název hostitele používaný pro zařízení v požadavcích DHCP.
-
-      Je-li tato zásada nastavena na neprázdný řetězec, použije se daný řetězec pro zařízení jako název hostitele v požadavku DHCP.
-
-      Řetězec může obsahovat proměnné ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, které se v zařízení nahradí hodnotami, čímž vznikne název hostitele. Po nahrazení by měl vzniknout platný název hostitele (odpovídající sekci 3.1 specifikace RFC 1035).
-
-      Pokud tato zásada není nastavena nebo název hostitele po nahrazení nebude platný, v požadavku DHCP žádný název hostitele nastaven nebude. </translation>
 <translation id="5148753489738115745">Umožňuje nastavit dodatečné parametry, které plugin <ph name="PRODUCT_FRAME_NAME" /> při spouštění aplikace <ph name="PRODUCT_NAME" /> použije.
 
           Když tato zásada není nastavena, bude použit výchozí příkazový řádek.</translation>
@@ -1726,7 +1702,6 @@
 <translation id="5835124959204887277">Určuje adresy URL a domény, pro které se při žádosti o atestační certifikáty z bezpečnostních klíčů nezobrazí žádná výzva. Kromě toho se bezpečnostnímu klíči odešle signál, že je možné použít individuální atestaci. Bez tohoto nastavení se uživatelům v Chromu verze 65 nebo vyšší při žádosti webů o atestaci bezpečnostních klíčů zobrazí výzva.
 
       Adresy URL (jako je https://example.com/nejaka/cesta) se budou porovnávat pouze jako U2F appID. Domény (například example.com) se porovnávají pouze jako ID přijímající strany webauthn. K pokrytí rozhraní API U2F i webauthn pro konkrétní web je proto potřeba uvést jak adresu URL appID, tak doménu.</translation>
-<translation id="5835412847081687053">Konfiguruje jazyky uživatelského prostředí povolené v uživatelské relaci</translation>
 <translation id="5836064773277134605">Omezí rozsah portů UDP používaný hostitelem vzdáleného přístupu.</translation>
 <translation id="5862253018042179045">Nastavuje výchozí stav funkce usnadnění přístupu pomocí hlasové odezvy na přihlašovací obrazovce.
 
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb
index 918ad89..0902bb02 100644
--- a/components/policy/resources/policy_templates_da.xtb
+++ b/components/policy/resources/policy_templates_da.xtb
@@ -475,21 +475,6 @@
       Stavekontrol kan stadig udføres ved hjælp af den downloadede ordbog. Denne politik kontrollerer kun brugen af onlinetjenesten.
 
       Hvis denne indstilling ikke er konfigureret, kan brugerne vælge, om stavekontrol skal aktiveres eller ej.</translation>
-<translation id="2294283832646774959">Konfigurerer en liste over printere.
-
-      Denne politik giver administratorer mulighed for at angive printerkonfigurationer
-      for deres brugere.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> og <ph name="PRINTER_DESCRIPTION" /> er strenge i frit format, der kan tilpasses, så valg af printer bliver nemmere. <ph name="PRINTER_MANUFACTURER" /> og <ph name="PRINTER_MODEL" /> gør det nemmere for slutbrugerne at identificere printere. De repræsenterer printerproducenten og -modellen. <ph name="PRINTER_URI" /> skal være en adresse, der er tilgængelig fra en klientcomputer, bl.a. <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> og <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> er valgfri. Hvis den angives, bruges den som en hjælp til at deduplikere <ph name="ZEROCONF_DISCOVERY" />-printere.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> skal stemme overens med en af de strenge, der repræsenterer en <ph name="PRODUCT_NAME" />-understøttet printer. Strengen bruges til at identificere og installere den relevante PPD-fil til printeren. Du kan finde flere oplysninger på https://support.google.com/chrome?p=noncloudprint.
-
-      Printerkonfigurationen fuldføres, første gang printeren tages i brug.  PPD-filer downloades ikke, før printeren benyttes.  Derefter gemmes ofte anvendte PPD-filer i cachen.
-
-      Denne politik påvirker ikke, om brugerne kan konfigurere printere på individuelle enheder.  Den er beregnet til at fungere som supplement til den enkelte brugers konfiguration af printere.
-
-      For enheder, der administreres med Active Directory, understøtter denne politik udvidelse af <ph name="MACHINE_NAME_VARIABLE" /> til Active Directory-enhedsnavnet eller en af dets understrenge. Hvis enhedsnavnet f.eks. er <ph name="MACHINE_NAME_EXAMPLE" />, erstattes <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> af de fire tegn, der kommer efter den sjette position, dvs. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Bemærk! Positionen er nulbaseret.
-      </translation>
 <translation id="2294382669900758280">Videoafspilning i Android-apps tages ikke med i betragtning, selv hvis denne politik angives som <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfigurer standardsiden Ny fane i <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Angiv en liste over aktiverede plugins</translation>
@@ -594,9 +579,6 @@
           Alle nye versioner af Samba- og Windows-servere understøtter NTLMv2. Politikken bør kun deaktiveres for bagudrettet kompatibilitet, og den reducerer sikkerheden ved godkendelse.
 
           Hvis politikken ikke er angivet, indstilles den som standard til Sand, og NTLMv2 aktiveres.</translation>
-<translation id="2598508021807251719">Konfigurerer de sprog, som <ph name="PRODUCT_OS_NAME" /> kan vises på.
-
-      Hvis denne politik er angivet, kan brugeren kun konfigurere <ph name="PRODUCT_OS_NAME" /> til at blive vist på et af de sprog, der angives af denne politik. Hvis politikken ikke er angivet eller er angivet med en tom liste, kan <ph name="PRODUCT_OS_NAME" /> vises på alle understøttede sprog. Hvis denne politik er angivet med en liste, der indeholder ugyldige værdier, ignoreres alle ugyldige værdier. Hvis en bruger tidligere konfigurerede <ph name="PRODUCT_OS_NAME" /> til at blive vist på et sprog, der ikke tillades af denne politik, ændres visningssproget til et tilladt sprog, næste gang brugeren logger ind. Hvis brugeren har konfigureret foretrukne sprog, og et af de foretrukne sprog er tilladt af denne politik, skifter <ph name="PRODUCT_OS_NAME" /> til det pågældende sprog. Ellers skifter <ph name="PRODUCT_OS_NAME" /> til den første gyldige værdi, der er angivet af denne politik, eller til en alternativ landestandard (som i øjeblikket er en-US), hvis politikken kun indeholder ugyldige poster.</translation>
 <translation id="2604182581880595781">Konfigurer politikker for fildeling via netværk.</translation>
 <translation id="2623014935069176671">Vent på første aktivitet fra brugeren</translation>
 <translation id="262740370354162807">Aktiver indsendelse af dokumenter til <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1463,13 +1445,6 @@
 <translation id="5130288486815037971">Afgør, om RC4-krypteringsprogrammer i TLS aktiveres</translation>
 <translation id="5141670636904227950">Indstil standardtype for lup til aktiveret på loginskærmen</translation>
 <translation id="5142301680741828703">Gengiv altid følgende webadressemønstre i <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Fastlægger det hostname, enheden anvender i DHCP-anmodninger.
-
-      Hvis denne politik er angivet til en udfyldt streng, bruges strengen som enhedens hostname i forbindelse med en DHCP-anmodning.
-
-      Strengen kan indeholde variabler ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, som ville blive erstattet af værdier på enheden, inden de bruges som hostname. Resultatet af udskiftningen skal være et gyldigt hostname (i overensstemmelse med afsnit 3.1 i RFC 1035).
-
-      Hvis denne politik ikke er angivet, eller værdien efter udskiftningen ikke er et gyldigt hostname, angives der ikke noget hostname i DHCP-anmodninger. </translation>
 <translation id="5148753489738115745">Giver dig mulighed for at angive yderligere parametre, som bruges, når <ph name="PRODUCT_FRAME_NAME" /> starter <ph name="PRODUCT_NAME" />.
 
           Hvis denne politik ikke er angivet, bruges standardkommandolinjen.</translation>
@@ -1694,7 +1669,6 @@
 <translation id="5835124959204887277">Angiver webadresser og domæner, for hvilke der ikke vises en meddelelse, når der anmodes om attesteringscertifikater fra sikkerhedsnøgler. Desuden sendes et signal til sikkerhedsnøglen, som indikerer, at der kan anvendes individuel attestering. Uden dette får brugerne en meddelelse i version 65 og nyere af Chrome, når websites anmoder om attestering af sikkerhedsnøgler.
 
       Webadresser (såsom https://eksempel.dk/en/sti) matcher kun som U2F-app-id'er. Domæner (såsom eksempel.dk) matcher kun som webauthn RP-id'er. Derfor skal både app-id, webadresse og domæne angives for at dække både U2F- og webauthn-API'er for et givet website.</translation>
-<translation id="5835412847081687053">Konfigurer tilladte brugerfladesprog i en brugersession</translation>
 <translation id="5836064773277134605">Begræns rækkevidden for den UDP-port, der bruges af hosten for fjernadgang</translation>
 <translation id="5862253018042179045">Angiv standardtilstanden for hjælpefunktionen Talefeedback på loginskærmen.
 
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 89b5910..878f731 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -481,20 +481,6 @@
       Die Rechtschreibprüfung kann weiterhin mit einem heruntergeladenen Wörterbuch durchgeführt werden. Diese Richtlinie bezieht sich nur auf die Verwendung des Online-Dienstes.
 
       Ist diese Einstellung nicht konfiguriert, können die Nutzer auswählen, ob die Rechtschreibprüfung verwendet werden soll oder nicht.</translation>
-<translation id="2294283832646774959">Eine Liste der Drucker wird konfiguriert.
-
-      Mit dieser Richtlinie können Administratoren den Nutzern Druckerkonfigurationen bereitstellen.
-
-      Bei <ph name="PRINTER_DISPLAY_NAME" /> und <ph name="PRINTER_DESCRIPTION" /> handelt es sich um Freiform-Strings, die für eine einfachere Druckerauswahl angepasst werden können. <ph name="PRINTER_MANUFACTURER" /> und <ph name="PRINTER_MODEL" /> dienen der vereinfachten Druckererkennung durch die Nutzer. Sie geben den Hersteller und das Modell des Druckers an. Bei <ph name="PRINTER_URI" /> sollte es sich um eine Adresse, einschließlich <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> und <ph name="URI_QUEUE" />, handeln, auf die über einen Client-Computer zugegriffen werden kann. Die <ph name="PRINTER_UUID" /> ist optional. Wenn sie angegeben ist, wird sie zum Entfernen von Duplikaten bei <ph name="ZEROCONF_DISCOVERY" />-Druckern verwendet.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> muss mit einem der Strings übereinstimmen, die einen von <ph name="PRODUCT_NAME" /> unterstützten Drucker angeben. Der String wird zur Ermittlung und Installation der korrekten PPD für den Drucker verwendet. Weitere Informationen finden Sie unter https://support.google.com/chrome?p=noncloudprint.
-
-      Die Druckereinrichtung wird bei der ersten Verwendung des Druckers abgeschlossen. PPDs werden erst dann heruntergeladen, wenn der Drucker genutzt wird. Anschließend werden häufig verwendete PPDs im Cache gespeichert.
-
-      Diese Richtlinie hat keinen Einfluss darauf, ob Nutzer Drucker auf ihren individuellen Geräten konfigurieren können. Sie ist als Ergänzung zu den Druckerkonfigurationen der einzelnen Nutzer gedacht.
-
-      Bei Geräten, die über Active Directory verwaltet werden, unterstützt diese Richtlinie die Erweiterung von <ph name="MACHINE_NAME_VARIABLE" /> auf den Active Directory-Computernamen oder einen Teilstring davon. Wenn der Computername beispielsweise <ph name="MACHINE_NAME_EXAMPLE" /> lautet, wird <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> durch die vier Zeichen nach der sechsten Stelle ersetzt, z. B. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Beachten Sie, dass die Position auf Null basiert.
-      </translation>
 <translation id="2294382669900758280">Das Abspielen von Videos in Android-Apps wird nicht berücksichtigt, auch wenn diese Richtlinie auf <ph name="TRUE" /> gesetzt ist.</translation>
 <translation id="2298647742290373702">Standardmäßige "Neuer Tab"-Seite in <ph name="PRODUCT_NAME" /> konfigurieren.</translation>
 <translation id="2299220924812062390">Liste der aktivierten Plug-ins angeben</translation>
@@ -599,9 +585,6 @@
           Alle aktuellen Versionen der Samba- und Windows-Server unterstützen NTLMv2. Eine Deaktivierung sollte nur zum Zweck der Rückwärtskompatibilität erfolgen und verringert die Sicherheit der Authentifizierung.
 
           Wenn diese Richtlinie nicht konfiguriert ist, ist der Standardwert "true" und NTLMv2 ist aktiviert.</translation>
-<translation id="2598508021807251719">Mit dieser Richtlinie werden die Sprachen konfiguriert, in denen <ph name="PRODUCT_OS_NAME" /> angezeigt werden kann.
-
-      Wenn diese Richtlinie festgelegt ist, kann der Nutzer <ph name="PRODUCT_OS_NAME" /> nur in einer der durch diese Richtlinie angegebenen Sprachen anzeigen lassen. Falls diese Richtlinie nicht festgelegt ist oder auf eine leere Liste verweist, kann <ph name="PRODUCT_OS_NAME" /> in allen unterstützten UI-Sprachen angezeigt werden. Sollte diese Richtlinie auf eine Liste mit ungültigen Werten verweisen, werden alle ungültigen Werte ignoriert. Wenn ein Nutzer <ph name="PRODUCT_OS_NAME" /> zuvor so konfiguriert hat, dass das Betriebssystem in einer Sprache angezeigt wird, die nicht durch diese Richtlinie zugelassen ist, wird die UI-Sprache in eine zulässige Sprache geändert, wenn sich der Nutzer das nächste Mal anmeldet. Falls der Nutzer bevorzugte Sprachen konfiguriert hatte und eine der bevorzugten Sprachen durch diese Richtlinie zugelassen ist, wechselt <ph name="PRODUCT_OS_NAME" /> zu dieser Sprache. Andernfalls wechselt <ph name="PRODUCT_OS_NAME" /> zum ersten gültigen Wert, der durch diese Richtlinie angegeben ist, oder – falls diese Richtlinie nur ungültige Einträge enthält – zu einer Ersatzsprache (derzeit en-US).</translation>
 <translation id="2604182581880595781">Richtlinien für Netzwerkfreigaben konfigurieren.</translation>
 <translation id="2623014935069176671">Auf erste Nutzeraktivität warten</translation>
 <translation id="262740370354162807">Senden von Dokumenten an <ph name="CLOUD_PRINT_NAME" /> aktivieren</translation>
@@ -1463,13 +1446,6 @@
 <translation id="5130288486815037971">Legt fest, ob RC4-Verschlüsselungssammlungen in TLS aktiviert sind</translation>
 <translation id="5141670636904227950">Standardtyp für die Lupe festlegen, die auf der Anmeldeseite aktiviert ist</translation>
 <translation id="5142301680741828703">Folgende URL-Muster immer in <ph name="PRODUCT_FRAME_NAME" /> darstellen</translation>
-<translation id="5147665094011258322">Legen Sie den Hostnamen des in DHCP-Anfragen verwendeten Geräts fest.
-
-      Wird für diese Richtlinie ein nicht-leerer String definiert, dann wird dieser String während der DHCP-Anfrage als Geräte-Hostname verwendet.
-
-      Der String kann die Variablen ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} enthalten, die im Gerät durch Werte ersetzt werden, bevor sie als Hostname verwendet werden. Das Ergebnis sollte ein gültiger Hostname gemäß RFC 1035, Abschnitt 3.1 sein.
-
-      Wird diese Richtlinie nicht definiert oder ist der Wert nach dem Ersetzen kein gültiger Hostname, wird in der DHCP-Anfrage kein Hostname festgelegt. </translation>
 <translation id="5148753489738115745">Ermöglicht die Verwendung zusätzlicher Parameter, die beim Start von <ph name="PRODUCT_NAME" /> durch <ph name="PRODUCT_FRAME_NAME" /> eingesetzt werden.
 
           Wenn diese Richtlinie nicht festgelegt wird, wird die Standardbefehlszeile verwendet.</translation>
@@ -1696,7 +1672,6 @@
 <translation id="5835124959204887277">In der Richtlinie werden URLs und Domains spezifiziert, für die keine Eingabeaufforderung angezeigt werden, wenn Nachweiszertifikate von Sicherheitsschlüsseln angefordert werden. Zusätzlich wird an den Sicherheitsschlüssel ein Signal gesendet, das angibt, dass individuelle Nachweise verwendet werden können. Andernfalls erhalten Nutzer in Chrome 65 und höher eine Eingabeaufforderung, wenn von Websites ein Nachweis für Sicherheitsschlüssel angefordert wird.
 
       URLs, wie z. B. https://example.com/some/path, werden nur durch U2F-AppIDs bestimmt. Domains, wie z. B. example.com, werden nur durch Webauthn-RP-IDs bestimmt. Um sowohl U2F- als auch Webauthn-APIs in eine bestimmte Website einzubeziehen, müssen deshalb sowohl die AppID-URL als auch die Domain aufgeführt werden.</translation>
-<translation id="5835412847081687053">In einer Nutzersitzung zulässige UI-Sprachen konfigurieren</translation>
 <translation id="5836064773277134605">Vom Host für den Remotezugriff verwendeten UDP-Portbereich einschränken</translation>
 <translation id="5862253018042179045">Hiermit wird der Standardstatus der Bedienungshilfefunktion für das gesprochene Feedback auf der Anmeldeseite festgelegt.
 
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb
index db96f728..d670354 100644
--- a/components/policy/resources/policy_templates_el.xtb
+++ b/components/policy/resources/policy_templates_el.xtb
@@ -494,21 +494,6 @@
       Ο ορθογραφικός έλεγχος μπορεί να χρησιμοποιηθεί ακόμη με τη χρήση ενός λεξικού του οποίου έχει πραγματοποιηθεί λήψη. Αυτή η πολιτική αφορά μόνο τη χρήση της υπηρεσίας στο διαδίκτυο.
 
       Εάν η ρύθμιση δεν διαμορφωθεί τότε οι χρήστες μπορούν να επιλέξουν εάν η υπηρεσία ορθογραφικού ελέγχου θα πρέπει να χρησιμοποιείται ή όχι.</translation>
-<translation id="2294283832646774959">Διαμορφώνει μια λίστα εκτυπωτών.
-
-      Αυτή η πολιτική επιτρέπει στους διαχειριστές να παρέχουν διαμορφώσεις εκτυπωτή για
-      τους χρήστες τους.
-
-      Τα πεδία <ph name="PRINTER_DISPLAY_NAME" /> και <ph name="PRINTER_DESCRIPTION" /> είναι συμβολοσειρές ελεύθερης μορφής που μπορούν να προσαρμοστούν για να διευκολύνουν την επιλογή εκτυπωτή. Τα πεδία <ph name="PRINTER_MANUFACTURER" /> και <ph name="PRINTER_MODEL" /> διευκολύνουν την αναγνώριση των εκτυπωτών από τους τελικούς χρήστες. Αντιστοιχούν στον κατασκευαστή και στο μοντέλο του εκτυπωτή. Το <ph name="PRINTER_URI" /> θα πρέπει να είναι διεύθυνση προσβάσιμη από υπολογιστή-πελάτη, συμπεριλαμβανομένων των <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> και <ph name="URI_QUEUE" />. Το <ph name="PRINTER_UUID" /> είναι προαιρετικό. Εάν παρέχεται, χρησιμοποιείται για τη διευκόλυνση της κατάργησης διπλοτύπων εκτυπωτών <ph name="ZEROCONF_DISCOVERY" />.
-
-      Το <ph name="PRINTER_EFFECTIVE_MODEL" /> πρέπει να αντιστοιχεί με μία από τις συμβολοσειρές που αντιπροσωπεύουν υποστηριζόμενους εκτυπωτές <ph name="PRODUCT_NAME" />. Η συμβολοσειρά θα χρησιμοποιηθεί για τον εντοπισμό και την εγκατάσταση του κατάλληλου PPD για τον εκτυπωτή. Για περισσότερες πληροφορίες, επισκεφτείτε τη διεύθυνση https://support.google.com/chrome?p=noncloudprint.
-
-      Η ρύθμιση εκτυπωτή ολοκληρώνεται με την πρώτη χρήση του εκτυπωτή. Δεν γίνεται λήψη των PPD μέχρι να χρησιμοποιηθεί ο εκτυπωτής. Μόλις συμβεί αυτό, θα αποθηκευτούν στην κρυφή μνήμη τα PPD που χρησιμοποιούνται συχνά.
-
-      Αυτή η πολιτική δεν επηρεάζει τη δυνατότητα των χρηστών να διαμορφώσουν εκτυπωτές σε μεμονωμένες συσκευές. Προορίζεται να είναι συμπληρωματική στη διαμόρφωση των εκτυπωτών από μεμονωμένους χρήστες.
-
-      Για συσκευές διαχειριζόμενες μέσω Active Directory, αυτή η πολιτική υποστηρίζει την επέκταση του <ph name="MACHINE_NAME_VARIABLE" /> στο όνομα υπολογιστή Active Directory ή σε μία από τις δευτερεύουσες συμβολοσειρές του. Για παράδειγμα, αν το όνομα υπολογιστή είναι <ph name="MACHINE_NAME_EXAMPLE" />, τότε το <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> θα πρέπει να αντικατασταθεί με τους 4 χαρακτήρες που ξεκινούν μετά την 6η θέση, δηλ. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Έχετε υπόψη σας ότι η θέση βασίζεται σε μηδενικό ψηφίο.
-      </translation>
 <translation id="2294382669900758280">Η αναπαραγωγή βίντεο σε εφαρμογές Android δεν λαμβάνεται υπόψη, ακόμη και αν αυτή η πολιτική οριστεί <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Διαμόρφωση της προεπιλεγμένης Σελίδας σε νέα καρτέλα στο <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Καθορισμός μιας λίστας ενεργοποιημένων προσθηκών</translation>
@@ -619,9 +604,6 @@
           Όλες οι πρόσφατες εκδόσεις των διακομιστών Samba και Windows υποστηρίζουν την πολιτική NTLMv2. Αυτή η πολιτική θα πρέπει να είναι απενεργοποιημένη μόνο για συμβατότητα με προηγούμενες εκδόσεις και μειώνει την ασφάλεια του ελέγχου ταυτότητας.
 
           Εάν αυτή η πολιτική δεν έχει οριστεί, η προεπιλεγμένη τιμή είναι true και η πολιτική NTLMv2 είναι ενεργοποιημένη.</translation>
-<translation id="2598508021807251719">Διαμορφώνει τις τοπικές ρυθμίσεις στις οποίες μπορεί να προβάλλεται το <ph name="PRODUCT_OS_NAME" />.
-
-      Εάν οριστεί αυτή η πολιτική, ο χρήστης μπορεί να διαμορφώσει το <ph name="PRODUCT_OS_NAME" /> ούτως ώστε να προβάλλεται μόνο σε μία από τις τοπικές ρυθμίσεις που καθορίζονται από αυτήν την πολιτική. Εάν αυτή η πολιτική δεν οριστεί ή οριστεί σε μια κενή λίστα, το <ph name="PRODUCT_OS_NAME" /> μπορεί να προβληθεί σε όλες τις υποστηριζόμενες τοπικές ρυθμίσεις. Εάν οριστεί αυτή η πολιτική σε μια λίστα με μη έγκυρες τιμές, όλες οι μη έγκυρες τιμές θα αγνοηθούν. Εάν ο χρήστης διαμόρφωσε στο παρελθόν το <ph name="PRODUCT_OS_NAME" /> ούτως ώστε να προβάλλεται σε μια τοπική ρύθμιση η οποία δεν επιτρέπεται από αυτήν την πολιτική, οι προβαλλόμενες τοπικές ρυθμίσεις θα αλλάξουν σε επιτρεπόμενες τοπικές ρυθμίσεις την επόμενη φορά που θα συνδεθεί ο χρήστης. Εάν ο χρήστης είχε διαμορφώσει τις προτιμώμενες τοπικές ρυθμίσεις και ένα σύνολο από τις προτιμώμενες τοπικές ρυθμίσεις επιτρέπεται από αυτήν την πολιτική, το <ph name="PRODUCT_OS_NAME" /> θα κάνει εναλλαγή σε αυτές τις τοπικές ρυθμίσεις. Διαφορετικά, το <ph name="PRODUCT_OS_NAME" /> θα κάνει εναλλαγή στην πρώτη έγκυρη τιμή που καθορίζεται από αυτήν την πολιτική ή σε κάποιο εναλλακτικό σύνολο τοπικών ρυθμίσεων (αυτήν τη στιγμή είναι en-US), εάν αυτή η πολιτική περιέχει μόνο μη έγκυρες καταχωρίσεις.</translation>
 <translation id="2604182581880595781">Διαμορφώστε πολιτικές που σχετίζονται με τη λειτουργία "Κοινόχρηστα αρχεία δικτύου".</translation>
 <translation id="2623014935069176671">Αναμονή για τη δραστηριότητα του αρχικού χρήστη</translation>
 <translation id="262740370354162807">Ενεργοποιήστε την υποβολή των εγγράφων στο <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -843,6 +825,7 @@
 
           Αν δεν καθορίσετε αυτήν την πολιτική, θα επιτρέπεται στους χρήστες να επιλέγουν οι ίδιοι τις ρυθμίσεις του διακομιστή μεσολάβησης.</translation>
 <translation id="3205825995289802549">Μεγιστοποίηση του πρώτου παραθύρου του προγράμματος περιήγησης στην πρώτη εκτέλεση</translation>
+<translation id="3211426942294667684">Ρυθμίσεις σύνδεσης στο πρόγραμμα περιήγησης</translation>
 <translation id="3213821784736959823">Ελέγχει εάν το ενσωματωμένο πρόγραμμα-πελάτης DNS χρησιμοποιείται στο <ph name="PRODUCT_NAME" />.
 
       Εάν αυτή η πολιτική έχει οριστεί ως αληθής, θα χρησιμοποιείται το ενσωματωμένο πρόγραμμα-πελάτης DNS, εφόσον είναι διαθέσιμο.
@@ -1123,6 +1106,15 @@
       Εάν δεν οριστεί αυτή η πολιτική, το <ph name="PRODUCT_NAME" /> θα χρησιμοποιεί τον συνήθη προεπιλεγμένο κατάλογο (για τη συγκεκριμένη πλατφόρμα).
 
       Ανατρέξτε στη διεύθυνση https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables, για να δείτε μια λίστα μεταβλητών που μπορούν να χρησιμοποιηθούν.</translation>
+<translation id="3904459740090265495">Αυτή η πολιτική ελέγχει τη συμπεριφορά σύνδεσης του προγράμματος περιήγησης. Σάς επιτρέπει να καθορίσετε εάν ο χρήστης μπορεί να συνδεθεί στο <ph name="PRODUCT_NAME" /> με τον λογαριασμό του και να χρησιμοποιήσει υπηρεσίες που σχετίζονται με τον λογαριασμό, όπως τον Συγχρονισμό Chrome.
+
+      Εάν οριστεί η επιλογή "Απενεργοποίηση σύνδεσης στο πρόγραμμα περιήγησης" για την πολιτική, τότε ο χρήστης δεν μπορεί να συνδεθεί στο πρόγραμμα περιήγησης και να χρησιμοποιήσει υπηρεσίες που βασίζονται στον λογαριασμό. Σε αυτήν την περίπτωση, οι υπηρεσίες επιπέδου προγράμματος περιήγησης, όπως ο Συγχρονισμός του Chrome δεν μπορούν να χρησιμοποιηθούν και δεν θα είναι διαθέσιμες. Εάν ο χρήστης συνδέθηκε και η πολιτική έχει οριστεί ως "Απενεργοποιημένη" θα αποσυνδεθεί την επόμενη φορά που θα εκτελέσει το Chrome, αλλά τα τοπικά δεδομένα προφίλ του, όπως σελιδοδείκτες, κωδικοί πρόσβασης κ.λπ. θα διατηρηθούν. Ο χρήστης θα εξακολουθεί να έχει τη δυνατότητα να συνδεθεί και να χρησιμοποιήσει υπηρεσίες ιστού της Google όπως το Gmail.
+
+      Εάν οριστεί η επιλογή "Ενεργοποίηση σύνδεσης στο πρόγραμμα περιήγησης" για την πολιτική, τότε ο χρήστης επιτρέπεται να συνδεθεί στο πρόγραμμα περιήγησης και συνδέεται αυτόματα στο πρόγραμμα περιήγησης όταν συνδέεται σε υπηρεσίες ιστού της Google όπως το Gmail. Η σύνδεση στο πρόγραμμα περιήγησης σημαίνει ότι τα στοιχεία του λογαριασμού του χρήστη θα διατηρούνται από το πρόγραμμα περιήγησης. Ωστόσο, αυτό δεν σημαίνει ότι ο Συγχρονισμός Chrome θα είναι ενεργοποιημένος από προεπιλογή. Ο χρήστης θα πρέπει να τον ενεργοποιήσει ξεχωριστά, προκειμένου να χρησιμοποιήσει αυτήν τη λειτουργία. Η ενεργοποίηση αυτής της πολιτικής θα εμποδίσει την απενεργοποίηση της ρύθμισης που επιτρέπει τη σύνδεση στο πρόγραμμα περιήγησης από τον χρήστη. Για να ελέγξετε τη διαθεσιμότητα του Συγχρονισμού Chrome, χρησιμοποιήστε την πολιτική "SyncDisabled".
+
+      Εάν οριστεί η επιλογή "Επιβολής σύνδεσης στους χρήστες προκειμένου να χρησιμοποιήσουν το πρόγραμμα περιήγησης" για την πολιτική, τότε εμφανίζεται στον χρήστη ένα παράθυρο διαλόγου επιλογής λογαριασμού και θα πρέπει να επιλέξει και να συνδεθεί σε έναν λογαριασμό, προκειμένου να χρησιμοποιήσει το πρόγραμμα περιήγησης. Αυτό διασφαλίζει ότι για τους διαχειριζόμενους λογαριασμούς, οι πολιτικές που έχουν συσχετιστεί με τον λογαριασμό εφαρμόζονται και επιβάλλονται. Από προεπιλογή, αυτή η ρύθμιση ενεργοποιεί τον Συγχρονισμό Chrome για τον λογαριασμό, με εξαίρεση την περίπτωση που ο συγχρονισμός απενεργοποιήθηκε από τον διαχειριστή του τομέα ή μέσω της πολιτικής "SyncDisabled". Η προεπιλεγμένη τιμή της παραμέτρου BrowserGuestModeEnabled ορίζεται ως ψευδής. Λάβετε υπόψη ότι τα υπάρχοντα μη συνδεδεμένα προφίλ θα κλειδωθούν και θα είναι μη προσβάσιμα μετά την ενεργοποίηση αυτής της πολιτικής. Για περισσότερες πληροφορίες, ανατρέξτε στο άρθρο του κέντρου βοήθειας: https://support.google.com/chrome/a/answer/7572556.
+
+      Εάν αυτή η πολιτική δεν έχει διαμορφωθεί, ο χρήστης μπορεί να αποφασίσει εάν θέλει να ενεργοποιήσει την επιλογή σύνδεσης στο πρόγραμμα περιήγησης και να το χρησιμοποιήσει όπως επιθυμεί.</translation>
 <translation id="3911737181201537215">Αυτή η πολιτική δεν επηρεάζει την καταγραφή που γίνεται από το Android.</translation>
 <translation id="391531815696899618">Όταν έχει οριστεί σε "True", απενεργοποιεί το συγχρονισμό του Google Drive στην εφαρμογή "Αρχεία" του <ph name="PRODUCT_OS_NAME" />. Σε αυτήν την περίπτωση, δεν ανεβαίνουν δεδομένα στο Google Drive.
 
@@ -1173,6 +1165,7 @@
 
       Λάβετε υπόψη ότι αυτή η πολιτική παραβλέπεται και οι υπηρεσίες τοποθεσίας της Google είναι πάντα απενεργοποιημένες όταν η πολιτική <ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME" /> έχει ρυθμιστεί ως <ph name="BLOCK_GEOLOCATION_SETTING" />.</translation>
 <translation id="408029843066770167">Να επιτρέπονται ερωτήματα σε μια υπηρεσία ώρας της Google</translation>
+<translation id="408076456549153854">Ενεργοποίηση σύνδεσης στο πρόγραμμα περιήγησης</translation>
 <translation id="4088589230932595924">Αναγκαστική χρήση κατάστασης ανώνυμης περιήγησης</translation>
 <translation id="4088983553732356374">Σας δίνει τη δυνατότητα να ορίσετε εάν επιτρέπεται στους ιστότοπους να ρυθμίζουν τοπικά δεδομένα. Η ρύθμιση των τοπικών δεδομένων μπορεί είτε 
 να επιτρέπεται είτε να απαγορεύεται για όλους τους ιστότοπους.
@@ -1485,6 +1478,7 @@
 <translation id="4962262530309732070">Εάν αυτή η πολιτική έχει οριστεί ως αληθής ή δεν έχει διαμορφωθεί, το <ph name="PRODUCT_NAME" /> θα επιτρέψει τη λειτουργία "Προσθήκη ατόμου" από το Εργαλείο διαχείρισης χρηστών.
 
       Εάν αυτή η πολιτική οριστεί ως ψευδής, το <ph name="PRODUCT_NAME" /> δεν θα επιτρέψει τη δημιουργία νέων προφίλ από το Εργαλείο διαχείρισης χρηστών.</translation>
+<translation id="4970855112942626932">Απενεργοποίηση σύνδεσης στο πρόγραμμα περιήγησης</translation>
 <translation id="4971529314808359013">Σας επιτρέπει να καθορίσετε μια λίστα με μοτίβα διευθύνσεων url που προσδιορίζουν ιστότοπους για τους οποίους το <ph name="PRODUCT_NAME" /> θα πρέπει να επιλέξει αυτόματα ένα πιστοποιητικό πελάτη, σε περίπτωση που ο ιστότοπος ζητήσει κάποιο πιστοποιητικό.
 
           Η τιμή θα πρέπει να είναι μια σειρά λεξικών JSON σε μορφή συμβολοσειράς. Κάθε λεξικό θα πρέπει να έχει τη μορφή { "pattern": "$URL_PATTERN", "filter" : $FILTER }, όπου $URL_PATTERN είναι ένα μοτίβο ρύθμισης περιεχομένου. Το $FILTER περιορίζει τα πιστοποιητικά πελάτη από τα οποία θα επιλέξει αυτόματα το πρόγραμμα περιήγησης. Ανεξάρτητα από το φίλτρο, θα επιλέγονται μόνο πιστοποιητικά που αντιστοιχούν στο αίτημα πιστοποιητικού του διακομιστή. Εάν το $FILTER έχει τη μορφή { "ISSUER": { "CN": "$ISSUER_CN" } }, επιλέγονται επιπλέον μόνο πιστοποιητικά πελάτη τα οποία εκδίδονται από ένα πιστοποιητικό με CommonName $ISSUER_CN. Εάν το $FILTER είναι το κενό λεξικό {}, η επιλογή πιστοποιητικών πελάτη δεν περιορίζεται περαιτέρω.
@@ -1521,13 +1515,6 @@
 <translation id="5130288486815037971">Εάν έχουν ενεργοποιηθεί οι σουίτες κρυπτογράφησης RC4 στο TLS</translation>
 <translation id="5141670636904227950">Ορίστε τον προεπιλεγμένο τύπο μεγέθυνσης οθόνης που θα ενεργοποιηθεί στην οθόνη σύνδεσης</translation>
 <translation id="5142301680741828703">Να εμφανίζονται πάντα τα παρακάτω πρότυπα διεύθυνσης URL στο <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Καθορίστε το όνομα κεντρικού υπολογιστή της συσκευής που χρησιμοποιείται σε αιτήματα DHCP.
-
-      Εάν αυτή η πολιτική οριστεί σε συμβολοσειρά που δεν είναι κενή, η συμβολοσειρά θα χρησιμοποιηθεί ως το όνομα κεντρικού υπολογιστή της συσκευής σε αιτήματα DHCP.
-
-      Η συμβολοσειρά μπορεί να περιέχει τις μεταβλητές ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} οι οποίες αντικαθίστανται με τιμές στη συσκευή, πριν τη χρήση της συμβολοσειράς ως όνομα κεντρικού υπολογιστή. Η αντικατάσταση που προκύπτει πρέπει να είναι ένα έγκυρο όνομα κεντρικού υπολογιστή (σύμφωνα με το RFC 1035, ενότητα 3.1).
-
-      Εάν αυτή η πολιτική δεν οριστεί ή αν η τιμή μετά την αντικατάσταση δεν αποτελεί ένα έγκυρο όνομα κεντρικού υπολογιστή, δεν θα οριστεί όνομα κεντρικού υπολογιστή στο αίτημα DHCP. </translation>
 <translation id="5148753489738115745">Σας επιτρέπει να καθορίσετε πρόσθετες παραμέτρους που χρησιμοποιούνται όταν το <ph name="PRODUCT_FRAME_NAME" /> πραγματοποιεί εκκίνηση του <ph name="PRODUCT_NAME" />.
 
           Αν αυτή η πολιτική δεν οριστεί, θα χρησιμοποιηθεί η προεπιλεγμένη γραμμή εντολών.</translation>
@@ -1778,7 +1765,6 @@
 <translation id="5835124959204887277">Καθορίζει URL και τομείς για τους οποίους δεν θα εμφανιστεί μήνυμα προτροπής κατά το αίτημα για πιστοποιητικά επιβεβαίωσης από κλειδιά ασφαλείας. Επιπλέον, θα σταλεί ένα σήμα στο κλειδί ασφαλείας που θα υποδεικνύει ότι ενδέχεται να χρησιμοποιηθεί ανεξάρτητη επιβεβαίωση. Χωρίς αυτό, θα εμφανίζονται μηνύματα προτροπής στους χρήστες στο Chrome 65+ κατά την υποβολή αιτήματος για επιβεβαίωση κλειδιών ασφαλείας από ιστοτόπους.
 
       Τα URL (όπως το https://example.com/some/path) θα αντιστοιχούνται μόνο ως U2F appIDs. Οι τομείς (όπως το example.com) θα αντιστοιχούνται μόνο ως αναγνωριστικά webauthn RP. Συνεπώς, για την κάλυψη τόσο των U2F όσο και των webauthn API για έναν συγκεκριμένο ιστότοπο, θα πρέπει να αναγράφεται τόσο το appID URL όσο και ο τομέας.</translation>
-<translation id="5835412847081687053">Διαμορφώστε τις επιτρεπόμενες τοπικές ρυθμίσεις διεπαφής χρήστη σε μια περίοδο σύνδεσης χρήστη</translation>
 <translation id="5836064773277134605">Περιορισμός της θύρας UDP που χρησιμοποιείται από τον κεντρικό υπολογιστή απομακρυσμένης πρόσβασης</translation>
 <translation id="5862253018042179045">Ρύθμιση της προεπιλεγμένης κατάστασης της δυνατότητας προσβασιμότητας προφορικών σχολίων στην οθόνη σύνδεσης.
 
@@ -1900,6 +1886,7 @@
 
       Αν δεν διαμορφωθεί αυτή η πολιτική, τότε η λίστα των αποσπώμενων συσκευών USB θα είναι κενή.</translation>
 <translation id="6083631234867522991">Windows (εφαρμογές πελάτες Windows):</translation>
+<translation id="6091233616732024397">Επιβολής σύνδεσης στους χρήστες προκειμένου να χρησιμοποιήσουν το πρόγραμμα περιήγησης</translation>
 <translation id="6093156968240188330">Να επιτρέπεται στους απομακρυσμένους χρήστες να αλληλεπιδρούν με υπερυψωμένα παράθυρα σε περιόδους λειτουργίας απομακρυσμένης βοήθειας</translation>
 <translation id="6095999036251797924">Προσδιορίζει το χρονικό διάστημα χωρίς κάποια ενέργεια χρήστη μετά το οποίο γίνεται κλείδωμα της οθόνης κατά τη χρήση τροφοδοσίας ρεύματος ή μπαταρίας.
 
@@ -1974,6 +1961,11 @@
 <translation id="6368011194414932347">Διαμόρφωση της διεύθυνσης URL της αρχικής σελίδας</translation>
 <translation id="6368403635025849609">Να επιτρέπεται η JavaScript σε αυτούς τους ιστότοπους</translation>
 <translation id="6376659517206731212">Μπορεί να είναι υποχρεωτική</translation>
+<translation id="6377355597423503887">Αυτή η πολιτική έχει καταργηθεί. Μπορείτε εναλλακτικά να χρησιμοποιήσετε την πολιτική BrowserSignin.
+
+      Δίνει στον χρήστη τη δυνατότητα να συνδεθεί στο <ph name="PRODUCT_NAME" />.
+
+      Εάν ορίσετε αυτήν την πολιτική, μπορείτε να καθορίσετε εάν κάποιος χρήστης έχει τη δυνατότητα σύνδεσης στο <ph name="PRODUCT_NAME" />. Εάν αυτή η πολιτική οριστεί ως ψευδής, δεν θα επιτρέπεται η λειτουργία των εφαρμογών και των επεκτάσεων που χρησιμοποιούν το API chrome.identity, επομένως ίσως θέλετε να χρησιμοποιήσετε την πολιτική SyncDisabled.</translation>
 <translation id="6378076389057087301">Καθορίζει εάν η δραστηριότητα ήχου επηρεάζει τη διαχείριση ηλεκτρικής ενέργειας</translation>
 <translation id="637934607141010488">Αναφορά λίστας συσκευών που χρησιμοποίησαν πρόσφατα οι χρήστες για να συνδεθούν.
 
@@ -2925,6 +2917,11 @@
 <translation id="8548832052135586762">Ορίζει την εκτύπωση σε περιορισμό λειτουργίας μόνο έγχρωμης, μόνο μονόχρωμης ή χωρίς χρώμα. Τυχόν μη ορισμός της πολιτικής ερμηνεύεται ως μη περιορισμός.</translation>
 <translation id="8549772397068118889">Να προειδοποιείται ο χρήστης όταν επισκέπτεται ιστότοπους εκτός των πακέτων περιεχομένου</translation>
 <translation id="8566842294717252664">Απόκρυψη του web store από τη Σελίδα σε νέα καρτέλα και από τη λειτουργία εκκίνησης εφαρμογών</translation>
+<translation id="857369585509260201">Αυτή η πολιτική έχει καταργηθεί. Μπορείτε εναλλακτικά να χρησιμοποιήσετε την πολιτική BrowserSignin.
+
+      Εάν αυτή η πολιτική έχει οριστεί ως αληθής, ο χρήστης πρέπει να συνδεθεί στο <ph name="PRODUCT_NAME" /> με το προφίλ του προτού χρησιμοποιήσει το πρόγραμμα περιήγησης. Η προεπιλεγμένη τιμή του BrowserGuestModeEnabled θα οριστεί ως ψευδής. Λάβετε υπόψη ότι τα υπάρχοντα αποσυνδεδεμένα προφίλ θα κλειδωθούν και δεν θα είναι προσβάσιμα μετά την ενεργοποίηση αυτής της πολιτικής. Για περισσότερες πληροφορίες, ανατρέξτε στο άρθρο του κέντρου βοήθειας.
+
+      Εάν αυτή η πολιτική δεν έχει διαμορφωθεί ή οριστεί ως ψευδής, ο χρήστης μπορεί να χρησιμοποιήσει το πρόγραμμα περιήγησης χωρίς να συνδεθεί στο <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8586528890725660268">Καθορίζει τους εκτυπωτές που δεν μπορεί να χρησιμοποιήσει ένας χρήστης.
 
       Αυτή η πολιτική χρησιμοποιείται μόνο εάν επιλεγεί η ρύθμιση <ph name="PRINTERS_BLACKLIST" /> για τη λειτουργία <ph name="BULK_PRINTERS_ACCESS_MODE" />.
diff --git a/components/policy/resources/policy_templates_en-GB.xtb b/components/policy/resources/policy_templates_en-GB.xtb
index 5e3430f..89d6eb0 100644
--- a/components/policy/resources/policy_templates_en-GB.xtb
+++ b/components/policy/resources/policy_templates_en-GB.xtb
@@ -497,21 +497,6 @@
       Spell checking can still be performed using a downloaded dictionary; this policy only controls the usage of the online service.
 
       If this setting is not configured then users can choose whether the spell checking service should be used or not.</translation>
-<translation id="2294283832646774959">Configures a list of printers.
-
-      This policy allows administrators to provide printer configurations for
-      their users.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> and <ph name="PRINTER_DESCRIPTION" /> are free-form strings that can be customised for ease of printer selection. <ph name="PRINTER_MANUFACTURER" /> and <ph name="PRINTER_MODEL" /> serve to ease printer identification by end users. They represent the manufacturer and model of the printer. <ph name="PRINTER_URI" /> should be an address reachable from a client computer including the <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> and <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> is optional. If provided, it is used to help de-duplicate <ph name="ZEROCONF_DISCOVERY" /> printers.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> must match one of the strings which represent a <ph name="PRODUCT_NAME" />-supported printer. The string will be used to identify and install the appropriate PPD for the printer. More information can be found at https://support.google.com/chrome?p=noncloudprint.
-
-      Printer setup is completed upon the first use of a printer. PPDs are not downloaded until the printer is used. After that time, frequently used PPDs are cached.
-
-      This policy has no effect on whether users can configure printers on individual devices. It is intended to be supplementary to the configuration of printers by individual users.
-
-      For Active Directory managed devices this policy supports expansion of <ph name="MACHINE_NAME_VARIABLE" /> to the Active Directory machine name or a substring of it. For example, if the machine name is <ph name="MACHINE_NAME_EXAMPLE" />, then <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> would be replaced by the 4 characters starting after the 6th position, i.e. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Note that the position is zero-based.
-      </translation>
 <translation id="2294382669900758280">Video playing in Android apps is not taken into consideration, even if this policy is set to <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Configure the default New Tab page in <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Specify a list of enabled plug-ins</translation>
@@ -624,9 +609,6 @@
           All recent versions of Samba and Windows servers support NTLMv2. This should only be disabled for backwards compatibility and reduces the security of authentication.
 
           If this policy is not set, the default is true and NTLMv2 is enabled.</translation>
-<translation id="2598508021807251719">Configures the locales <ph name="PRODUCT_OS_NAME" /> may be displayed in.
-
-      If this policy is set, the user can only configure <ph name="PRODUCT_OS_NAME" /> to be displayed in one of the locales specified by this policy. If this policy is not set or set to an empty list, <ph name="PRODUCT_OS_NAME" /> can be displayed in all supported UI locales. If this policy is set to a list with invalid values, all invalid values will be ignored. If a user previously configured <ph name="PRODUCT_OS_NAME" /> to be displayed in a locale that is not allowed by this policy, the display locale will be switched to an allowed UI locale the next time the user signs in. If the user had configured preferred locales and one of the preferred locales is allowed by this policy, <ph name="PRODUCT_OS_NAME" /> will switch to this locale. Otherwise, <ph name="PRODUCT_OS_NAME" /> will switch to the first valid value specified by this policy, or to a fallback locale (currently en-US), if this policy only contains invalid entries.</translation>
 <translation id="2604182581880595781">Configure Network File Shares-related policies.</translation>
 <translation id="2623014935069176671">Wait for initial user activity</translation>
 <translation id="262740370354162807">Enable submission of documents to <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -847,6 +829,7 @@
 
           Leaving this policy unset will allow the users to choose the proxy settings on their own.</translation>
 <translation id="3205825995289802549">Maximise the first browser window on first run</translation>
+<translation id="3211426942294667684">Browser sign in settings</translation>
 <translation id="3213821784736959823">Controls whether the built-in DNS client is used in <ph name="PRODUCT_NAME" />.
 
       If this policy is set to true, the built-in DNS client will be used, if available.
@@ -1124,6 +1107,15 @@
       If you do not set this policy, <ph name="PRODUCT_NAME" /> will use its usual default directory (platform-specific).
 
       See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.</translation>
+<translation id="3904459740090265495">This policy controls the sign-in behaviour of the browser. It allows you to specify if the user can sign in to <ph name="PRODUCT_NAME" /> with their account and use account-related services such as Chrome Sync.
+
+      If the policy is set to 'Disable browser sign-in', the user cannot sign in to the browser and use account-based services. In this case browser-level features such as Chrome Sync cannot be used and will be unavailable. If the user was signed in and the policy is set 'Disabled', they will be signed out the next time that they run Chrome but their local profile data such as bookmarks, passwords, etc. will stay preserved. The user will still be able to sign in to and use Google web services such as Gmail.
+
+      If the policy is set to 'Enable browser sign-in', the user is allowed to sign in to the browser and is automatically signed in to the browser when signed in to Google web services such as Gmail. Being signed in to the browser means that the user's account information will be kept by the browser. However, it does not mean that Chrome Sync will be turned on per default; the user must separately opt in to use this feature. Enabling this policy will prevent the user from turning off the setting that allows browser sign-in. To control the availability of Chrome Sync, use the 'SyncDisabled' policy.
+
+      If the policy is set to 'Force browser sign-in', the user is presented with an account selection dialogue and has to choose and sign in to an account to use the browser. This ensures that for managed accounts the policies associated with the account are applied and enforced. By default this turns on Chrome Sync for the account, except for the case when sync was disabled by the domain admin or via the 'SyncDisabled' policy. The default value of BrowserGuestModeEnabled will be set to false. Note: Existing unsigned profiles will be locked and inaccessible after enabling this policy. For more information, see help centre article: https://support.google.com/chrome/a/answer/7572556.
+
+      If this policy is not set then the user can decide if they want to enable the browser sign-in option and use it as they see fit.</translation>
 <translation id="3911737181201537215">This policy has no effect on the logging done by Android.</translation>
 <translation id="391531815696899618">Disables Google Drive syncing in the <ph name="PRODUCT_OS_NAME" /> Files app when set to True. In that case, no data is uploaded to Google Drive.
 
@@ -1174,6 +1166,7 @@
 
       Note: When the <ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME" /> policy is set to <ph name="BLOCK_GEOLOCATION_SETTING" />, this policy is ignored and Google Location services are always disabled.</translation>
 <translation id="408029843066770167">Allow queries to a Google time service</translation>
+<translation id="408076456549153854">Enable browser sign-in</translation>
 <translation id="4088589230932595924">Incognito mode forced.</translation>
 <translation id="4088983553732356374">Allows you to set whether websites are allowed to set local data. Setting local data can be either allowed for all websites or denied for all websites.
 
@@ -1484,6 +1477,7 @@
 <translation id="4962262530309732070">If this policy is set to true or not configured, <ph name="PRODUCT_NAME" /> will allow Add Person from the user manager.
 
       If this policy is set to false, <ph name="PRODUCT_NAME" /> will not allow creation of new profiles from the user manager.</translation>
+<translation id="4970855112942626932">Disable browser sign-in</translation>
 <translation id="4971529314808359013">Allows you to specify a list of URL patterns that specify sites for which <ph name="PRODUCT_NAME" /> should automatically select a client certificate, if the site requests a certificate.
 
           The value must be an array of stringified JSON dictionaries. Each dictionary must have the form { "pattern": "$URL_PATTERN", "filter" : $FILTER }, where $URL_PATTERN is a content setting pattern. $FILTER restricts from which client certificates the browser will automatically select. Independent of the filter, only certificates will be selected that match the server's certificate request. If $FILTER has the form { "ISSUER": { "CN": "$ISSUER_CN" } }, additionally only client certificates are selected that are issued by a certificate with the CommonName $ISSUER_CN. If $FILTER is the empty dictionary {}, the selection of client certificates is not additionally restricted.
@@ -1520,13 +1514,6 @@
 <translation id="5130288486815037971">Whether RC4 cipher suites in TLS are enabled</translation>
 <translation id="5141670636904227950">Set the default screen magnifier type enabled on the login screen</translation>
 <translation id="5142301680741828703">Always render the following URL patterns in <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Determine the hostname of the device used in DHCP requests.
-
-      If this policy is set to a non-empty string, that string will be used as the device hostname during DHCP request.
-
-      The string can contain variables ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} that would be replaced with values on the device before using as a hostname. Resulting substitution should be a valid hostname (per RFC 1035, section 3.1).
-
-      If this policy is not set, or the value after substitution is not a valid hostname, no hostname will be set in DHCP request. </translation>
 <translation id="5148753489738115745">Allows you to specify additional parameters that are used when <ph name="PRODUCT_FRAME_NAME" /> launches <ph name="PRODUCT_NAME" />.
 
           If this policy is not set the default command line will be used.</translation>
@@ -1780,7 +1767,6 @@
 <translation id="5835124959204887277">Specifies URLs and domains for which no prompt will be shown when attestation certificates from Security Keys are requested. Additionally, a signal will be sent to the Security Key indicating that individual attestation may be used. Without this, users will be prompted in Chrome 65+ when sites request attestation of Security Keys.
 
       URLs (like https://example.com/some/path) will only match as U2F appIDs. Domains (like example.com) only match as webauthn RP IDs. Thus, to cover both U2F and webauthn APIs for a given site, both the appID URL and domain would need to be listed.</translation>
-<translation id="5835412847081687053">Configure the allowed UI locales in a user session</translation>
 <translation id="5836064773277134605">Restrict the UDP port range used by the remote access host</translation>
 <translation id="5862253018042179045">Set the default state of the spoken feedback accessibility feature on the login screen.
 
@@ -1902,6 +1888,7 @@
 
       If this policy is not configured, the list of a detachable USB devices is empty.</translation>
 <translation id="6083631234867522991">Windows (Windows clients):</translation>
+<translation id="6091233616732024397">Force users to sign-in to use the browser</translation>
 <translation id="6093156968240188330">Allow remote users to interact with elevated windows in remote assistance sessions</translation>
 <translation id="6095999036251797924">Specifies the length of time without user input after which the screen is locked when running on AC power or battery.
 
@@ -1976,6 +1963,11 @@
 <translation id="6368011194414932347">Configure the home page URL</translation>
 <translation id="6368403635025849609">Allow JavaScript on these sites</translation>
 <translation id="6376659517206731212">Can Be Mandatory</translation>
+<translation id="6377355597423503887">This policy is deprecated. Consider using BrowserSignin instead.
+
+      Allows the user to sign in to <ph name="PRODUCT_NAME" />.
+
+      If you set this policy, you can configure whether a user is allowed to sign in to <ph name="PRODUCT_NAME" />. Setting this policy to 'False' will prevent apps and extensions that use the chrome.identity API from functioning, so you may want to use SyncDisabled instead.</translation>
 <translation id="6378076389057087301">Specify whether audio activity affects power management</translation>
 <translation id="637934607141010488">Report list of device users that have recently logged in.
 
@@ -2922,6 +2914,11 @@
 <translation id="8548832052135586762">Sets printing to colour only, monochrome only or no colour mode restriction. Unset policy is treated as no restriction.</translation>
 <translation id="8549772397068118889">Warn when visiting sites outside of content packs</translation>
 <translation id="8566842294717252664">Hide the web store from the New Tab Page and app launcher</translation>
+<translation id="857369585509260201">This policy is deprecated. Consider using BrowserSignin instead.
+
+      If this policy is set to true, the user has to sign in to <ph name="PRODUCT_NAME" /> with their profile before using the browser. And the default value of BrowserGuestModeEnabled will be set to false. Note: Existing unsigned profiles will be locked and inaccessible after enabling this policy. For more information, see help centre article.
+
+      If this policy is set to false or not configured, user can use the browser without sign in to <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8586528890725660268">Specifies the printers which a user cannot use.
 
       This policy is only used if <ph name="PRINTERS_BLACKLIST" /> is chosen for <ph name="BULK_PRINTERS_ACCESS_MODE" />.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 79b58a8c..6f711dfd 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -480,20 +480,6 @@
       Aún así, la revisión ortográfica se puede llevar a cabo utilizando un diccionario descargado, puesto que esta política solo controla el uso del servicio en línea.
 
       Si esta opción no se configura, los usuarios pueden elegir utilizar o no el servicio de revisión ortográfica.</translation>
-<translation id="2294283832646774959">Configura una lista de impresoras.
-
-      Esta política permite que los administradores proporcionen configuraciones de impresoras para sus usuarios.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> y <ph name="PRINTER_DESCRIPTION" /> son strings con formato libre que pueden personalizarse para facilitar la selección de impresoras. <ph name="PRINTER_MANUFACTURER" /> y <ph name="PRINTER_MODEL" /> sirven para que los usuarios finales puedan identificar las impresoras fácilmente y representan al fabricante y el modelo de la impresora. <ph name="PRINTER_URI" /> debe ser una dirección que se pueda contactar desde la computadora cliente, que incluya <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> y <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> es opcional. Si se proporciona, se usa para ayudar con la anulación de las impresoras <ph name="ZEROCONF_DISCOVERY" /> duplicadas.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> debe coincidir con uno de los strings que representan una impresora compatible con <ph name="PRODUCT_NAME" />. El string se usará para identificar e instalar el PPD correspondiente para la impresora. Para obtener más información, visita https://support.google.com/chrome?p=noncloudprint.
-
-      La configuración de la impresora se completa cuando se usa por primera vez. Los PPD no se descargan hasta que se usa la impresora. Luego, los PPD que se usan con mayor frecuencia se almacenan en caché.
-
-      Esta política no afecta la capacidad del usuario para configurar impresoras en dispositivos individuales. Su objetivo es complementar la configuración de impresoras a cargo de usuarios individuales.
-
-      Para los dispositivos administrados con Active Directory, esta política es compatible con la expansión de <ph name="MACHINE_NAME_VARIABLE" /> al nombre de la máquina de Active Directory o un substring de él. Por ejemplo, si el nombre de la máquina es <ph name="MACHINE_NAME_EXAMPLE" />, entonces <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> se reemplazará con los 4 caracteres a partir de la sexta posición, es decir, <ph name="MACHINE_NAME_PART_EXAMPLE" />. Ten en cuenta que esta posición incluye el cero.
-      </translation>
 <translation id="2294382669900758280">No se tiene en cuenta la reproducción de video en las apps de Android, incluso si esta política se establece como <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Configura la página predeterminada Nueva pestaña en <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Especificar una lista de complementos habilitados</translation>
@@ -598,9 +584,6 @@
           Todas las versiones recientes de servidores de Samba y Windows son compatibles con NTLMv2. Esta política solo debe inhabilitarse para garantizar la compatibilidad con versiones anteriores. Además, reduce la seguridad de la autenticación.
 
           Si no se establece esta política, el valor predeterminado es verdadero y se habilita NTLMv2.</translation>
-<translation id="2598508021807251719">Permite configurar los idiomas en que se puede mostrar <ph name="PRODUCT_OS_NAME" />.
-
-      Si se establece esta política, el usuario solo puede configurar <ph name="PRODUCT_OS_NAME" /> para que se muestre en uno de los idiomas especificados por esta política. Si se establece con una lista vacía o no se establece, <ph name="PRODUCT_OS_NAME" /> se puede mostrar en todos los idiomas de IU compatibles. Si se establece con una lista de valores no válidos, se ignorarán todos estos. Si un usuario configuró anteriormente <ph name="PRODUCT_OS_NAME" /> para que se mostrara en un idioma de IU que no se permite según esta política, el idioma de visualización se cambiará a uno permitido la próxima vez que acceda el usuario. Si este configuró los idiomas preferidos y la política permite uno de ellos, <ph name="PRODUCT_OS_NAME" /> se cambiará a ese idioma. De lo contrario, <ph name="PRODUCT_OS_NAME" /> se cambiará al primer valor válido que especifica esta política o a un idioma alternativo (actualmente en-US) si esta política solo contiene entradas no válidas.</translation>
 <translation id="2604182581880595781">Configura las políticas relacionadas con la función "Network File Shares".</translation>
 <translation id="2623014935069176671">Esperar actividad inicial del usuario</translation>
 <translation id="262740370354162807">Habilitar el envío de documentos a <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1466,13 +1449,6 @@
 <translation id="5130288486815037971">Si se habilitan los conjuntos de cifrado de RC4 en TLS</translation>
 <translation id="5141670636904227950">Establece el tipo de lupa predeterminado habilitado en la pantalla de acceso.</translation>
 <translation id="5142301680741828703">Siempre procesar los siguientes patrones de URL en <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Determina el nombre de host del dispositivo que se usa en solicitudes de DHCP.
-
-      Si se establece esta política como una string no vacía, esa string se usará como el nombre de host del dispositivo para la solicitud de DHCP.
-
-      La string puede contener variables las ${ASSET_ID}, ${SERIAL_NUM} o ${MAC_ADDR}, que se reemplazarán con valores del dispositivo antes de usarse como nombre de host. La sustitución resultante debe ser un nombre de host válido (según RFC 1035, sección 3.1).
-
-      Si no se establece esta política, o si el valor que se obtiene después de la sustitución no es un nombre de host válido, no se establecerá ningún nombre de host en la solicitud de DHCP. </translation>
 <translation id="5148753489738115745">Te permite especificar los parámetros adicionales que se utilizan cuando <ph name="PRODUCT_FRAME_NAME" /> inicia <ph name="PRODUCT_NAME" />.
 
           Si no se configura esta política, se utilizará la línea de comandos predeterminada.</translation>
@@ -1694,7 +1670,6 @@
 <translation id="5835124959204887277">Especifica los dominios y URL para los cuales no se mostrarán mensajes cuando se solicitan certificados de atestación de las llaves de seguridad. Además, se enviará una señal a la llave de seguridad para indicar que se puede usar la atestación individual. Sin esto, se mostrará un mensaje a los usuarios con Chrome 65 y versiones posteriores cuando los sitios soliciten atestaciones de llaves de seguridad.
 
       Las URL (como https://ejemplo.com/una/ruta) solo coincidirán como appID de U2F. Los dominios (como ejemplo.com) solo coincidirán como RP ID de webauthn. Por lo tanto, para abarcar las API de U2F y webauthn para un determinado sitio, deben enumerarse el dominio y la URL de appID.</translation>
-<translation id="5835412847081687053">Configurar los idiomas de IU permitidos en una sesión de usuario</translation>
 <translation id="5836064773277134605">Restringir el intervalo de puertos UDP que utiliza el host de acceso remoto</translation>
 <translation id="5862253018042179045">Establece el estado predeterminado de la función de accesibilidad de los comentarios por voz en la pantalla de acceso.
 
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index d17bbb6..619f3dd 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -493,21 +493,6 @@
       Aun así, la función de corrección ortográfica se puede utilizar si se descarga un diccionario, ya que esta política solo controla el uso del servicio online.
 
       Si no se configura esta opción, los usuarios pueden decidir si quieren utilizar o no el servicio de corrección ortográfica.</translation>
-<translation id="2294283832646774959">Configura una lista de impresoras.
-
-      Esta política permite que los administradores proporcionen opciones de configuración de impresoras a
-      sus usuarios.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> y <ph name="PRINTER_DESCRIPTION" /> son cadenas de formato libre que se pueden personalizar para que la selección de impresoras sea sencilla. <ph name="PRINTER_MANUFACTURER" /> y <ph name="PRINTER_MODEL" /> permiten que la identificación de la impresora sea sencilla para los usuarios finales. Representan el fabricante y el modelo de la impresora. <ph name="PRINTER_URI" /> debería ser una dirección que esté disponible desde un ordenador cliente (incluidos <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> y <ph name="URI_QUEUE" />). <ph name="PRINTER_UUID" /> es opcional. Si se especifica, se utiliza para anular el duplicado de impresoras <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> debe coincidir con una de las cadenas que representan una impresora compatible <ph name="PRODUCT_NAME" />. La cadena se usará para identificar e instalar los archivos PPD adecuados para la impresora. Consulta más información en la página https://support.google.com/chrome?p=noncloudprint&amp;hl=es.
-
-      La configuración de la impresora se completa la primera vez que se utiliza. Los archivos PPD no se descargan hasta que la impresora se usa. Después de ese momento, los archivos PPD que se utilizan con frecuencia se almacenan en caché.
-
-      Esta política no afecta a la capacidad de los usuarios para configurar impresoras en determinados dispositivos. La política se ha diseñado con el objetivo de ser complementaria a la configuración de impresoras por parte de los usuarios.
-
-      En los dispositivos administrados de Active Directory, esta política admite una expansión de <ph name="MACHINE_NAME_VARIABLE" /> al nombre de máquina de Active Directory o una subcadena de este. Por ejemplo, si el nombre de máquina es <ph name="MACHINE_NAME_EXAMPLE" />, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> se sustituiría por 4 caracteres después de la sexta posición, es decir, <ph name="MACHINE_NAME_PART_EXAMPLE" />. Ten en cuenta que la posición se basa en cero.
-      </translation>
 <translation id="2294382669900758280">La reproducción de vídeo en las aplicaciones para Android no se tiene en cuenta, aunque se haya asignado el valor <ph name="TRUE" /> a esta política.</translation>
 <translation id="2298647742290373702">Configura la página Nueva pestaña predeterminada de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Especificar una lista de complementos habilitados</translation>
@@ -620,9 +605,6 @@
           Todas las versiones recientes de los servidores Windows y Samba admiten la autenticación NTLMv2. Solo debe inhabilitarse para obtener compatibilidad con versiones anteriores, lo cual reduce la seguridad a la hora de autenticarse.
 
           Si no se le asigna ningún valor a esta política, se asignará el valor predeterminado "true" y la autenticación NTLMv2 se habilitará.</translation>
-<translation id="2598508021807251719">Establece las configuraciones regionales en las que puede mostrarse <ph name="PRODUCT_OS_NAME" />.
-
-      Si asigna a esta política una lista de configuraciones regionales, el usuario solo podrá mostrar <ph name="PRODUCT_OS_NAME" /> en una de esas configuraciones. Si no asigna ninguna configuración regional a esta política o le asigna una lista vacía, <ph name="PRODUCT_OS_NAME" /> se podrá mostrar en cualquier configuración de UI admitida. Si se asigna a esta política una lista con configuraciones regionales no válidas, los valores que no sean válidos se ignorarán. Si un usuario ya había configurado <ph name="PRODUCT_OS_NAME" /> anteriormente en un idioma no permitido por esta política, la configuración regional se cambiará a otra permitida la próxima vez que el usuario inicie sesión. Si el usuario había establecido configuraciones regionales de preferencia y una de ellas está permitida por esta política, <ph name="PRODUCT_OS_NAME" /> se mostrará en dicha configuración. De lo contrario, <ph name="PRODUCT_OS_NAME" /> se cambiará a la primera configuración regional válida especificada por esta política, o bien a una alternativa (actualmente en-US) si ninguna de las entradas de la política es válida.</translation>
 <translation id="2604182581880595781">Configura las políticas relacionadas con el uso compartido de archivos del sistema.</translation>
 <translation id="2623014935069176671">Esperar actividad inicial del usuario</translation>
 <translation id="262740370354162807">Habilitar el envío de documentos a <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1520,13 +1502,6 @@
 <translation id="5130288486815037971">Indicar si se han habilitado los conjuntos de cifrado de RC4 en TLS</translation>
 <translation id="5141670636904227950">Establecer el tipo de lupa predeterminada habilitada en la pantalla de inicio de sesión</translation>
 <translation id="5142301680741828703">Mostrar siempre los patrones de URL indicados a continuación en <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Determina el nombre de host del dispositivo que se utiliza en las solicitudes DHCP.
-
-      Si se asigna una cadena que no esté vacía a esta política, esa cadena se utilizará como nombre de host del dispositivo durante las solicitudes DHCP.
-
-      La cadena puede incluir variables ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} que se sustituirían por valores del dispositivo antes de que se utilice como nombre de host. El valor que resulte de la sustitución debe ser un nombre de host válido (de acuerdo con la sección 3.1 de la RFC 1035).
-
-      Si no se asigna ningún valor a esta política o el valor que resulta después de la sustitución no es un nombre de host válido, no se establecerá ningún nombre de host en la solicitud DHCP. </translation>
 <translation id="5148753489738115745">Te permite especificar los parámetros adicionales que se utilizan cuando <ph name="PRODUCT_FRAME_NAME" /> inicia <ph name="PRODUCT_NAME" />.
 
           Si no se establece esta política, se utilizará la línea de comandos predeterminada.</translation>
@@ -1779,7 +1754,6 @@
 <translation id="5835124959204887277">Especifica las URL y los dominios para los que no se muestra ningún mensaje cuando se solicitan certificados de confirmación de las llaves de seguridad. Asimismo, se envía una señal a la llave de seguridad para indicar que es posible que se utilice esa confirmación individual. Sin esta política, se muestra un mensaje a los usuarios de Chrome 65 y versiones posteriores cuando los sitios web soliciten la confirmación de las llaves de seguridad.
 
       Las URL (como https://example.com/una/ruta) solo se identifican como appIDs U2F, mientras que los dominios (como example.com) se identifican únicamente como IDs RP de WebAuthn. Por ello, para incluir tanto las API WebAuthn como U2F de un determinado sitio web, se deben indican la URL appID y el dominio.</translation>
-<translation id="5835412847081687053">Configurar las configuraciones regionales de UI permitidas en una sesión de usuario</translation>
 <translation id="5836064773277134605">Restringe el intervalo de puertos UDP utilizado por el host de acceso remoto</translation>
 <translation id="5862253018042179045">Establece el estado predeterminado de la función de accesibilidad de comentarios por voz en la pantalla de inicio de sesión.
 
diff --git a/components/policy/resources/policy_templates_et.xtb b/components/policy/resources/policy_templates_et.xtb
index fa08517..8a634081 100644
--- a/components/policy/resources/policy_templates_et.xtb
+++ b/components/policy/resources/policy_templates_et.xtb
@@ -499,21 +499,6 @@
       Õigekirjakontrolli saab siiski teha, kasutades selleks allalaaditud sõnastikku. Reegel haldab ainult veebiteenuse kasutamist.
 
       Kui seade pole seadistatud, siis saavad kasutajad valida, kas kasutada õigekirjakontrolli teenust või mitte.</translation>
-<translation id="2294283832646774959">Seadistab printerite loendi.
-
-      See reegel võimaldab administraatoritel kasutajatele printerite seadistusi
-      pakkuda.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> ja <ph name="PRINTER_DESCRIPTION" /> on vabas vormis stringid, mida saab printeri valimise hõlbustamiseks kohandada. <ph name="PRINTER_MANUFACTURER" /> ja <ph name="PRINTER_MODEL" /> lihtsustavad printeri tuvastamist lõppkasutajatele. Need näitavad printeri tootjat ja mudelit. <ph name="PRINTER_URI" /> peab olema aadress, mida saab külastada klientarvutist, sh <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> ja <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> on valikuline. Selle olemasolul aitab see seadistus printerite <ph name="ZEROCONF_DISCOVERY" /> duplikaate eemaldada.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> peab ühtima mõne stringiga, mis esindab teenuses <ph name="PRODUCT_NAME" /> toetatud printerit. Stringi kasutatakse printeri vastava PPD tuvastamiseks ja installimiseks. Lisateavet leiate aadressilt https://support.google.com/chrome?p=noncloudprint.
-
-      Printeri seadistus viiakse lõpule printeri esimesel kasutuskorral. PPD-sid ei laadita alla enne, kui printerit kasutatakse. Pärast seda salvestatakse sageli kasutatud PPD-d vahemällu.
-
-      Reegel ei mõjuta seda, kas kasutajad saavad individuaalsetes seadmetes printereid seadistada. See on mõeldud individuaalsete kasutajate printerite seadistusi täiendama.
-
-      Active Directory hallatavate seadmete puhul toetab see reegel seadme <ph name="MACHINE_NAME_VARIABLE" /> laiendamist Active Directory seadme nimele või selle alamstringile. Näiteks kui seadme nimi on <ph name="MACHINE_NAME_EXAMPLE" />, siis asendatakse <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> nelja tähemärgiga, mis algab pärast kuuendat märki (nt <ph name="MACHINE_NAME_PART_EXAMPLE" />). Pange tähele, et loendamist alustatakse nullist.
-      </translation>
 <translation id="2294382669900758280">Video esitamist Androidi rakendustes ei arvestata, isegi kui reegli väärtuseks on määratud <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Seadistab uue vaikevahelehe teenuses <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Lubatud pistikprogrammide loendi määramine</translation>
@@ -625,9 +610,6 @@
           Kõik hiljutised Samba ja Windowsi serverid toetavad NTLMv2. See tuleks keelata ainult tagasiulatuva ühilduvuse puhul ja see vähendab autentimise turvalisust.
 
           Kui see reegel on määramata, siis on vaikeväärtus Tõene ja NTLMv2 on lubatud.</translation>
-<translation id="2598508021807251719">Seadistab lokaadid, kus tohib operatsioonisüsteemi <ph name="PRODUCT_OS_NAME" /> kuvada.
-
-      Kui reegel on määratud, saab kasutaja seadistada operatsioonisüsteemi <ph name="PRODUCT_OS_NAME" /> nii, et seda tohiks kuvada ainult selle reegliga määratud lokaatides. Kui reegel on määramata või määratud on tühi loend, tohib operatsioonisüsteemi <ph name="PRODUCT_OS_NAME" /> kuvada kõikides toetatud lokaatides. Kui reegli jaoks on määratud sobimatute väärtustega loend, eiratakse kõiki sobimatuid väärtusi. Kui kasutaja oli operatsioonisüsteemis <ph name="PRODUCT_OS_NAME" /> valinud kuvatava keele, mis ei ole selle reegli kohaselt lubatud, määratakse kasutaja järgmisel sisselogimisel lubatud kuvatav lokaat. Kui kasutaja oli seadistanud eelistatud lokaadid ja üks eelistatud lokaatidest on selle reegli alusel lubatud, aktiveeritakse operatsioonisüsteemis <ph name="PRODUCT_OS_NAME" /> see lokaat. Muul juhul kasutatakse operatsioonisüsteemis <ph name="PRODUCT_OS_NAME" /> reegli esimest sobivat väärtust või varulokaati (praegu en-US), kui reegel sisaldab ainult sobimatuid kirjeid.</translation>
 <translation id="2604182581880595781">Failide võrguhoidlatega seotud reeglite seadistamine.</translation>
 <translation id="2623014935069176671">Kasutaja esmase tegevuse ootamine</translation>
 <translation id="262740370354162807">Luba dokumentide saatmine teenusesse <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1518,13 +1500,6 @@
 <translation id="5130288486815037971">Kas RC4 šifreerimiskomplektid TLS-is on lubatud?</translation>
 <translation id="5141670636904227950">Lubage ekraaniluubi vaiketüüp sisselogimisekraanil</translation>
 <translation id="5142301680741828703">Renderda alati rakenduses <ph name="PRODUCT_FRAME_NAME" /> järgmiste URL-ide mustrid</translation>
-<translation id="5147665094011258322">Määrake DHCP-päringutes kasutatava seadme hostinimi.
-
-      Kui selle reegli väärtuseks määratakse mõni täidetud string, kasutatakse seda stringi DHCP-päringu ajal seadme hostinimena.
-
-      String võib sisaldada muutujaid ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, mis asendatakse seadmes väärtustega enne hostinimena kasutamist. Nende asendamisel peaks tekkima kehtiv hostinimi (eeskirja RFC 1035 jaotise 3.1 kohaselt).
-
-      Kui see reegel on määramata või pärast asendamist tekkiv väärtus ei ole kehtiv hostinimi, siis DHCP-päringus hostinime ei määrata. </translation>
 <translation id="5148753489738115745">Võimaldab teil määrata täiendavad parameetrid, mida kasutatakse siis, kui <ph name="PRODUCT_FRAME_NAME" /> käivitab rakenduse <ph name="PRODUCT_NAME" />.
 
           Kui jätate eeskirjad määramata, siis kasutatakse vaikekäsurida.</translation>
@@ -1774,7 +1749,6 @@
 <translation id="5835124959204887277">Määrab URL-id ja domeenid, mille puhul viipa ei kuvata, kui turvavõtmetelt nõutakse atesteerimise sertifikaate. Lisaks saadetakse turvavõtmele signaal, mis näitab, et kasutada võib individuaalset atesteerimist. Ilma selleta esitatakse kasutajatele Chrome'i versioonis 65 ja uuemates versioonides viip, kui saidid nõuavad turvavõtmete atesteerimist.
 
       URL-id (nt https://example.com/mingi/tee) vastendatakse ainul U2F appID-dega. Domeenid (nt example.com) vastendatakse ainult webauthn RP ID-dena. Seega antud saidil nii U2F-i kui ka webauthn API-de kasutamiseks tuleb loendisse lisada nii appID URL kui ka domeen.</translation>
-<translation id="5835412847081687053">Kasutajaseansis lubatud kasutajaliidese lokaatide seadistamine</translation>
 <translation id="5836064773277134605">Piira kaugjuurdepääsuhosti kasutatavate UDP-portide vahemikku</translation>
 <translation id="5862253018042179045">Sisselogimisekraanil suulise tagasiside hõlbustusfunktsiooni vaikeoleku määramine.
 
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb
index 9992804..5d9d954 100644
--- a/components/policy/resources/policy_templates_fa.xtb
+++ b/components/policy/resources/policy_templates_fa.xtb
@@ -484,20 +484,6 @@
       غلط‌گیر املا می‌تواند با استفاده از واژه‌نامه دانلودشده انجام شود؛ این خط‌مشی فقط استفاده سرویس آنلاین را کنترل می‌کند.
 
       اگر این تنظیم پیکربندی نشده باشد کاربران می‌توانند انتخاب کنند آیا سرویس غلط‌گیر املا باید استفاده شود یا نه.</translation>
-<translation id="2294283832646774959">‏فهرستی از چاپگرها را پیکربندی می‌کند.
-
-      این خط‌مشی به سرپرستان سیستم اجازه می‌دهد پیکربندی‌های چاپگر را برای کاربرانشان فراهم کنند.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> و <ph name="PRINTER_DESCRIPTION" /> رشته‌هایی به‌شکل آزاد هستند که می‌توانند برای سهولت در انتخاب چاپگر سفارشی‌ شوند. <ph name="PRINTER_MANUFACTURER" /> و <ph name="PRINTER_MODEL" /> که سازنده و مدل چاپگر را نشان می‌دهند، شناسایی چاپگر را توسط کاربران نهایی تسهیل می‌کنند. <ph name="PRINTER_URI" /> باید نشانی قابل‌دسترس از رایانه کارخواه شامل <ph name="URI_SCHEME" />، <ph name="URI_PORT" /> و <ph name="URI_QUEUE" /> باشد. <ph name="PRINTER_UUID" /> اختیاری است. اگر ارائه شود، برای جلوگیری از تکرار چاپگرهای <ph name="ZEROCONF_DISCOVERY" /> استفاده می‌شود.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> باید با یکی از رشته‌هایی که نشان‌دهنده چاپگر پشتیبانی‌شده توسط <ph name="PRODUCT_NAME" /> است، مطابقت داشته باشد. این رشته برای تشخیص و نصب PPD مناسب برای چاپگر استفاده می‌شود. در https://support.google.com/chrome?p=noncloudprint اطلاعات بیشتری پیدا می‌کنید.
-
-      راه‌اندازی چاپگر با اولین استفاده کامل می‌شود.  تا از چاپگر استفاده نشود، فایل‌های PPD بارگیری نمی‌شود.  پس از آن، فایل‌های PPD که اغلب استفاده می‌شود، در حافظه پنهان ذخیره می‌شود.
-
-      این خط‌مشی، توانایی کاربران را برای پیکربندی چاپگر در دستگاه‌های فردی تحت تأثیر قرار نمی‌دهد.  این خط‌مشی به‌عنوان مکملی برای پیکربندی چاپگرها توسط کاربران مجزا درنظر گرفته شده است.
-
-      برای دستگاه‌های مدیریت‌شده با Active Directory، این خط‌مشی از گسترش <ph name="MACHINE_NAME_VARIABLE" /> به نام رایانه Active Directory یا رشته‌ای فرعی از آن پشتیبانی می‌کند. برای مثال، اگر نام رایانه <ph name="MACHINE_NAME_EXAMPLE" /> باشد، ۴ نویسه بعد از موقعیت ششم با جایگزین <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> می‌شوند (یعنی: <ph name="MACHINE_NAME_PART_EXAMPLE" />). توجه کنید این موقعیت برمبنای صفر است.
-      </translation>
 <translation id="2294382669900758280">‏حتی اگر خط‌مشی روی <ph name="TRUE" /> تنظیم شده باشد، پخش ویدیو در برنامه‌های Android درنظر گرفته نشده است.</translation>
 <translation id="2298647742290373702">پیکربندی صفحه «برگه جدید» پیش‌فرض در <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">تعیین فهرست افزایه‌های فعال شده</translation>
@@ -602,9 +588,6 @@
           همه نسخه‌های جدید سرورهای Samba و Windows از NTLMv2 پشتیبانی می‌کنند. این مورد فقط برای سازگاری با نسل قبل باید غیرفعال شود و ایمنی احراز هویت را کاهش می‌دهد.
 
           اگر این خط‌مشی تنظیم نشده باشد، پیش‌فرض درست است و NTLMv2 فعال می‌شود.</translation>
-<translation id="2598508021807251719">منطقه‌های زبانی را که <ph name="PRODUCT_OS_NAME" /> می‌تواند به آن‌ها نشان داده شود پیکربندی می‌کند.
-
-      اگر این خط‌مشی تنظیم شود، کاربر فقط می‌تواند <ph name="PRODUCT_OS_NAME" /> را به‌گونه‌ای پیکربندی کند که به یکی از منطقه‌های زبانی مشخص‌شده توسط این خط‌مشی نمایش داده شود. اگر این خط‌مشی تنظیم نشود یا روی فهرستی خالی تنظیم شود، <ph name="PRODUCT_OS_NAME" /> می‌تواند در همه منطقه‌های زبانی رابط کاربری پشتیبانی‌شده نمایش داده شود. اگر این خط‌مشی روی فهرستی حاوی مقادیر نامعتبر تنظیم شود، همه مقادیر نامعتبر نادیده گرفته می‌شوند. اگر کاربری قبلاً <ph name="PRODUCT_OS_NAME" /> را طوری پیکربندی کرده باشد که به منطقه زبانی غیرمجاز توسط این خط‌مشی، نمایش داده شود، در ورود به سیستم بعدی کاربر، منطقه زبانی نمایش‌داده‌شده به منطقه زبانی مجاز رابط کاربری تغییر می‌کند. اگر کاربر منطقه‌های زبانی ترجیحی را پیکربندی کرده باشد و یکی از منطقه‌های زبانی ترجیحی توسط این خط‌مشی مجاز شده باشد، <ph name="PRODUCT_OS_NAME" /> به آن منطقه زبانی تغییر وضعیت می‌دهد. درغیر این‌صورت، <ph name="PRODUCT_OS_NAME" /> به اولین مقدار معتبر مشخص‌شده توسط این خط‌مشی یا اگر این خط‌مشی تنها حاوی ورودی‌های نامعتبر باشد، به منطقه‌زبانی پیش‌فرض (درحال‌حاضر انگلیسی آمریکایی) تغییر‌ می‌کند.</translation>
 <translation id="2604182581880595781">‏پیکربندی خط‌مشی‌های مرتبط با Network File Shares.</translation>
 <translation id="2623014935069176671">در انتظار فعالیت اولیه کاربر</translation>
 <translation id="262740370354162807">فعال کردن ارسال اسناد به <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1464,13 +1447,6 @@
 <translation id="5130288486815037971">‏مجموعه‌های رمز RC4 در TLS فعال شوند یا خیر</translation>
 <translation id="5141670636904227950">تنظیم نوع ذره‌بین پیش‌فرض صفحه نمایش، به کار انداخته شده در صفحه ورود به سیستم</translation>
 <translation id="5142301680741828703">این الگوی های نشانی وب همیشه در <ph name="PRODUCT_FRAME_NAME" /> اجرا و تفسیر شوند</translation>
-<translation id="5147665094011258322">‏نام میزبان دستگاهی را که در درخواست‌های DHCP استفاده شده است مشخص کنید.
-
-      اگر این خط‌‌مشی روی رشته‌ای غیرخالی تنظیم شود، آن رشته هنگام درخواست DHCP، به‌عنوان نام میزبان دستگاه استفاده می‌شود.
-
-      رشته می‌‌تواند حاوی متغیرهای {ASSET_ID} ،${SERIAL_NUM} ،${MAC_ADDR}$ باشد، که پیش از استفاده به‌عنوان نام میزبان با مقادیر دستگاه جایگزین می‌شوند. مورد جایگزین باید نام میزبان معتبری (براساس RFC ۱۰۳۵، بخش ۳.۱) باشد.
-
-      اگر این خط‌مشی تنظیم نشود یا مقدار بعد از جایگزینی نام میزبان معتبری نباشد، هیچ نام میزبانی در درخواست DHCP تنظیم نخواهد شد. </translation>
 <translation id="5148753489738115745">به شما اجازه می‌دهد تا پارامترهایی را مشخص کنید که هنگام <ph name="PRODUCT_FRAME_NAME" />راه‌اندازی <ph name="PRODUCT_NAME" /> استفاده می‌شوند.
 
           اگر این خط‌مشی تعیین نشود خط فرمان پیش‌فرض استفاده خواهد شد.</translation>
@@ -1696,7 +1672,6 @@
 <translation id="5835124959204887277">‏نشانی‌های وب و دامنه‌هایی را مشخص می‌کند که در هنگام درخواست تأیید گواهی‌ها از «کلیدهای امنیتی»، درخواستی برای آن‌ها نمایش داده نمی‌شود. به‌علاوه، سیگنالی به «کلید امنیتی» ارسال می‌شود که نشان می‌دهد ممکن است تأیید هویت مجزا استفاده شود. بدون این مورد، وقتی سایت‌ها تأیید «کلیدهای امنیتی» را درخواست می‌کنند، از کاربران در Chrome نسخه ۶۵ و بالاتر درخواست می‌شود.
 
       نشانی‌های وب (مثلاً https://example.com/some/path) فقط به‌عنوان شناسه‌های برنامه U2F مطابقت پیدا می‌کنند. دامنه‌ها (مانند example.com) فقط به‌عنوان شناسه‌های RP‌ مربوط به تأیید وب مطابقت پیدا می‌کنند. بنابراین، برای اینکه هم U2F و هم رابط‌های برنامه‌نویسی نرم‌افزار تأیید وب برای سایت مشخصی پوشش داده شوند، باید هم نشانی وب شناسه برنامه و هم دامنه فهرست شده باشند.</translation>
-<translation id="5835412847081687053">پیکربندی منطقه‌های زبانی رابط کاربری مجاز در جلسه کاربری</translation>
 <translation id="5836064773277134605">‏محدود کردن دامنه درگاه UDP مورد استفاده توسط میزبان دسترسی راه دور</translation>
 <translation id="5862253018042179045">حالت پیش‌فرض قابلیت دسترس‌پذیری بازخورد گفتاری را در صفحه ورود به سیستم تنظیم کنید.
 
diff --git a/components/policy/resources/policy_templates_fi.xtb b/components/policy/resources/policy_templates_fi.xtb
index 007d87f..b100872 100644
--- a/components/policy/resources/policy_templates_fi.xtb
+++ b/components/policy/resources/policy_templates_fi.xtb
@@ -488,20 +488,6 @@
       Oikoluvun voi suorittaa myös ladatun sanakirjan avulla. Käytäntö hallinnoi vain verkkopalvelun käyttöä.
 
       Jos asetusta ei ole määritetty, käyttäjät voivat valita, haluavatko he käyttää oikolukupalvelua.</translation>
-<translation id="2294283832646774959">Määrittää tulostinluettelon
-
-      Tämän käytännön avulla järjestelmänvalvojat voivat määrittää tulostinasetuksia käyttäjiä varten.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> ja <ph name="PRINTER_DESCRIPTION" /> ovat vapaamuotoisia merkkijonoja, joita voidaan muokata tulostimen valinnan helpottamiseksi. <ph name="PRINTER_MANUFACTURER" /> ja <ph name="PRINTER_MODEL" /> auttavat käyttäjiä tunnistamaan tulostimet. Ne vastaavat tulostimen valmistajaa ja mallia. Määritä kohteen <ph name="PRINTER_URI" /> arvoksi osoite, joka on käytettävissä asiakastietokoneelta ja johon sisältyvät <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> ja <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> on valinnainen arvo. Sen tarkoituksena on auttaa tyypin <ph name="ZEROCONF_DISCOVERY" /> tulostimien deduplikoinnissa.
-
-      Kohteen <ph name="PRINTER_EFFECTIVE_MODEL" /> on vastattava jotakin merkkijonoista, jotka edustavat tulostimia, joita <ph name="PRODUCT_NAME" /> tukee. Merkkijonoa käytetään oikean PPD:n tunnistamiseen ja asentamiseen tulostinta varten. Saat lisätietoja osoitteesta https://support.google.com/chrome?p=noncloudprint.
-
-      Tulostin määritetään sen ensimmäisen käyttökerran yhteydessä. PPD:t ladataan vasta, kun tulostinta käytetään. Tämän jälkeen PPD:t tallennetaan välimuistiin, jos niitä käytetään usein.
-
-      Tämä käytäntö ei vaikuta siihen, voivatko käyttäjät määrittää tulostimia yksittäisillä laitteilla. Se on tarkoitettu käytettäväksi yksittäisten käyttäjien tekemien tulostinmääritysten lisäksi.
-
-      Jos laitetta hallinnoidaan Active Directoryn avulla, tämä käytäntö sallii, että <ph name="MACHINE_NAME_VARIABLE" /> liitetään Active Directory ‑koneen nimeen tai sen alimerkkijonoon. Jos koneen nimi on esimerkiksi <ph name="MACHINE_NAME_EXAMPLE" />, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> korvattaisiin kuudennetta kohtaa seuraavilla neljällä merkillä: <ph name="MACHINE_NAME_PART_EXAMPLE" />. Huomaa, että kohtien laskeminen aloitetaan nollasta.
-      </translation>
 <translation id="2294382669900758280">Videoiden toistamista Android-sovelluksissa ei oteta huomioon, vaikka tämän käytännön arvoksi olisi määritetty <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Määritä oletusarvoinen Uusi välilehti ‑sivu kohteessa <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Määritä käytössä olevat laajennukset</translation>
@@ -606,9 +592,6 @@
           Kaikki Samba- ja Windows-palvelinten viimeaikaiset versiot tukevat NTLMv2:ta. Se pitäisi poistaa käytöstä vain takautuvan yhteensopivuuden vuoksi, sillä tämä heikentää todennuksen turvallisuutta.
 
           Jos tätä käytäntöä ei ole määritetty, sen oletusarvo on tosi ja NTLMv2 on käytössä.</translation>
-<translation id="2598508021807251719">Määrittää kieli- ja maa-asetukset, joilla <ph name="PRODUCT_OS_NAME" /> voidaan näyttää.
-
-      Jos tämä käytäntö on määritetty, <ph name="PRODUCT_OS_NAME" /> voidaan määrittää näkymään ainoastaan jollakin tässä käytännössä ilmoitetulla kielellä. Jos tätä käytäntöä ei ole määritetty tai sen arvoksi on määritetty tyhjä luettelo, <ph name="PRODUCT_OS_NAME" /> voidaan näyttää kaikilla tuetuilla UI-kielillä. Jos käytännön arvoksi on määritetty luettelo, jonka arvot ovat virheellisiä, kaikki virheelliset arvot ohitetaan. Jos <ph name="PRODUCT_OS_NAME" /> on aiemmin määritetty näkymään kielellä, jota käytäntö ei salli, näytettävä UI-kieli vaihdetaan sallittuun kieleen seuraavalla sisäänkirjautumiskerralla. Jos käyttäjä on määrittänyt haluamansa kielet ja jokin niistä sallitaan tässä käytännössä, <ph name="PRODUCT_OS_NAME" /> vaihtaa tähän kieleen. Muussa tapauksessa <ph name="PRODUCT_OS_NAME" /> vaihtaa ensimmäiseen kelvollisen arvoon tai varakieleen (tällä hetkellä Yhdysvaltain englantiin), jos käytännössä on virheellisiä merkintöjä.</translation>
 <translation id="2604182581880595781">Määritä Verkkotiedostojen jakamiseen liittyviä käytäntöjä.</translation>
 <translation id="2623014935069176671">Odota alkuperäisen käyttäjän toimintaa</translation>
 <translation id="262740370354162807">Salli asiakirjojen lähettäminen palveluun <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1474,13 +1457,6 @@
 <translation id="5130288486815037971">TLS:n RC4-salaustekniikoiden käyttöönotto</translation>
 <translation id="5141670636904227950">Aseta näytön suurentajan oletustyyppi, jota käytetään kirjautumisnäytössä</translation>
 <translation id="5142301680741828703">Hahmonna aina seuraavat URL-mallit tuotteessa <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">DHCP-pyynnöissä käytetyn laitteen isäntänimen määrittäminen
-
-      Jos tämän käytännön arvo on muu kuin tyhjä merkkijono, merkkijonoa käytetään DHCP-pyynnössä laitteen isäntänimenä.
-
-      Merkkijono voi sisältää muuttujat ${ASSET_ID}, ${SERIAL_NUM} ja ${MAC_ADDR}, jotka korvataan laitteen arvoilla ennen isäntänimenä käyttöä. Kun muuttujat korvataan arvoilla, tuloksena pitäisi olla kelvollinen isäntänimi (RFC 1035, osio 3.1).
-
-      Jos käytäntöä ei ole määritetty tai jos korvaamisen jälkeinen arvo ei ole kelvollinen isäntänimi, DHCP-pyynnölle ei määritetä isäntänimeä. </translation>
 <translation id="5148753489738115745">Voit määrittää muita parametreja, joita käytetään, kun <ph name="PRODUCT_FRAME_NAME" /> käynnistää tuotteen <ph name="PRODUCT_NAME" />.
 
           Jos käytäntöä ei ole määritetty, käytetään oletuskomentoriviä.</translation>
@@ -1707,7 +1683,6 @@
 <translation id="5835124959204887277">Määrittää URL-osoitteet ja verkkotunnukset, joista ei näytetä kehotetta suojausavaimen todennusvarmenteen pyynnön yhteydessä. Suojausavain saa lisäksi signaalin, joka kertoo, että yksilöllinen todennus saattaa olla käytössä. Muissa tapauksissa käyttäjä saa kehotteen Chrome 65+:ssa, kun sivusto pyytää suojausavainten todennusta.
 
       URL-osoitteet (esim. https://example.com/joku/polku) vastaavat ainoastaan U2F-sovellustunnuksia. Verkkotunnukset (esim. example.com) vastaavat ainoastaan webauthn RP ‑tunnuksia. Sekä sovellustunnuksen URL-osoitteen että verkkotunnuksen tulee siis olla luettelossa, jotta ne kattavat tietyn sivun U2F- ja webauthn-sovellusliittymän.</translation>
-<translation id="5835412847081687053">Määritä käyttökerran hyväksytyt UI-kieli- ja maa-asetukset</translation>
 <translation id="5836064773277134605">Rajoita etäkäytön isännän käyttämää UDP-porttialuetta</translation>
 <translation id="5862253018042179045">Määritä äänipalautteen käytettävyysominaisuuden oletustila kirjautumisnäytössä.
 
diff --git a/components/policy/resources/policy_templates_fil.xtb b/components/policy/resources/policy_templates_fil.xtb
index c9f5e94..e1ff02f 100644
--- a/components/policy/resources/policy_templates_fil.xtb
+++ b/components/policy/resources/policy_templates_fil.xtb
@@ -495,21 +495,6 @@
       Maisasagawa pa rin ang pag-spell check gamit ang isang na-download na diksyunaryo; ang paggamit ng online na serbisyo lang ang kinokontrol ng patakarang ito.
 
       Kung hindi na-configure ang setting na ito, mapipili ng mga user kung dapat gamitin ang serbisyo ng pag-spell check o hindi.</translation>
-<translation id="2294283832646774959">Nagko-configure ng listahan ng mga printer.
-
-      Binibigyang-daan ng patakarang ito ang mga administrator na magbigay ng mga configuration ng printer para sa
-      kanilang mga user.
-
-      Ang <ph name="PRINTER_DISPLAY_NAME" /> at <ph name="PRINTER_DESCRIPTION" /> ay mga free form na string na maaaring i-customize para sa mas madaling pagpili ng printer. Pinapadali ng <ph name="PRINTER_MANUFACTURER" /> at <ph name="PRINTER_MODEL" /> ang pagtukoy ng printer ng mga end user. Kinakatawan ng mga ito ang manufacturer at modelo ng printer. Ang <ph name="PRINTER_URI" /> ay dapat isang address na mapupuntahan mula sa isang client na computer kabilang ang <ph name="URI_SCHEME" />, <ph name="URI_PORT" />, at <ph name="URI_QUEUE" />. Opsyonal ang <ph name="PRINTER_UUID" />. Kung ibibigay, gagamitin ito para makatulong na mag-deduplicate ng mga printer sa <ph name="ZEROCONF_DISCOVERY" />.
-
-      Tumutugma dapat ang <ph name="PRINTER_EFFECTIVE_MODEL" /> sa isa sa mga string na kumakatawan sa isang printer na sinusuportahan ng <ph name="PRODUCT_NAME" />. Gagamitin ang string para tukuyin at i-install ang naaangkop na PPD para sa printer. Makakahanap ng higit pang impormasyon sa https://support.google.com/chrome?p=noncloudprint.
-
-      Makukumpleto ang pag-set up ng printer sa unang paggamit ng printer. Hindi mada-download ang mga PPD hanggang magamit ang printer. Pagkatapos ng oras na iyon, maka-cache ang mga PPD na madalas gamitin.
-
-      Walang epekto ang patakarang ito sa kung maaaring mag-configure ng mga printer ang mga user sa mga indibidwal na device. Nilalayon itong maging karagdagan sa configuration ng mga printer ng mga indibidwal na user.
-
-      Para sa mga device na pinapamahalaan ng Active Directory, sinusuportahan ng patakarang ito ang pag-expand ng <ph name="MACHINE_NAME_VARIABLE" /> sa pangalan ng machine ng Active Directory o isang substring nito. Halimbawa, kung ang pangalan ng machine ay <ph name="MACHINE_NAME_EXAMPLE" />, mapapalitan ang <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> ng 4 na character simula pagkatapos ng ika-6 na posisyon, ibig sabihin, ang <ph name="MACHINE_NAME_PART_EXAMPLE" />. Tandaang ang posisyon ay zero-based.
-      </translation>
 <translation id="2294382669900758280">Hindi isinasaalang-alang ang pag-play ng Video sa mga Android app, kahit nakatakda ang patakarang ito sa <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">I-configure ang default na page ng Bagong Tab sa <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Tukuyin ang isang listahan ng mga pinapaganang plugin</translation>
@@ -620,9 +605,6 @@
           Sinusuportahan ng lahat ng kamakailang bersyon ng mga server ng Samba at Windows ang NTLMv2. Dapat lang itong i-disable para sa backwards compatibility at binabawasan nito ang seguridad ng pag-authenticate.
 
           Kung hindi nakatakda ang patakarang ito, ang default ay true at naka-enable ang NTLMv2.</translation>
-<translation id="2598508021807251719">Kino-configure ang mga lokal kung saan maaaring ipinapakita ang <ph name="PRODUCT_OS_NAME" />.
-
-      Kung itatakda ang patakarang ito, mako-configure lang ng user ang <ph name="PRODUCT_OS_NAME" /> para ipakita sa isa sa mga lokal na tinukoy sa patakarang ito. Kung hindi itatakda ang patakarang ito o itatakda ito sa isang blangkong listahan, maaaring ipakita ang <ph name="PRODUCT_OS_NAME" /> sa lahat ng sinusuportahang lokal ng UI. Kung itatakda ang patakarang ito sa isang listahang may mga invalid na value, babalewalain ang lahat ng invalid na value. Kung na-configure dati ng user ang <ph name="PRODUCT_OS_NAME" /> para ipakita sa isang lokal na hindi pinapayagan ng patakarang ito, ililipat ang lokal ng display sa isang pinapayagang lokal ng UI sa susunod na mag-sign in ang user. Kung na-configure ng user ang mga piniling lokal at ang isa sa mga piniling lokal ay pinapayagan ng patakarang ito, lilipat ang <ph name="PRODUCT_OS_NAME" /> sa lokal na ito. Kung hindi, lilipat ang <ph name="PRODUCT_OS_NAME" /> sa unang valid na value na tinukoy sa patakarang ito, o sa isang fallback na lokal (kasalukuyang en-US), kung naglalaman lang ang patakarang ito ng mga invalid na entry.</translation>
 <translation id="2604182581880595781">I-configure ang mga patakarang nauugnay sa File Share sa Network.</translation>
 <translation id="2623014935069176671">Maghintay sa paunang aktibidad ng user</translation>
 <translation id="262740370354162807">Paganahin ang pagsusumite ng mga dokumento sa <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1515,13 +1497,6 @@
 <translation id="5130288486815037971">Kung naka-enable ang mga RC4 na cipher suite sa TLS o hindi</translation>
 <translation id="5141670636904227950">Itakda ang default na uri ng magnifier ng screen na naka-enable sa screen sa pag-login</translation>
 <translation id="5142301680741828703">Palaging i-render ang mga sumusunod na pattern ng URL sa <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Tukuyin ang hostname ng device na ginamit sa mga kahilingan ng DHCP.
-
-      Kung nakatakda ang patakarang ito sa may lamang string, gagamitin ang string na iyon bilang ang hostname ng device sa panahon ng paghiling ng DHCP.
-
-      Ang string ay maaaring magkaroon ng mga variable na ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} na papalitan ng mga value sa device bago gamitin bilang hostname. Ang resultang kapalit ay dapat valid na hostname (alinsunod sa RFC 1035, seksyon 3.1).
-
-      Kung hindi nakatakda ang patakarang ito, o hindi valid na hostname ang value pagkatapos ng pagpapalit, walang itatakdang hostname sa kahilingan ng DHCP. </translation>
 <translation id="5148753489738115745">Binibigyang-daan kang tukuyin ang mga karagdagang parameter na ginagamit kapag nilunsad ng <ph name="PRODUCT_FRAME_NAME" /> ang <ph name="PRODUCT_NAME" />.
 
           Kung hindi naitakda ang patakarang ito, ang default na command line ang gagamitin.</translation>
@@ -1771,7 +1746,6 @@
 <translation id="5835124959204887277">Tumutukoy ng mga URL at domain kung saan walang ipapakitang prompt kapag humiling ng mga certificate ng pagpapatunay mula sa Mga Security Key. Bukod pa rito, may ipapadalang signal sa Security Key na nagsasaad na maaaring gumamit ng indibidwal na pagpapatunay. Kung wala ito, ipo-prompt ang mga user sa Chrome 65+ kapag humiling ang mga site ng pagpapatunay ng Mga Security Key.
 
       Tutugma lang ang mga URL (tulad ng https://example.com/some/path) bilang mga U2F appID. Tutugma lang ang mga domain (tulad ng example.com) bilang mga webauthn RP ID. Samakatuwid, upang masaklaw ang mga U2F at webauthn API para sa isang partikular na site, kailangang parehong ilista ang appID URL at domain.</translation>
-<translation id="5835412847081687053">I-configure ang mga pinapayagang lokal ng UI sa isang session ng user</translation>
 <translation id="5836064773277134605">Paghigpitan ang saklaw ng UDP port na ginamit ng host ng malayuang pag-access</translation>
 <translation id="5862253018042179045">Itakda ang default na katayuan ng tampok na pagiging naa-access ng sinasalitang feedback sa screen sa pag-login.
 
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index c98636b1..4ece485 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -505,21 +505,6 @@
       Il reste toutefois possible de procéder à la correction orthographique à l'aide d'un dictionnaire téléchargé. Cette règle ne contrôle que l'utilisation du service en ligne.
 
       En cas de non-configuration de ce paramètre, les utilisateurs peuvent décider d'utiliser le service de correction orthographique ou non.</translation>
-<translation id="2294283832646774959">Configure une liste d'imprimantes.
-
-      Cette règle autorise les administrateurs à fournir des configurations d'imprimante
-      pour leurs utilisateurs.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> et <ph name="PRINTER_DESCRIPTION" /> sont des chaînes au format libre que vous pouvez personnaliser pour sélectionner facilement l'imprimante. <ph name="PRINTER_MANUFACTURER" /> et <ph name="PRINTER_MODEL" /> servent à faciliter l'identification de l'imprimante par les utilisateurs finaux. Ces chaînes correspondent au fabricant et au modèle de l'imprimante. <ph name="PRINTER_URI" /> doit être une adresse accessible à partir d'un ordinateur client, et doit contenir le <ph name="URI_SCHEME" />, le <ph name="URI_PORT" /> et la <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> est facultatif. S'il est indiqué, il est utilisé pour supprimer les imprimantes en double <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> doit correspondre à l'une des chaînes qui représentent une imprimante <ph name="PRODUCT_NAME" /> compatible. Cette chaîne est utilisée pour identifier et installer le fichier PPD approprié pour l'imprimante. Pour plus d'informations, consultez la page https://support.google.com/chrome?p=noncloudprint.
-
-      La configuration d'une imprimante est effectuée lors de sa première utilisation. Les fichiers PPD ne sont pas téléchargés tant que l'imprimante n'a pas été utilisée. Par la suite, les fichiers PPD fréquemment utilisés sont mis en cache.
-
-      Cette règle n'a aucune incidence sur la capacité ou non des utilisateurs à configurer des imprimantes sur différents appareils. Elle est destinée à compléter la configuration des imprimantes effectuée par les différents utilisateurs.
-
-      Pour les appareils gérés par Active Directory, cette règle permet l'expansion de <ph name="MACHINE_NAME_VARIABLE" /> en fonction du nom de machine Active Directory ou de l'une de ses sous-chaînes. Par exemple, si le nom de machine est <ph name="MACHINE_NAME_EXAMPLE" />, alors <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> est remplacé par les 4 caractères suivant la 6e position, soit <ph name="MACHINE_NAME_PART_EXAMPLE" />. Notez que la position prend en compte le zéro.
-      </translation>
 <translation id="2294382669900758280">La lecture vidéo dans les applications Android n'est pas prise en compte même si cette règle est définie sur "<ph name="TRUE" />".</translation>
 <translation id="2298647742290373702">Configurer la page "Nouvel onglet" par défaut dans <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Indiquer une liste de plug-ins activés</translation>
@@ -632,9 +617,6 @@
           Toutes les versions récentes des serveurs Samba et Windows incluent l'authentification NTLMv2. La désactivation de cette fonctionnalité, qui réduit la sécurité de l'authentification, n'est conseillée qu'à des fins de rétrocompatibilité.
 
           Lorsque cette règle n'est pas définie, la valeur par défaut "true" indique que l'authentification NTLMv2 est activée.</translation>
-<translation id="2598508021807251719">Permet de configurer les langues dans lesquelles <ph name="PRODUCT_OS_NAME" /> peut s'afficher.
-
-      Si cette règle est définie, l'utilisateur ne peut configurer l'affichage de <ph name="PRODUCT_OS_NAME" /> que dans l'une des langues spécifiées dans cette règle. Si cette dernière n'est pas configurée ou si elle est définie sur une liste vide, <ph name="PRODUCT_OS_NAME" /> peut s'afficher dans toutes les langues compatibles de l'interface utilisateur. Si cette règle est définie sur une liste contenant des valeurs non valides, ces dernières sont toutes ignorées. Si un utilisateur a auparavant configuré l'affichage de <ph name="PRODUCT_OS_NAME" /> dans une langue non autorisée par cette règle, la langue d'affichage est remplacée par une langue autorisée lors de la prochaine connexion de l'utilisateur. Si l'utilisateur a configuré des langues préférées et que l'une d'entre elles est autorisée par cette règle, <ph name="PRODUCT_OS_NAME" /> s'affiche dans cette langue. Sinon, <ph name="PRODUCT_OS_NAME" /> s'affiche dans la langue définie par la première valeur valide spécifiée par cette règle, ou dans une langue de remplacement (actuellement, en-US), si cette règle contient uniquement des entrées non valides.</translation>
 <translation id="2604182581880595781">Configurer les règles associées à la fonctionnalité Partages de fichiers en réseau.</translation>
 <translation id="2623014935069176671">Attendre l'activité utilisateur initiale</translation>
 <translation id="262740370354162807">Activer l'envoi de documents à <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1528,13 +1510,6 @@
 <translation id="5130288486815037971">Activation ou non des suites de chiffrement RC4 dans TLS</translation>
 <translation id="5141670636904227950">Activer la loupe plein écran sur l'écran de connexion</translation>
 <translation id="5142301680741828703">Toujours rendre les formats d'URL suivants dans <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Déterminez le nom d'hôte de l'appareil utilisé pour les requêtes DHCP.
-
-      Si cette règle est définie sur une chaîne non vide, la chaîne servira de nom d'hôte de l'appareil lors de la requête DHCP.
-
-      La chaîne peut contenir les variables ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} qui seront remplacées par des valeurs sur l'appareil avant l'utilisation comme nom d'hôte. Le résultat de cette substitution doit former un nom d'hôte valide (conformément à la RFC 1035, section 3.1).
-
-      Si cette règle n'est pas définie ou si la valeur après substitution ne constitue pas un nom d'hôte valide, aucun nom d'hôte ne sera défini dans la requête DHCP. </translation>
 <translation id="5148753489738115745">Permet de spécifier les paramètres supplémentaires utilisés lorsque <ph name="PRODUCT_FRAME_NAME" /> lance <ph name="PRODUCT_NAME" />.
 
           Si cette règle n'est pas configurée, la ligne de commande par défaut est utilisée.</translation>
@@ -1788,7 +1763,6 @@
 <translation id="5835124959204887277">Précise les URL et les domaines pour lesquels aucune boîte de dialogue ne s'affiche lorsque les certificats d'attestation de la clé de sécurité sont demandés. Un signal est également envoyé à la clé de sécurité pour indiquer qu'une attestation individuelle peut être utilisée. Dans les autres cas, les utilisateurs sont avertis dans Chrome 65 et versions ultérieures lorsque des sites demandent une attestation des clés de sécurité.
 
       Les URL (comme https://example.com/ce/chemin) ne sont reconnues que comme des identifiants d'application U2F. Les domaines (comme example.com) ne sont reconnus que comme des identifiants RP WebAuthn. Ainsi, pour couvrir à la fois les API U2F et WebAuthn d'un site donné, vous devez préciser l'URL et le domaine de l'identifiant d'application.</translation>
-<translation id="5835412847081687053">Configurer les langues autorisées de l'interface utilisateur dans une session utilisateur</translation>
 <translation id="5836064773277134605">Restreindre la plage de ports UDP utilisés par l'hôte d'accès à distance</translation>
 <translation id="5862253018042179045">Définir l'état par défaut de la fonctionnalité d'accessibilité de commentaires audio sur l'écran de connexion
 
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb
index d28e861..d30ec5f 100644
--- a/components/policy/resources/policy_templates_gu.xtb
+++ b/components/policy/resources/policy_templates_gu.xtb
@@ -565,21 +565,6 @@
       ડાઉનલોડ કરેલા શબ્દકોશનો ઉપયોગ કરીને હજુ પણ જોડણી તપાસ થઈ શકે છે; આ નીતિ ફક્ત ઑનલાઇન સેવાના ઉપયોગને નિયંત્રિત કરે છે.
 
       જો આ સેટિંગ ગોઠવેલી નથી, તો પછી વપરાશકર્તાઓ જોડણી તપાસ સેવાનો ઉપયોગ કરવો કે નહીં તે પસંદ કરી શકે છે.</translation>
-<translation id="2294283832646774959">પ્રિન્ટરની સૂચિ ગોઠવે છે.
-
-      આ નીતિ વ્યવસ્થાપકોને તેમના વપરાશકર્તાઓ માટે પ્રિન્ટરની ગોઠવણીઓ પ્રદાન કરવાની
-      મંજૂરી આપે છે.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> અને <ph name="PRINTER_DESCRIPTION" /> મુક્ત પ્રકારની સ્ટ્રિંગ છે જેને પ્રિન્ટરની સરળ પસંદગી માટે કસ્ટમાઇઝ કરી શકાય છે. <ph name="PRINTER_MANUFACTURER" /> અને <ph name="PRINTER_MODEL" /> વાપરનાર માટે પ્રિન્ટરની ઓળખ સરળ બનાવે છે. તે પ્રિન્ટરના ઉત્પાદક અને મૉડલ દર્શાવે છે. <ph name="PRINTER_URI" /> ઍડ્રેસ ક્લાયન્ટના કમ્પ્યુટર પરથી પહોંચી શકાય તેવું હોવું જોઈએ, જેમાં <ph name="URI_SCHEME" />, <ph name="URI_PORT" />, અને <ph name="URI_QUEUE" />નો સમાવેશ હોવો જોઈએ. <ph name="PRINTER_UUID" /> વૈકલ્પિક છે. જો આપવામાં આવ્યો હોય, તો તે <ph name="ZEROCONF_DISCOVERY" /> પ્રિન્ટરની ડુપ્લિકેટ કાઢી નાખવામાં સહાય કરે છે.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" />નો એ સ્ટ્રિંગ સાથે મેળ ખાવો જોઈએ જે <ph name="PRODUCT_NAME" /> દ્વારા સમર્થિત પ્રિન્ટર પ્રસ્તુત કરતી હોય. સ્ટ્રિંગનો ઉપયોગ પ્રિન્ટર માટેના યોગ્ય PPDને ઓળખવા તથા ઇન્સ્ટૉલ કરવા માટે થશે. https://support.google.com/chrome?p=noncloudprint પર વધુ માહિતી મળી શકે છે.
-
-      પ્રિન્ટરના પ્રથમ ઉપયોગ સમયે તેનું સેટઅપ પૂર્ણ થાય છે.  પ્રિન્ટરનો ઉપયોગ ન થાય ત્યાં સુધી PPD ડાઉનલોડ કરવામાં આવતા નથી.  ત્યાર પછી, વારંવાર ઉપયોગમાં લેવાતા PPDને કૅશ કરવામાં આવે છે.
-
-      વપરાશકર્તાઓ દરેક ઉપકરણો પર પ્રિન્ટરની ગોઠવણી કરી શકે કે ન કરી શકે તેની આ નીતિ ઉપર કોઈ અસર થતી નથી.  તેનો હેતુ દરેક વપરાશકર્તાઓના પ્રિન્ટરની ગોઠવણીના સહાયક તરીકે હોવાનો છે.
-
-      Active Directory દ્વારા મેનેજ કરાયેલ ઉપકરણો માટે, આ નીતિ <ph name="MACHINE_NAME_VARIABLE" />નું Active Directory મશીન નામ અથવા તેની સબસ્ટ્રિંગમાં વિસ્તરણ કરવામાં સહાય કરે છે. જેમ કે, જો મશીનનું નામ <ph name="MACHINE_NAME_EXAMPLE" /> હોય, તો <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> આ તેના 6ઠ્ઠા અક્ષર પછીના 4 અક્ષરને બદલશે, દા.ત. <ph name="MACHINE_NAME_PART_EXAMPLE" />. નોંધો કે ગણતરી શૂન્યથી શરૂ થાય છે.
-      </translation>
 <translation id="2294382669900758280">Android અ‍ૅપ્લિકેશનોમાં વિડિઓ ચલાવવા પર વિચારણા કરવામાં આવતી નથી, પછી ભલેને આ નીતિ <ph name="TRUE" /> પર સેટ કરેલ હોય.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> માં ડિફૉલ્ટ નવું ટૅબ પૃષ્ઠ ગોઠવો.</translation>
 <translation id="2299220924812062390">સક્ષમ પ્લગિન્સની સૂચિનો ઉલ્લેખ કરો</translation>
@@ -696,9 +681,6 @@
           Samba અને Windows સર્વરોના તાજેતરના બધા વર્ઝનો NTLMv2ને સહાય કરે છે. આને માત્ર ઉલટા ક્રમની સુસંગતતા માટે બંધ કરેલ હોય તે જરૂરી છે અને તે પ્રમાણીકરણની સુરક્ષા ઘટાડે છે.
 
           જો આ નીતિ સેટ નહીં કરી હોય, તો ડિફૉલ્ટ true છે અને NTLMv2 ચાલુ કરેલું છે.</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" /> પ્રદર્શિત થઈ શકે તે લોકેલને કન્ફિગર કરે છે.
-
-      જો આ નીતિ સેટ કરેલી હોય, તો વપરાશકર્તા <ph name="PRODUCT_OS_NAME" />ને આ નીતિ દ્વારા ઉલ્લેખિત લોકેલમાંથી માત્ર એકમાં પ્રદર્શિત થવા માટે કન્ફિગર કરી શકે છે. જો આ નીતિ સેટ કરેલી ન હોય અથવા ખાલી સૂચિ પર સેટ કરેલી હોય, તો <ph name="PRODUCT_OS_NAME" /> બધા સમર્થિત UI લોકેલમાં પ્રદર્શિત થઈ શકે છે. જો આ નીતિ અમાન્ય મૂલ્યો ધરાવતી સૂચિ પર સેટ કરવામાં આવી હોય, તો બધાં અમાન્ય મૂલ્યોને અવગણવામાં આવશે. જો વપરાશકર્તાએ <ph name="PRODUCT_OS_NAME" />ને પહેલાં એવા લોકેલમાં પ્રદર્શિત થવા માટે કન્ફિગર કર્યું હોય જેને આ નીતિ દ્વારા મંજૂરી મળેલી નથી, તો આગલી વાર જ્યારે વપરાશકર્તા સાઇન ઇન કરશે ત્યારે ડિસ્પ્લે લોકેલને મંજૂર થયેલા UI લોકેલ પર સ્વિચ કરવામાં આવશે. જો વપરાશકર્તાએ પસંદગીના લોકેલ કન્ફિગર કર્યા હોય અને પસંદગીના લોકેલમાંના એકને આ નીતિ દ્વારા મંજૂરી મળેલી હોય, તો <ph name="PRODUCT_OS_NAME" /> આ લોકેલ પર સ્વિચ થશે. અન્યથા, <ph name="PRODUCT_OS_NAME" /> આ નીતિ દ્વારા ઉલ્લેખિત પ્રથમ માન્ય મૂલ્ય પર અથવા જો આ નીતિ માત્ર અમાન્ય એન્ટ્રીઓ ધરાવતી હોય તો ફૉલબૅક લોકેલ (હાલમાં en-US) પર સ્વિચ થશે.</translation>
 <translation id="2604182581880595781">'નેટવર્ક ફાઇલ શેર' સંબંધિત નીતિઓ કન્ફિગર કરો.</translation>
 <translation id="2623014935069176671">આરંભિક વપરાશકર્તા પ્રવૃત્તિ માટે રાહ જુઓ</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" /> પર દસ્તાવેજના સબમિશનને સક્ષમ કરો</translation>
@@ -1697,13 +1679,6 @@
 <translation id="5130288486815037971">TLS માંના RC4 સાઇફર સ્યૂટ્સ સક્ષમ કરેલ છે કે કેમ</translation>
 <translation id="5141670636904227950">લોગિન સ્ક્રીન પર સક્ષમ હોય તે ડિફોલ્ટ સ્ક્રીન બૃહદદર્શક પ્રકાર સેટ કરો</translation>
 <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" /> માં હંમેશાં નીચે આપેલા URL દાખલા  પ્રસ્તુત કરો</translation>
-<translation id="5147665094011258322">DHCPની વિનંતીઓમાં ઉપયોગમાં લેવાયેલ ઉપકરણના હોસ્ટનું નામ નિર્ધારિત કરો.
-
-      જો આ નીતિ ખાલી ન હોય તેવી સ્ટ્રિંગ પર સેટ કરેલ હોય, તો તે સ્ટ્રિંગ DHCPની વિનંતી દરમિયાન ઉપકરણના હોસ્ટના નામ તરીકે ઉપયોગમાં લેવાશે.
-
-      સ્ટ્રિંગમાં ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} જેવા ચલ શામેલ હોઈ શકે છે જેનો હોસ્ટના નામ તરીકે ઉપયોગ કરતા પહેલાં ઉપકરણ પરના મૂલ્ય સાથે બદલવામાં આવશે. પરિણામી અવેજીકરણ એક માન્ય હોસ્ટનું નામ હોવું જોઈએ (પ્રતિ RFC 1035, વિભાગ 3.1).
-
-      જો આ નીતિ સેટ કરેલ ન હોય અથવા અવેજીકરણ પછીના મૂલ્યમાં એક માન્ય હોસ્ટનું નામ ન હોય, તો DHCPની વિનંતીમાં કોઈ હોસ્ટનું નામ સેટ થઈ શકશે નહીં. </translation>
 <translation id="5148753489738115745">તમને વધારાનાં પેરામીટર્સનો ઉલ્લેખ કરવાની મંજૂરી આપે છે જેનો ઉપયોગ <ph name="PRODUCT_FRAME_NAME" /> જ્યારે <ph name="PRODUCT_NAME" /> શરૂ કરે છે ત્યારે કરવામાં આવે છે.
 
           જો આ નીતિ સેટ કરેલી નથી, તો ડિફૉલ્ટ કમાન્ડ લાઇનનો ઉપયોગ કરવામાં આવશે</translation>
@@ -2017,7 +1992,6 @@
 ઉપરાંત, એક સંકેત સુરક્ષા કીને મોકલવામાં આવશે કે જે વ્યક્તિગત પ્રમાણનનો ઉપયોગ કરી શકે. આના વિના, જ્યારે સાઇટ સુરક્ષા કીના પ્રમાણનની વિનંતી કરશે, ત્યારે વપરાશકર્તાઓને Chrome 65+ માં સંકેત અપાશે.
 
       URLs (https://example.com/some/path જેવી) ફક્ત U2F appIDs તરીકે મેળ ખાશે. ડોમેન (example.com જેવા) ફક્ત webauthn RP IDs તરીકે મેળ ખાશે. જો કે, આપેલી સાઇટ માટે U2F અને webauthn APIs કવર કરવા માટે, બન્ને appID URL અને ડોમેન સૂચિમાં હોવા જરૂરી છે.</translation>
-<translation id="5835412847081687053">વપરાશકર્તાના સત્રમાં મંજૂર કરેલ લોકેલની ગોઠવણી કરો</translation>
 <translation id="5836064773277134605">રીમોટ ઍક્સેસ હોસ્ટ દ્વારા ઉપયોગમાં લીધેલ UDP પોર્ટ શ્રેણીને પ્રતિબંધિત કરો</translation>
 <translation id="5862253018042179045">લોગિન સ્ક્રીન પર બોલાયેલ પ્રતિસાદની ઍક્સેસિબિલિટી સુવિધાની ડિફોલ્ટ સ્થિતિ સેટ કરો.
 
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb
index 1633d680..aa39cfa4 100644
--- a/components/policy/resources/policy_templates_hi.xtb
+++ b/components/policy/resources/policy_templates_hi.xtb
@@ -494,21 +494,6 @@
       वर्तनी परीक्षण को अब भी किसी डाउनलोड की गई शब्दकोश का उपयोग करके निष्पादित किया जा सकता है; यह नीति केवल ऑनलाइन सेवा के उपयोग को नियंत्रित करती है.
 
       यदि यह सेटिंग कॉन्फ़िगर न है, तो फिर उपयोगकर्ता चुन सकते हैं कि वर्तनी परीक्षण सेवा का उपयोग किया जाना चाहिए या नहीं.</translation>
-<translation id="2294283832646774959">प्रिंटर की सूची कॉन्फ़िगर करती है.
-
-      यह नीति एडमिन को अपने उपयोगकर्ताओं के लिए प्रिंटर कॉन्फ़िगरेशन उपलब्ध
-      कराने देती है.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> और <ph name="PRINTER_DESCRIPTION" /> स्वतंत्र फ़ॉर्म स्ट्रिंग हैं जिन्हें प्रिंटर चुनने में आसानी के लिए पसंद के मुताबिक बनाया जा सकता है. <ph name="PRINTER_MANUFACTURER" /> और <ph name="PRINTER_MODEL" /> अंतिम उपयोगकर्ताओं के लिए प्रिंटर की पहचान करना आसान बनाने का काम करते हैं. वे प्रिंटर के निर्माता और मॉडल को दर्शाते हैं. <ph name="PRINTER_URI" /> एक ऐसा पता होना चाहिए जिस पर क्लाइंट कंप्यूटर से पहुंचा जा सके जिसमें <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> और <ph name="URI_QUEUE" /> शामिल हैं. <ph name="PRINTER_UUID" /> वैकल्पिक है. अगर उपलब्ध कराया गया हो, तो इसका इस्तेमाल <ph name="ZEROCONF_DISCOVERY" /> प्रिंटर की कॉपी हटाने के लिए किया जाता है.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> का मिलान किसी एक स्ट्रिंग से होना चाहिए जो <ph name="PRODUCT_NAME" /> पर काम करने वाले प्रिंटर को दर्शाती है. स्ट्रिंग का इस्तेमाल प्रिंटर के लिए सही PPD की पहचान करके उसे इंस्टॉल करने के लिए किया जाएगा. ज़्यादा जानकारी https://support.google.com/chrome?p=noncloudprint पर मिल सकती है.
-
-      किसी प्रिंटर का पहली बार इस्तेमाल करते ही प्रिंटर का सेटअप पूरा हो जाता है.  PPD तब तक डाउनलोड नहीं किए जाते हैं जब तक कि प्रिंटर का इस्तेमाल नहीं किया जाता.  उस समय के बाद, अक्सर इस्तेमाल होने वाले PPD कैश मेमोरी में रख दिए जाते हैं.
-
-      इस नीति का इस पर कोई असर नहीं होता कि उपयोगकर्ता अलग-अलग डिवाइस पर प्रिंटर कॉन्फ़िगर कर सकते हैं या नहीं.  इसे अलग-अलग उपयोगकर्ताओं के प्रिंटर के कॉन्फ़िगरेशन का पूरक होने के लिए बनाया गया है.
-
-      सक्रिय निर्देशिका से प्रबंधित होने वाले डिवाइसों के लिए यह नीति <ph name="MACHINE_NAME_VARIABLE" /> का सक्रिय निर्देशिका के मशीन नाम या उसकी सबस्ट्रिंग में विस्तार करने का समर्थन करती है. उदाहरण के लिए, अगर मशीन नाम <ph name="MACHINE_NAME_EXAMPLE" /> है, तो फिर <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> को 6ठी जगह के बाद शुरू होने वाले 4 वर्णों, यानी <ph name="MACHINE_NAME_PART_EXAMPLE" /> से बदल दिया जाएगा. ध्यान रखें कि यह स्थिति शून्य-आधारित होती है.
-      </translation>
 <translation id="2294382669900758280">Android ऐप्लिकेशन में वीडियो चलाने पर ध्यान नहीं दिया जाता है, भले ही यह नीति <ph name="TRUE" /> पर सेट हो.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> में डिफ़ॉल्ट नया टैब पेज कॉन्फ़िगर करें.</translation>
 <translation id="2299220924812062390">सक्षम प्लग इन की सूची निर्दिष्ट करें</translation>
@@ -621,9 +606,6 @@
           Samba और Windows सर्वर के हाल के सभी वर्शन NTLMv2 पर काम करते हैं. इसे सिर्फ़ पहले के वर्शन से संगतता के लिए बंद किया जाना चाहिए और इससे प्रमाणीकरण की सुरक्षा कम हो जाती है.
 
           अगर यह नीति सेट नहीं की गई है, तो डिफ़ॉल्ट सही होता है और NTLMv2 चालू होता है.</translation>
-<translation id="2598508021807251719">उन स्थान-भाषाओं को कॉन्फ़िगर करती है जिनमें <ph name="PRODUCT_OS_NAME" /> दिखाया जा सकता है.
-
-      अगर यह नीति सेट हो, तो उपयोगकर्ता <ph name="PRODUCT_OS_NAME" /> को सिर्फ़ इस नीति में बताई गई स्थान-भाषाओं में से किसी एक में दिखाए जाने के लिए कॉन्फ़िगर कर सकता है. अगर यह नीति सेट नहीं हो या किसी खाली सूची पर सेट हो, तो <ph name="PRODUCT_OS_NAME" /> को काम करने वाली सभी यूज़र इंटरफ़ेस (यूआई) स्थान-भाषाओं में दिखाया जा सकता है. अगर यह नीति गलत मानों वाली किसी सूची पर सेट हो, तो सभी गलत मानों को अनदेखा कर दिया जाएगा. अगर किसी उपयोगकर्ता ने <ph name="PRODUCT_OS_NAME" /> को पहले किसी ऐसी भाषा में दिखाए जाने के लिए कॉन्फ़िगर किया है जिसे यह नीति मंज़ूरी नहीं देती है, तो दिखाई जाने वाली स्थान-भाषा अगली बार उपयोगकर्ता के साइन इन करने पर मंज़ूरी दी गई स्थान-भाषा में बदल जाएगी. अगर उपयोगकर्ता ने पसंदीदा स्थान-भाषाएं कॉन्फ़िगर की थीं और पसंदीदा स्थान-भाषाओं में से किसी एक को इस नीति ने मंज़ूरी दी है, तो <ph name="PRODUCT_OS_NAME" /> इस स्थान-भाषा में बदल जाएगा. अगर ऐसा नहीं होता है, तो <ph name="PRODUCT_OS_NAME" /> इस नीति के बताए गए पहले सही मान में बदल जाएगा या अगर इस नीति में सिर्फ़ गलत प्रविष्टियां ही हों तो, वह किसी वैकल्पिक स्थान-भाषा (फ़िलहाल en-US) में बदल जाएगा.</translation>
 <translation id="2604182581880595781">नेटवर्क फ़ाइल शेयर करने की सुविधा से जुड़ी नीतियां कॉन्फ़िगर करें.</translation>
 <translation id="2623014935069176671">'उपयोगकर्ता की शुरुआती गतिविधि' का इंतज़ार करें</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" /> पर दस्‍तावेज़ों का सबमिशन सक्षम करती है</translation>
@@ -1517,13 +1499,6 @@
 <translation id="5130288486815037971">क्या TLS में RC4 सिफ़र सुइट सक्षम किए गए हैं</translation>
 <translation id="5141670636904227950">प्रवेश स्क्रीन पर सक्षम डिफ़ॉल्ट स्क्रीन आवर्धक प्रकार सेट करें</translation>
 <translation id="5142301680741828703">आगे बताए गए यूआरएल पैटर्न को हमेशा <ph name="PRODUCT_FRAME_NAME" /> में रेंडर करें</translation>
-<translation id="5147665094011258322">डीएचसीपी अनुरोधों में इस्तेमाल किए जाने वाले डिवाइस का होस्टनाम तय करती है.
-
-      अगर यह नीति किसी ऐसी स्ट्रिंग पर सेट की जाती है जो खाली नहीं है तो, डीएचसीपी अनुरोध के दौरान उस स्ट्रिंग का इस्तेमाल डिवाइस होस्टनाम की तरह किया जाएगा.
-
-      इस स्ट्रिंग में ऐसे वैरिएबल ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} हैं जिन्हें होस्टनाम का इस्तेमाल किए जाने से पहले डिवाइस पर मौजूद मानों से बदल दिया जाएगा. इसके नतीजे के ज़रिए होने वाला बदलाव एक मान्य होस्टनाम होना चाहिए (जैसा कि RFC 1035, सेक्शन 3.1 में बताया गया है).
-
-      अगर यह नीति सेट नहीं की जाती या बदलाव के बाद मिला मान एक मान्य होस्टनाम नहीं है तो, डीएचसीपी अनुरोध में कोई भी होस्टनाम सेट नहीं किया जाएगा. </translation>
 <translation id="5148753489738115745">यह नीति आपको कुछ और पैरामीटर तय करने की सुविधा देती है. जब <ph name="PRODUCT_FRAME_NAME" />, <ph name="PRODUCT_NAME" /> को लॉन्च करता है, तब इन पैरामीटर का उपयोग किया जाता है.
 
           अगर यह नीति सेट नहीं है तो, डिफ़ॉल्ट कमांड लाइन का उपयोग किया जाएगा.</translation>
@@ -1785,7 +1760,6 @@
 <translation id="5835124959204887277">ऐसे यूआरएल और डोमेन के बारे में बताती है जिनके लिए सुरक्षा कुंजियों से प्रमाणित किए जाने के प्रमाणपत्रों का अनुरोध करते समय कोई भी संकेत नहीं दिखाया जाएगा. इसके अलावा, सुरक्षा कुंजी को यह बताने वाला एक संकेत भेजा जाएगा कि व्यक्तिगत तौर पर प्रमाणित किए जाने की सुविधा का इस्तेमाल किया जा सकता है. इसके बिना, उपयोगकर्ताओं को Chrome 65+ में तब संकेत किया जाएगा जब साइटें सुरक्षा कुंजियों को प्रमाणित करने का अनुरोध करेंगी.
 
       यूआरएल (जैसे कि https://example.com/some/path) का मिलान सिर्फ़ U2F appID की तरह होगा. डोमेन (जैसे कि example.com) का मिलान सिर्फ़ webauthn RP ID की तरह होगा इसलिए किसी साइट के लिए U2F और webauthn API (एपीआई), दोनों को कवर करने के लिए, appID यूआरएल और डोमेन को रजिस्टर करने की ज़रूरत होगी.</translation>
-<translation id="5835412847081687053">किसी 'उपयोगकर्ता सत्र' में मंज़ूर की गई यूज़र इंटरफ़ेस (यूआई) स्थान-भाषाएं कॉन्फ़िगर करें</translation>
 <translation id="5836064773277134605">रिमोट एक्सेस होस्ट द्वारा उपयोग की गई UDP पोर्ट श्रेणी प्रतिबंधित करें</translation>
 <translation id="5862253018042179045">लॉग इन स्क्रीन पर 'कंप्यूटर के बोलकर दिए जाने वाले जवाब' की सुलभता सुविधा को डिफ़ॉल्ट पर सेट करें.
 
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb
index 87aebcb6..e55d6141 100644
--- a/components/policy/resources/policy_templates_hr.xtb
+++ b/components/policy/resources/policy_templates_hr.xtb
@@ -477,21 +477,6 @@
       Provjera pravopisa još se uvijek može vršiti pomoću preuzetog rječnika; to pravilo upravlja samo upotrebom mrežne usluge.
 
       Ako ta postavka nije konfigurirana, korisnici mogu sami odlučiti hoće li se usluga provjere pravopisa upotrebljavati ili neće.</translation>
-<translation id="2294283832646774959">Konfigurira popis pisača.
-
-      To pravilo omogućuje administratorima da navedu konfiguracije pisača za
-      korisnike.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> i <ph name="PRINTER_DESCRIPTION" /> nemaju nizove koji se mogu prilagoditi radi lakšeg odabira pisača. <ph name="PRINTER_MANUFACTURER" /> i <ph name="PRINTER_MODEL" /> olakšavaju krajnjim korisnicima da prepoznaju pisače tako što predstavljaju proizvođača i model pisača. <ph name="PRINTER_URI" /> treba biti adresa kojoj se može pristupiti s računala klijenta uključujući <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> i <ph name="URI_QUEUE" />. Polje <ph name="PRINTER_UUID" /> izborno je. Ako se navede, služi za uklanjanje duplikata <ph name="ZEROCONF_DISCOVERY" /> pisača.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> mora odgovarati jednom od nizova koji predstavljaju pisač koji <ph name="PRODUCT_NAME" /> podržava. Niz će se koristiti za identifikaciju i instaliranje odgovarajućeg PPD-a za pisač. Više informacija dostupno je na https://support.google.com/chrome?p=noncloudprint.
-
-      Postavljanje pisača dovršava se po prvoj upotrebi pisača. PPD-ovi će se preuzeti tek kada se pisač upotrijebi. Nakon toga često korišteni PPD-ovi spremit će se u predmemoriju.
-
-      To pravilo ne utječe na to mogu li korisnici konfigurirati pisače na pojedinačnim uređajima. Služi kao dodatno pravilo za konfiguraciju pisača koju vrše pojedinačni korisnici.
-
-      Za uređaje kojima upravlja Active Directory to pravilo podržava proširivanje naziva uređaja <ph name="MACHINE_NAME_VARIABLE" /> na naziv uređaja Active Directoryja ili njegov podniz. Na primjer, ako naziv uređaja glasi <ph name="MACHINE_NAME_EXAMPLE" />, onda će se <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> zamijenjen s četiri znaka počevši od šestog položaja, tj. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Položaj je utemeljen na nuli.
-      </translation>
 <translation id="2294382669900758280">Reprodukcija videozapisa u Android aplikacijama ne uzima se u obzir, čak i ako se to pravilo postavi na <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfigurira zadanu stranicu nove kartice u pregledniku <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Odredi popis omogućenih dodataka</translation>
@@ -596,9 +581,6 @@
           Sve novije verzije poslužitelja Samba i Windows podržavaju NTLMv2. To treba biti onemogućeno samo za kompatibilnost sa starijim verzijama i smanjuje sigurnost autentifikacije.
 
           Ako to pravilo nije postavljeno, zadana je vrijednost True i NTLMv2 je omogućen.</translation>
-<translation id="2598508021807251719">Konfigurira jezike na kojima se <ph name="PRODUCT_OS_NAME" /> može prikazivati.
-
-      Ako se to pravilo postavi, korisnik može konfigurirati da se <ph name="PRODUCT_OS_NAME" /> prikazuje samo na jednom od jezika navedenih ovim pravilom. Ako se to pravilo ne postavi ili se postavi na prazan popis, moguće je prikazivati <ph name="PRODUCT_OS_NAME" /> na svim podržanim jezicima korisničkog sučelja. Ako se to pravilo postavi na popis s nevažećim vrijednostima, sve će se nevažeće vrijednosti zanemariti. Ako je korisnik prethodno konfigurirao da se <ph name="PRODUCT_OS_NAME" /> prikazuje na jeziku koji nije dopušten ovim pravilom, jezik prikaza prebacit će se na dopušteni jezik korisničkog sučelja sljedeći put kada se korisnik prijavi. Ako je korisnik konfigurirao preferirane jezike i jedan od njih dopušten je ovim pravilom, <ph name="PRODUCT_OS_NAME" /> prelazi na taj jezik. U suprotnom, <ph name="PRODUCT_OS_NAME" /> prelazi na prvu važeću vrijednost navedenu tim pravilom ili na zamjenski jezik (trenutačno en-US), ako pravilo sadrži samo nevažeće unose.</translation>
 <translation id="2604182581880595781">Konfiguriranje pravila povezanih s mrežnim dijeljenjem datoteka.</translation>
 <translation id="2623014935069176671">Pričekaj početnu aktivnost korisnika</translation>
 <translation id="262740370354162807">Omogući slanje dokumenata na uslugu <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -811,6 +793,7 @@
 
           Ako se to pravilo ne postavi, korisnici će moći sami odabrati postavke proxyja.</translation>
 <translation id="3205825995289802549">Maksimiziraj prvi prozor preglednika pri prvom pokretanju</translation>
+<translation id="3211426942294667684">Postavke prijave putem preglednika</translation>
 <translation id="3213821784736959823">Kontrolira primjenjuje li se ugrađeni DNS klijent u proizvodu <ph name="PRODUCT_NAME" />.
 
       Ako je to pravilo postavljeno na točno, primijenit će se ugrađeni DNS klijent ako je dostupan.
@@ -1079,6 +1062,15 @@
       Ako ne postavite to pravilo, <ph name="PRODUCT_NAME" /> upotrebljava svoj uobičajeni zadani direktorij (ovisno o platformi).
 
       Popis varijabli koje se mogu upotrebljavati potražite na stranici https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables.</translation>
+<translation id="3904459740090265495">To pravilo upravlja ponašanjem prijave putem preglednika. Omogućuje vam da odredite može li se korisnik prijaviti na preglednik <ph name="PRODUCT_NAME" /> svojim računom i upotrebljavati usluge povezane s računom kao što je Chrome sinkronizacija.
+
+      Ako se to pravilo postavi na "Onemogući prijavu putem preglednika", korisnik se ne može prijaviti na preglednik i upotrebljavati usluge na temelju računa. U tom se slučaju značajke na razini preglednika kao što je Chrome sinkronizacija ne mogu upotrebljavati i neće biti dostupne. Ako je korisnik bio prijavljen i pravilo se postavi na "Onemogućeno", korisnik će se odjaviti sljedeći put kad pokrene Chrome, no zadržat će se lokalni podaci profila kao što su oznake, zaporke itd. Korisnik će se i dalje moći prijaviti na Googleove web-usluge kao što je Gmail i moći će ih upotrebljavati.
+
+      Ako se to pravilo postavi na "Omogući prijavu putem preglednika", korisnik se može prijaviti na preglednik i automatski se prijavljuje na preglednik kad se prijavi na Googleove web-usluge kao što je Gmail. Biti prijavljen na preglednik znači da će preglednik spremati podatke o korisnikovom računu. No to ne znači da će Chrome sinkronizacija biti uključena prema zadanim postavkama; da bi upotrebljavao tu značajku, korisnik se mora uključiti zasebno. Ako se to pravilo omogući, korisnik neće moći isključiti postavku koja omogućuje prijavu na preglednik. Da biste kontrolirali dostupnost Chrome sinkronizacije, upotrijebite pravilo "SyncDisabled".
+
+      Ako se pravilo postavi na "Nametni prijavu putem preglednika", korisniku se prikazuje dijaloški okvir za odabir računa i on mora odabrati račun i prijaviti se da bi upotrebljavao preglednik. Na taj se način za upravljane račune osigurava primjena i provedba pravila povezanih s računom. Prema zadanim postavkama time se uključuje Chrome sinkronizacija za račun, osim kad je sinkronizaciju onemogućio administrator domene ili kad je onemogućena putem pravila "SyncDisabled". Zadana vrijednost za BrowserGuestModeEnabled bit će postavljena na False. Postojeći neprijavljeni profili bit će zaključani i neće biti dostupni nakon što se to pravilo omogući. Više informacija potražite u članku centra za pomoć: https://support.google.com/chrome/a/answer/7572556.
+
+      Ako se to pravilo ne postavi, korisnik može odlučiti hoće li omogućiti opciju prijave putem preglednika i može je upotrebljavati kako želi.</translation>
 <translation id="3911737181201537215">To pravilo nema utjecaja na Androidovo bilježenje u zapisnike.</translation>
 <translation id="391531815696899618">Onemogućuje sinkronizaciju Google diska u aplikaciji Datoteke za <ph name="PRODUCT_OS_NAME" /> kada je postavljeno na točno. U tom se slučaju nikakvi podaci ne prenose na Google disk.
 
@@ -1127,6 +1119,7 @@
 
       Napominjemo da se to pravilo zanemaruje i da su Googleove usluge lokacije uvijek onemogućene kada je pravilo <ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME" /> postavljeno na <ph name="BLOCK_GEOLOCATION_SETTING" />.</translation>
 <translation id="408029843066770167">Dopusti upute Googleovoj usluzi za vrijeme</translation>
+<translation id="408076456549153854">Omogući prijavu putem preglednika</translation>
 <translation id="4088589230932595924">Anoniman način rada prisilno je uključen</translation>
 <translation id="4088983553732356374">Omogućuje vam da odredite je li web-lokacijama dopušteno postavljanje lokalnih podataka. Postavljanje lokalnih podataka može biti dopušteno za sve web-lokacije ili odbijeno za sve web-lokacije.
 
@@ -1431,6 +1424,7 @@
 <translation id="4962262530309732070">Ako se pravilo postavi na točno ili se ne konfigurira, <ph name="PRODUCT_NAME" /> dopustit će dodavanje osoba iz upravitelja korisnika.
 
       Ako se pravilo postavi na netočno, <ph name="PRODUCT_NAME" /> neće dopustiti izradu novih profila iz upravitelja profila.</translation>
+<translation id="4970855112942626932">Onemogući prijavu putem preglednika</translation>
 <translation id="4971529314808359013">Omogućuje vam da navedete popis uzoraka URL-ova koji određuju web-lokacije za koje <ph name="PRODUCT_NAME" /> treba automatski odabrati klijentski certifikat, ako web-lokacija zahtijeva certifikat.
 
           Vrijednost mora biti polje JSON rječnika u nizovima. Svaki rječnik mora biti u obliku { "pattern": "$URL_PATTERN", "filter" : $FILTER }, pri čemu je $URL_PATTERN uzorak postavke sadržaja. $FILTER ograničava između kojih će klijentskih certifikata preglednik automatski birati. Neovisno o filtru, birat će se samo certifikati koji se podudaraju sa zahtjevom poslužitelja za certifikat. Ako je $FILTER u obliku { "ISSUER": { "CN": "$ISSUER_CN" } }, dodatno se biraju samo klijentski certifikati koje izdaje certifikat koji ima CommonName $ISSUER_CN. Ako je $FILTER prazan rječnik {}, odabir klijentskih certifikata nije dodatno ograničen.
@@ -1463,13 +1457,6 @@
 <translation id="5130288486815037971">Omogućivanje RC4 paketa šifri u TLS-u</translation>
 <translation id="5141670636904227950">Postavljanje zadane vrste povećala na "omogućeno" na zaslonu za prijavu</translation>
 <translation id="5142301680741828703">Uvijek prikaži sljedeće URL obrasce u okviru <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Odredite naziv hosta uređaja koji se upotrebljava u DHCP zahtjevima.
-
-      Ako je to pravilo postavljeno na niz koji nije prazan, taj će se niz upotrebljavati kao naziv hosta uređaja tijekom DHCP zahtjeva.
-
-      Niz može sadržavati varijable ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} koje bi bile zamijenjene vrijednostima na uređaju prije njegove upotrebe za naziv hosta. Dobivena zamjena treba biti valjani naziv hosta (za RFC 1035, odjeljak 3.1).
-
-      Ako to pravilo nije postavljeno ili vrijednost nakon zamjene nije valjani naziv hosta, u DHCP zahtjevu neće biti postavljen naziv hosta. </translation>
 <translation id="5148753489738115745">Omogućuje vam da odredite dodatne parametre koji se upotrebljavaju kada <ph name="PRODUCT_FRAME_NAME" /> pokreće uslugu <ph name="PRODUCT_NAME" />.
 
           Ako se to pravilo ne postavi, upotrebljavat će se zadani naredbeni redak.</translation>
@@ -1700,7 +1687,6 @@
 <translation id="5835124959204887277">Određuje URL-ove i domene za koje se neće prikazivati upit kada se od sigurnosnih ključeva zatraže certifikati za ovjeru. Osim toga, sigurnosnom ključu bit će poslan signal koji pokazuje da se pojedina ovjera može upotrebljavati. Bez toga, korisnicima će se u Chromeu 65+ prikazati upit kada web-lokacije zatraže ovjeru sigurnosnih ključeva.
 
       URL-ovi (primjerice https://example.com/some/path) bit će odgovarajući samo kao ID-ovi aplikacija za U2F. Domene (primjerice example.com) bit će odgovarajuće samo kao RP ID-ovi za mrežnu provjeru autentičnosti. Znači, kako bi se obuhvatili API-ji i za U2F i za mrežnu provjeru autentičnosti za određenu web-lokaciju, moraju biti navedeni i URL i domena ID-a aplikacije.</translation>
-<translation id="5835412847081687053">Konfiguriranje dopuštenih jezika korisničkog sučelja u korisničkoj sesiji</translation>
 <translation id="5836064773277134605">Ograniči raspon UDP priključaka koji upotrebljava host za daljinski pristup</translation>
 <translation id="5862253018042179045">Postavi zadano stanje značajke pristupačnosti izgovaranja povratnih informacija na zaslonu za prijavu.
 
@@ -1822,6 +1808,7 @@
 
       Ako se pravilo ne konfigurira, popis uklonjivih USB uređaja ostaje prazan.</translation>
 <translation id="6083631234867522991">Windows (Windows klijenti):</translation>
+<translation id="6091233616732024397">Nametni korisnicima prijavu radi upotrebe preglednika</translation>
 <translation id="6093156968240188330">Dopusti udaljenim korisnicima da interakciju s privilegiranim prozorima u sesijama daljinske pomoći</translation>
 <translation id="6095999036251797924">Navodi koliko vremena treba proteći od posljednjeg korisničkog unosa da bi se zaslon zaključao dok radi na izmjeničnom napajanju ili bateriji.
 
@@ -1894,6 +1881,11 @@
 <translation id="6368011194414932347">Konfiguriraj URL početne stranice</translation>
 <translation id="6368403635025849609">Omogući JavaScript na ovim web-lokacijama</translation>
 <translation id="6376659517206731212">Može biti obavezno</translation>
+<translation id="6377355597423503887">To je pravilo obustavljeno i umjesto njega možete upotrijebiti BrowserSignin.
+
+      Korisniku omogućuje prijavu na preglednik <ph name="PRODUCT_NAME" />.
+
+      Ako postavite to pravilo, možete konfigurirati je li korisniku dopuštena prijava na <ph name="PRODUCT_NAME" />. Ako pravilo postavite na "False", aplikacije i proširenja koje upotrebljavaju API chrome.identity prestat će funkcionirati, pa je zato bolje upotrijebiti pravilo SyncDisabled.</translation>
 <translation id="6378076389057087301">Odredi utječe li zvučna aktivnost na upravljanje napajanjem</translation>
 <translation id="637934607141010488">Generira popis korisnika uređaja koji su se nedavno prijavili.
 
@@ -2804,6 +2796,11 @@
 <translation id="8548832052135586762">Postavlja ispis na samo u boji, samo jednobojni ili određuje da nema ograničenja načina boje. Ako se pravilo ne postavi, smatra se da nema ograničenja.</translation>
 <translation id="8549772397068118889">Upozori kada se posjećuju web-lokacije izvan paketa sadržaja</translation>
 <translation id="8566842294717252664">Skrivanje web-trgovine na web-stranici nove kartice i pokretaču aplikacija</translation>
+<translation id="857369585509260201">To je pravilo obustavljeno i umjesto njega možete upotrijebiti BrowserSignin.
+
+      Ako se to pravilo postavi na True, korisnik se mora prijaviti na <ph name="PRODUCT_NAME" /> svojim profilom da bi mogao upotrebljavati taj preglednik. Zadana vrijednost za BrowserGuestModeEnabled postavit će se na False. Napominjemo da će nakon omogućivanja tog pravila postojeći neprijavljeni profili biti zaključani i neće im biti moguće pristupiti. Više informacija možete pronaći u članku centra za pomoć.
+
+      Ako se to pravilo postavi na False ili se ne konfigurira, korisnik može upotrebljavati preglednik bez prijave na <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8586528890725660268">Određuje pisače koje korisnik ne može upotrebljavati.
 
       To se pravilo upotrebljava samo ako je pravilo <ph name="PRINTERS_BLACKLIST" /> odabrano za <ph name="BULK_PRINTERS_ACCESS_MODE" />.
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb
index c26f974..13b0860 100644
--- a/components/policy/resources/policy_templates_hu.xtb
+++ b/components/policy/resources/policy_templates_hu.xtb
@@ -487,21 +487,6 @@
       A helyesírás-ellenőrzés továbbra is elvégezhető egy letöltött szótár használatával, ez a házirend csak az internetes szolgáltatás használatát szabályozza.
 
        Ha nincs megadva ez a beállítás, akkor a felhasználók választhatnak, hogy használják-e a helyesírás-ellenőrző szolgáltatást vagy sem.</translation>
-<translation id="2294283832646774959">Konfigurálja a nyomtatók listáját.
-
-      Ez a házirend lehetővé teszi a rendszergazdák számára, hogy 
-      nyomtatóbeállításokat biztosítsanak felhasználóiknak.
-
-      A(z) <ph name="PRINTER_DISPLAY_NAME" /> és <ph name="PRINTER_DESCRIPTION" /> szabad formájú karakterláncok, amelyek személyre szabhatók a nyomtatóválasztás megkönnyítése érdekében. A(z) <ph name="PRINTER_MANUFACTURER" /> és <ph name="PRINTER_MODEL" /> a nyomtató végfelhasználó általi azonosításának megkönnyítésére szolgálnak. A nyomtató gyártóját és modelljét jelölik. A(z) <ph name="PRINTER_URI" /> linknek olyan címnek kell lennie, amelyhez hozzáfér az ügyfélszámítógép, és amely tartalmazza a következőket: <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> és <ph name="URI_QUEUE" />. A(z) <ph name="PRINTER_UUID" /> megadása nem kötelező. Ha meg van adva, segít elkerülni a(z) <ph name="ZEROCONF_DISCOVERY" /> nyomtatók ismétlődését.
-
-      A(z) <ph name="PRINTER_EFFECTIVE_MODEL" /> karakterláncnak meg kell egyeznie a(z) <ph name="PRODUCT_NAME" /> támogatott nyomtatóinak egyikét képviselő karakterlánccal. A karakterlánc a nyomtatóhoz tartozó megfelelő PPD azonosításához és telepítéséhez szükséges. További információ a következő linken található: https://support.google.com/chrome?p=noncloudprint.
-
-      A nyomtató beállítása a nyomtató első használatakor történik. A PPD-k csak a nyomtató használatát követően töltődnek le. Ezután a gyakran használt PPD-k a gyorsítótárba kerülnek.
-
-      A házirend nem befolyásolja, hogy a felhasználók beállíthatják-e a nyomtatókat saját eszközeiken. A házirend célja, hogy kiegészítse az egyéni felhasználók nyomtatóbeállításait.
-
-      Az Active Directory által kezelt eszközöknél a házirend támogatja a(z) <ph name="MACHINE_NAME_VARIABLE" /> kibővítését az Active Directory gép nevére, vagy annak karakterláncrészére. Ha például a gép neve <ph name="MACHINE_NAME_EXAMPLE" />, akkor a(z) <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> karakterláncot a 6. pozíciónál kezdődő négy karakter helyettesíti, vagyis: <ph name="MACHINE_NAME_PART_EXAMPLE" />. Megjegyzés: A pozíció meghatározásához a kiindulási pont a nulla.
-      </translation>
 <translation id="2294382669900758280">Az androidos alkalmazásokban való videólejátszást a rendszer akkor is figyelmen kívül hagyja, ha a házirend beállítása <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Az alapértelmezett Új lap oldal beállítása a(z) <ph name="PRODUCT_NAME" /> böngészőben.</translation>
 <translation id="2299220924812062390">Adja meg az engedélyezett bővítmények listáját</translation>
@@ -606,9 +591,6 @@
           A Samba- és Windows-szerverek összes újabb verziója támogatja az NTLMv2 hitelesítést. Ennek kikapcsolása csökkenti a hitelesítés biztonságát, és csak az előző verziókkal való kompatibilitáshoz ajánlott.
 
           Amennyiben a házirend nincs beállítva, az alapértelmezett értéke „igaz”, és az NTLMv2 engedélyezett.</translation>
-<translation id="2598508021807251719">Konfigurálja a nyelveket, amelyeken a <ph name="PRODUCT_OS_NAME" /> megjeleníthető.
-
-      Ha beállítja a házirendet, a felhasználó kizárólag a házirend által megadott nyelvek egyikén használhatja a <ph name="PRODUCT_OS_NAME" /> rendszert. Ha a házirend nincs beállítva, vagy ha üres listára van állítva, akkor a <ph name="PRODUCT_OS_NAME" /> a kezelőfelület összes támogatott nyelvén megjeleníthető. Ha a házirend érvénytelen értékeket tartalmazó listára van állítva, a böngésző figyelmen kívül hagyja az összes érvénytelen értéket. Ha a felhasználó korábban olyan nyelvre állította be a <ph name="PRODUCT_OS_NAME" /> rendszert, amelyet a házirend nem engedélyez, akkor a megjelenítési nyelv a kezelőfelület valamelyik engedélyezett nyelvére változik a felhasználó következő bejelentkezésekor. Ha a felhasználó megadott előnyben részesített nyelveket, és ezen előnyben részesített nyelvek egyikét engedélyezi a házirend, akkor a <ph name="PRODUCT_OS_NAME" /> arra a nyelvre vált. Máskülönben a <ph name="PRODUCT_OS_NAME" /> a házirend által megadott első érvényes értékre, illetve – amennyiben a házirend csak érvénytelen bejegyzéseket tartalmaz – a tartalék nyelvi beállításra (jelenleg en-US) vált.</translation>
 <translation id="2604182581880595781">A Hálózati fájlmegosztásokra vonatkozó házirendek konfigurálása.</translation>
 <translation id="2623014935069176671">Várakozás a kezdeti felhasználói tevékenységre</translation>
 <translation id="262740370354162807">A dokumentumok <ph name="CLOUD_PRINT_NAME" /> szolgáltatás részére való benyújtásának engedélyezése</translation>
@@ -1469,13 +1451,6 @@
 <translation id="5130288486815037971">Engedélyezve vannak-e az RC4 rejtjelezési csomagok a TLS protokollban</translation>
 <translation id="5141670636904227950">A bejelentkezési képernyőn engedélyezett alapértelmezett nagyítótípus beállítása</translation>
 <translation id="5142301680741828703">Mindig a <ph name="PRODUCT_FRAME_NAME" /> segítségével jelenítse meg a következő URL-mintákat</translation>
-<translation id="5147665094011258322">Az eszköz által DHCP-kérelmekben használt gazdagépnév meghatározása.
-
-      Ha a házirend nem üres karakterláncra van állítva, a rendszer az adott a karakterláncot használja gazdagépnévként a DHCP-kérelmeknél.
-
-      A karakterlánc tartalmazhat változókat – ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} –, amelyeket a rendszer különböző értékekkel helyettesít az eszközön a gazdagépnévként való használat előtt. Így a csere után érvényes gazdagépnév keletkezik (az RFC 1035 című dokumentum 3.1-es szakasza szerint).
-
-      Ha nincs beállítva a házirend, illetve ha a csere érvénytelen gazdagépnevet eredményez, a DHCP-kérelemben nem kerül sor a gazdagépnév beállítására. </translation>
 <translation id="5148753489738115745">Lehetővé teszi további paraméterek megadását, amelyeket a(z) <ph name="PRODUCT_FRAME_NAME" /> használ a(z) <ph name="PRODUCT_NAME" /> indításakor.
 
           Ha nincs beállítva ez a házirend, akkor a rendszer az alapértelmezett parancssort használja.</translation>
@@ -1702,7 +1677,6 @@
 <translation id="5835124959204887277">Meghatározza azokat az URL-eket és domaineket, amelyeknél nem jelenik meg értesítés a hitelesítési tanúsítványok biztonsági hardverkulcsoktól való kérésekor. Továbbá jelet küld a biztonsági hardverkulcsnak annak a jelzésére, hogy egyedi hitelesítésre kerülhet sor. Enélkül a Chrome 65-ös és újabb verzióinak felhasználói értesítést kapnak, amikor a webhelyek biztonsági hardverkulcs általi hitelesítést kérnek.
 
       Az URL-ek (például https://example.com/some/path) csak U2F-alkalmazásazonosítóként felelnek meg. A domainek (például example.com) csak webes hitelesítésű RP-azonosítóként felelnek meg. Ezért az adott webhely U2F és webes hitelesítésű API-jainak lefedése érdekében az alkalmazásazonosító URL-jének és domainjének is szerepelnie kell a listában.</translation>
-<translation id="5835412847081687053">A felhasználói munkamenetben engedélyezett kezelőfelületi nyelvek konfigurálása</translation>
 <translation id="5836064773277134605">A távoli gazdagép által használt UDP porttartomány korlátozása</translation>
 <translation id="5862253018042179045">A hangos visszajelzés kisegítő lehetőség alapértelmezett állapotának beállítása a bejelentkezési képernyőn.
 
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index d81f671..66ec4b0 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -473,21 +473,6 @@
       Memeriksa ejaan tetap dapat dilakukan menggunakan kamus yang didownload; kebijakan ini hanya mengontrol penggunaan layanan online.
 
       Jika setelan ini tidak dikonfigurasi, maka pengguna dapat memilih apakah layanan memeriksa ejaan harus digunakan atau tidak.</translation>
-<translation id="2294283832646774959">Mengonfigurasi daftar printer.
-
-      Kebijakan ini memungkinkan administrator memberikan konfigurasi printer untuk
-      pengguna.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> dan <ph name="PRINTER_DESCRIPTION" /> string format bebas yang dapat disesuaikan untuk mempermudah pemilihan printer. Info <ph name="PRINTER_MANUFACTURER" /> dan <ph name="PRINTER_MODEL" /> diberikan agar pengguna akhir mudah mengidentifikasi printer. Keduanya mewakili produsen dan model printer. <ph name="PRINTER_URI" /> harus berupa alamat yang dapat dijangkau dari komputer klien, termasuk <ph name="URI_SCHEME" />, <ph name="URI_PORT" />, dan <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> bersifat opsional. Jika tersedia, akan digunakan untuk membantu menghapus duplikat printer <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> harus cocok dengan salah satu string yang mewakili printer <ph name="PRODUCT_NAME" /> yang didukung. String ini akan digunakan untuk mengidentifikasi dan menginstal PPD yang sesuai untuk printer. Informasi selengkapnya dapat ditemukan di https://support.google.com/chrome?p=noncloudprint.
-
-      Penyiapan printer diselesaikan pada saat penggunaan printer yang pertama.  PPD tidak didownload sebelum printer digunakan.  Setelah waktu tersebut, PPD yang sering digunakan akan disimpan dalam cache.
-
-      Kebijakan ini tidak memengaruhi kemampuan pengguna untuk mengonfigurasi printer di tiap perangkat.  Kebijakan ini ditujukan sebagai tambahan untuk konfigurasi printer yang diberikan oleh tiap pengguna.
-
-      Untuk perangkat yang dikelola Active Directory, kebijakan ini mendukung perluasan <ph name="MACHINE_NAME_VARIABLE" /> ke nama mesin Active Directory atau substring-nya. Misalnya, jika nama mesin <ph name="MACHINE_NAME_EXAMPLE" />, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> akan diganti dengan 4 karakter yang dimulai setelah posisi keenam, yaitu <ph name="MACHINE_NAME_PART_EXAMPLE" />. Perhatikan bahwa posisinya mulai dari nol.
-      </translation>
 <translation id="2294382669900758280">Pemutaran video di aplikasi Android tidak dipertimbangkan, meski kebijakan ini disetel ke <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Mengonfigurasi halaman Tab Baru di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Tentukan daftar plugin yang diaktifkan</translation>
@@ -594,9 +579,6 @@
  mengurangi keamanan autentikasi.
 
           Jika kebijakan ini tidak disetel, default adalah true dan NTLMv2 diaktifkan.</translation>
-<translation id="2598508021807251719">Mengonfigurasi lokal yang digunakan untuk menampilkan <ph name="PRODUCT_OS_NAME" />.
-
-      Jika kebijakan ini disetel, pengguna hanya dapat mengonfigurasi <ph name="PRODUCT_OS_NAME" /> untuk ditampilkan di salah satu lokal yang ditentukan oleh kebijakan tersebut. Jika kebijakan ini tidak disetel atau disetel ke daftar kosong, <ph name="PRODUCT_OS_NAME" /> dapat ditampilkan di semua lokal yang didukung. Jika kebijakan ini disetel ke daftar yang memuat nilai yang tidak valid, maka semua nilai yang tidak valid akan diabaikan. Jika sebelumnya pengguna telah mengonfigurasi <ph name="PRODUCT_OS_NAME" /> untuk ditampilkan dalam bahasa yang tidak diizinkan oleh kebijakan ini, lokal tampilan akan dialihkan ke lokal yang diizinkan saat berikutnya pengguna login. Jika pengguna telah mengonfigurasi beberapa lokal pilihan, dan salah satu lokal pilihan itu diizinkan oleh kebijakan ini, <ph name="PRODUCT_OS_NAME" /> akan dialihkan ke lokal tersebut. Jika tidak, <ph name="PRODUCT_OS_NAME" /> akan dialihkan ke nilai valid pertama yang ditentukan oleh kebijakan ini, atau ke lokal alternatif yang telah ditentukan (saat ini en-US), jika kebijakan ini hanya memuat entri yang tidak valid.</translation>
 <translation id="2604182581880595781">Mengonfigurasi kebijakan terkait fitur Berbagi File Jaringan.</translation>
 <translation id="2623014935069176671">Tunggu aktivitas pengguna awal</translation>
 <translation id="262740370354162807">Aktifkan penyerahan dokumen ke <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1463,13 +1445,6 @@
 <translation id="5130288486815037971">Untuk mengetahui apakah cipher suite RC4 di TLS diaktifkan</translation>
 <translation id="5141670636904227950">Menyetel jenis lup default yang diaktifkan di layar masuk</translation>
 <translation id="5142301680741828703">Selalu mengurai pola URL berikut di <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Menentukan hostname perangkat yang digunakan di permintaan DHCP.
-
-      Jika kebijakan ini disetel ke string yang tidak kosong, string tersebut akan digunakan sebagai hostname perangkat selama proses permintaan DHCP.
-
-      String dapat berisi variabel ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} yang akan digantikan dengan nilai di perangkat sebelum digunakan sebagai hostname. Substitusi yang dihasilkan harus berupa hostname yang valid (menurut  RFC 1035, pasal 3.1).
-
-      Jika kebijakan ini tidak disetel, atau nilai setelah subsitusi bukan hostname yang valid, tidak ada hostname yang akan disetel di permintaan DHCP. </translation>
 <translation id="5148753489738115745">Memungkinkan Anda menentukan parameter tambahan yang digunakan saat <ph name="PRODUCT_FRAME_NAME" /> meluncurkan <ph name="PRODUCT_NAME" />.
 
           Jika kebijakan ini tidak disetel, baris perintah default akan digunakan.</translation>
@@ -1696,7 +1671,6 @@
 <translation id="5835124959204887277">Menentukan URL dan domain yang tidak akan diperlihatkan perintah saat sertifikat pengesahan dari Kunci Keamanan diminta. Selain itu, sinyal akan dikirimkan ke Kuanci Keamanan yang menandakan bahwa pengesahan satu per satu mungkin digunakan. Tanpa ini, pengguna akan diminta di Chrome 65+ jika situs meminta pengesahan Kunci Keamanan.
 
       URL (seperti https://example.com/some/path) hanya akan cocok sebagai U2F appID. Domain (seperti example.com) hanya akan cocok sebagai webauthn RP ID. Oleh karena itu, guna mencakup U2F dan webauthn API untuk situs tertentu, appID URL dan domain perlu dicantumkan.</translation>
-<translation id="5835412847081687053">Mengonfigurasi lokal UI yang diizinkan dalam sesi pengguna</translation>
 <translation id="5836064773277134605">Batasi jangkauan port UDP yang digunakan oleh hosting akses jarak jauh</translation>
 <translation id="5862253018042179045">Menyetel status default fitur aksesibilitas masukan yang diucapkan di layar masuk.
 
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 39780e8..dc0e61fd 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -458,21 +458,6 @@
       Il controllo ortografico può essere comunque effettuato utilizzando un dizionario scaricato; questa norma controlla soltanto l'utilizzo del servizio online.
 
       Se questa impostazione non è configurata, gli utenti possono scegliere se utilizzare o meno il servizio di controllo ortografico.</translation>
-<translation id="2294283832646774959">Consente di configurare un elenco di stampanti.
-
-      Questa norma consente agli amministratori di fornire configurazioni delle stampanti
-      ai propri utenti.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> e <ph name="PRINTER_DESCRIPTION" /> sono stringhe in formato libero che è possibile personalizzare per selezionare facilmente le stampanti. I valori <ph name="PRINTER_MANUFACTURER" /> e <ph name="PRINTER_MODEL" />, che rappresentano il produttore e il modello della stampante, consentono agli utenti finali di identificare più facilmente le stampanti. Il valore <ph name="PRINTER_URI" /> deve essere un indirizzo raggiungibile da un computer client che includa <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> e <ph name="URI_QUEUE" />. Il valore <ph name="PRINTER_UUID" /> è facoltativo, ma se viene specificato viene utilizzato per consentire la deduplicazione delle stampanti <ph name="ZEROCONF_DISCOVERY" />.
-
-      Il valore <ph name="PRINTER_EFFECTIVE_MODEL" /> deve corrispondere a una delle stringhe che rappresentano una stampante supportata da <ph name="PRODUCT_NAME" />. La stringa verrà usata per identificare e installare il file PPD appropriato per la stampante. È possibile trovare ulteriori informazioni all'indirizzo https://support.google.com/chrome?p=noncloudprint.
-
-      La configurazione viene completata al primo utilizzo della stampante. I file PPD vengono scaricati soltanto quando viene utilizzata la stampante. Dopodiché, i PPD utilizzati più spesso vengono memorizzati nella cache.
-
-      Questa norma non influisce sulla possibilità per gli utenti di configurare le stampanti su singoli dispositivi. È supplementare alla configurazione di stampanti da parte dei singoli utenti.
-
-      Per i dispositivi Active Directory gestiti, questa norma supporta l'espansione di <ph name="MACHINE_NAME_VARIABLE" /> al nome della macchina Active Directory oppure a una sua sottostringa. Ad esempio, se il nome della macchina è <ph name="MACHINE_NAME_EXAMPLE" />, allora la variabile <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> verrà sostituita dai quattro caratteri che iniziano dopo la sesta posizione, ad esempio, <ph name="MACHINE_NAME_PART_EXAMPLE" />. Tieni presente che la posizione è in base zero.
-      </translation>
 <translation id="2294382669900758280">Il video riprodotto nelle app Android non viene considerato, anche se la norma viene impostata su <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Configura la pagina predefinita Nuova scheda in <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Consente di specificare un elenco dei plug-in attivati</translation>
@@ -577,9 +562,6 @@
           Tutte le versioni recenti dei server Samba e Windows supportano l'autenticazione NTLMv2, che deve essere disattivata solo per garantire la compatibilità con le versioni precedenti, in quanto riduce la sicurezza dell'autenticazione.
 
           Se questa norma non viene impostata, l'impostazione predefinita è true e l'autenticazione NTLMv2 è attivata.</translation>
-<translation id="2598508021807251719">Questa norma consente di configurare le impostazioni internazionali che possono essere visualizzate in <ph name="PRODUCT_OS_NAME" />.
-
-      Se questa norma viene impostata, l'utente potrà configurare soltanto una delle impostazioni internazionali di <ph name="PRODUCT_OS_NAME" /> specificate da questa norma. Se la norma non viene impostata o viene impostato un elenco vuoto, <ph name="PRODUCT_OS_NAME" /> potrà essere visualizzato in tutte le impostazioni internazionali dell'interfaccia utente supportate. Se per questa norma viene impostato un elenco contenente valori non validi, tutti i valori non validi verranno ignorati. Se un utente aveva precedentemente configurato un'impostazione internazionale di <ph name="PRODUCT_OS_NAME" /> non consentita da questa norma, all'accesso successivo l'impostazione internazionale visualizzata verrà sostituita con una impostazione internazionale dell'interfaccia utente consentita. Se l'utente aveva configurato delle impostazioni internazionali preferite e una di queste è consentita da questa norma, in <ph name="PRODUCT_OS_NAME" /> verrà usata tale impostazione internazionale. In caso contrario, in <ph name="PRODUCT_OS_NAME" /> verrà usato il primo valore valido specificato da questa norma oppure, se la norma contiene soltanto voci non valide, verrà usata un'impostazione internazionale di riserva (attualmente en-US).</translation>
 <translation id="2604182581880595781">Configura le norme relative alla funzione Condivisioni file di rete</translation>
 <translation id="2623014935069176671">Attesa dell'attività iniziale dell'utente</translation>
 <translation id="262740370354162807">Attiva l'invio di documenti a <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1431,13 +1413,6 @@
 <translation id="5130288486815037971">Attiva o meno i pacchetti di crittografia RC4 in TLS</translation>
 <translation id="5141670636904227950">Impostazione tipo di ingrandimento dello schermo predefinito attivato nella schermata di accesso</translation>
 <translation id="5142301680741828703">Visualizza sempre i seguenti schemi di URL in <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Consente di stabilire il nome host del dispositivo usato nelle richieste DHCP.
-
-      Se per questa norma viene impostata una stringa, tale stringa verrà usata come nome host del dispositivo durante la richiesta DHCP.
-
-      La stringa può contenere variabili ${ASSET_ID}, ${SERIAL_NUM} e ${MAC_ADDR} che verrebbero sostituite con valori sul dispositivo prima di usare la stringa come nome host. La sostituzione finale dovrebbe essere un nome host valido (come da RFC 1035, sezione 3.1).
-
-      Se questa norma non viene impostata o se il valore ottenuto in seguito alla sostituzione non è un nome host valido, non verrà impostato alcun nome host nella richiesta DHCP. </translation>
 <translation id="5148753489738115745">Consente di specificare dei parametri aggiuntivi da utilizzare quando <ph name="PRODUCT_FRAME_NAME" /> avvia <ph name="PRODUCT_NAME" />.
 
 Se questa norma non viene impostata viene utilizzata la riga di comando predefinita.</translation>
@@ -1661,7 +1636,6 @@
 <translation id="5835124959204887277">Consente di specificare URL e domini per i quali non verranno mostrati messaggi quando verranno richiesti certificati di attestazione dei token di sicurezza. Verrà inoltre inviato un segnale al token di sicurezza per indicare che potrebbe essere usata la singola attestazione. Senza questo segnale, gli utenti di Chrome 65 e versioni successive riceveranno un messaggio quando i siti richiederanno l'attestazione dei token di sicurezza.
 
       Gli URL (ad esempio https://example.com/some/path) corrisponderanno soltanto ad appID U2F. I domini (come example.com) corrisponderanno soltanto a ID RP webauthn. Di conseguenza, per includere entrambe le API U2F e webauthn per un determinato sito, devono essere elencati sia il dominio sia l'URL appID.</translation>
-<translation id="5835412847081687053">Configura le impostazioni internazionali UI consentite in una sessione utente</translation>
 <translation id="5836064773277134605">Limita l'intervallo di porte UDP utilizzate dall'host di accesso remoto</translation>
 <translation id="5862253018042179045">Consente di impostare lo stato predefinito della funzione di accessibilità di lettura vocale nella schermata di accesso.
 
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb
index 48b5a39..a432002 100644
--- a/components/policy/resources/policy_templates_iw.xtb
+++ b/components/policy/resources/policy_templates_iw.xtb
@@ -477,20 +477,6 @@
       ניתן עדיין לבצע בדיקת איות באמצעות הורדת מילון; מדיניות זו שולטת רק בשימוש בשירות המקוון. 
 
       כאשר הגדרה זו אינה מוגדרת, המשתמשים יכולים לבחור אם להשתמש בשירות בדיקת האיות או לא.</translation>
-<translation id="2294283832646774959">‏מגדירה רשימת מדפסות.
-
-      מדיניות זו מאפשרת למנהלי מערכות לספק למשתמשים שלהם תצורות מדפסת.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> ו-<ph name="PRINTER_DESCRIPTION" /> הן מחרוזות בהתאמה אישית שמטרתן להקל על בחירת מדפסת. הערכים <ph name="PRINTER_MANUFACTURER" /> ו-<ph name="PRINTER_MODEL" /> משמשים לזיהוי קל של מדפסת על-ידי משתמשי קצה. הם מייצגים את היצרן והדגם של המדפסת. הערך <ph name="PRINTER_URI" /> צריך להיות כתובת הנגישה ממחשב לקוח, כולל ה-<ph name="URI_SCHEME" />, <ph name="URI_PORT" /> ו-<ph name="URI_QUEUE" />. הערך <ph name="PRINTER_UUID" /> הוא אופציונלי. אם מציינים אותו, הוא משמש כדי לעזור בביטול הכפילויות של <ph name="ZEROCONF_DISCOVERY" />.
-
-      הערך <ph name="PRINTER_EFFECTIVE_MODEL" /> חייב להתאים לאחת מהמחרוזות המייצגות מדפסת נתמכת של <ph name="PRODUCT_NAME" />. המחרוזת תשמש לזיהוי ולהתקנה של ה-PPD המתאים של המדפסת. מידע נוסף זמין בכתובת https://support.google.com/chrome?p=noncloudprint.
-
-      הגדרת המדפסת מסתיימת עם השימוש הראשון במדפסת. לא מתבצעת הורדה של קובצי PPD עד לשימוש במדפסת. לאחר מכן, קובצי PPD שנמצאים בשימוש לעתים קרובות נוספים לקובץ המטמון.
-
-      למדיניות הזו אין השפעה על היכולת של משתמשים להגדיר תצורת מדפסות במכשירים שונים. היא מיועדת לשמש כתוסף לתצורה של מדפסות שנקבעת על-ידי משתמשים שונים.
-
-      במכשירים המנוהלים על-ידי Active Directory, המדיניות הזו תומכת בהרחבה של <ph name="MACHINE_NAME_VARIABLE" /> לשם המחשב שמנוהל על-ידי Active Directory או למחרוזת משנה שלו. לדוגמה, אם שם המחשב הוא <ph name="MACHINE_NAME_EXAMPLE" />, הערך <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> יוחלף ב-4 התווים שמתחילים אחרי המיקום השישי. למשל, <ph name="MACHINE_NAME_PART_EXAMPLE" />. לתשומת ליבך, המיקום מבוסס על אפסים.
-      </translation>
 <translation id="2294382669900758280">‏הפעלת וידאו באפליקציות Android אינה מובאת בחשבון, גם אם המדיניות הזו מוגדרת כ-<ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">הגדר את ברירת המחדל לדף 'כרטיסייה חדשה' ב-<ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">ציין רשימה של יישומי פלאגין מופעלים</translation>
@@ -595,9 +581,6 @@
           כל הגירסאות האחרונות של שרתי Samba ו-Windows תומכים ב-NTLMv2. יש להשבית את האפשרות הזו רק אם יש צורך בתאימות לגירסאות קודמות. הגדרה זו מחלישה את אבטחת האימות.
 
           כשהמדיניות הזו לא מוגדרת, ברירת המחדל היא true ו-NTLMv2 מופעל.</translation>
-<translation id="2598508021807251719">‏מגדירה את שילובי השפה והאזור שבהם אפשר להציג את <ph name="PRODUCT_OS_NAME" />.
-
-      אם המדיניות הזו מוגדרת, המשתמש יכול להציג את <ph name="PRODUCT_OS_NAME" /> רק באחד משילובי השפה והאזור שצוינו במדיניות הזו. אם המדיניות הזו לא מוגדרת או אם היא מוגדרת בעזרת רשימה ריקה, אפשר להציג את <ph name="PRODUCT_OS_NAME" /> בכל השילובים הנתמכים של שפה ואזור. אם המדיניות הזו מוגדרת בעזרת רשימה שמכילה ערכים לא חוקיים, המערכת תתעלם מהערכים הלא חוקיים. אם משתמש הגדיר בעבר ש-<ph name="PRODUCT_OS_NAME" /> יוצג בשילוב שפה ואזור שאינו מורשה במדיניות הזו, בפעם הבאה שהמשתמש ייכנס לחשבון, שילוב השפה והאזור בממשק המשתמש ישתנה לשילוב מורשה. אם המשתמש הגדיר שילובים מועדפים של שפה ואזור, ואחד מהשילובים המועדפים מורשה במדיניות הזו, המערכת תקבע ש-<ph name="PRODUCT_OS_NAME" /> יוצג בעזרת השילוב הזה. אחרת, <ph name="PRODUCT_OS_NAME" /> יעבור אל הערך החוקי הראשון שצוין במדיניות הזו. אם המדיניות הזו מכילה רק ערכים לא חוקיים, ייעשה שימוש בשילוב של שפה ואזור שנקבע כברירת מחדל (נכון לעכשיו, en-US).</translation>
 <translation id="2604182581880595781">הגדרת כללי המדיניות הקשורים ל'התקן רשת לשיתוף קבצים'.</translation>
 <translation id="2623014935069176671">המתן לפעילות משתמש התחלתית</translation>
 <translation id="262740370354162807">אפשר הגשת מסמכים ל-<ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1463,13 +1446,6 @@
 <translation id="5130288486815037971">‏אם חבילות הצפנים של RC4 ב-TLS (אבטחת שכבת התעבורה) מופעלות</translation>
 <translation id="5141670636904227950">הגדר את סוג מגדיל התצוגה המוגדר כברירת מחדל המופעל במסך ההתחברות</translation>
 <translation id="5142301680741828703">עבד תמיד את הדפוסים הבאים של כתובות האתר ב-<ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">‏קובעת את שם המארח של המכשיר שבו נעשה שימוש בבקשות DHCP.
-
-      אם במדיניות הוגדרה מחרוזת שאינה ריקה, המחרוזת הזו תשמש בתור שם המארח של המכשיר במהלך הטיפול בבקשת DHCP.
-
-      המחרוזת יכולה לכלול משתנים ${ASSET_ID}, ‏${SERIAL_NUM}, ‏${MAC_ADDR} שיוחלפו על-ידי ערכים במכשיר לפני שייעשה שימוש כשם מארח. אחרי ההחלפה אמור להתקבל שם מארח חוקי (לפי RFC 1035, סעיף 3.1).
-
-      אם המדיניות הזו אינה מוגדרת, או אם הערך שיתקבל לאחר ההחלפה לא יהיה שם מארח חוקי, לא יוגדר שם מארח בבקשת DHCP. </translation>
 <translation id="5148753489738115745">מאפשר לך לציין פרמטרים נוספים הנמצאים בשימוש כאשר <ph name="PRODUCT_FRAME_NAME" /> מפעיל את <ph name="PRODUCT_NAME" />.
 
           אם מדיניות זו לא מוגדרת, ייעשה שימוש בשורת הפקודה המוגדרת כברירת מחדל.</translation>
@@ -1689,7 +1665,6 @@
 <translation id="5835124959204887277">‏מציינת כתובות אתרים ודומיינים שעבורם לא תוצג בקשה כשיתבקשו אישורי הזדהות ממפתחות אבטחה. בנוסף, יישלח אות אל מפתח האבטחה כדי לציין שייתכן כי ייעשה שימוש בהזדהות נפרדת. אם מדיניות זו לא תוגדר, משתמשים ב-Chrome מגירסה 65 ואילך יראו הודעה כשאתרים יבקשו הזדהות של מפתחות אבטחה.
 
       כתובות אתרים (כמו https://example.com/some/path) יתאימו רק כמזהי appID מסוג U2F. דומיינים (כמו example.com) מתאימים רק כמזהי webauthn RP. לכן, כדי להתאים ל-API של U2F וגם של webauthn בשביל אתר מסוים, יש לרשום גם את כתובת האתר וגם את הדומיין של ה-appID.</translation>
-<translation id="5835412847081687053">הגדרת השילובים המותרים של שפה ואזור שבהם אפשר להציג את סשן המשתמש</translation>
 <translation id="5836064773277134605">‏הגבל את טווח יציאות UDP שבהן נעשה שימוש על ידי מארח הגישה המרוחקת</translation>
 <translation id="5862253018042179045">‏הגדר את מצב ברירת המחדל של תכונת הנגישות של משוב קולי במסך ההתחברות.
 
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 8ac3826..a2e5279 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -482,21 +482,6 @@
       スペルチェックはダウンロードされた辞書を使って行うこともできます。このポリシーでは、オンライン サービスの利用のみをコントロールします。
 
       これが未設定の場合、スペルチェック サービスを使用するかどうかをユーザーが選択できます。</translation>
-<translation id="2294283832646774959">プリンタのリストを設定します。
-
-      管理者はこのポリシーを使ってユーザーのプリンタ設定を
-      指定できます。
-
-      <ph name="PRINTER_DISPLAY_NAME" /> と <ph name="PRINTER_DESCRIPTION" /> は自由形式の文字列で、プリンタを選択しやすいようにカスタマイズできます。<ph name="PRINTER_MANUFACTURER" /> と <ph name="PRINTER_MODEL" /> は、エンドユーザーがプリンタを識別しやすいようにするための情報で、それぞれプリンタの製造元と機種を表します。<ph name="PRINTER_URI" /> は、クライアントのパソコンからアクセス可能な、<ph name="URI_SCHEME" />、<ph name="URI_PORT" />、<ph name="URI_QUEUE" /> を含むアドレスである必要があります。<ph name="PRINTER_UUID" /> の指定は任意で、指定した場合は <ph name="ZEROCONF_DISCOVERY" /> プリンタの重複除外に使用されます。
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> は、<ph name="PRODUCT_NAME" /> の対応プリンタを示す文字列のいずれかと一致する必要があります。この文字列は、プリンタに適した PPD を特定してインストールする目的で使用されます。詳細については、https://support.google.com/chrome?p=noncloudprint をご覧ください。
-
-      プリンタの設定は初回使用時に行われ、プリンタが使用されるときに初めて PPD がダウンロードされます。以降、使用頻度の高い PPD はキャッシュされます。
-
-      このポリシーは、ユーザーが個々のデバイスでプリンタを設定できるかどうかに影響するものではなく、個々のユーザーがプリンタを設定するときの補助として使用されることを想定したものです。
-
-      Active Directory の管理下にあるデバイスの場合、このポリシーでは、<ph name="MACHINE_NAME_VARIABLE" /> から Active Directory のマシン名またはその部分文字列への展開がサポートされます。たとえばマシン名が <ph name="MACHINE_NAME_EXAMPLE" /> の場合、<ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> は 6 文字目以降の 4 文字、つまり <ph name="MACHINE_NAME_PART_EXAMPLE" /> に置き換えられます(先頭をゼロ文字目として数えます)。
-      </translation>
 <translation id="2294382669900758280">Android アプリで再生中の動画は、このポリシーを <ph name="TRUE" /> に設定した場合でも考慮されません。</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> のデフォルトの新しいタブページを設定します。</translation>
 <translation id="2299220924812062390">有効なプラグインのリストを指定する</translation>
@@ -601,9 +586,6 @@
           比較的新しいバージョンの Samba サーバーと Windows サーバーでは NTLMv2 がサポートされています。この設定は、古いバージョンとの互換性が必要な場合にのみ無効にしてください。無効にした場合は、認証のセキュリティが低下します。
 
           このポリシーが未設定の場合、デフォルトは true で、NTLMv2 は有効になります。</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" /> の表示用の言語 / 地域を設定します。
-
-      このポリシーが設定されている場合、ユーザーはこのポリシーで指定された言語 / 地域からのみ <ph name="PRODUCT_OS_NAME" /> の表示用の言語 / 地域を選択できます。このポリシーが設定されていない場合や空のリストが指定されている場合は、サポートされているすべての UI 言語 / 地域から <ph name="PRODUCT_OS_NAME" /> の表示用の言語 / 地域を選択できます。このポリシーで指定されているリストに含まれる無効な値はすべて無視されます。ユーザーがすでに選択していた <ph name="PRODUCT_OS_NAME" /> の表示用の言語 / 地域がこのポリシーで許可されていない場合は、ユーザーの次回のログイン時に表示用の言語 / 地域が切り替えられ、許可されている UI 言語 / 地域が使用されます。ユーザーが希望の言語 / 地域をいくつか指定していて、そのいずれかがこのポリシーで許可されている場合、<ph name="PRODUCT_OS_NAME" /> はその言語 / 地域に切り替えられます。それ以外の場合、<ph name="PRODUCT_OS_NAME" /> はこのポリシーで指定されている最初の有効な言語 / 地域に切り替えられるか、ポリシーの値がいずれも無効であれば代替の言語 / 地域(現在は「en-US」)に切り替えられます。</translation>
 <translation id="2604182581880595781">ネットワーク ファイル共有に関連するポリシーを設定します。</translation>
 <translation id="2623014935069176671">最初のユーザー操作を待機する</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" /> へのドキュメントの送信を有効にします。</translation>
@@ -1469,13 +1451,6 @@
 <translation id="5130288486815037971">TLS の RC4 暗号スイートを有効にするかどうかを指定する</translation>
 <translation id="5141670636904227950">ログイン画面で有効にする画面拡大鏡のデフォルトのタイプを設定する</translation>
 <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" /> で次の URL パターンを常に表示する</translation>
-<translation id="5147665094011258322">DHCP リクエストで使用する端末のホスト名を指定します。
-
-      このポリシーに空白以外の文字列が指定されている場合は、その文字列が DHCP リクエストの際に端末のホスト名として使用されます。
-
-      この文字列には変数 ${ASSET_ID}、${SERIAL_NUM}、${MAC_ADDR} を含めることができます。文字列がホスト名として使用される前に、これらの変数は端末の値に置き換えられます。変数の解決後の名前は、RFC 1035 の 3.1 項に準拠した有効なホスト名となる必要があります。
-
-      このポリシーが設定されていないか、変数の解決後の名前が有効なホスト名ではない場合、DHCP リクエストにはホスト名は設定されません。 </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> により <ph name="PRODUCT_NAME" /> が起動される際に使用される追加パラメータを指定することができます。
 
           このポリシーを設定していない場合、デフォルト コマンド ラインが使用されます。</translation>
@@ -1702,7 +1677,6 @@
 <translation id="5835124959204887277">セキュリティ キーからの認証証明書がリクエストされたときに確認メッセージを表示しない URL とドメインを指定します。このとき、セキュリティ キーには個人認証が使用されることを示す信号が送信されます。この指定がない場合、Chrome 65 以上のバージョンでは、サイトからセキュリティ キーの認証がリクエストされたときにユーザーに確認メッセージが表示されます。
 
       URL(https://example.com/some/path など)は U2F の appID としてのみ照合され、ドメイン(example.com など)は webauthn の RP ID としてのみ照合されます。つまり、サイトの U2F と webauthn の両方の API に対応するには、appID URL とドメインを列挙する必要があります。</translation>
-<translation id="5835412847081687053">ユーザー セッションで許可する UI 言語 / 地域を設定する</translation>
 <translation id="5836064773277134605">リモート アクセス ホストが使用する UDP ポートの範囲を制限する</translation>
 <translation id="5862253018042179045">ログイン画面でのユーザー補助機能「音声フィードバック」のデフォルト状態を設定します。
 
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb
index 41f2e4a..2f2dbae 100644
--- a/components/policy/resources/policy_templates_kn.xtb
+++ b/components/policy/resources/policy_templates_kn.xtb
@@ -520,20 +520,6 @@
 ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ನಿಘಂಟನ್ನು ಬಳಸಿಕೊಂಡು ಕಾಗುಣಿತ ಪರಿಶೀಲನೆಯನ್ನು ಈಗಲೂ ಮಾಡಬಹುದಾಗಿದೆ; ಈ ನೀತಿಯು ಆನ್‌ಲೈನ್ ಸೇವೆಯ ಬಳಕೆಯನ್ನು ಮಾತ್ರ ನಿಯಂತ್ರಿಸುತ್ತದೆ.
 
 ಈ ಸೆಟ್ಟಿಂಗ್ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದರೆ ನಂತರ ಬಳಕೆದಾರರು ಕಾಗುಣಿತ ಪರಿಶೀಲನೆಯ ಸೇವೆಯನ್ನು ಬಳಸಿದ್ದಾರೆಯೇ ಅಥವಾ ಇಲ್ಲವೇ ಎಂಬುದನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು.</translation>
-<translation id="2294283832646774959">ಪ್ರಿಂಟರ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತದೆ.
-
-      ನಿರ್ವಾಹಕರು, ಬಳಕೆದಾರರಿಗೆ ಪ್ರಿಂಟರ್ ಕಾನ್ಫಿಗರೇಶನ್‌ಗಳನ್ನು ಒದಗಿಸಲು ಈ ಕಾರ್ಯನೀತಿಯು ಅವಕಾಶ ನೀಡುತ್ತದೆ.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> ಮತ್ತು <ph name="PRINTER_DESCRIPTION" /> ಮುಕ್ತ-ರೂಪದ ಸ್ಟ್ರಿಂಗ್‌ಗಳಾಗಿದ್ದು, ಪ್ರಿಂಟರ್ ಅನ್ನು ಸುಲಭವಾಗಿ ಆಯ್ಕೆ ಮಾಡುವುದಕ್ಕಾಗಿ, ಇವುಗಳನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಬಹುದು. ಅಂತಿಮ ಬಳಕೆದಾರರು ಪ್ರಿಂಟರ್ ಅನ್ನು ಸುಲಭವಾಗಿ ಗುರುತಿಸಲು, <ph name="PRINTER_MANUFACTURER" /> ಮತ್ತು <ph name="PRINTER_MODEL" /> ನೆರವಾಗುತ್ತವೆ. ಅವು ಪ್ರಿಂಟರ್‌ನ ತಯಾರಕರು ಮತ್ತು ಮಾಡೆಲ್ ಅನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ. <ph name="PRINTER_URI" />, ಯಾವುದೇ ಕ್ಲೈಂಟ್ ಕಂಪ್ಯೂಟರ್‌ನಿಂದ ತಲುಪಲು ಸಾಧ್ಯವಿರುವ ವಿಳಾಸವಾಗಿರಬೇಕು ಮತ್ತು <ph name="URI_SCHEME" />, <ph name="URI_PORT" />, ಹಾಗೂ <ph name="URI_QUEUE" /> ಅನ್ನು ಒಳಗೊಂಡಿರಬೇಕು. <ph name="PRINTER_UUID" /> ಐಚ್ಛಿಕವಾಗಿದೆ. ಇದನ್ನು ಒದಗಿಸಿದರೆ, <ph name="ZEROCONF_DISCOVERY" /> ಪ್ರಿಂಟರ್‌ಗಳ ನಕಲನ್ನು ತೊಡೆದುಹಾಕಲು ಅದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.
-
-      <ph name="PRODUCT_NAME" /> ಬೆಂಬಲಿತ ಪ್ರಿಂಟರ್ ಅನ್ನು ಪ್ರತಿನಿಧಿಸುವ ಸ್ಟ್ರಿಂಗ್‌ಗಳಲ್ಲಿ ಒಂದು ಸ್ಟ್ರಿಂಗ್‍ಗೆ <ph name="PRINTER_EFFECTIVE_MODEL" /> ಹೊಂದಿಕೆಯಾಗಬೇಕು. ಪ್ರಿಂಟರ್‌ಗಾಗಿ ಸೂಕ್ತ PPD ಅನ್ನು ಗುರುತಿಸಿ, ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಈ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು https://support.google.com/chrome?p=noncloudprint ನಲ್ಲಿ ನೋಡಬಹುದು.
-
-      ಪ್ರಿಂಟರ್ ಅನ್ನು ಮೊದಲ ಬಾರಿ ಬಳಸಿದಾಗ, ಪ್ರಿಂಟರ್ ಹೊಂದಿಸುವಿಕೆ ಪೂರ್ತಿಯಾಗುತ್ತದೆ. ಪ್ರಿಂಟರ್ ಅನ್ನು ಬಳಸುವವರೆಗೆ PPD ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಅದರ ಬಳಿಕ, ಆಗಾಗ ಬಳಸುವ PPD ಗಳನ್ನು ಕ್ಯಾಷ್‌ನಲ್ಲಿ ಉಳಿಸಲಾಗುವುದು.
-
-      ಬಳಕೆದಾರರು ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಪ್ರತ್ಯೇಕ ಸಾಧನಗಳಲ್ಲಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದೇ ಎಂಬುದರ ಮೇಲೆ ಈ ಕಾರ್ಯನೀತಿಯು ಯಾವುದೇ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ. ಪ್ರತ್ಯೇಕ ಬಳಕೆದಾರರು ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದಕ್ಕೆ ಪೂರಕವಾಗಿರುವುದು ಇದರ ಉದ್ದೇಶವಾಗಿದೆ.
-
-      ಸಕ್ರಿಯ ಡೈರೆಕ್ಟರಿ ಮೂಲಕ ನಿರ್ವಹಿಸುವ ಸಾಧನಗಳಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ, <ph name="MACHINE_NAME_VARIABLE" /> ಅನ್ನು ಸಕ್ರಿಯ ಡೈರೆಕ್ಟರಿ ಮೆಷೀನ್ ಹೆಸರು ಅಥವಾ ಅದರ ಸಬ್‌ಸ್ಟ್ರಿಂಗ್‌ನಷ್ಟು ವಿಸ್ತರಿಸುವುದನ್ನು ಈ ಕಾರ್ಯನೀತಿಯು ಬೆಂಬಲಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಮೆಷೀನ್ ಹೆಸರು <ph name="MACHINE_NAME_EXAMPLE" /> ಆಗಿದ್ದರೆ, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />  ಅನ್ನು 6ನೇ ಸ್ಥಾನದ ನಂತರದಿಂದ ಪ್ರಾರಂಭವಾಗುವ 4 ಅಕ್ಷರಗಳಿಂದ ಬದಲಾಯಿಸಲಾಗುತ್ತದೆ, ಅಂದರೆ ಅದು <ph name="MACHINE_NAME_PART_EXAMPLE" />. ಸ್ಥಾನವು ಶೂನ್ಯದಿಂದ ಆರಂಭವಾಗುತ್ತದೆ ಎನ್ನುವುದನ್ನು ಗಮನಿಸಿ.
-      </translation>
 <translation id="2294382669900758280">ಒಂದು ವೇಳೆ ಈ ನೀತಿಯನ್ನು <ph name="TRUE" /> ಗೆ ಹೊಂದಿಸಿದ್ದರೂ, Android ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಪ್ಲೇ ಆಗುತ್ತಿರುವ ವೀಡಿಯೊವನ್ನು ಪರಿಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> ನಲ್ಲಿ ಡಿಫಾಲ್ಟ್ ಹೊಸ ಟ್ಯಾಬ್ ಪುಟವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ.</translation>
 <translation id="2299220924812062390">ಸಕ್ರಿಯಗೊಳಿಸಿದ ಪ್ಲಗಿನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸು</translation>
@@ -643,9 +629,6 @@
 Samba ಮತ್ತು Windows ಸರ್ವರ್‌ಗಳ ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಆವೃತ್ತಿಗಳು NTLMv2 ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತವೆ. ಇದನ್ನು ಹಿಂದಿನ ಆವೃತ್ತಿಗಳೊಂದಿಗಿನ ಹೊಂದಾಣಿಕೆಗೆ ಮಾತ್ರ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕು ಮತ್ತು ಇದು ದೃಢೀಕರಣದ ಸುರಕ್ಷತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
 
 ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಡೀಫಾಲ್ಟ್ ಸರಿ ಆಗಿರುತ್ತದೆ ಮತ್ತು NTLMv2 ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" /> ಅನ್ನು ಪ್ರದರ್ಶಿಸಬಹುದಾದ ಸ್ಥಳೀಯ ಭಾಷೆಗಳನ್ನು ಕಾನ್ಫಿಗರ್‌ ಮಾಡುತ್ತದೆ.
-
-      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸಿದಲ್ಲಿ, ಬಳಕೆದಾರರು ಈ ಕಾರ್ಯನೀತಿಯು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಯಾವುದೇ ಒಂದು ಸ್ಥಳೀಯ ಭಾಷೆಯಲ್ಲಿ ಮಾತ್ರ <ph name="PRODUCT_OS_NAME" /> ಅನ್ನು ಪ್ರದರ್ಶಿಸುವಂತೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಬಿಟ್ಟರೆ ಅಥವಾ ಖಾಲಿ ಪಟ್ಟಿಗೆ ಹೊಂದಿಸಿದರೆ, <ph name="PRODUCT_OS_NAME" /> ಅನ್ನು ಎಲ್ಲಾ ಬೆಂಬಲಿತ UI ಸ್ಥಳೀಯ ಭಾಷೆಗಳಲ್ಲಿ ಪ್ರದರ್ಶಿಸಬಹುದು. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಅಮಾನ್ಯ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿರುವ ಪಟ್ಟಿಗೆ ಹೊಂದಿಸಿದರೆ, ಎಲ್ಲಾ ಅಮಾನ್ಯ ಮೌಲ್ಯಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುವುದು. ಈ ಕಾರ್ಯನೀತಿಯು ಅನುಮತಿಸದ ಭಾಷೆಯಲ್ಲಿ <ph name="PRODUCT_OS_NAME" /> ಅನ್ನು ಪ್ರದರ್ಶಿಸುವಂತೆ ಬಳಕೆದಾರರು ಈ ಹಿಂದೆಯೇ ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ್ದರೆ, ಮುಂದಿನ ಬಾರಿ ಬಳಕೆದಾರರು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು ಅನುಮತಿಸಲಾದ UI ಸ್ಥಳೀಯ ಭಾಷೆಗೆ ಬದಲಾಯಿಸಲಾಗುತ್ತದೆ. ಬಳಕೆದಾರರು ಆದ್ಯತೆಯ ಸ್ಥಳೀಯ ಭಾಷೆಗಳನ್ನು ಕಾನ್ಫಿಗರ್‌ ಮಾಡಿದ್ದರೆ ಮತ್ತು ಅದರಲ್ಲಿರುವ ಒಂದು ಆದ್ಯತೆಯ ಸ್ಥಳೀಯ ಭಾಷೆಯನ್ನು ಈ ಕಾರ್ಯನೀತಿಯು ಅನುಮತಿಸಿದರೆ, <ph name="PRODUCT_OS_NAME" /> ಈ ಸ್ಥಳೀಯ ಭಾಷೆಗೆ ಬದಲಾಗುತ್ತದೆ. ಇಲ್ಲದಿದ್ದರೆ, ಈ ಕಾರ್ಯನೀತಿಯಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಮೊದಲ ಮೌಲ್ಯಕ್ಕೆ <ph name="PRODUCT_OS_NAME" /> ಬದಲಾಗುತ್ತದೆ, ಅಥವಾ ಈ ಕಾರ್ಯನೀತಿಯು ಅಮಾನ್ಯ ಮೌಲ್ಯಗಳನ್ನು ಮಾತ್ರ ಹೊಂದಿದ್ದರೆ, ಅದು ಪರ್ಯಾಯ ಸ್ಥಳೀಯ ಭಾಷೆಗೆ (ಪ್ರಸ್ತುತ en-US) ಬದಲಾಗುತ್ತದೆ.</translation>
 <translation id="2604182581880595781">ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಫೈಲ್‌ಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಕಾರ್ಯನೀತಿಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ.</translation>
 <translation id="2623014935069176671">ಆರಂಭಿಕ ಬಳಕೆದಾರ ಚಟುವಟಿಕೆಗಾಗಿ ನಿರೀಕ್ಷಿಸಿ</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" /> ಗೆ ಡಾಕ್ಯುಮೆಂಟ್‌ಗಳ ಸಲ್ಲಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು</translation>
@@ -1576,7 +1559,6 @@
 <translation id="5130288486815037971">TLS ರಲ್ಲಿ RC4 ಸೈಫರ್ ಸ್ಯೂಟ್‌ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆಯೇ</translation>
 <translation id="5141670636904227950">ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿ ಡಿಫಾಲ್ಟ್ ಪರದೆ ವರ್ಧಕ ಪ್ರಕಾರವನ್ನು ಸಕ್ರಿಯವಾಗಿರುವಂತೆ ಹೊಂದಿಸಿ</translation>
 <translation id="5142301680741828703">ಯಾವಾಗಲೂ ಈ ಮುಂದಿನ URL ಪ್ರಕಾರಗಳನ್ನು <ph name="PRODUCT_FRAME_NAME" /> ರಲ್ಲಿ ಸಲ್ಲಿಸಿ</translation>
-<translation id="5147665094011258322">ವಿನಂತಿಗಳಲ್ಲಿ ಬಳಸಲಾದ ಸಾಧನದ ಹೋಸ್ಟ್ ಹೆಸರನ್ನು ನಿರ್ಧರಿಸಿ. ಈ ನೀತಿಯನ್ನು ಖಾಲಿ ಇರುವ ವಾಕ್ಯಕ್ಕೆ ಹೊಂದಿಸಿದರೆ, DHCP ವಿನಂತಿ ಸಂದರ್ಭದಲ್ಲಿ ಅ ವಾಕ್ಯವನ್ನು ಸಾಧನದ ಹೋಸ್ಟ್ ಹೆಸರಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ. ವಾಕ್ಯವು ವೇರಿಯಬಲ್‌ಗಳಾದ ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} ಅನ್ನು ಹೊಂದಿರಬಹುದು ಹೋಸ್ಟ್ ಹೆಸರನ್ನು ಬಳಸುವ ಮೊದಲು ಅವುಗಳನ್ನು ಸಾಧನದಲ್ಲಿ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಮರುಸ್ಥಾನಗೊಳಿಸಲಾಗುತ್ತದೆ. ಫಲಿತಾಂಶ ಪರ್ಯಾಯವಾಗಿ ಮಾನ್ಯವಾದ ಹೋಸ್ಟ್ ಹೆಸರು ಆಗಿರಬೇಕು (ಪ್ರತಿ RFC ಗೆ 1035, ವಿಭಾಗ 3.1). ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ ಅಥವಾ ಪರ್ಯಾಯ ಮಾಡಿದ ನಂತರ ಮೌಲ್ಯದ ಹೋಸ್ಟ್ ಹೆಸರು ಮಾನ್ಯವಾಗದಿದ್ದರೆ, ಯಾವುದೇ ಹೋಸ್ಟ್ ಹೆಸರು DHCP ವಿನಂತಿಯಲ್ಲಿ ಹೊಂದಿಸಲಾಗುವುದಿಲ್ಲ. </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> <ph name="PRODUCT_NAME" /> ಅನ್ನು ಪ್ರಾರಂಭಿಸಿದಾಗ ಬಳಸಲಾಗುವ ಹೆಚ್ಚುವರಿ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ನಿಮ್ಮನ್ನು ಅನುಮತಿಸುತ್ತದೆ.
 
          ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಇದ್ದರೆ ಡಿಫಾಲ್ಟ್ ಕಮಾಂಡ್ ಸಾಲನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
@@ -1859,7 +1841,6 @@
 <translation id="5835124959204887277">ವಿನಂತಿಸಿರುವ ಸುರಕ್ಷತಾ ಕೀಗಳಿಂದ ದೃಢೀಕರಣ ಪ್ರಮಾಣ ಪತ್ರಗಳನ್ನು ವಿನಂತಿಸಿದಾಗ ಪ್ರಾಂಪ್ಟ್ ತೋರಿಸಲಾಗದಿರುವುದಕ್ಕೆ URL ಗಳು ಮತ್ತು ಡೊಮೇನ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
 ಹೆಚ್ಚುವರಿಯಾಗಿ, ಸುರಕ್ಷತಾ ಕೀಗೆ ಕಳುಹಿಸಲಾಗುವ ಸಿಗ್ನಲ್ ಅನ್ನು ಪ್ರತ್ಯೇಕ ದೃಢೀಕರಣಕ್ಕಾಗಿ ಬಳಸಬಹುದು ಎಂದು ಸೂಚಿಸುತ್ತದೆ.ಇದಲ್ಲದೆ, ಸುರಕ್ಷತಾ ಕೀಗಳ ದೃಢೀಕರಣವನ್ನು ಸೈಟ್‌ಗಳು ವಿನಂತಿಸಿದಾಗ Chrome 65+ ನಲ್ಲಿ ಬಳಕೆದಾರರು ಪ್ರಾಂಪ್ಟ್ ಮಾಡಬಹುದು.
 URLಗಳು (ಉದಾಹರಣೆಗೆ https://example.com/some/path)U2F ಅಪ್ಲಿಕೇಶನ್‌IDಗಳಂತೆ ಮಾತ್ರ ಹೊಂದಾಣಿಕೆ ಮಾಡಬಹುದು.ಡೊಮೇನ್‌ಗಳನ್ನು (ಉದಾ example.com) ವೆಬ್ ದೃಢೀಕರಣವಾದ RP IDಗಳಂತೆ ಮಾತ್ರ ಹೊಂದಾಣಿಕೆ ಮಾಡಬಹುದು, ಆದ್ದರಿಂದ, ನೀಡಲಾದ ಸೈಟ್‌ಗಳಿಂದ U2F ಮತ್ತು ವೆಬ್ ದೃಢೀಕರಣದ APIಗಳನ್ನು ಕವರ್‌ ಮಾಡಲು, ಅಪ್ಲಿಕೇಶನ್‌ID ಮತ್ತು ಡೊಮೇನ್‌ ಎರಡನ್ನು ಪಟ್ಟಿ ಮಾಡುವ ಅಗತ್ಯವಿದೆ.</translation>
-<translation id="5835412847081687053">ಬಳಕೆದಾರರ ಸೆಶನ್‌ನಲ್ಲಿ ಅನುಮತಿಸಲಾದ UI ಸ್ಥಳೀಯ ಭಾಷೆಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</translation>
 <translation id="5836064773277134605">ರಿಮೋಟ್ ಪ್ರವೇಶದ ಹೋಸ್ಟ್ ಮೂಲಕ ಬಳಸುವ UDP ಪೋರ್ಟ್ ವ್ಯಾಪ್ತಿಯನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="5862253018042179045">ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿ ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯದ ಡಿಫಾಲ್ಟ್ ಸ್ಥಿತಿಯನ್ನು ಹೊಂದಿಸಿ.
 
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 85524d6c..8548f09 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -497,21 +497,6 @@
       맞춤법 검사는 다운로드한 사전을 사용하여 계속 시행할 수 있으며, 이 정책은 온라인 서비스의 사용 여부만 제어합니다.
 
       이 설정을 구성하지 않으면 사용자는 맞춤법 검사 사용 여부를 선택할 수 있습니다.</translation>
-<translation id="2294283832646774959">프린터 목록을 설정합니다.
-
-      관리자는 이 정책을 통해 사용자에게 프린터 설정을
-      제공할 수 있습니다.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> 및 <ph name="PRINTER_DESCRIPTION" />은(는) 프린터를 쉽게 선택하도록 맞춤설정할 수 있는 자유 형식 문자열입니다. <ph name="PRINTER_MANUFACTURER" /> 및 <ph name="PRINTER_MODEL" />은(는) 최종 사용자가 프린터를 쉽게 확인하도록 돕기 위해 제공되며 프린터 제조업체 및 모델을 나타냅니다. <ph name="PRINTER_URI" />은(는) <ph name="URI_SCHEME" />, <ph name="URI_PORT" />, <ph name="URI_QUEUE" />을(를) 포함한 클라이언트 컴퓨터에서 연결할 수 있는 주소여야 합니다. <ph name="PRINTER_UUID" />은(는) 선택사항이며, 제공된 경우 <ph name="ZEROCONF_DISCOVERY" /> 프린터의 중복을 삭제하는 데 사용됩니다.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" />은(는) <ph name="PRODUCT_NAME" /> 지원 프린터를 나타내는 문자열 중 하나와 일치해야 합니다. 이 문자열은 프린터의 적절한 PPD를 확인하고 설치하는 데 사용됩니다. 자세한 정보는 https://support.google.com/chrome?p=noncloudprint에서 확인할 수 있습니다.
-
-      프린터 설정은 프린터를 처음 사용할 때 완료됩니다. PPD는 프린터가 사용될 때까지 다운로드되지 않습니다. 그 이후 자주 사용되는 PPD가 캐시됩니다.
-
-      이 정책은 사용자가 개별 기기에 프린터를 설정할 수 있는지 여부에 영향을 미치지 않습니다. 이 정책은 개별 사용자의 프린터 설정을 보완하기 위한 것입니다.
-
-      Active Directory 관리 대상 기기에서는 이 정책을 통해 <ph name="MACHINE_NAME_VARIABLE" />을(를) Active Directory 컴퓨터 이름 또는 관련 하위 문자열로 확장할 수 있습니다. 예를 들어, 컴퓨터 이름이 <ph name="MACHINE_NAME_EXAMPLE" />(이)라면 <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />이(가) 6번째 위치 이후에 시작되는 4자로 대체되어 <ph name="MACHINE_NAME_PART_EXAMPLE" />이(가) 됩니다. 이 위치는 0을 기준으로 합니다.
-      </translation>
 <translation id="2294382669900758280">이 정책이 <ph name="TRUE" />로 설정되더라도 Android 앱에서 재생되는 동영상은 고려 대상에 포함되지 않습니다.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" />의 기본 새 탭 페이지를 설정합니다.</translation>
 <translation id="2299220924812062390">사용 설정한 플러그인 목록 지정</translation>
@@ -622,9 +607,6 @@
           NTLMv2는 최신 버전의 Samba 및 Windows 서버에서 모두 지원됩니다. 이 정책은 하위 호환성을 위해서만 사용 중지해야 하며, 사용 중지할 경우 인증 보안이 약화됩니다.
 
           이 정책을 설정하지 않으면 기본값인 true가 사용되며 NTLMv2가 사용 설정됩니다.</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" />의 표시 언어를 구성합니다.
-
-      이 정책이 설정되면 사용자는 이 정책에서 지정된 언어 중 하나로만 <ph name="PRODUCT_OS_NAME" />이(가) 표시되도록 구성할 수 있습니다. 이 정책이 설정되지 않거나 빈 목록으로 설정될 경우 <ph name="PRODUCT_OS_NAME" />이(가) 지원되는 모든 언어로 표시될 수 있습니다. 이 정책이 잘못된 값을 포함하는 목록으로 설정될 경우 모든 잘못된 값은 무시됩니다. 사용자가 이전에 <ph name="PRODUCT_OS_NAME" />이(가) 이 정책에서 허용되지 않는 언어로 표시되도록 구성한 경우 다음번에 사용자가 로그인하면 표시 언어가 허용되는 언어로 전환됩니다. 사용자가 기본 언어를 구성했으며 기본 언어 중 하나가 이 정책에서 허용되는 경우 <ph name="PRODUCT_OS_NAME" />이(가) 이 언어로 전환됩니다. 그렇지 않은 경우 <ph name="PRODUCT_OS_NAME" />이(가) 이 정책에서 지정된 첫 번째 유효한 값으로 전환되거나, 이 정책에 잘못된 값만 있는 경우 대체 언어(현재 en-US)로 전환됩니다.</translation>
 <translation id="2604182581880595781">네트워크 파일 공유 관련 정책을 구성합니다.</translation>
 <translation id="2623014935069176671">첫 번째 사용자 활동 기다리기</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" />(으)로 문서 제출 사용</translation>
@@ -1518,13 +1500,6 @@
 <translation id="5130288486815037971">TLS RC4 암호화 기술이 사용하도록 설정되었는지 여부</translation>
 <translation id="5141670636904227950">로그인 화면에서 기본 화면 돋보기 유형을 사용하도록 설정</translation>
 <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" />에서 다음 URL 패턴을 항상 렌더링</translation>
-<translation id="5147665094011258322">DHCP 요청에서 사용된 기기의 호스트 이름을 결정합니다.
-
-      정책이 비어있지 않은 문자열로 설정된 경우 해당 문자열이 DHCP 요청 중에 기기 호스트 이름으로 사용됩니다.
-
-      문자열에는 변수 ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}이 포함될 수 있으며, 이는 호스트 이름으로 사용되기 전에 기기의 값으로 대체됩니다. 그 결과로 나오는 대체값은 유효한 호스트 이름이어여 햡니다(RFC 1035, 섹션 3.1에 따라).
-
-      이 정책이 설정되어 있지 않거나 대체 후 값이 유효한 호스트 이름이 아닌 경우 DHCP 요청에서 어떠한 호스트 이름도 설정되지 않습니다. </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" />이(가) <ph name="PRODUCT_NAME" />을(를) 실행할 때 사용되는 추가 매개변수를 지정하도록 허용합니다.
 
           해당 정책이 설정되지 않았다면 기본 명령줄이 사용됩니다.</translation>
@@ -1774,7 +1749,6 @@
 <translation id="5835124959204887277">보안 키 인증서 요청 시 어떠한 프롬프트도 표시되지 않는 URL 및 도메인을 지정합니다. 또한 개별 인증이 사용될 수 있다는 것을 나타내는 신호가 보안 키로 전송됩니다. 그렇지 않으면 사이트에서 보안 키 인증을 요청할 때 Chrome 65+에서 사용자에게 메시지가 표시됩니다.
 
       https://example.com/some/path와 같은 URL은 example.com과 같은 U2F appID로만 일치합니다. example.com과 같은 도메인은 webauthn RP ID로만 일치합니다. 따라서 특정 사이트의 U2F 및 Webauthn API를 모두 처리하려면 appID URL과 도메인 모두 나열되어야 합니다.</translation>
-<translation id="5835412847081687053">사용자 세션에서 허용되는 UI 언어 구성</translation>
 <translation id="5836064773277134605">원격 액세스 호스트에서 사용되는 UDP 포트 범위 제한</translation>
 <translation id="5862253018042179045">로그인 화면에서 음성 피드백 접근성 기능의 기본 상태를 설정합니다.
 
diff --git a/components/policy/resources/policy_templates_lt.xtb b/components/policy/resources/policy_templates_lt.xtb
index 1e9ab4c..94c7262 100644
--- a/components/policy/resources/policy_templates_lt.xtb
+++ b/components/policy/resources/policy_templates_lt.xtb
@@ -497,21 +497,6 @@
       Rašybą tikrinti vis tiek galima naudojant atsisiųstą žodyną; taikant šią politiką valdomas tik internetinės paslaugos naudojimas.
 
       Jei šis nustatymas nesukonfigūruotas, naudotojai gali pasirinkti, ar turėtų būti naudojama rašybos tikrinimo paslauga.</translation>
-<translation id="2294283832646774959">Konfigūruojamas spausdintuvų sąrašas.
-
-      Taikant šią politiką leidžiama administratoriams teikti spausdintuvo konfigūracijas
-      naudotojams.
-
-      „<ph name="PRINTER_DISPLAY_NAME" />“ ir „<ph name="PRINTER_DESCRIPTION" />“ yra laisvos formos eilutės, kurias galima tinkinti, kad būtų lengviau pasirinkti spausdintuvą. „<ph name="PRINTER_MANUFACTURER" />“ ir „<ph name="PRINTER_MODEL" />“ naudojamos siekiant palengvinti spausdintuvo identifikavimą galutiniams naudotojams. Jos nurodo spausdintuvo gamintoją ir modelį. „<ph name="PRINTER_URI" />“ turėtų būti adresas, kurį galima pasiekti iš kliento kompiuterio, įskaitant „<ph name="URI_SCHEME" />“, „<ph name="URI_PORT" />“ ir „<ph name="URI_QUEUE" />“. „<ph name="PRINTER_UUID" />“ yra pasirenkama. Jei nurodyta, ji naudojama siekiant panaikinti pasikartojančius „<ph name="ZEROCONF_DISCOVERY" />“ spausdintuvus.
-
-      „<ph name="PRINTER_EFFECTIVE_MODEL" />“ turi atitikti vieną iš eilučių, nurodančių „<ph name="PRODUCT_NAME" />“ palaikomą spausdintuvą. Eilutė bus naudojama siekiant identifikuoti ir įdiegti tinkamą spausdintuvo PPD. Daugiau informacijos galima rasti adresu https://support.google.com/chrome?p=noncloudprint.
-
-      Spausdintuvo sąranka užbaigiama pirmą kartą panaudojus spausdintuvą. PPD neatsisiunčiami, kol spausdintuvas nenaudojamas. Paskui dažnai naudojami PPD saugomi talpykloje.
-
-      Ši politika neturi įtakos tam, ar naudotojai gali konfigūruoti spausdintuvus atskiruose įrenginiuose. Ji skirta papildyti atskirų naudotojų spausdintuvų konfigūraciją.
-
-      Jei naudojami „Active Directory“ tvarkomi įrenginiai, ši politika palaiko „Active Directory“ įrenginio pavadinimo „<ph name="MACHINE_NAME_VARIABLE" />“ arba jo poeilučio plėtinį. Pavyzdžiui, jei įrenginio pavadinimas yra „<ph name="MACHINE_NAME_EXAMPLE" />“, tada „<ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />“ turėtų būti pakeistas 4 simboliais nuo 6-osios pozicijos, pvz., „<ph name="MACHINE_NAME_PART_EXAMPLE" />“. Atminkite, kad pozicija nustatoma nuo nulio.
-      </translation>
 <translation id="2294382669900758280">Į vaizdo įrašų leidimą „Android“ programose neatsižvelgiama, net jei ši politika nustatyta į „<ph name="TRUE" />“.</translation>
 <translation id="2298647742290373702">Konfigūruokite numatytąjį naujo skirtuko puslapį sistemoje „<ph name="PRODUCT_NAME" />“.</translation>
 <translation id="2299220924812062390">Nurodyti įgalintų papildinių sąrašą</translation>
@@ -624,9 +609,6 @@
           Visų naujausių versijų „Samba“ ir „Windows“ serveriai palaiko NTLMv2. Tai turėtų būti išjungta tik atgalinio suderinamumo tikslais, nes suprastėja autentifikavimo sauga.
 
           Jei ši politika nenustatyta, numatytasis nustatymas yra „true“ ir NTLMv2 yra įgalinta.</translation>
-<translation id="2598508021807251719">Konfigūruojamos lokalės, kuriose galima pateikti „<ph name="PRODUCT_OS_NAME" />“.
-
-      Jei ši politika nustatyta, naudotojas gali konfigūruoti, kad „<ph name="PRODUCT_OS_NAME" />“ būtų pateikta tik vienoje iš lokalių, nurodytų pagal šią politiką. Jei ši politika nenustatyta arba nustatyta kaip tuščias sąrašas, „<ph name="PRODUCT_OS_NAME" />“ galima pateikti visose palaikomose NS lokalėse. Jei ši politika nustatyta kaip sąrašas su netinkamomis vertėmis, visų netinkamų verčių nepaisoma. Jei naudotojas anksčiau sukonfigūravo, kad „<ph name="PRODUCT_OS_NAME" />“ būtų pateikta pagal šią politiką neleidžiamoje lokalėje, pateikimo lokalė bus perjungta į leidžiamą NS lokalę kitą kartą naudotojui prisijungus. Jei naudotojas sukonfigūravo pageidaujamas lokales ir viena iš pageidaujamų lokalių leidžiama pagal šią politiką, „<ph name="PRODUCT_OS_NAME" />“ bus perjungta į šią lokalę. Priešingu atveju „<ph name="PRODUCT_OS_NAME" />“ bus taikoma pagal šią politiką nustatyta pirmoji tinkama vertė arba bus perjungta į atsarginę lokalę (šiuo metu „en-US“), jei šioje politikoje yra tik netinkami įrašai.</translation>
 <translation id="2604182581880595781">Konfigūruojama su tinklo failų bendrinimo įrenginiu susijusi politika.</translation>
 <translation id="2623014935069176671">Laukti pradinės naudotojo veiklos</translation>
 <translation id="262740370354162807">Įgalinti dokumentų pateikimą „<ph name="CLOUD_PRINT_NAME" />“</translation>
@@ -845,6 +827,7 @@
 
           Jie šią politiką paliksite nenustatytą, naudotojai galės patys pasirinkti tarpinio serverio nustatymus.</translation>
 <translation id="3205825995289802549">Pirmo naršyklės lango padidinimas pirmą kartą paleidus programą</translation>
+<translation id="3211426942294667684">Prisijungimo prie naršyklės nustatymai</translation>
 <translation id="3213821784736959823">Valdoma, ar integruota DNS kliento programa naudojama „<ph name="PRODUCT_NAME" />“.
 
       Jei ši politika aktyvinta, esant galimybei integruota DNS kliento programa bus naudojama.
@@ -1122,6 +1105,15 @@
       Nenustačius šios politikos, „<ph name="PRODUCT_NAME" />“ naudos įprastą numatytąjį katalogą (konkrečios platformos).
 
       Jei reikia kintamųjų, kuriuos galima naudoti, sąrašo, žr. https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables.</translation>
+<translation id="3904459740090265495">Ši politika valdo naršyklės prisijungimo elgseną. Ji leidžia nurodyti, ar naudotojas gali prisijungti prie „<ph name="PRODUCT_NAME" />“ naudodamas savo paskyrą ir naudoti su paskyra susijusias paslaugas, pvz., „Chrome“ sinchronizavimą.
+
+      Jei politika nustatyta kaip „Išjungti naršyklės prisijungimą“, naudotojas negali prisijungti prie naršyklės ir naudoti su paskyra susijusių paslaugų. Šiuo atveju negalima naudoti naršyklės lygio funkcijų, pvz., „Chrome“ sinchronizavimo, ir jos bus nepasiekiamos. Jei naudotojas buvo prisijungęs ir politika nustatoma kaip „Išjungta“, kitą kartą paleidęs „Chrome“ naudotojas nebus prisijungęs, bet jo vietiniai profilio duomenys, pvz., žymės, slaptažodžiai ir kt., bus saugomi. Naudotojas vis tiek galės prisijungti ir naudoti „Google“ žiniatinklio paslaugas, pvz., „Gmail“.
+
+      Jei politika nustatyta kaip „Įgalinti naršyklės prisijungimą“, naudotojui leidžiama prisijungti prie naršyklės ir automatiškai prisijungiama prie naršyklės, prisijungus prie „Google“ žiniatinklio paslaugų, pvz., „Gmail“. Prisijungus prie naršyklės naudotojo paskyros informacija saugoma naršyklėje. Tačiau tai nereiškia, kad „Chrome“ sinchronizavimas bus įjungtas pagal numatytuosius nustatymus. Naudotojas turi atskirai pasirinkti naudoti šią funkciją. Įgalinus šią funkciją nebus leidžiama naudotojui išjungti nustatymo, leidžiančio prisijungti prie naršyklės. Jei norite valdyti „Chrome“ sinchronizavimo pasiekiamumą, naudokite politiką „SyncDisabled“.
+
+      Jei politika nustatyta kaip „Priverstinis naršyklės prisijungimas“, naudotojui pateikiamas paskyros pasirinkimo dialogo langas ir jis turi pasirinkti ir prisijungti prie paskyros, kad galėtų naudoti naršyklę. Tai reiškia, kad valdomoms paskyroms taikoma ir vykdoma su paskyra susijusi politika. Pagal numatytuosius nustatymus įjungiamas „Chrome“ sinchronizavimas paskyroje, išskyrus tuo atveju, jei sinchronizavimą išjungė domeno administratorius arba jis buvo išjungtas taikant politiką „SyncDisabled“. Numatytoji politikos „BrowserGuestModeEnabled“ vertė bus nustatyta kaip „netiesa“. Atminkite, kad įgalinus šią politiką esami neprijungti profiliai bus užrakinti ir nepasiekiami. Jei reikia daugiau informacijos, žr. pagalbos centro straipsnį adresu https://support.google.com/chrome/a/answer/7572556.
+
+      Jei ši politika nenustatyta, naudotojas gali nuspręsti, ar nori įgalinti naršyklės prisijungimo parinktį ir naudoti ją, kai tinkama.</translation>
 <translation id="3911737181201537215">Ši politika neturi įtakos „Android“ vykdomam registravimo procesui.</translation>
 <translation id="391531815696899618">Kai nustatyta kaip „true“, neleidžiamas „Google“ disko sinchronizavimas „<ph name="PRODUCT_OS_NAME" />“ programoje „Failai“. Tokiu atveju duomenys į „Google“ diską neįkeliami.
 
@@ -1172,6 +1164,7 @@
 
       Atminkite, kad politiką „<ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME" />“ nustačius kaip „<ph name="BLOCK_GEOLOCATION_SETTING" />“, šios politikos nepaisoma, o „Google“ vietovės paslaugos visada išjungtos.</translation>
 <translation id="408029843066770167">Leisti užklausas į „Google“ laiko paslaugą</translation>
+<translation id="408076456549153854">Naršyklės prisijungimo įgalinimas</translation>
 <translation id="4088589230932595924">Įjungtas inkognito režimas</translation>
 <translation id="4088983553732356374">Leidžiama nustatyti, ar svetainėms galima nustatyti vietinius duomenis. Nustatyti vietinius duomenis galima leisti arba uždrausti visoms svetainėms.
 
@@ -1481,6 +1474,7 @@
 <translation id="4962262530309732070">Jei ši politika nustatyta į „true“ arba yra nesukonfigūruota, „<ph name="PRODUCT_NAME" />“ leis „Pridėti asmenį“ naudojant naudotojų tvarkytuvę.
 
       Jei ši politika nustatyta į „false“, „<ph name="PRODUCT_NAME" />“ neleis kurti naujų profilių naudojant naudotojų tvarkytuvę.</translation>
+<translation id="4970855112942626932">Naršyklės prisijungimo išjungimas</translation>
 <translation id="4971529314808359013">Jums leidžiama nurodyti URL šablonų sąrašą, nurodantį, kurioms svetainėms „<ph name="PRODUCT_NAME" />“ turi automatiškai pasirinkti kliento sertifikatą (jei svetainėje jo reikalaujama).
 
           Vertė turi būti eilutėmis suskirstytų JSON žodynų masyvas. Kiekvienas žodynas turi būti tokios formos: { "pattern": "$URL_PATTERN", "filter" : $FILTER }, kur $URL_PATTERN yra turinio nustatymo šablonas. $FILTER apriboja, iš kurių klientų sertifikatų naršyklė automatiškai pasirinks. Neatsižvelgiant į filtrą, bus pasirinkti tik tie sertifikatai, kurie atitinka serverio sertifikato užklausą. Jei $FILTER yra tokios formos: { "ISSUER": { "CN": "$ISSUER_CN" } }, papildomai pasirenkami tik klientų sertifikatai, kurie išduoti pagal sertifikatą, kurio „CommonName“ $ISSUER_CN. Jei $FILTER yra tuščias žodynas {}, klientų sertifikatų pasirinkimas nėra papildomai ribojamas.
@@ -1517,13 +1511,6 @@
 <translation id="5130288486815037971">Ar įgalinti RC4 šifruotieji programų komplektai TLS</translation>
 <translation id="5141670636904227950">Nustatyti numatytąjį ekrano didinimo tipą, kuris įgalintas prisijungimo ekrane</translation>
 <translation id="5142301680741828703">„<ph name="PRODUCT_FRAME_NAME" />“ visada pateikti šiuos URL šablonus</translation>
-<translation id="5147665094011258322">Galima nustatyti įrenginio, naudoto DHCP užklausose, prieglobos serverio pavadinimą.
-
-      Jei ši politika nustatyta kaip ne tuščia eilutė, ši eilutė bus naudojama kaip įrenginio prieglobos serverio pavadinimas pateikiant DHCP užklausą.
-
-      Eilutėje gali būti kintamųjų ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, kurie bus pakeisti įrenginio vertėmis, prieš naudojant juos kaip prieglobos serverio pavadinimą. Rodomas pakeitimas turi būti tinkamas prieglobos serverio pavadinimas (RFC 1035, 3.1 skiltis).
-
-      Jei ši politika nenustatyta arba po pakeitimo rodoma vertė nėra tinkamas prieglobos serverio pavadinimas, DHCP užklausoje nebus nustatytas joks prieglobos serverio pavadinimas. </translation>
 <translation id="5148753489738115745">Leidžia nurodyti papildomus parametrus, naudojamus, kai „<ph name="PRODUCT_FRAME_NAME" />“ paleidžia „<ph name="PRODUCT_NAME" />“.
 
           Nenustačius šios politikos bus naudojama numatytoji komandinė eilutė.</translation>
@@ -1777,7 +1764,6 @@
 <translation id="5835124959204887277">Nurodomi URL ir domenai, kuriuose nebus rodomas raginimas, kai bus pateikiamos saugos raktų atestacijos sertifikatų užklausos. Be to, saugos raktui bus išsiunčiamas signalas, nurodantis, kad galima naudoti individualią atestaciją. Nenustačius šios politikos, naudotojams bus pateikiami raginimai 65 ir naujesnių versijų „Chrome“, kai svetainėse bus reikalaujama saugos raktų atestacijos.
 
       URL (pvz., https://example.com/some/path) atitiks tik kaip U2F „appID“. Domenai (pvz., example.com) atitiks tik kaip „webauthn“ RP ID. Todėl, kad būtų įtrauktos ir tam tikros svetainės U2F, ir „webauthn“ API, sąraše turi būti ir „appID“ URL, ir domenas.</translation>
-<translation id="5835412847081687053">Naudotojo sesijoje leidžiamų UI lokalių konfigūravimas</translation>
 <translation id="5836064773277134605">Apriboti UDP prievado diapazoną, naudojamą nuotolinės prieigos prieglobos</translation>
 <translation id="5862253018042179045">Nustatyti numatytąją ekrano skaitymo balsu būklę prisijungimo ekrane.
 
@@ -1898,6 +1884,7 @@
 
       Jei ši politika nesukonfigūruota, atjungiamų USB įrenginių sąrašas yra tuščias.</translation>
 <translation id="6083631234867522991">„Windows“ („Windows“ klientai):</translation>
+<translation id="6091233616732024397">Priverstinis naudotojų prisijungimas norint naudoti naršyklę</translation>
 <translation id="6093156968240188330">Leisti nuotoliniams naudotojams sąveikauti su pakeltais langais nuotolinės pagalbos sesijose</translation>
 <translation id="6095999036251797924">Nurodo laikotarpį, per kurį naudotojas neatliko įvesties veiksmų ir po kurio užrakinamas ekranas, kai įrenginys veikia naudojant kintamosios srovės arba akumuliatoriaus maitinimą.
 
@@ -1976,6 +1963,11 @@
 <translation id="6368011194414932347">Konfigūruoti pagrindinio puslapio URL</translation>
 <translation id="6368403635025849609">Leisti „JavaScript“ šiose svetainėse</translation>
 <translation id="6376659517206731212">Gali būti nustatyta kaip būtina</translation>
+<translation id="6377355597423503887">Ši politika nebenaudojama. Vietoje jos turėtumėte naudoti „BrowserSignin“.
+
+      Naudotojui leidžiama prisijungti prie „<ph name="PRODUCT_NAME" />“.
+
+      Jei nustatysite šią politiką, galėsite konfigūruoti, ar naudotojui leidžiama prisijungti prie „<ph name="PRODUCT_NAME" />“. Šią politiką nustačius kaip „Netiesa“ nebus leidžiama veikti programoms ir plėtiniams, kuriuose naudojama „chrome.identity“ API, todėl vietoje jos turėtumėte naudoti „SyncDisabled“.</translation>
 <translation id="6378076389057087301">Nurodykite, ar garso įrašo veikla paveikia energijos valdymą</translation>
 <translation id="637934607141010488">Pateikti neseniai prisijungusių įrenginio naudotojų sąrašą.
 
@@ -2922,6 +2914,11 @@
 <translation id="8548832052135586762">Nustatomas tik spalvoto, tik vienspalvio arba nespalvoto režimo apribojimas. Jei politika nenustatyta, netaikomi jokie apribojimai.</translation>
 <translation id="8549772397068118889">Įspėti, kai apsilankoma svetainėse, nesančiose turinio paketuose</translation>
 <translation id="8566842294717252664">Internetinės parduotuvės slėpimas Naujo skirtuko puslapyje ir programų paleidimo priemonėje</translation>
+<translation id="857369585509260201">Ši politika nebenaudojama. Vietoje jos turėtumėte naudoti „BrowserSignin“.
+
+      Jei ši politika nustatyta kaip „tiesa“, naudotojas naršyklėje turi prisijungti prie „<ph name="PRODUCT_NAME" />“ naudodamas savo profilį. O numatytoji „BrowserGuestModeEnabled“ vertė bus nustatyta kaip „netiesa“. Atminkite, kad įgalinus šią politiką esami profiliai, prie kurių neprisijungta, bus užrakinti ir nepasiekiami. Jei reikia daugiau informacijos, žr. pagalbos centro straipsnį.
+
+      Jei ši politika nustatyta kaip „netiesa“ arba nesukonfigūruota, naudotojas galės naudoti naršyklę neprisijungęs prie „<ph name="PRODUCT_NAME" />“.</translation>
 <translation id="8586528890725660268">Nurodomi spausdintuvai, kurių naudotojas negali naudoti.
 
       Ši politika naudojama, tik jei pasirinktas politikos „<ph name="BULK_PRINTERS_ACCESS_MODE" />“ nustatymas „<ph name="PRINTERS_BLACKLIST" />“.
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb
index c6d6f716..ad98a1e 100644
--- a/components/policy/resources/policy_templates_lv.xtb
+++ b/components/policy/resources/policy_templates_lv.xtb
@@ -486,21 +486,6 @@
       Pareizrakstības pārbaudi joprojām var veikt, izmantojot lejupielādēto vārdnīcu; šī politika tikai kontrolē tiešsaistes pakalpojuma lietojumu.
 
       Ja šis iestatījums nav konfigurēts, lietotāji var izvēlēties, vai izmantot pareizrakstības pārbaudes pakalpojumu vai neizmantot to.</translation>
-<translation id="2294283832646774959">Konfigurē printeru sarakstu.
-
-      Izmantojot šo politiku, administratori var nodrošināt printeru konfigurāciju
-      lietotājiem.
-
-      Parametri <ph name="PRINTER_DISPLAY_NAME" /> un <ph name="PRINTER_DESCRIPTION" /> ir brīva formāta virknes, ko var pielāgot ērtai printera atlasei. Parametri <ph name="PRINTER_MANUFACTURER" /> un <ph name="PRINTER_MODEL" /> ļauj galalietotājiem identificēt printeri. Tie apzīmē printera ražotāju un modeli. Parametram <ph name="PRINTER_URI" /> ir jābūt adresei, ko var sasniegt no klienta datora, tostarp <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> un <ph name="URI_QUEUE" />. Parametrs <ph name="PRINTER_UUID" /> nav norāda obligāti. Ja tas ir norādīts, tas tiek izmantots, lai novērstu <ph name="ZEROCONF_DISCOVERY" /> printeru dublēšanu.
-
-      Parametram <ph name="PRINTER_EFFECTIVE_MODEL" /> ir jāatbilst vienai no virknēm, kas apzīmē pārlūkā <ph name="PRODUCT_NAME" /> atbalstītu printeri. Šī virkne tiks izmantota, lai identificētu un instalētu printerim atbilstošo PPD failu. Plašāku informāciju skatiet vietnē https://support.google.com/chrome?p=noncloudprint.
-
-      Printera iestatīšana tiek pabeigta, kad printeris tiek izmantots pirmo reizi. PPD faili netiek lejupielādēti, kamēr printeris netiek izmantots. Pēc tam bieži izmantotie PPD faili tiek saglabāti kešatmiņā.
-
-      Šī politika neietekmē to, vai lietotāji var konfigurēt printerus atsevišķās ierīcēs. Tās mērķis ir papildināt printeru konfigurāciju, ko veic individuāli lietotāji.
-
-      Ierīcēs, kas tiek pārvaldītas pakalpojumā Active Directory, šī politika atbalsta Active Directory ierīces nosaukuma vai tās apakšvirknes iekļaušanu ierīces <ph name="MACHINE_NAME_VARIABLE" /> nosaukumā. Piemēram, ja ierīces nosaukums ir <ph name="MACHINE_NAME_EXAMPLE" />, vērtība <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> pēc sestās pozīcijas tiktu aizstāta ar četrām rakstzīmēm: <ph name="MACHINE_NAME_PART_EXAMPLE" />. Pozīciju numurēšana sākas ar nulli.
-      </translation>
 <translation id="2294382669900758280">Android lietotnēs atskaņoti videoklipi netiek ņemti vērā, pat ja šī politika ir iestatīta kā <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfigurēt noklusējuma jaunas cilnes lapu sistēmā <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Norādīt iespējoto spraudņu sarakstu</translation>
@@ -613,9 +598,6 @@
           Visās jaunākajās Samba un Windows serveru versijās NTLMv2 tiek atbalstīta. Tā jāatspējo tikai tad, ja nepieciešama saderība ar vecākām versijām. Atspējošana samazina autentifikācijas drošību.
 
           Ja šai politikai nav iestatīta nekāda vērtība, noklusējums ir “True” un NTLMv2 ir iespējota.</translation>
-<translation id="2598508021807251719">Konfigurē operētājsistēmas <ph name="PRODUCT_OS_NAME" /> attēlojuma lokalizācijas.
-
-      Ja šī politika ir iestatīta, lietotājs var konfigurēt operētājsistēmas <ph name="PRODUCT_OS_NAME" /> attēlošanu vienā no šajā rakstā norādītajām lokalizācijām. Ja šī politika nav iestatīta vai tai ir iestatīts tukšs saraksts, operētājsistēma <ph name="PRODUCT_OS_NAME" /> var tikt attēlota visās atbalstītajās lietotāja saskarnes lokalizācijās. Ja politikai iestatītajā sarakstā ir nederīgas vērtības, tās tiks ignorētas. Ja lietotājs iepriekš konfigurēja operētājsistēmas <ph name="PRODUCT_OS_NAME" /> attēlošanu lokalizācijā, kas šajā politikā nav atļauta, nākamajā lietotāja pierakstīšanās reizē attēlojuma lokalizācija tiks mainīta uz politikā atļautu lietotāja saskarnes lokalizāciju. Ja lietotājs iepriekš konfigurēja vēlamās lokalizācijas un viena no vēlamajām lokalizācijām ir atļauta šajā politikā, operētājsistēmā <ph name="PRODUCT_OS_NAME" /> tiks izmantota attiecīgā lokalizācija. Ja vēlamā lokalizācija nav iestatīta, operētājsistēmā <ph name="PRODUCT_OS_NAME" /> tika izmantota pirmā derīgā politikā norādītā vērtība vai atkāpšanās lokalizācija (šobrīd “en-US”), ja politikā ir norādītas nederīgas vērtības.</translation>
 <translation id="2604182581880595781">Konfigurēt ar tīkla failu kopīgošanas ierīcēm saistīto politiku.</translation>
 <translation id="2623014935069176671">Gaidīt sākotnējo lietotāja darbību</translation>
 <translation id="262740370354162807">Iespējo dokumentu iesniegšanu pakalpojumā <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1502,13 +1484,6 @@
 <translation id="5130288486815037971">RC4 šifra komplektu iespējošana standartā TLS</translation>
 <translation id="5141670636904227950">Pieteikšanās ekrānā iespējotā ekrāna lupas noklusējuma veida iestatīšana</translation>
 <translation id="5142301680741828703">Norādītās URL struktūras vienmēr tiek renderētas produktā <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Tiek noteikts DHCP pieprasījumiem izmantotās ierīces saimniekdatora nosaukums.
-
-      Ja šai politikai ir iestatīta virkne, kas nav tukša, DHCP pieprasījuma laikā attiecīgā virkne tiks izmantota kā ierīces saimniekdatora nosaukums.
-
-      Virknē var būt mainīgie ${ASSET_ID}, ${SERIAL_NUM} un ${MAC_ADDR}, kas pirms saimniekdatora nosaukuma izmantošanas tiks aizstāti ar vērtībām ierīcē. Aizstāšanas rezultātam ir jābūt derīgam saimniekdatora nosaukumam (atbilstoši RFC 1035 3.1. sadaļai).
-
-      Ja šī politika nav iestatīta vai vērtība pēc aizstāšanas nav derīgs saimniekdatora nosaukums, DHCP pieprasījumā netiks iestatīts saimniekdatora nosaukums. </translation>
 <translation id="5148753489738115745">Ļauj noteikt papildu parametrus, kas tiek lietoti, kad spraudnis <ph name="PRODUCT_FRAME_NAME" /> palaiž pārlūkprogrammu <ph name="PRODUCT_NAME" />.
 
           Ja šī politika nav iestatīta, tiks izmantota noklusējuma komandrinda.</translation>
@@ -1763,7 +1738,6 @@
 <translation id="5835124959204887277">Tiek norādīti vietrāži URL un domēni, kuriem netiks rādīta uzvedne, kad tiks pieprasīti drošības atslēgu apstiprinājuma sertifikāti. Turklāt uz drošības atslēgu tiks nosūtīts signāls, norādot, ka var izmantot atsevišķu apstiprinājumu. Ja šī politika netiek izmantota, Chrome 65. versijas vai jaunākas versijas lietotājiem tiks parādīta uzvedne, kad vietnēs tiks pieprasīts drošības atslēgu apstiprinājums.
 
       Vietrāži URL (piemēram, https://example.com/kads/cels) atbildīs tikai kā U2F appID. Domēni (piemēram, example.com) atbildīs tikai kā tīmekļa autorizācijas RP ID. Tādējādi, lai nodrošinātu U2F un tīmekļa autorizācijas API konkrētai vietnei, ir jābūt norādītam gan appID vietrādim URL, gan domēnam.</translation>
-<translation id="5835412847081687053">Konfigurē lietotāja sesijā atļautās lietotāja saskarnes lokalizācijas</translation>
 <translation id="5836064773277134605">Attālās piekļuves saimniekdatora izmantoto UDP portu diapazona ierobežošana</translation>
 <translation id="5862253018042179045">Iestatiet mutisko atsauksmju pieejamības funkcijas noklusējuma stāvokli pieteikšanās ekrānā.
 
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb
index 2214eb3..7c019a8 100644
--- a/components/policy/resources/policy_templates_ml.xtb
+++ b/components/policy/resources/policy_templates_ml.xtb
@@ -551,20 +551,6 @@
       ഡൗൺ‌ലോഡ് ചെയ്‌ത നിഘണ്ടു ഉപയോഗിച്ചും അക്ഷരപ്പിശക് പരിശോധന നടത്താൻ കഴിയും; ഈ നയം ഓൺലൈൻ സേവനത്തിന്റെ ഉപയോഗം മാത്രം നിയന്ത്രിക്കുന്നു.
 
       ഈ ക്രമീകരണം കോൺഫിഗർ ചെയ്‌തിട്ടില്ലെങ്കിൽ, അക്ഷരപ്പിശക് പരിശോധനാ സേവനം ഉപയോഗിക്കണമോ വേണ്ടയോ എന്നത് ഉപയോക്താവിന് തിരഞ്ഞെടുക്കാൻ കഴിയും.</translation>
-<translation id="2294283832646774959">പ്രിന്ററുകളുടെ ഒരു ലിസ്റ്റ് കോൺഫിഗർ ചെയ്യുന്നു.
-
-      ഈ നയം, അഡ്‌മിനിസ്‌ട്രേറ്റർമാരെ അവരുടെ ഉപയോക്താക്കൾക്ക് പ്രിന്റർ കോൺഫിഗറേഷനുകൾ നൽകാൻ അനുവദിക്കുന്നു.
-
-      <ph name="PRINTER_DISPLAY_NAME" />, <ph name="PRINTER_DESCRIPTION" /> എന്നിവ ഫ്രീ-ഫോം സ്‌ട്രിംഗുകളാണ്, പ്രിന്റർ തിരഞ്ഞെടുക്കൽ എളുപ്പത്തിലാക്കാൻ അവയെ ഇഷ്‌ടാനുസൃതമാക്കാവുന്നതാണ്. അന്തിമ ഉപയോക്താക്കൾക്ക് എളുപ്പത്തിൽ പ്രിന്റർ തിരിച്ചറിയുന്നതിന് <ph name="PRINTER_MANUFACTURER" />, <ph name="PRINTER_MODEL" /> എന്നിവ സഹായിക്കും. പ്രിന്ററിന്റെ നിർമ്മാതാവിനെയും മോഡലിനെയുമാണ് ഇവ പ്രതിനിധീകരിക്കുന്നത്. <ph name="URI_SCHEME" />, <ph name="URI_PORT" />, <ph name="URI_QUEUE" /> എന്നിവയുൾപ്പെടെ, ഒരു ക്ലയന്റ് കമ്പ്യൂട്ടറിൽ നിന്ന് ആക്‌സസ് ചെയ്യാവുന്ന വിലാസമായിരിക്കണം <ph name="PRINTER_URI" />. <ph name="PRINTER_UUID" /> ഓപ്‌ഷണലാണ്.  നൽകിയിട്ടുണ്ടെങ്കിൽ, ഇത് <ph name="ZEROCONF_DISCOVERY" /> പ്രിന്ററുകളുടെ ഡ്യൂപ്ലിക്കേറ്റുകൾ ഇല്ലാതാക്കാൻ സഹായിക്കുന്നു.
-
-      <ph name="PRODUCT_NAME" /> പിന്തുണയുള്ള പ്രിന്ററിനെ പ്രതിനിധാനം ചെയ്യുന്ന സ്‌ട്രിംഗുകളിൽ ഒന്ന് <ph name="PRINTER_EFFECTIVE_MODEL" /> എന്നതുമായി പൊരുത്തപ്പെടണം. പ്രിന്ററിന് അനുയോജ്യമായ PPD തിരിച്ചറിഞ്ഞ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിന് സ്‌ട്രിംഗ് ഉപയോഗിക്കപ്പെടും. കൂടുതൽ വിവരങ്ങൾ https://support.google.com/chrome?p=noncloudprint സന്ദർശിച്ചാൽ കണ്ടെത്താനാവും.
-
-      ഒരു പ്രിന്റർ‌ ആദ്യം ഉപയോഗിക്കുമ്പോൾ തന്നെ പ്രിന്റർ സജ്ജീകരണം പൂർത്തിയാകുന്നു. പ്രിന്റർ ഉപയോഗിക്കുന്നത് വരെ PPD-കൾ ഡൗൺലോഡ് ചെയ്യില്ല. അതിനുശേഷം, പതിവായി ഉപയോഗിക്കുന്ന PPD-കൾ കാഷെ ചെയ്യുന്നതാണ്.
-
-      ഉപയോക്താക്കൾക്ക് വ്യക്തിഗത ഉപകരണങ്ങളിൽ പ്രിന്ററുകൾ ഉപയോഗിക്കാനാവുമോ എന്നതിനെ ഈ നയം ബാധിക്കുകയില്ല. ഇത് വ്യക്തിഗത ഉപയോക്താക്കൾ മുഖേനയുള്ള പ്രിന്റർ കോൺഫിഗറേഷന് അനുബന്ധമാകാൻ ഉദ്ദേശിച്ചുള്ളതാണ്.
-
-      ആക്‌റ്റീവ് ഡയറക്‌ടറി മാനേജ് ചെയ്യപ്പെടുന്ന ഉപകരണങ്ങളുടെ കാര്യത്തിൽ, ആക്‌റ്റീവ് ഡയറക്‌ടറി മെഷീനിന്റെ പേരിലേക്കോ അതിന്റെ ഉപസ്‌ട്രിംഗിലേക്കോ <ph name="MACHINE_NAME_VARIABLE" /> എന്നതിന്റെ വിപുലീകരണത്തെ ഈ നയം പിന്തുണയ്ക്കുന്നു. ഉദാഹരണത്തിന്, മെഷീനിന്റെ പേര് <ph name="MACHINE_NAME_EXAMPLE" /> എന്നാണെങ്കിൽ, 6-ാമത്തെ സ്ഥാനത്തിന് ശേഷം, അതായത് <ph name="MACHINE_NAME_PART_EXAMPLE" />-ന് ശേഷം, 4 പ്രതീകങ്ങൾ ഉപയോഗിച്ച് <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> പ്രതിസ്ഥാപിക്കപ്പെടും. പൂജ്യം അടിസ്ഥാനമാക്കിയതാണ് സ്ഥാനമെന്ന് ശ്രദ്ധിക്കുക.
-      </translation>
 <translation id="2294382669900758280">നയം <ph name="TRUE" /> എന്ന് സജ്ജമാക്കിയിരിക്കുകയാണെങ്കിൽപ്പോലും, Android ആപ്‌സുകളിൽ വീഡിയോ പ്ലേ ചെയ്യുന്നത് പരിഗണിക്കാനാവില്ല.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> എന്നതിലെ ഡിഫോൾട്ടായ പുതിയ ടാബ് പേജ് കോൺഫിഗർ ചെയ്യുക.</translation>
 <translation id="2299220924812062390">പ്രാപ്തമാക്കപ്പെട്ട പ്ലഗിനുകളുടെ ലിസ്റ്റ് നിര്‍ദേശിക്കുന്നു</translation>
@@ -681,9 +667,6 @@
           Samba, Windows സെർവറുകളുടെ ഏറ്റവും പുതിയ എല്ലാ പതിപ്പുകളും NTLMv2-നെ പിന്തുണയ്ക്കുന്നു. വിപരീതദിശാ അനുയോജ്യതയ്ക്കായി മാത്രം ഇത് പ്രവർത്തനരഹിതമായിരിക്കണം, ഒപ്പം പരിശോധിച്ചുറപ്പിക്കലിന്‍റെ സുരക്ഷ ഇത് കുറയ്‌ക്കുകയും ചെയ്യുന്നു. 
 
           ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, ഡിഫോൾട്ട് ശരിയും NTLMv2 പ്രവർത്തനക്ഷമവും ആണ്.</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" /> പ്രദർശിപ്പിച്ചേക്കാവുന്ന ഭാഷകൾ കോൺഫിഗർ ചെയ്യുന്നു.
-
-      ഈ നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഈ നയത്തിൽ വ്യക്തമാക്കിയിട്ടുള്ള ഏതെങ്കിലും ഒരു ഭാഷയിൽ മാത്രം <ph name="PRODUCT_OS_NAME" /> പ്രദർശിപ്പിക്കാൻ കോൺഫിഗർ ചെയ്യാനേ ഉപയോക്താവിന് കഴിയൂ. ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിലോ ഒരു ശൂന്യമായ ലിസ്‌റ്റിലേക്കാണ് സജ്ജീകരിച്ചിരിക്കുന്നതെങ്കിലോ, പിന്തുണയ്ക്കുന്ന എല്ലാ UI ഭാഷകളിലും <ph name="PRODUCT_OS_NAME" /> പ്രദർശിപ്പിക്കാനാവും. അസാധുവായ മൂല്യങ്ങളുള്ള ഒരു ലിസ്‌റ്റിലേക്കാണ് ഈ നയം സജ്ജീകരിച്ചിരിക്കുന്നതെങ്കിൽ, അസാധുവായ എല്ലാ മൂല്യങ്ങളും അവഗണിക്കപ്പെടും. ഈ നയമനുസരിച്ച് അനുവദനീയമല്ലാത്ത ഒരു ഭാഷയിൽ <ph name="PRODUCT_OS_NAME" /> പ്രദർശിപ്പിക്കാൻ ഒരു ഉപയോക്താവ് മുമ്പ് കോൺഫിഗർ ചെയ്‌തിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താവ് അടുത്ത തവണ സൈൻ ഇൻ ചെയ്യുമ്പോൾ പ്രദർശിപ്പിക്കുന്ന ഭാഷ ഒരു അനുവദനീയ UI ഭാഷയിലേക്ക് മാറും. ഉപയോക്താവ് തിരഞ്ഞെടുത്ത ഭാഷകൾ കോൺഫിഗർ ചെയ്‌തിട്ടുണ്ടായിരുന്നെങ്കിൽ, അവയിൽ ഒന്ന് ഈ നയപ്രകാരം അനുവദനീയമാണെങ്കിൽ, <ph name="PRODUCT_OS_NAME" /> ഈ ഭാഷയിലേക്ക് മാറും. അല്ലെങ്കിൽ, ഈ നയത്തിൽ അസാധുവായ എൻട്രികൾ മാത്രമാണുള്ളതെങ്കിൽ, ഈ നയപ്രകാരം വ്യക്തമാക്കിയിട്ടുള്ള ആദ്യ സാധുവായ മൂല്യത്തിലേക്കോ ഒരു ഫാൾബാക്ക് ഭാഷയിലേക്കോ (നിലവിൽ യുഎസ്-ഇംഗ്ലീഷ്) <ph name="PRODUCT_OS_NAME" /> മാറും.</translation>
 <translation id="2604182581880595781">നെറ്റ്‌വർക്ക് ഫയൽ പങ്കിടലുമായി ബന്ധപ്പെട്ട നയങ്ങൾ കോൺഫിഗർ ചെയ്യുക.</translation>
 <translation id="2623014935069176671">പ്രാരംഭ ഉപയോക്തൃ പ്രവർത്തനത്തിനായി കാത്തിരിക്കുക</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" /> എന്നതിലേക്കുള്ള പ്രമാണങ്ങളുടെ സമർപ്പണം പ്രാപ്‌തമാക്കുക</translation>
@@ -1679,13 +1662,6 @@
 <translation id="5130288486815037971">TLS-ൽ RC4 സൈഫർ സ്യൂട്ടുകൾ പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്നെങ്കിൽ</translation>
 <translation id="5141670636904227950">ലോഗിൻ സ്‌ക്രീനിൽ പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്ന സ്ഥിര സ്‌ക്രീൻ മാഗ്നിഫയർ തരം സജ്ജമാക്കുക</translation>
 <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" />-ല്‍ എപ്പോഴും ഇനി പറയുന്ന URL പാറ്റേണുകള്‍ റെന്‍ഡര്‍ ചെയ്യുക</translation>
-<translation id="5147665094011258322">DHCP അഭ്യർത്ഥനകളിൽ ഉപയോഗിക്കപ്പെടുന്ന ഉപകരണത്തിന്‍റെ ഹോസ്റ്റുനാമം നിർണ്ണയിക്കുക.
-
-      ഈ നയം ശൂന്യമല്ലാത്ത സ്‌ട്രിംഗിലേക്ക് സജ്ജമാക്കിയാൽ, DHCP അഭ്യർത്ഥന വേളയിൽ ഉപകരണ ഹോസ്റ്റുനാമമായി ആ സ്‌ട്രിംഗ് ഉപയോഗിക്കപ്പെടും.
-
-      സ്‌ട്രിംഗിൽ ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} എന്നീ വേരിയബിളുകൾ അടങ്ങിയിരിക്കും, ഒരു ഹോസ്റ്റുനാമമായി ഉപയോഗിക്കുന്നതിന് മുമ്പ്, ഈ വേരിയബിളുകൾക്ക് പകരം, ഉപകരണത്തിലുള്ള മുല്യങ്ങൾ ഉപയോഗിക്കപ്പെടും (RFC 1035, വിഭാഗം 3.1 പ്രകാരം).
-
-      ഈ നയം സജ്ജമാക്കിയിട്ടില്ലെങ്കിലോ, സബ്സ്‌റ്റിറ്റ്യൂഷന് ശേഷമുള്ള മൂല്യം സാധുതയുള്ളൊരു ഹോസ്റ്റുനാമം അല്ലെങ്കിലോ, DHCP അഭ്യർത്ഥനയിൽ ഒരു ഹോസ്റ്റുനാമവും സജ്ജമാക്കപ്പെടില്ല. </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" />, <ph name="PRODUCT_NAME" /> എന്നത് സമാരംഭിക്കുമ്പോൾ ഉപയോഗിക്കുന്ന കൂടുതൽ പാരാമീറ്ററുകൾ വ്യക്തമാക്കുന്നതിന് നിങ്ങളെ അനുവദിക്കുന്നു .
 
           ഈ നയം സ്ഥിരസ്ഥിതിയായി സജ്ജമാക്കിയിട്ടില്ലെങ്കിൽ, കമാന്റ് ലൈൻ ഉപയോഗിക്കും.</translation>
@@ -1995,7 +1971,6 @@
 <translation id="5835124959204887277">സുരക്ഷ കീകളിൽ നിന്നുള്ള അറ്റസ്‌റ്റേഷൻ സർട്ടിഫിക്കറ്റുകൾ അഭ്യർത്ഥിക്കുമ്പോൾ നിർദ്ദേശം കാണിക്കാത്ത URL-കളും ഡൊമെയ്നുകളും നിർദ്ദേശിക്കുന്നു. കൂടാതെ, വ്യക്തിഗത സാക്ഷ്യപ്പെടുത്തൽ ഉപയോഗിക്കാനിടയുണ്ടെന്ന് സൂചിപ്പിക്കുന്ന ഒരു സിഗ്നൽ സുരക്ഷ കീയിലേക്ക് അയയ്ക്കപ്പെടും. ഇങ്ങനെ അയയ്‌ക്കാത്ത പക്ഷം, സൈറ്റുകൾ സുരക്ഷ കീകളുടെ അറ്റസ്‌റ്റേഷൻ അഭ്യർത്ഥിക്കുമ്പോൾ, Chrome 65+-ൽ ഉപയോക്താക്കൾക്ക് നിർദ്ദേശം ലഭിക്കും.
 
       U2F appID-കളുമായി മാത്രമേ URL-കൾ (https://example.com/some/path പോലുള്ളവ) പൊരുത്തപ്പെടുകയുള്ളൂ. അതുപോലെ, webauthn RP ഐഡികളുമായി മാത്രമേ ഡൊമെയ്‌നുകൾ (example.com പോലുള്ളവ) പൊരുത്തപ്പെടുകയുള്ളൂ. അതിനാൽ, ഒരു നിർദ്ദിഷ്‌ട സൈറ്റിനായി U2F-ഉം webauthn API-കളും ഉൾപ്പെടുത്താൻ, appID URL-ലും ഡൊമെയ്‌നും ലിസ്റ്റ് ചെയ്യേണ്ടത് ആവശ്യമായി വരും.</translation>
-<translation id="5835412847081687053">അനുവദിച്ചിട്ടുള്ള UI ഭാഷകൾ, ഒരു ഉപയോക്തൃ സെഷനിൽ കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="5836064773277134605">വിദൂര ആക്‌സസ്സ് ഹോസ്‌റ്റ് ഉപയോഗിക്കുന്ന UDP പോർട്ട് ശ്രേണി പരിമിതപ്പെടുത്തുക</translation>
 <translation id="5862253018042179045">ലോഗിൻ സ്‌ക്രീനിൽ സംഭാഷണ ഫീഡ്‌ബാക്ക് ഉപയോഗസഹായി സവിശേഷതയുടെ സ്ഥിര നില സജ്ജമാക്കുക.
 
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb
index 309f28b..b619cd9 100644
--- a/components/policy/resources/policy_templates_mr.xtb
+++ b/components/policy/resources/policy_templates_mr.xtb
@@ -541,20 +541,6 @@
       स्पेल चेकर तरीही एक डाउनलोड केलेला शब्दकोश वापरून केली जाऊ शकते; हे धोरण केवळ ऑनलाइन सेवा वापरणे नियंत्रित करते.
 
       हे सेटिंग कॉन्फिगर केलेले नसल्यास वापरकर्ते स्पेल चेकर सेवा वापरली जावी किंवा नाही हे निवडू शकतात.</translation>
-<translation id="2294283832646774959">प्रिंटरची सूची कॉन्फिगर करते.
-
-हे धोरण प्रशासकाला त्यांच्या वापरकर्त्यांसाठी प्रिंटर कॉन्फिगरेशन पुरवण्याची अनुमती देते.
-
-<ph name="PRINTER_DISPLAY_NAME" /> आणि <ph name="PRINTER_DESCRIPTION" /> या मुक्त स्वफॉरमॅटच्या स्ट्रिंग आहेत ज्या प्रिंटर निवडीच्या सोयीसाठी कस्टमाइझ केले जाऊ शकते. <ph name="PRINTER_MANUFACTURER" /> आणि <ph name="PRINTER_MODEL" /> अंतिम वापरकर्त्याद्वारे सहज प्रिंटर ओळख करू देते. ते निर्माता आणि प्रिंटरचा मॉडेल दाखवते. <ph name="PRINTER_URI" /> ने <ph name="URI_SCHEME" /> <ph name="URI_PORT" /> आणि <ph name="URI_QUEUE" /> सह क्लायंट कॉंप्युटरकडून पोहोचण्यायोग्य पत्ता असणे आवश्यक आहे. <ph name="PRINTER_UUID" /> पर्यायी आहे. जर पुरवले असल्यास, ते डुप्लिकेट <ph name="ZEROCONF_DISCOVERY" /> प्रिंटरला मदत करण्यासाठी वापरले जाते.
-
-<ph name="PRINTER_EFFECTIVE_MODEL" /> हे <ph name="PRODUCT_NAME" /> सपोर्ट असलेल्या प्रिंटर सादर करणार्‍या स्ट्रिंगपैकी एकाशी जुळणे आवश्यक आहे. प्रिंटरसाठी योग्य PPD ओळखण्यासाठी आणि इंस्टॉल करण्यासाठी स्ट्रिंग वापरली जाईल. अधिक माहिती https://support.google.com/chrome?p=noncloudprint येथे मिळू शकते.
-
-प्रिंटर सेटअप प्रिंटरच्या पहिल्या वापराच्या वेळी पूर्ण केले आहे. प्रिंटर वापरेपर्यंत PPD डाउनलोड केलेल्या नाहीत. त्यानंतर नेहमी वापरल्या जाणाऱ्या PPD कॅशे केल्या आहेत.
-
-वापरकर्ते वैयक्तिक डिव्हाइसवर प्रिंटर कॉन्फिगर करू शकतात किंवा नाही यावर या धोरणाचा परिणाम होत नाही. वैयक्तिक वापरकर्त्यांद्वारे प्रिंटरच्या कॉन्फिगरेशनला पूरक म्हणून ते उद्देशित आहे.
-
-Active Directory द्वारे व्यवस्थापित डिव्हाइससाठी हे धोरण <ph name="MACHINE_NAME_VARIABLE" /> च्या Active Directory मशीन नावावरील एक्स्टेंशनला किंवा ते कमी करण्यास सपोर्ट करते. उदाहरणार्थ, जर मशीनचे नाव <ph name="MACHINE_NAME_EXAMPLE" /> असेल, तर <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> हे सहाव्या स्थानानंतर चार अक्षरांनी बदलले जाईल, म्हणजे <ph name="MACHINE_NAME_PART_EXAMPLE" /> होईल. लक्षात ठेवा, की हे स्थान शून्य-आधारित आहे.
-      </translation>
 <translation id="2294382669900758280">हे धोरण <ph name="TRUE" /> वर सेट केले असले तरी देखील, Android अॅप्समध्ये व्हिडिओ प्ले करणे विचारात घेतले जात नाही.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> मध्ये डीफॉल्ट नवीन टॅब पृष्ठ कॉन्फिगर करा.</translation>
 <translation id="2299220924812062390">सक्षम केलेल्या प्लगइनची सूची निर्दिष्ट करा</translation>
@@ -672,9 +658,6 @@
           Samba आणि Windows सर्व्हरच्या सर्व अलीकडील आवृत्त्या NTLMv2 ला सपोर्ट करतात. हे केवळ मागील कंपॅटिबिलिटीसाठी बंद केलेले असणे आवश्‍यक आहे आणि ते ऑथेंटिकेशनची सुरक्षितता कमी करते.
 
           हे धोरण सेट केले नसल्यास, सत्य डीफॉल्ट असेल आणि NTLMv2 सुरू केलेले असेल.</translation>
-<translation id="2598508021807251719">ज्यामध्ये <ph name="PRODUCT_OS_NAME" /> दाखवलेले असू शकते अशी लोकॅल कॉन्फिगर करते.
-
-      हे धोरण सेट केलेले असल्यास, वापरकर्त्याला या धोरणाने निर्दिष्ट केलेल्या एका लोकॅलमध्ये दाखवले जाण्यासाठी फक्त <ph name="PRODUCT_OS_NAME" /> कॉन्फिगर करता येते. हे धोरण सेट केलेले नसल्यास किंवा रिकाम्या सूचीवर सेट केलेले असल्यास, <ph name="PRODUCT_OS_NAME" /> सपोर्ट असलेल्या सर्व UI लोकॅलवर दाखवले जाऊ शकते. हे धोरण अवैध मूल्ये असलेल्या सूचीवर सेट केलेले असल्यास, सर्व अवैध मूल्यांकडे दुर्लक्ष केले जाईल. वापरकर्त्याने याआधी या धोरणाने अनुमती न दिलेल्या लोकॅलमध्ये दाखवले जाण्यासाठी <ph name="PRODUCT_OS_NAME" /> कॉन्फिगर केलेले असल्यास, वापरकर्त्याने पुढील वेळी साइन इन केल्यावर डिस्प्ले लोकॅल अनुमती असलेल्या UI लोकॅलवर स्विच केले जाईल. वापरकर्त्याने प्राधान्य दिलेली लोकॅल कॉन्फिगर केलेली असल्यास आणि प्राधान्य दिलेल्या एका लोकॅलला या धोरणाने अनुमती दिलेली असल्यास, <ph name="PRODUCT_OS_NAME" /> या लोकॅलवर स्विच होईल. अन्यथा, <ph name="PRODUCT_OS_NAME" /> या धोरणाने निर्दिष्ट केलेल्या पहिल्या वैध मूल्यावर किंवा, या धोरणामध्ये फक्त अवैध एंट्री असल्यास, फॉलबॅक लोकॅलवर (सध्या en-US) वर स्विच होईल.</translation>
 <translation id="2604182581880595781">नेटवर्क फाइल शेअर संबंधित धोरणे कॉन्फिगर करा.</translation>
 <translation id="2623014935069176671">प्रारंभिक वापरकर्ता क्रियाकलापासाठी प्रतीक्षा करा</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" /> मध्‍ये दस्तऐवजांचे सबमिशन सक्षम करा</translation>
@@ -1713,13 +1696,6 @@
 <translation id="5130288486815037971">TLS मधील RC4 सायफर संच सक्षम केले आहे किंवा नाही</translation>
 <translation id="5141670636904227950">लॉगिन स्क्रीनवर सक्षम केलेला डीफॉल्ट स्क्रीन भिंग प्रकार सेट करा</translation>
 <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" /> मधील खालील URL नमूने नेहमी प्रस्तुत करा</translation>
-<translation id="5147665094011258322">DHCP विनंत्‍यांमध्‍ये वापरलेल्‍या डिव्‍हाइसचे होस्‍टनाव निर्धारित करा.
-
-      हे धोरण रिक्त नसलेल्या स्ट्रिंगवर सेट केले असल्यास, ती स्ट्रिंग DHCP विनंतीदरम्‍यान डिव्‍हाइस होस्‍टनाव म्‍हणून वापरली जाईल.
-
-      स्ट्रिंगमध्ये ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} व्हेरिएबल असू शकतात, जे होस्ट नाव वापरण्यापूर्वीच्या डिव्हाइसच्या मूल्यांसोबत बदलले जातील. परिणामी केलेले प्रतिस्‍थापन हे वैध होस्ट नाव असावे (RFC 1035, कलम 3.1 अनुसार).
-
-      हे धोरण सेट केले नसल्यास किंवा प्रतिस्थापनेनंतरचे मूल्य वैध होस्ट नाव नसल्यास, कोणतेही होस्ट नाव DHCP विनंतीमध्ये सेट केले जाणार नाही. </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> लाँच होते <ph name="PRODUCT_NAME" /> तेव्हा वापरले जाण्यासाठी अतिरिक्त पॅरामीटर नमूद करण्याची तुम्हाला परवानगी देते.
 
           हे धोरण सेट न केल्यास डीफॉल्ट कमांड लाइन वापरली जाईल.</translation>
@@ -2047,7 +2023,6 @@
 <translation id="5835124959204887277">सिक्युरिटी कीमधील अनुप्रमाणन सर्टिफिकेटची विनंती केली असताना URL आणि डोमेन निर्दिष्‍ट करते. याव्यतिरिक्त, विशिष्ट अनुप्रमाणन वापरले जाऊ शकते हे सूचित करणारा संकेत सिक्युरिटी कीला पाठवला जाईल. याशिवाय, साइट सिक्युरिटी कीच्या प्रमाणनाची विनंती करत असताना वापरकर्त्यांना Chrome 65+ मध्ये सूचित केले जाईल.
 
       URL (जसे की https://example.com/some/path) केवळ U2F appIDs शी जुळेल. डोमेन (जसे की example.com) केवळ webauthn RP ID शी जुळतील. म्हणून, दिलेल्या साइटसाठी U2F आणि webauthn API दोन्ही कव्हर करण्यासाठी, appID URL आणि डोमेन दोन्ही सूचीबद्ध करणे आवश्यक असेल.</translation>
-<translation id="5835412847081687053">वापरकर्ता सेशनमध्ये अनुमती असलेली UI लोकॅल कॉन्फिगर करा</translation>
 <translation id="5836064773277134605">दूरस्थ प्रवेश होस्टद्वारे वापरलेली UDP पोर्ट वर्गवारी प्रतिबंधित करा</translation>
 <translation id="5862253018042179045">लॉगिन स्क्रीनवर बोललेला फीडबॅक अॅक्सेसयोग्यता वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
 
diff --git a/components/policy/resources/policy_templates_ms.xtb b/components/policy/resources/policy_templates_ms.xtb
index ba8e5b1..3b5df3d 100644
--- a/components/policy/resources/policy_templates_ms.xtb
+++ b/components/policy/resources/policy_templates_ms.xtb
@@ -499,21 +499,6 @@
       Semakan ejaan masih boleh dilakukan menggunakan kamus yang dimuat turun; dasar ini hanya mengawal penggunaan perkhidmatan dalam talian.
 
       Jika tetapan ini tidak dikonfigurasi, maka pengguna boleh memilih sama ada perkhidmatan semakan ejaan harus digunakan atau tidak.</translation>
-<translation id="2294283832646774959">Mengkonfigurasi senarai pencetak.
-
-      Dasar ini membolehkan pentadbir menyediakan konfigurasi pencetak untuk pengguna mereka.
-.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> dan <ph name="PRINTER_DESCRIPTION" /> ialah rentetan bentuk bebas yang boleh disesuaikan untuk memudahkan pemilihan pencetak. <ph name="PRINTER_MANUFACTURER" /> dan <ph name="PRINTER_MODEL" /> bertujuan untuk memudahkan pengenalan pencetak oleh pengguna akhir. Dua butiran ini mewakili pengilang dan model pencetak. <ph name="PRINTER_URI" /> haruslah alamat yang boleh dicapai daripada komputer pelanggan termasuk <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> dan <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> adalah pilihan. Jika disediakan, maklumat ini digunakan untuk membantu menyahgandaduaan pencetak <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> mesti sepadan dengan satu daripada rentetan yang mewakili pencetak yang menyokong <ph name="PRODUCT_NAME" />. Rentetan itu akan digunakan untuk mengenal pasti dan memasang PPD yang sesuai untuk pencetak. Maklumat lanjut boleh ditemui di https://support.google.com/chrome?p=noncloudprint.
-
-      Persediaan pencetak selesai pada penggunaan pertama pencetak. PPD tidak dimuat turun sehinggalah pencetak digunakan. Selepas waktu itu, PPD yang kerap digunakan akan dicache.
-
-      Dasar ini tidak mempengaruhi sama ada pengguna boleh mengkonfigurasi pencetak pada peranti individu atau tidak. Dasar ini bertujuan menjadi pelengkap kepada pengkonfigurasian pencetak oleh pengguna individu.
-
-      Untuk peranti diurus Active Directory, dasar ini menyokong pengembangan <ph name="MACHINE_NAME_VARIABLE" /> kepada nama mesin Active Directory atau subrentetannya. Sebagai contoh, jika nama mesin ialah <ph name="MACHINE_NAME_EXAMPLE" />, maka <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> akan digantikan oleh 4 aksara yang bermula selepas kedudukan ke-6, iaitu <ph name="MACHINE_NAME_PART_EXAMPLE" />. Sila ambil perhatian bahawa kedudukan adalah berasaskan sifar.
-      </translation>
 <translation id="2294382669900758280">Tindakan memainkan video dalam apl Android tidak diambil kira, walaupun jika dasar ini ditetapkan kepada <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfigurasi halaman Tab Baharu lalai dalam <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Tentukan senarai pemalam yang didayakan</translation>
@@ -626,9 +611,6 @@
           Semua versi terbaru pelayan Samba dan Windows menyokong NTLMv2. Ciri ini harus dilumpuhkan untuk keserasian mundur sahaja dan mengurangkan keselamatan pengesahan.
 
           Jika dasar ini tidak ditetapkan, nilai lalainya ialah benar dan NTLMv2 didayakan.</translation>
-<translation id="2598508021807251719">Mengkonfigurasi tempat peristiwa yang digunakan <ph name="PRODUCT_OS_NAME" /> dalam paparan.
-
-      Jika dasar ini ditetapkan, pengguna hanya boleh mengkonfigurasi <ph name="PRODUCT_OS_NAME" /> supaya dipaparkan dalam salah satu tempat peristiwa yang dinyatakan oleh dasar ini. Jika dasar ini tidak ditetapkan atau ditetapkan kepada senarai kosong, <ph name="PRODUCT_OS_NAME" /> boleh dipaparkan dalam semua tempat peristiwa UI yang disokong. Jika dasar ini ditetapkan kepada senarai dengan nilai yang tidak sah, semua nilai tidak sah akan diabaikan. Jika sebelum ini pengguna telah mengkonfigurasi <ph name="PRODUCT_OS_NAME" /> supaya dipaparkan dalam tempat peristiwa yang tidak dibenarkan oleh dasar ini, tempat peristiwa paparan akan ditukar kepada tempat peristiwa UI yang dibenarkan apabila pengguna log masuk selepas ini. Jika pengguna telah mengkonfigurasi tempat peristiwa pilihan dan salah satu tempat peristiwa pilihan itu dibenarkan oleh dasar ini, <ph name="PRODUCT_OS_NAME" /> akan beralih kepada tempat peristiwa ini. Jika tidak, <ph name="PRODUCT_OS_NAME" /> akan beralih kepada nilai sah pertama yang dinyatakan oleh dasar ini atau kepada tempat peristiwa sebelumnya (pada masa ini en-US), jika dasar ini hanya mengandungi masukan yang tidak sah.</translation>
 <translation id="2604182581880595781">Konfigurasikan dasar yang berkaitan dengan Perkongsian Fail Rangkaian.</translation>
 <translation id="2623014935069176671">Tunggu aktiviti pengguna awal</translation>
 <translation id="262740370354162807">Dayakan penyerahan dokumen pada <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1519,13 +1501,6 @@
 <translation id="5130288486815037971">Sama ada suit sifer RC4 dalam TLS didayakan</translation>
 <translation id="5141670636904227950">Tetapkan jenis penggadang skrin lalai yang didayakan pada skrin log masuk</translation>
 <translation id="5142301680741828703">Sentiasa paparkan corak URL berikut dalam <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Tentukan nama hos peranti yang digunakan dalam permintaan DHCP.
-
-      Jika dasar ini ditetapkan kepada rentetan tidak kosong, rentetan itu akan digunakan sebagai nama hos peranti semasa permintaan DHCP.
-
-      Rentetan itu boleh mengandungi pemboleh ubah ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} yang akan digantikan dengan nilai pada peranti sebelum digunakan sebagai nama hos. Penggantian yang terhasil mestilah nama hos yang sah (mengikut RFC 1035, bahagian 3.1).
-
-      Jika dasar ini tidak ditetapkan atau nilai selepas penggantian bukan nama hos yang sah, tiada nama hos akan ditetapkan dalam permintaan DHCP. </translation>
 <translation id="5148753489738115745">Membolehkan anda menentukan parameter tambahan yang digunakan apabila  <ph name="PRODUCT_FRAME_NAME" /> melancarkan <ph name="PRODUCT_NAME" />.
 
           Jika dasar ini tidak ditetapkan, baris perintah lalai akan digunakan.</translation>
@@ -1774,7 +1749,6 @@
 <translation id="5835124959204887277">Menentukan URL dan domain yang mana gesaan tidak akan ditunjukkan apabila sijil pembuktian daripada Kunci Keselamatan diminta. Selain itu, isyarat akan dihantar kepada Kunci Keselamatan yang menunjukkan bahawa pembuktian individu boleh digunakan. Tanpa ini, pengguna akan digesa dalam Chrome 65+ apabila tapak meminta pembuktian Kunci Keselamatan.
 
       URL (seperti https://example.com/some/path) hanya akan sepadan sebagai appID U2F. Domain (seperti example.com) hanya sepadan sebagai ID RP webauthn. Oleh sebab itu, untuk meliputi kedua-dua API U2F dan webauthn bagi tapak tertentu, kedua-dua URL dan domain appID perlu disenaraikan.</translation>
-<translation id="5835412847081687053">Konfigurasikan tempat peristiwa UI yang dibenarkan dalam sesi pengguna</translation>
 <translation id="5836064773277134605">Hadkan julat port UDP yang digunakan oleh hos akses jauh</translation>
 <translation id="5862253018042179045">Tetapkan keadaan lalai ciri kebolehcapaian maklum balas pertuturan pada skrin log masuk.
 
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 114b30a..074ceda 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -494,20 +494,6 @@
       Spellingcontrole kan nog steeds worden uitgevoerd met een gedownload woordenboek. Dit beleid beheert alleen het gebruik van de online service.
 
       Als deze instelling niet is geconfigureerd, kunnen gebruikers kiezen of de service voor spellingcontrole moet worden gebruikt.</translation>
-<translation id="2294283832646774959">Hiermee configureer je een lijst met printers.
-
-      Met dit beleid kunnen beheerders hun gebruikers voorzien van printerconfiguraties.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> en <ph name="PRINTER_DESCRIPTION" /> zijn vrije tekenreeksen die kunnen worden aangepast om de printerselectie te vereenvoudigen. <ph name="PRINTER_MANUFACTURER" /> en <ph name="PRINTER_MODEL" /> zijn bedoeld om de printeridentificatie door eindgebruikers te vereenvoudigen. Ze staan voor de fabrikant en het model van de printer. <ph name="PRINTER_URI" /> moet een adres zijn dat bereikbaar is vanaf een clientcomputer, inclusief <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> en <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> is optioneel. Als de UUID van de printer is opgegeven, wordt deze gebruikt om <ph name="ZEROCONF_DISCOVERY" />-printers te dedupliceren.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> moet overeenkomen met een van de tekenreeksen die een door <ph name="PRODUCT_NAME" /> ondersteunde printer vertegenwoordigen. De tekenreeks wordt gebruikt om de juiste PPD voor de printer te identificeren en te installeren. Meer informatie hierover vind je op https://support.google.com/chrome?p=noncloudprint.
-
-      De instellingen van de printer worden voltooid wanneer de printer voor het eerst wordt gebruikt. Daarna worden veelgebruikte PPD's opgeslagen in het cachegeheugen.
-
-      Dit beleid is niet van invloed op de mogelijkheid van gebruikers om printers op afzonderlijke apparaten in te stellen. Het is bedoeld als aanvulling op de printerinstellingen van afzonderlijke gebruikers.
-
-      Voor apparaten die via Active Directory worden beheerd, ondersteunt dit beleid de uitbreiding van <ph name="MACHINE_NAME_VARIABLE" /> naar de naam van de Active Directory-machine of naar een subtekenreeks daarvan. Als de machinenaam bijvoorbeeld <ph name="MACHINE_NAME_EXAMPLE" /> is, wordt <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> vervangen door de vier tekens vanaf de zesde positie, oftewel <ph name="MACHINE_NAME_PART_EXAMPLE" />. Houd er rekening mee dat de positie op nul is gebaseerd.
-      </translation>
 <translation id="2294382669900758280">Er wordt geen rekening gehouden met het afspelen van video in Android-apps, zelfs niet wanneer dit beleid is ingesteld op <ph name="TRUE" /> (Waar).</translation>
 <translation id="2298647742290373702">De standaardpagina 'Nieuw tabblad' configureren in <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Een lijst met ingeschakelde plug-ins specificeren</translation>
@@ -620,9 +606,6 @@
           Alle recente versies van Samba en Windows-servers ondersteunen NTLMv2. Dit moet alleen worden uitgeschakeld voor achterwaartse compatibiliteit en vermindert de beveiliging van verificatie.
 
           Als dit beleid niet is gedefinieerd, is de standaardwaarde 'waar' en is NTLMv2 ingeschakeld.</translation>
-<translation id="2598508021807251719">Hiermee wordt ingesteld in welke talen <ph name="PRODUCT_OS_NAME" /> kan worden weergegeven.
-
-      Als dit beleid is ingesteld, kan de gebruiker alleen instellen dat <ph name="PRODUCT_OS_NAME" /> wordt weergegeven in een van de talen die is opgenomen in dit beleid. Als dit beleid niet is ingesteld of op een lege lijst is ingesteld, kan <ph name="PRODUCT_OS_NAME" /> worden weergegeven in alle ondersteunde weergavetalen. Als dit beleid is ingesteld op een lijst met ongeldige waarden, worden alle ongeldige waarden genegeerd. Als een gebruiker eerder had ingesteld dat <ph name="PRODUCT_OS_NAME" /> wordt weergegeven in een bepaalde taal die niet is toegestaan door dit beleid, wordt de weergavetaal de volgende keer dat de gebruiker inlogt, ingesteld op een taal die wel is toegestaan. Als de gebruiker voorkeurstalen had ingesteld en een van de voorkeurstalen is toegestaan door dit beleid, schakelt <ph name="PRODUCT_OS_NAME" /> over naar deze taal. Als de gebruiker geen voorkeurstalen had ingesteld, schakelt <ph name="PRODUCT_OS_NAME" /> over naar de eerste geldige waarde die door het beleid is bepaald, of anders naar de standaardtaal (momenteel en-US) als het beleid alleen ongeldige talen bevat.</translation>
 <translation id="2604182581880595781">Beleid met betrekking tot Network File Shares configureren.</translation>
 <translation id="2623014935069176671">Wachten op initiële gebruikersactiviteit</translation>
 <translation id="262740370354162807">Verzenden van documenten naar <ph name="CLOUD_PRINT_NAME" /> inschakelen</translation>
@@ -842,6 +825,7 @@
 
           Als je dit beleid niet instelt, kunnen gebruikers zelf de gewenste proxyinstellingen selecteren.</translation>
 <translation id="3205825995289802549">Het eerste browservenster maximaliseren bij eerste uitvoering</translation>
+<translation id="3211426942294667684">Instellingen voor inloggen bij browser</translation>
 <translation id="3213821784736959823">Hiermee wordt bepaald of de ingebouwde DNS-client wordt gebruikt in <ph name="PRODUCT_NAME" />.
 
       Als dit beleid is ingesteld op 'True', wordt de ingebouwde DNS-client gebruikt (indien beschikbaar).
@@ -1119,6 +1103,15 @@
       Als je dit beleid niet instelt, gebruikt <ph name="PRODUCT_NAME" /> de normale standaardmap (platformspecifiek).
 
       Raadpleeg https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables voor een lijst met variabelen die kunnen worden gebruikt.</translation>
+<translation id="3904459740090265495">Met dit beleid wordt het inloggedrag van de browser beheerd. Hiermee kun je specificeren of de gebruiker kan inloggen bij <ph name="PRODUCT_NAME" /> met zijn account en accountgerelateerde services (zoals Chrome-synchronisatie) kan gebruiken.
+
+      Als het beleid is ingesteld op 'Inloggen bij browser uitschakelen', kan de gebruiker niet inloggen bij de browser en geen accountgebaseerde services gebruiken. Functies op browserniveau (zoals Chrome-synchronisatie) kunnen in dit geval niet worden gebruikt en zijn niet beschikbaar. Als de gebruiker was ingelogd en het beleid is ingesteld op 'Uitgeschakeld', wordt de gebruiker uitgelogd wanneer hij Chrome de volgende keer uitvoert. Zijn lokale profielgegevens (zoals bladwijzers, wachtwoorden, enzovoort) blijven behouden. De gebruiker kan nog steeds inloggen bij en gebruikmaken van Google-webservices zoals Gmail.
+
+      Als het beleid is ingesteld op 'Inloggen bij browser inschakelen', mag de gebruiker inloggen bij de browser en wordt deze automatisch ingelogd bij de browser wanneer hij is ingelogd bij Google-webservices zoals Gmail. Als een gebruiker wordt ingelogd bij de browser, betekent dit dat de accountgegevens van de gebruiker worden bewaard door de browser. Het betekent echter niet dat Chrome-synchronisatie standaard wordt ingeschakeld. De gebruiker moet zich afzonderlijk aanmelden voor gebruik van deze functie. Als dit beleid wordt ingeschakeld, kan de gebruiker de instelling die inloggen bij de browser toestaat, niet uitschakelen. Gebruik het beleid 'SyncDisabled' om de beschikbaarheid van Chrome-synchronisatie te beheren.
+
+      Als het beleid is ingesteld op 'Inloggen bij browser afdwingen', krijgt de gebruiker een dialoogvenster voor accountselectie te zien en moet deze een account kiezen en inloggen om de browser te gebruiken. Dit zorgt ervoor dat voor beheerde accounts de beleidsregels die aan het account zijn gekoppeld, worden toegepast en afgedwongen. Hiermee wordt Chrome-synchronisatie standaard ingeschakeld voor het account, behalve wanneer synchronisatie is uitgeschakeld door de domeinbeheerder of via het beleid 'SyncDisabled'. De standaardwaarde van BrowserGuestModeEnabled wordt ingesteld op 'False'. Houd er rekening mee dat bestaande, niet-ingelogde profielen worden vergrendeld en niet toegankelijk zijn na inschakeling van dit beleid. Bekijk het Helpcentrum-artikel voor meer informatie: https://support.google.com/chrome/a/answer/7572556.
+
+      Als dit beleid niet is ingesteld, kan de gebruiker bepalen of deze de optie voor inloggen bij de browser wil inschakelen en deze naar wens gebruiken.</translation>
 <translation id="3911737181201537215">Dit beleid is niet van invloed op de logboekregistratie van Android.</translation>
 <translation id="391531815696899618">Hiermee wordt synchronisatie van Google Drive in de app Bestanden van <ph name="PRODUCT_OS_NAME" /> uitgeschakeld wanneer de optie is ingesteld op 'True'. In dat geval worden geen gegevens naar Google Drive geüpload.
 
@@ -1168,6 +1161,7 @@
 
       Houd er rekening mee dat dit beleid wordt genegeerd en dat de locatieservices van Google altijd zijn uitgeschakeld wanneer het beleid <ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME" /> is ingesteld op <ph name="BLOCK_GEOLOCATION_SETTING" />.</translation>
 <translation id="408029843066770167">Query's naar een Google-tijdservice toestaan</translation>
+<translation id="408076456549153854">Inloggen bij browser inschakelen</translation>
 <translation id="4088589230932595924">Incognitomodus afgedwongen</translation>
 <translation id="4088983553732356374">Hiermee kun je instellen of websites lokaal gegevens mogen instellen. Het instellen van lokale gegevens kan worden toegestaan voor alle websites of worden geweigerd voor alle websites.
 
@@ -1473,6 +1467,7 @@
 <translation id="4962262530309732070">Als dit beleid is ingesteld op 'True' of niet wordt geconfigureerd, staat <ph name="PRODUCT_NAME" /> 'Persoon toevoegen' toe vanuit gebruikersbeheer.
 
       Als dit beleid is ingesteld op 'False', staat <ph name="PRODUCT_NAME" /> het maken van nieuwe profielen niet toe vanuit gebruikersbeheer.</translation>
+<translation id="4970855112942626932">Inloggen bij browser uitschakelen</translation>
 <translation id="4971529314808359013">Hiermee kun je een lijst met URL-patronen opgeven die sites specificeren waarvoor <ph name="PRODUCT_NAME" /> automatisch een clientcertificaat moet selecteren als de site vraagt om een certificaat.
 
           De waarde moet een array van JSON-woordenboeken met tekenreeksen zijn. Elk woordenboek moet de indeling { "pattern": "$URL_PATTERN", "filter" : $FILTER } hebben, waarbij $URL_PATTERN een patroon voor het instellen van content is. $FILTER beperkt de clientcertificaten die de browser automatisch kan selecteren. Onafhankelijk van het filter, worden alleen certificaten geselecteerd die overeenkomen met het certificaatverzoek van de server. Als $FILTER de indeling { "ISSUER": { "CN": "$ISSUER_CN" } } heeft, worden daarnaast alleen clientcertificaten geselecteerd die zijn uitgegeven door een certificaat met de CommonName $ISSUER_CN. Als $FILTER het lege woordenboek {} is, wordt de selectie van clientcertificaten niet verder beperkt.
@@ -1509,13 +1504,6 @@
 <translation id="5130288486815037971">Of RC4-coderingssuites in TLS zijn ingeschakeld</translation>
 <translation id="5141670636904227950">Het standaardtype van vergrootglas instellen dat op het inlogscherm is ingeschakeld</translation>
 <translation id="5142301680741828703">De volgende URL-patronen altijd verwerken in <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Bepaal de hostnaam van het apparaat die wordt gebruikt in DHCP-verzoeken.
-
-      Als dit beleid is ingesteld op een niet-lege tekenreeks, wordt deze tekenreeks tijdens het DHCP-verzoek gebruikt als hostnaam van het apparaat.
-
-      De tekenreeks kan de variabelen ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} bevatten, die worden vervangen door waarden op het apparaat voordat deze als hostnaam wordt gebruikt. Deze vervanging moet een geldige hostnaam opleveren (conform RFC 1035, sectie 3.1).
-
-      Als dit beleid niet is ingesteld of als de vervanging geen geldige hostnaam oplevert, wordt er geen hostnaam ingesteld in het DHCP-verzoek. </translation>
 <translation id="5148753489738115745">Hiermee kun je extra parameters opgeven die worden gebruikt wanneer <ph name="PRODUCT_FRAME_NAME" /> <ph name="PRODUCT_NAME" /> start.
 
           Als dit beleid niet is ingesteld, wordt de standaardopdrachtregel gebruikt.</translation>
@@ -1768,7 +1756,6 @@
 <translation id="5835124959204887277">Specificeert URL's en domeinen waarvoor geen prompt wordt weergegeven wanneer bevestigingscertificaten van beveiligingssleutels wordt aangevraagd. Er wordt bovendien een signaal verzonden naar de beveiligingssleutel dat aangeeft dat afzonderlijke bevestiging mag worden gebruikt. Zonder dit signaal krijgen gebruikers in Chrome 65+ een prompt te zien wanneer sites bevestiging van beveiligingssleutels aanvragen.
 
       URL's (zoals https://example.com/some/path) komen alleen overeen als U2F appID's. Domeinen (zoals example.com) komen alleen overeen als webauthn RP ID's. Dus om zowel de U2F- als webauthn-API voor een bepaalde site te omvatten, moeten zowel de appID-URL als het appID-domein worden vermeld.</translation>
-<translation id="5835412847081687053">Instellen welke weergavetalen zijn toegestaan in een gebruikerssessie</translation>
 <translation id="5836064773277134605">Het UDP-poortbereik beperken dat voor de host voor externe toegang wordt gebruikt</translation>
 <translation id="5862253018042179045">De standaardstatus van de toegankelijkheidsfunctie voor gesproken feedback instellen op het inlogscherm.
 
@@ -1890,6 +1877,7 @@
 
       Als dit beleid niet is geconfigureerd, is de lijst met USB-apparaten die kunnen worden ontkoppeld leeg.</translation>
 <translation id="6083631234867522991">Windows (Windows-clients):</translation>
+<translation id="6091233616732024397">Gebruikers dwingen in te loggen om de browser te gebruiken</translation>
 <translation id="6093156968240188330">Externe gebruikers toestaan om een vensters met verhoogde bevoegdheid te gebruiken tijdens een sessie voor ondersteuning op afstand</translation>
 <translation id="6095999036251797924">Specificeert de periode zonder gebruikersinvoer waarna het scherm wordt vergrendeld wanneer het apparaat op netstroom of op de batterij werkt.
 
@@ -1968,6 +1956,11 @@
 <translation id="6368011194414932347">De homepage-URL configureren</translation>
 <translation id="6368403635025849609">JavaScript toestaan op deze sites</translation>
 <translation id="6376659517206731212">Kan verplicht zijn</translation>
+<translation id="6377355597423503887">Dit beleid is verouderd. Je kunt in plaats daarvan BrowserSignin gebruiken.
+
+      Hiermee wordt toegestaan dat de gebruiker inlogt bij <ph name="PRODUCT_NAME" />.
+
+      Als je dit beleid instelt, kun je bepalen of een gebruiker mag inloggen bij <ph name="PRODUCT_NAME" />. Als je dit beleid instelt op 'False', werken apps en extensies die de API chrome.identity gebruiken niet meer. Daarom kun je in plaats hiervan ook SyncDisabled gebruiken.</translation>
 <translation id="6378076389057087301">Specificeer of audioactiviteit invloed heeft op stroombeheer</translation>
 <translation id="637934607141010488">Lijst melden met apparaatgebruikers die onlangs zijn ingelogd.
 
@@ -2877,6 +2870,11 @@
 <translation id="8548832052135586762">Hiermee bepaal je of je alleen in kleur, alleen in monochroom of zonder kleurbeperking wilt afdrukken. Als er geen beleid is ingesteld, gelden er geen beperkingen.</translation>
 <translation id="8549772397068118889">Waarschuwen als sites worden bezocht die zich niet in de inhoudspakketten bevinden</translation>
 <translation id="8566842294717252664">De Web Store verbergen op de pagina 'Nieuw tabblad' en in de App Launcher</translation>
+<translation id="857369585509260201">Dit beleid is verouderd. Je kunt in plaats daarvan BrowserSignin gebruiken.
+
+      Als dit beleid is ingesteld op 'True', moet de gebruiker inloggen bij <ph name="PRODUCT_NAME" /> met zijn profiel voordat hij de browser gebruikt. De standaardwaarde van BrowserGuestModeEnabled wordt ingesteld op 'False'. Houd er rekening mee dat bestaande, niet-ingelogde profielen worden vergrendeld en niet toegankelijk zijn na inschakeling van dit beleid. Bekijk het Helpcentrum-artikel voor meer informatie.
+
+      Als dit beleid is ingesteld op 'False' of niet is geconfigureerd, kan de gebruiker de browser gebruiken zonder in te loggen bij <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8586528890725660268">Hiermee worden de printers gespecificeerd die een gebruiker niet kan gebruiken.
 
       Dit beleid wordt alleen gebruikt als <ph name="PRINTERS_BLACKLIST" /> is gekozen voor <ph name="BULK_PRINTERS_ACCESS_MODE" />.
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb
index 2e83525..ad85470 100644
--- a/components/policy/resources/policy_templates_no.xtb
+++ b/components/policy/resources/policy_templates_no.xtb
@@ -482,21 +482,6 @@
       Du kan fortsatt utføre stavekontroll av innhold, men da med en ordliste du har lastet ned selv – denne innstillingen styrer bare bruk av tjenesten på nettet.
 
       Hvis denne innstillingen ikke er konfigurert, kan brukere velge om tjenesten for stavekontroll skal eller ikke skal brukes.</translation>
-<translation id="2294283832646774959">Konfigurerer en liste over skrivere.
-
-      Denne regelen gjør det mulig for administratorer å gi ut skriverkonfigurasjoner til
-      brukerne sine.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> og <ph name="PRINTER_DESCRIPTION" /> er strenger i et fritt format som kan tilpasses for å gjøre det enklere å velge skriver. <ph name="PRINTER_MANUFACTURER" /> og <ph name="PRINTER_MODEL" /> brukes til å gjøre det lettere for brukerne å identifisere skrivere. De representerer skrivermodellen og -produsenten. <ph name="PRINTER_URI" /> skal være en adresse som kan nås fra en klientdatamaskin, inkludert <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> og <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> er valgfritt. Hvis den oppgis, brukes den til å deduplisere <ph name="ZEROCONF_DISCOVERY" />-skrivere.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> må samsvare med en av strengene som representerer en <ph name="PRODUCT_NAME" />-støttet skriver. Strengen blir brukt til å identifisere og installere den riktige PPD-filen for skriveren. Du finner mer informasjon på https://support.google.com/chrome?p=noncloudprint.
-
-      Skriverkonfigureringen er fullført når en skriver brukes for første gang. PPD-filer lastes ikke ned før skriveren brukes. Etter det blir PPD-filer som brukes ofte, bufret.
-
-      Denne regelen kan ikke brukes til å bestemme om brukere kan konfigurere skrivere på individuelle enheter. Den er ment å være et supplement til konfigureringen av skrivere som er gjort av individuelle brukere.
-
-      For Active Directory-administrerte enheter støtter denne regelen utvidelse av <ph name="MACHINE_NAME_VARIABLE" /> til Active Directory-maskinnavnet eller en delstreng av det. Hvis maskinnavnet for eksempel er <ph name="MACHINE_NAME_EXAMPLE" />, erstattes <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> med de 4 tegnene etter 6. posisjon, dvs. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Merk at posisjonen er null-basert.
-      </translation>
 <translation id="2294382669900758280">Videoavspilling i Android-apper tas ikke med i betraktningen – selv ikke når denne regelen er angitt som <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfigurer standardsiden for nye faner i <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Angi en liste over aktiverte programtillegg</translation>
@@ -605,9 +590,6 @@
           Alle nylige versjoner av Samba- og Windows-tjenere støtter NTLMv2. Dette bør bare slås av for bakoverkompatibilitet og reduserer sikkerheten for autentisering.
 
           Når denne regelen ikke er definert, er standardverdien «true» (sann) og NTLMv2 er slått på.</translation>
-<translation id="2598508021807251719">Konfigurerer hvilke lokaliteter <ph name="PRODUCT_OS_NAME" /> kan vises i.
-
-      Hvis denne regelen er angitt, kan brukeren bare konfigurere <ph name="PRODUCT_OS_NAME" /> til å vises i en av lokalitetene som er angitt av denne regelen. Hvis regelen ikke er angitt eller er angitt med en tom liste, kan <ph name="PRODUCT_OS_NAME" /> vises i alle UI-lokalitetene som støttes. Hvis regelen er angitt med en liste med ugyldige verdier, ignoreres alle de ugyldige verdiene. Hvis en bruker tidligere konfigurerte <ph name="PRODUCT_OS_NAME" /> til å bli vist på en lokalitet som ikke tillates av denne regelen, byttes den viste lokaliteten til en tillatt UI-lokalitet neste gang brukeren logger på. Hvis brukeren har konfigurert foretrukne lokaliteter og en av de foretrukne lokalitetene tillates av denne regelen, bytter <ph name="PRODUCT_OS_NAME" /> til denne lokaliteten. Ellers bytter <ph name="PRODUCT_OS_NAME" /> til den første gyldige verdien angitt av denne regelen eller til en reservelokalitet (en-US) hvis denne regelen bare inneholder ugyldige oppføringer.</translation>
 <translation id="2604182581880595781">Konfigurer retningslinjer knyttet til delte nettverksresurser.</translation>
 <translation id="2623014935069176671">Vent på første brukeraktivitet</translation>
 <translation id="262740370354162807">Aktiver sending av dokumenter til <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1491,13 +1473,6 @@
 <translation id="5130288486815037971">Definerer om RC4-chifferserier i TLS er slått på</translation>
 <translation id="5141670636904227950">Angi standard skjermforstørrelsestype som er aktivert på påloggingssiden</translation>
 <translation id="5142301680741828703">Alltid gjengi følgende nettadressemønstre i <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Finn vertsnavnet for enheten som brukes i DHCP-forespørsler.
-
-      Hvis denne regelen er angitt som en streng som ikke er tom, blir den strengen brukt som vertsnavnet for enheten ved DHCP-forespørsler.
-
-      Strengen kan inneholde variablene ${ASSET_ID}, ${SERIAL_NUM} og ${MAC_ADDR}. Disse blir erstattet med verdier på enheten før strengen blir tatt i bruk som vertsnavn. Den resulterende strengen må være et gyldig vertsnavn (per RFC 1035, del 3.1).
-
-      Hvis denne regelen ikke er angitt, eller hvis den endelige verdien ikke er et gyldig vertsnavn, blir ikke noe vertsnavn angitt i DHCP-forespørsler. </translation>
 <translation id="5148753489738115745">Lar deg spesifisere ytterligere parametere som brukes når <ph name="PRODUCT_FRAME_NAME" /> kjører <ph name="PRODUCT_NAME" />.
 
           Hvis denne tillatelsen ikke er angitt, blir standardkommandolinjen brukt.</translation>
@@ -1746,7 +1721,6 @@
 <translation id="5835124959204887277">Spesifiserer nettadresser og domener som det ikke blir vist noen forespørsel for når det blir bedt om attestsertifikater fra sikkerhetsnøkler. I tillegg blir et signal sendt til sikkerhetsnøkkelen. Dette signalet indikerer at enkeltattester kan brukes. Uten dette kommer brukere til å få opp en forespørsel i Chrome v65+ når nettsteder ber om attest for sikkerhetsnøkler.
 
       Nettadresser (for eksempel https://example.com/some/path) samsvarer bare som U2F-app-ID-er. Domener (for eksempel example.com) samsvarer bare som webauthn RP-ID-er. For å dekke både U2F- og webauthn-API-er for et bestemt nettsted må derfor både app-ID-nettadressen og domenet listes opp.</translation>
-<translation id="5835412847081687053">Konfigurer tillatte lokaliteter i brukerøkter</translation>
 <translation id="5836064773277134605">Begrens UDP-portområdet som brukes av fjerntilgangsverten</translation>
 <translation id="5862253018042179045">Angi standard tilstand for tilgjengelighetsfunksjonen for muntlig tilbakemelding på påloggingssiden.
 
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb
index 843bb8e1..aa574bd 100644
--- a/components/policy/resources/policy_templates_pl.xtb
+++ b/components/policy/resources/policy_templates_pl.xtb
@@ -487,21 +487,6 @@
       Pisownię można nadal sprawdzać, korzystając z pobranego słownika. Ta zasada kontroluje tylko używanie usługi internetowej.
 
       Jeśli to ustawienie nie zostanie skonfigurowane, użytkownicy będą mogli wybrać, czy chcą używać usługi sprawdzania pisowni.</translation>
-<translation id="2294283832646774959">Konfiguruje listę drukarek.
-
-      Ta zasada umożliwia administratorom przekazanie konfiguracji drukarek
-      użytkownikom.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> i <ph name="PRINTER_DESCRIPTION" /> to dowolny tekst, który ma ułatwić wybranie drukarki. <ph name="PRINTER_MANUFACTURER" /> i <ph name="PRINTER_MODEL" /> ułatwiają użytkownikom identyfikację drukarki. Oznaczają producenta i model drukarki. <ph name="PRINTER_URI" /> to adres, który powinien być dostępny z komputera klienckiego, zawierający te składniki: <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> i <ph name="URI_QUEUE" />. Opcjonalny składnik to <ph name="PRINTER_UUID" />. Jeśli jest podany, umożliwia usunięcie duplikatów drukarek <ph name="ZEROCONF_DISCOVERY" />.
-
-      Ciąg znaków <ph name="PRINTER_EFFECTIVE_MODEL" /> musi być zgodny z jednym z ciągów oznaczających obsługiwaną drukarkę <ph name="PRODUCT_NAME" />. Zostanie on użyty do zidentyfikowania oraz zainstalowania pliku PPD odpowiedniego dla drukarki. Więcej informacji znajdziesz na https://support.google.com/chrome?p=noncloudprint
-
-      Konfiguracja drukarki jest wykonywana przy jej pierwszym użyciu. Pliki PPD nie są pobierane przed użyciem drukarki. Później często używane pliki PPD są przechowywane w pamięci podręcznej.
-
-      Zasada nie ma wpływu na to, czy użytkownicy mogą konfigurować drukarki na pojedynczych urządzeniach. Jest ona uzupełnieniem konfiguracji drukarek wykonywanej przez poszczególnych użytkowników.
-
-      W przypadku urządzeń zarządzanych Active Directory zasada ta obsługuje rozszerzanie nazwy <ph name="MACHINE_NAME_VARIABLE" /> do nazwy komputera Active Directory lub jej podłańcucha. Jeśli na przykład nazwa komputera to <ph name="MACHINE_NAME_EXAMPLE" />, ciąg <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> zastępowany jest czterema znakami, zaczynając po szóstej pozycji, np. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Pozycja jest liczona od zera.
-      </translation>
 <translation id="2294382669900758280">Odtwarzanie filmów w aplikacjach na Androida nie jest uwzględniane, nawet gdy zasada jest ustawiona na <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Skonfiguruj domyślną stronę nowej karty w <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Określ listę włączonych wtyczek</translation>
@@ -606,9 +591,6 @@
           Wszystkie nowsze wersje serwerów Samba i Windows obsługują uwierzytelnianie NTLMv2. Należy je wyłączyć tylko w celu zapewnienia wstecznej zgodności. Wyłączenie zmniejsza bezpieczeństwo uwierzytelniania.
 
           Jeśli ta zasada jest nieskonfigurowana, wartością domyślną jest prawda i NTLMv2 jest włączone.</translation>
-<translation id="2598508021807251719">Określa języki, w których można wyświetlać <ph name="PRODUCT_OS_NAME" />.
-
-      Jeśli ta zasada jest skonfigurowana, użytkownik może skonfigurować wyświetlanie <ph name="PRODUCT_OS_NAME" /> tylko w jednym z języków określonych w tej zasadzie. Jeśli zasada jest nieskonfigurowana lub jest ustawiona na pustą listę, <ph name="PRODUCT_OS_NAME" /> można wyświetlać we wszystkich obsługiwanych językach. Jeśli ustawiona lista zawiera nieprawidłowe wartości, będą one ignorowane. Jeśli użytkownik wcześniej skonfigurował wyświetlanie <ph name="PRODUCT_OS_NAME" /> w języku niedozwolonym przez tę zasadę, język wyświetlania zostanie przełączony na dozwolony po następnym zalogowaniu się użytkownika. Jeśli użytkownik skonfigurował preferowane języki i jeden z nich jest dozwolony przez tę zasadę, <ph name="PRODUCT_OS_NAME" /> przełączy się na ten język. W przeciwnym razie <ph name="PRODUCT_OS_NAME" /> przełączy się na język odpowiadający pierwszej prawidłowej wartości z listy, a jeśli lista zawiera same nieprawidłowe wartości – na język zastępczy (obecnie en-US).</translation>
 <translation id="2604182581880595781">Umożliwia skonfigurowanie zasad związanych z sieciowymi udziałami plików.</translation>
 <translation id="2623014935069176671">Poczekaj na początkową aktywność użytkownika</translation>
 <translation id="262740370354162807">Włącz wysyłanie dokumentów do <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -1476,13 +1458,6 @@
 <translation id="5130288486815037971">Czy włączone są mechanizmy szyfrowania RC4 w TLS</translation>
 <translation id="5141670636904227950">Ustaw domyślny typ lupy włączony na ekranie logowania</translation>
 <translation id="5142301680741828703">Zawsze renderuj strony we wtyczce <ph name="PRODUCT_FRAME_NAME" /> według następujących wzorców adresów URL</translation>
-<translation id="5147665094011258322">Określa nazwę hosta urządzenia używaną w żądaniach DHCP.
-
-      Jeśli dla tej zasady ustawiono niepusty ciąg znaków, będzie on używany jako nazwa hosta w żądaniach DHCP.
-
-      Ciąg może zawierać zmienne ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}. Zanim ciąg zostanie użyty jako nazwa hosta, zmienne będą zastąpione wartościami z urządzenia. Utworzony w ten sposób ciąg musi być prawidłową nazwą hosta (zgodnie z sekcją 3.1 wymogów RFC 1035).
-
-      Jeśli ta zasada nie jest ustawiona lub wartość po zastąpieniu zmiennych nie jest prawidłową nazwą hosta, w żądaniu DHCP nazwa hosta nie zostanie skonfigurowana. </translation>
 <translation id="5148753489738115745">Pozwala określić dodatkowe parametry używane, gdy <ph name="PRODUCT_FRAME_NAME" /> uruchamia <ph name="PRODUCT_NAME" />.
 
           Jeśli ta zasada nie jest ustawiona, używany jest domyślny wiersz polecenia.</translation>
@@ -1708,7 +1683,6 @@
 <translation id="5835124959204887277">Określa adresy URL i domeny, w przypadku których nie będzie wyświetlać się monit podczas przesyłania prośby o certyfikaty poświadczenia z Kluczy bezpieczeństwa Google. Oprócz tego do Klucza bezpieczeństwa Google będzie wysyłany sygnał wskazujący, że można użyć poświadczenia indywidualnego. Jeśli zasada ta nie będzie ustawiona, użytkownicy Chrome w wersji 65 lub nowszej zobaczą monit, gdy strony będą prosić o poświadczenie Kluczy bezpieczeństwa Google.
 
       Adresy URL (takie jak https://example.com/jakaś/ścieżka) będą dopasowywane tylko jako identyfikatory appID typu U2F. Domeny (takie jak example.com) będą dopasowane tylko jako identyfikatory RP typu webauthn. Dlatego jeśli w przypadku danej witryny mają zostać uwzględnione zarówno interfejsy API U2F, jak i webauthn, na liście muszą znajdować się zarówno URL identyfikatora appID, jak i domena.</translation>
-<translation id="5835412847081687053">Skonfiguruj dozwolone języki sesji użytkownika</translation>
 <translation id="5836064773277134605">Ogranicz zakres portów UDP używanych przez host zdalnego dostępu</translation>
 <translation id="5862253018042179045">Ustawia domyślny stan funkcji ułatwień dostępu w postaci potwierdzeń głosowych na ekranie logowania.
 
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index efb06b21e..27a3bc96 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -483,21 +483,6 @@
       A verificação ortográfica ainda poderá ser realizada utilizando-se um dicionário baixado; esta política só controla o uso do serviço on-line.
 
       Se esta configuração não for feita, os usuários poderão escolher se o serviço de verificação ortográfica deve ser usado ou não.</translation>
-<translation id="2294283832646774959">Configura uma lista de impressoras.
-
-      Esta política permite aos administradores fornecer configurações de impressora para
-      os usuários.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> e <ph name="PRINTER_DESCRIPTION" /> são strings de formato livre que podem ser personalizadas para facilitar a seleção da impressora. <ph name="PRINTER_MANUFACTURER" /> e <ph name="PRINTER_MODEL" /> servem para facilitar a identificação da impressora pelos usuários finais. Esses dados representam o fabricante e o modelo da impressora. <ph name="PRINTER_URI" /> deve ser um endereço que pode ser acessado a partir do computador do cliente, incluindo <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> e <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> é opcional. Se fornecido, será usado para ajudar a eliminar a duplicação de impressoras <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> precisa corresponder a uma das strings que representam uma impressora <ph name="PRODUCT_NAME" /> compatível. A string será usada para identificar e instalar o PPD apropriado para a impressora. Mais informações estão disponíveis em https://support.google.com/chrome?p=noncloudprint.
-
-      A configuração da impressora é concluída depois que ela é utilizada pela primeira vez. O download de PPDs não será realizado enquanto a impressora não for usada. Depois disso, os PPDs usados com frequência são armazenados em cache.
-
-      Esta política não afeta a possibilidade de os usuários configurarem impressoras em dispositivos individuais. Ela tem o objetivo de complementar a configuração de impressoras por usuários individuais.
-
-      Para dispositivos gerenciados pelo Active Directory, esta política permite a expansão de <ph name="MACHINE_NAME_VARIABLE" /> para o nome do computador com Active Directory ou uma substring correspondente. Por exemplo, se o nome do computador for <ph name="MACHINE_NAME_EXAMPLE" />, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> será substituído pelos quatro caracteres que começam depois da 6ª posição, ou seja, <ph name="MACHINE_NAME_PART_EXAMPLE" />. A posição é baseada em zero.
-      </translation>
 <translation id="2294382669900758280">A reprodução de vídeos em apps Android não é levada em consideração, mesmo se esta política estiver definida como <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Configurar a página "Nova guia" padrão no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Especifica uma lista de plug-ins ativados</translation>
@@ -602,9 +587,6 @@
           Todas as versões recentes dos servidores Samba e Windows são compatíveis com NTLMv2. Esta política só deve ser desativada para compatibilidade com versões anteriores e reduz a segurança da autenticação.
 
           Se esta política não for definida, o padrão será verdadeira, e NTLMv2 será ativada.</translation>
-<translation id="2598508021807251719">Configura as localidades em que o <ph name="PRODUCT_OS_NAME" /> pode ser exibido.
-
-      Se esta política for definida, o usuário só poderá configurar o <ph name="PRODUCT_OS_NAME" /> para ser exibido em uma das localidades especificadas por esta política. Se esta política não for definida ou for definida como uma lista vazia, o <ph name="PRODUCT_OS_NAME" /> poderá ser exibido em todas as localidades de IU disponíveis. Se esta política for definida como uma lista com valores inválidos, todos os valores inválidos serão ignorados. Se um usuário tiver configurado anteriormente o <ph name="PRODUCT_OS_NAME" /> para ser exibido em uma localidade que não seja permitida por esta política, a localidade de exibição será alternada para uma localidade de IU permitida na próxima vez que o usuário fizer login. Se o usuário tiver configurado localidades preferenciais, e uma delas for permitida por esta política, o <ph name="PRODUCT_OS_NAME" /> será alternado para essa localidade. Caso contrário, o <ph name="PRODUCT_OS_NAME" /> passará para o primeiro valor válido especificado por esta política ou para a localidade substituta (atualmente, en-US) se a política incluir apenas entradas inválidas.</translation>
 <translation id="2604182581880595781">Configurar políticas relacionadas ao Compartilhamento de arquivos de rede.</translation>
 <translation id="2623014935069176671">Aguardar atividade inicial do usuário</translation>
 <translation id="262740370354162807">Ativar o envio de documentos para <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1466,13 +1448,6 @@
 <translation id="5130288486815037971">Se os pacotes de criptografia RC4 em TLS estão ativados ou não</translation>
 <translation id="5141670636904227950">Definir o tipo de lupa padrão ativada na tela de login</translation>
 <translation id="5142301680741828703">Sempre renderizar os seguintes padrões de URL no <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Determinar o nome do host do dispositivo usado nas solicitações de DHCP.
-
-      Se esta política for definida como uma string não vazia, essa string será usada como o nome do host do dispositivo durante a solicitação de DHCP.
-
-      A string pode conter as variáveis ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} que seriam substituídas por valores no dispositivo antes do uso como um nome de host. A substituição resultante deve ser um nome de host válido (em conformidade com a RFC 1035, seção 3.1).
-
-      Se esta política não for definida ou se o valor após a substituição não for um nome de host válido, nenhum nome de host será definido na solicitação de DHCP. </translation>
 <translation id="5148753489738115745">Permite especificar os parâmetros adicionais que são usados quando o <ph name="PRODUCT_FRAME_NAME" /> inicia o <ph name="PRODUCT_NAME" />. Se essa política não for configurada, será usada a linha de comando padrão.</translation>
 <translation id="5159469559091666409">Frequência com que pacotes de monitoramento de rede são enviados, em milésimos de segundo.
 
@@ -1694,7 +1669,6 @@
 <translation id="5835124959204887277">Especifica os URLs e domínios para os quais nenhuma solicitação será exibida quando os certificados de declaração das chaves de segurança forem solicitados. Além disso, um sinal será enviado para a chave de segurança indicando que a declaração individual pode ser usada. Sem isso, os usuários receberão uma solicitação no Chrome 65 ou versão posterior quando os sites solicitarem a declaração das chaves de segurança.
 
       Os URLs (como https://example.com/algum/caminho) só terão correspondência como U2F appIDs. Os domínios (como example.com) só terão correspondência como webauthn RP IDs. Sendo assim, para abranger as APIs U2F e webauthn de um determinado site, tanto o domínio quanto o URL do appID precisarão ser listados.</translation>
-<translation id="5835412847081687053">Configura as localidades de IU permitidas em uma sessão de usuário</translation>
 <translation id="5836064773277134605">Restringir o intervalo de portas UDP usado pelo host de acesso remoto</translation>
 <translation id="5862253018042179045">Definir o estado padrão do recurso de acessibilidade do feedback falado na tela de login.
 
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb
index 823462f..8472b4d 100644
--- a/components/policy/resources/policy_templates_pt-PT.xtb
+++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -499,20 +499,6 @@
       A verificação ortográfica também pode ser efetuada através de um dicionário previamente transferido; esta política apenas controla a utilização do serviço online.
 
       Se esta definição não estiver configurada, os utilizadores podem optar por utilizar o serviço de verificação ortográfica ou não.</translation>
-<translation id="2294283832646774959">Configura uma lista de impressoras.
-
-      Esta política permite que os administradores facultem configurações de impressoras aos utilizadores.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> e <ph name="PRINTER_DESCRIPTION" /> são strings de forma livre que podem ser personalizadas para facilitar a seleção da impressora. <ph name="PRINTER_MANUFACTURER" /> e <ph name="PRINTER_MODEL" /> servem para facilitar a identificação da impressora por parte dos utilizadores finais. Representam o fabricante e o modelo da impressora. <ph name="PRINTER_URI" /> deve ser um endereço acessível a partir do computador do cliente, incluindo <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> e <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> é opcional. Se fornecido, é utilizado para ajudar a remover duplicados de impressoras <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> tem de corresponder a uma das strings que representam uma impressora compatível com <ph name="PRODUCT_NAME" />. A string será utilizada para identificar e instalar os PPDs adequados à impressora. Pode encontrar mais informações em https://support.google.com/chrome?p=noncloudprint.
-
-      A configuração das impressoras fica concluída com a primeira utilização de uma impressora. Os PPDs não são transferidos enquanto a impressora não for utilizada. Posteriormente, os PPDs utilizados com frequência são colocados em cache.
-
-      Esta política não influencia a possibilidade de os utilizadores poderem configurar impressoras em dispositivos individuais e destina-se a complementar a configuração das impressoras por parte de utilizadores individuais.
-
-      Para dispositivos geridos pelo Active Directory, esta política suporta a expansão de <ph name="MACHINE_NAME_VARIABLE" /> para o nome do computador do Active Directory ou uma substring do mesmo. Por exemplo, se o nome do computador for <ph name="MACHINE_NAME_EXAMPLE" />, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> será substituído pelos 4 carateres a partir da 6.ª posição, ou seja, <ph name="MACHINE_NAME_PART_EXAMPLE" />. Tenha em atenção que a posição baseia-se em zero.
-      </translation>
 <translation id="2294382669900758280">A reprodução de vídeos em aplicações para Android não é tida em consideração mesmo que esta política esteja definida como <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Configurar a página Novo separador predefinida no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Especificar uma lista de plug-ins ativados</translation>
@@ -617,9 +603,6 @@
           Todas as versões recentes dos servidores Samba e Windows são compatíveis com o NTLMv2. Só deve ser desativado para retrocompatibilidade e reduz a segurança da autenticação.
 
           Se esta política não estiver definida, a predefinição assume o valor "verdadeiro" e o NTLMv2 está ativado.</translation>
-<translation id="2598508021807251719">Configura os locais em que o <ph name="PRODUCT_OS_NAME" /> pode ser apresentado.
-
-      Se esta política estiver definida, o utilizador pode configurar a apresentação do <ph name="PRODUCT_OS_NAME" /> apenas num dos locais especificados por esta política. Se esta política não for definida ou for definida com uma lista vazia, o <ph name="PRODUCT_OS_NAME" /> pode ser apresentado em todos os locais da IU compatíveis. Se esta política estiver definida com uma lista com valores inválidos, os mesmos serão ignorados. Se um utilizador configurou o <ph name="PRODUCT_OS_NAME" /> anteriormente de forma a ser apresentado num local não permitido por esta política, o local da apresentação será alterado para um local da IU permitido da próxima vez que o utilizador iniciar sessão. Se o utilizador tiver configurado locais preferidos e um destes for permitido por esta política, o <ph name="PRODUCT_OS_NAME" /> mudará para esse local. Caso contrário, o <ph name="PRODUCT_OS_NAME" /> mudará para o primeiro valor válido especificado por esta política ou para um local alternativo (atualmente, en-US), se esta política incluir apenas entradas inválidas.</translation>
 <translation id="2604182581880595781">Configure as políticas relacionadas com a Partilha de ficheiros na rede.</translation>
 <translation id="2623014935069176671">Aguardar atividade inicial do utilizador</translation>
 <translation id="262740370354162807">Permitir o envio de documentos para o <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1484,13 +1467,6 @@
 <translation id="5130288486815037971">Determinar se os conjuntos de cifras RC4 no TLS estão ativados</translation>
 <translation id="5141670636904227950">Definir o tipo de lupa predefinida ativada no ecrã de início de sessão</translation>
 <translation id="5142301680741828703">Processar sempre os seguintes padrões de URL no <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Determinar o nome do anfitrião do dispositivo utilizado nos pedidos de DHCP.
-
-      Se esta política estiver definida como uma string não vazia, essa string é utilizada como o nome do anfitrião do dispositivo durante o pedido de DHCP.
-
-      A string pode conter variáveis ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} que são substituídas por valores no dispositivo antes de ser utilizada como nome do anfitrião. A substituição resultante deve ser um nome de anfitrião válido (de acordo com o RFC 1035, secção 3.1).
-
-      Se esta política não estiver definida ou o valor após a substituição não for um nome de anfitrião válido, não é definido um nome de anfitrião no pedido de DHCP. </translation>
 <translation id="5148753489738115745">Permite especificar parâmetros adicionais utilizados quando o <ph name="PRODUCT_FRAME_NAME" /> iniciar o <ph name="PRODUCT_NAME" />.
 
           Se esta política não estiver definida, será utilizada a linha de comandos predefinida.</translation>
@@ -1717,7 +1693,6 @@
 <translation id="5835124959204887277">Especifica os URLs e os domínios para os quais não é apresentada um pedido quando são solicitados os certificados de comprovação das Chaves de segurança. Além disso, é enviado um sinal para a Chave de segurança a indicar que a comprovação individual pode ser utilizada. Sem isto, os utilizadores do Chrome 65 e superior recebem um pedido quando os sites solicitarem a comprovação das Chaves de segurança.
 
       Os URLs (como https://example.com/some/path) obtêm correspondência apenas como appIDs de U2F. Os domínios (como example.com) obtêm correspondência apenas como IDs de RP de webauthn. Desta forma, para abranger APIs de U2F e de webauthn de um determinado site, tanto o URL como o domínio do appID têm de constar da lista.</translation>
-<translation id="5835412847081687053">Configurar os locais da IU permitidos numa sessão de utilizador.</translation>
 <translation id="5836064773277134605">Restringir o intervalo da porta UDP utilizado pelo anfitrião de acesso remoto</translation>
 <translation id="5862253018042179045">Definir o estado predefinido da funcionalidade de acessibilidade de respostas faladas no ecrã de início de sessão.
 
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb
index cb06131a..d29c965 100644
--- a/components/policy/resources/policy_templates_ro.xtb
+++ b/components/policy/resources/policy_templates_ro.xtb
@@ -476,21 +476,6 @@
       Totuși, verificarea ortografiei se poate face cu un dicționar descărcat; această politică afectează numai utilizarea serviciului web.
 
       Dacă această setare nu este configurată, atunci utilizatorii pot alege dacă se va utiliza sau nu serviciul de verificare a ortografiei.</translation>
-<translation id="2294283832646774959">Configurează o listă de imprimante.
-
-      Această politică permite administratorilor să ofere utilizatorilor configurații ale
-      imprimantelor.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> și <ph name="PRINTER_DESCRIPTION" /> sunt șiruri cu formă liberă care pot fi personalizate pentru a selecta mai ușor o imprimantă. <ph name="PRINTER_MANUFACTURER" /> și <ph name="PRINTER_MODEL" /> sunt folosite pentru a simplifica identificarea imprimantei de către utilizatorii finali. Acestea reprezintă producătorul și modelul imprimantei. <ph name="PRINTER_URI" /> trebuie să fie o adresă care poate fi accesată de pe computerul unui client, inclusiv <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> și <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> este opțional. Dacă este specificat, acesta este folosit pentru a deduplica imprimantele <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> trebuie să corespundă unuia dintre șirurile care reprezintă o imprimantă <ph name="PRODUCT_NAME" /> compatibilă. Șirul va fi folosit pentru a identifica și instala PPD-ul corespunzător imprimantei. Mai multe informații sunt disponibile la https://support.google.com/chrome?p=noncloudprint.
-
-      Configurarea imprimantei este finalizată la prima folosire a acesteia. PPD-urile nu sunt descărcate înainte de folosirea imprimantei. După aceea, PPD-urile folosite frecvent sunt stocate în memoria cache.
-
-      Această politică nu afectează opțiunea utilizatorilor de a configura imprimantele pe dispozitive individuale. Este menită să fie suplimentară față de configurarea imprimantelor de către utilizatori individuali.
-
-      Pentru dispozitivele gestionate cu Active Directory, această politică acceptă extinderea <ph name="MACHINE_NAME_VARIABLE" /> la numele computerului cu Active Directory sau la un subșir al acestuia. De exemplu, dacă numele computerului este <ph name="MACHINE_NAME_EXAMPLE" />, <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> va fi înlocuit de cele 4 caractere care urmează după cea de-a 6-a poziție, adică <ph name="MACHINE_NAME_PART_EXAMPLE" />. Reține că poziția începe de la zero.
-      </translation>
 <translation id="2294382669900758280">Redarea videoclipurilor în aplicațiile Android nu este luată în considerare, chiar dacă politica este setată la <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Configurează pagina Filă nouă prestabilită în <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Specifică o listă de pluginuri activate</translation>
@@ -597,9 +582,6 @@
           Toate versiunile recente de servere Samba și Windows acceptă autentificarea NTLMv2. Aceasta trebuie dezactivată doar pentru compatibilitate inversă, iar prin dezactivare se reduce siguranța autentificării.
 
           Dacă această politică nu este setată, valoarea standard este „true”, iar autentificarea NTLMv2 este activată.</translation>
-<translation id="2598508021807251719">Configurează codurile locale în care poate fi afișat <ph name="PRODUCT_OS_NAME" />.
-
-      Dacă această politică este configurată, utilizatorul poate să configureze afișarea <ph name="PRODUCT_OS_NAME" /> numai într-unul dintre codurile locale specificate de această politică. Dacă această politică nu este configurată sau dacă este configurată la o listă necompletată, <ph name="PRODUCT_OS_NAME" /> poate fi afișat în toate codurile locale IU acceptate. Dacă această politică este configurată la o listă cu valori nevalide, toate valorile nevalide vor fi ignorate. Dacă un utilizator a configurat anterior afișarea <ph name="PRODUCT_OS_NAME" /> într-un cod local care nu este permis de această politică, codul local de afișare va fi înlocuit cu un cod local IU permis la următoarea conectare a utilizatorului. Dacă utilizatorul a configurat codurile locale preferate și unul dintre ele este permis de această politică, <ph name="PRODUCT_OS_NAME" /> va comuta la codul local respectiv. În caz contrar, <ph name="PRODUCT_OS_NAME" /> va comuta la prima valoare validă specificată de această politică sau la un cod local alternativ (în prezent, en-US), în cazul în care politica nu conține decât intrări nevalide.</translation>
 <translation id="2604182581880595781">Configurează politicile pentru Dispozitive de stocare în rețea.</translation>
 <translation id="2623014935069176671">Se așteaptă prima activitate a utilizatorului</translation>
 <translation id="262740370354162807">Activează trimiterea documentelor la <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1465,13 +1447,6 @@
 <translation id="5130288486815037971">Specifică dacă suitele de codificare RC4 din TLS sunt activate</translation>
 <translation id="5141670636904227950">Setați tipul prestabilit al lupei pentru ecran activate pe ecranul de conectare</translation>
 <translation id="5142301680741828703">Redă întotdeauna următoarele șabloane de adrese URL în <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Stabilește numele de gazdă al dispozitivului folosit în solicitările DHCP.
-
-      Dacă această politică este setată la un șir completat, acel șir va fi folosit ca nume de gazdă al dispozitivului în timpul solicitării DHCP.
-
-      Șirul poate să conțină variabilele ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, care vor fi înlocuite cu valori pe dispozitiv, înainte ca acesta să fie folosit ca nume de gazdă. Înlocuirea rezultată trebuie să fie un nume de gazdă valid (conform RFC 1035, secțiunea 3.1).
-
-      Dacă această politică nu este setată sau dacă valoarea după înlocuire nu este un nume de gazdă valid, nu va fi setat niciun nume de gazdă în solicitarea DHCP. </translation>
 <translation id="5148753489738115745">Vă permite să specificați parametri suplimentari, care vor fi utilizați atunci când <ph name="PRODUCT_FRAME_NAME" /> lansează <ph name="PRODUCT_NAME" />.
 
           Dacă această politică nu este setată, va fi utilizată linia de comandă prestabilită.</translation>
@@ -1702,7 +1677,6 @@
 <translation id="5835124959204887277">Specifică adresele URL și domeniile pentru care nu va fi afișată nicio solicitare atunci când sunt solicitate certificate de atestare de la Cheile de securitate. În plus, va fi transmis un semnal către Cheia de securitate, indicând faptul că poate fi folosită atestarea individuală. Fără aceasta, utilizatorii vor fi atenționați în Chrome 65+ atunci când site-urile necesită atestarea Cheilor de securitate.
 
       Adresele URL (cum ar fi https://example.com/some/path) vor putea fi folosite numai drept coduri ale aplicației U2F. Domeniile (cum ar fi example.com) vor putea fi folosite numai ca ID-uri webauthn RP. Prin urmare, pentru a acoperi atât API-urile U2F, cât și API-urile webauthn pentru un anumit site, trebuie listate atât adresa URL, cât și domeniul cu codul aplicației.</translation>
-<translation id="5835412847081687053">Configurează codurile locale IU permise într-o sesiune a utilizatorului</translation>
 <translation id="5836064773277134605">Limitați intervalul pentru portul UDP folosit de gazda de acces la distanță</translation>
 <translation id="5862253018042179045">Setați funcția de accesibilitate pentru feedback vocal ca stare prestabilită pe ecranul de conectare.
 
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 7b9ed74..b20cdec 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -469,21 +469,6 @@
       Проверку правописания также можно выполнять с помощью скачанного словаря: это правило регулирует только использование веб-службы.
 
       Если этот параметр не настроен, пользователи могут сами решать, использовать ли веб-службу проверки правописания.</translation>
-<translation id="2294283832646774959">Позволяет настроить список принтеров.
-
-      С помощью этого правила администраторы могут настраивать принтеры
-      для пользователей.
-
-      Строки <ph name="PRINTER_DISPLAY_NAME" /> и <ph name="PRINTER_DESCRIPTION" /> заполняются в свободной форме для того, чтобы пользователям было проще выбрать принтер. Строки <ph name="PRINTER_MANUFACTURER" /> и <ph name="PRINTER_MODEL" />, в которых указывается модель и производитель принтера, помогают конечным пользователям его идентифицировать. В качестве <ph name="PRINTER_URI" /> необходимо указать адрес в сети клиентского компьютера, включая <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> и <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> указывать необязательно, однако этот параметр помогает дедуплицировать принтеры <ph name="ZEROCONF_DISCOVERY" />.
-
-      Значение строки <ph name="PRINTER_EFFECTIVE_MODEL" /> должно совпадать со значением одной из строк, в которых указан принтер с поддержкой <ph name="PRODUCT_NAME" />. Эта строка будет использоваться для того, чтобы идентифицировать и установить подходящий файл PPD для этого принтера. Подробности вы найдете на странице https://support.google.com/chrome?p=noncloudprint.
-
-      Настройка принтера завершается после первого использования. До этого момента файлы PPD не скачиваются. В дальнейшем часто используемые файлы PPD кешируются.
-
-      С помощью этого правила нельзя разрешить или запретить пользователям настраивать принтеры на своих устройствах. Оно только дополняет настройки пользователей.
-
-      В среде Active Directory для переменной <ph name="MACHINE_NAME_VARIABLE" /> можно добавить значение имени устройства Active Directory или использовать метод substring. Например, если имя устройства – <ph name="MACHINE_NAME_EXAMPLE" />, то переменная <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> будет возвращать значение <ph name="MACHINE_NAME_PART_EXAMPLE" /> (4 символа, начиная с 6-й позиции). Обратите внимание, что отсчет позиции начинается с нуля.
-      </translation>
 <translation id="2294382669900758280">Видео, которое воспроизводится в приложениях Android, не учитывается, даже если для правила задано значение <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Настройка используемой по умолчанию страницы быстрого доступа в <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Определить список включенных плагинов</translation>
@@ -588,9 +573,6 @@
           Все последние версии серверов Samba и Windows поддерживают аутентификацию NTLMv2. Из соображений безопасности она должна быть включена всегда (но только не для обратной совместимости).
 
           Если правило не определено, то по умолчанию будет использоваться значение True, а аутентификация NTLMv2 будет включена.</translation>
-<translation id="2598508021807251719">Правило устанавливает региональные настройки для <ph name="PRODUCT_OS_NAME" />.
-
-      Если правило настроено, пользователи могут задать для <ph name="PRODUCT_OS_NAME" /> только один из указанных в этом правиле языков. Если правило не настроено или задан пустой список, в <ph name="PRODUCT_OS_NAME" /> могут использоваться все поддерживаемые языки. Если в списке правила указаны недействительные значения, они не будут учитываться. Если для <ph name="PRODUCT_OS_NAME" /> были заданы региональные настройки, запрещенные этим правилом, язык будет изменен на разрешенный при следующем входе в систему. Если указаны предпочитаемые языки и один из них разрешен в этом правиле, <ph name="PRODUCT_OS_NAME" /> будет запускаться на этом языке. В ином случае в <ph name="PRODUCT_OS_NAME" /> будет использоваться первое допустимое значение из этого правила или резервный язык (в настоящее время это en-US), если правило содержит только недопустимые значения.</translation>
 <translation id="2604182581880595781">Настраивает правила, связанные с функцией совместного доступа к файлам в сети.</translation>
 <translation id="2623014935069176671">Ждать действий пользователя</translation>
 <translation id="262740370354162807">Разрешить отправку документов на виртуальный принтер <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1453,13 +1435,6 @@
 <translation id="5130288486815037971">Включает и отключает наборы шифров RC4 в TLS</translation>
 <translation id="5141670636904227950">Настройка типа экранной лупы, отображаемой на экране входа по умолчанию</translation>
 <translation id="5142301680741828703">Всегда обрабатывать следующие шаблоны URL в <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Позволяет задать имя хоста устройства, которое передается в DHCP-запросах.
-
-      Если вы укажете в правиле значение, оно будет считаться именем хоста устройства при обработке DHCP-запроса.
-
-      Значение может содержать переменные ${ASSET_ID}, ${SERIAL_NUM} и ${MAC_ADDR}. Они заменяются параметрами устройства, в результате чего получается имя хоста (см. RFC 1035, раздел 3.1).
-
-      Если правило не настроено или имя хоста недействительно, то имя в DHCP-запросе не передается. </translation>
 <translation id="5148753489738115745">Позволяет задать дополнительные параметры, которые используются при запуске <ph name="PRODUCT_NAME" /> из <ph name="PRODUCT_FRAME_NAME" />.
 
           Если это правило не задано, действуют настройки командной строки по умолчанию.</translation>
@@ -1685,7 +1660,6 @@
 <translation id="5835124959204887277">Позволяет указывать URL и домены, для которых будет отключено уведомление о запросе сертификата проверки у электронных ключей. При этом электронному ключу будет отправляться сигнал, сообщающий, что может использоваться индивидуальная проверка. Если правило не настроено, пользователи Chrome 65 и более поздних версий получают уведомление, когда сайты запрашивают проверку электронного ключа.
 
       URL-адреса (например, https://example.com/some/path) считаются U2F-идентификаторами приложений. Домены (например, example.com) считаются webauthn-идентификаторами принимающей стороны. Чтобы охватить оба API сайта (U2F и webauthn), укажите URL приложения и домен.</translation>
-<translation id="5835412847081687053">Правило позволяет настроить языки интерфейса для сеанса пользователя</translation>
 <translation id="5836064773277134605">Ограничить диапазон портов UDP, используемых хостами удаленного доступа</translation>
 <translation id="5862253018042179045">Включение или отключение функции озвучивания действий по умолчанию на экране входа.
 
diff --git a/components/policy/resources/policy_templates_sk.xtb b/components/policy/resources/policy_templates_sk.xtb
index ffc21e0..4dfc8d46 100644
--- a/components/policy/resources/policy_templates_sk.xtb
+++ b/components/policy/resources/policy_templates_sk.xtb
@@ -471,21 +471,6 @@
       Kontrolu pravopisu je stále možné vykonať pomocou stiahnutého slovníka. Toto pravidlo sa vzťahuje iba na používanie služieb online.
 
       Ak toto nastavenie nie je nakonfigurované, používatelia môžu zvoliť, či službu na kontrolu pravopisu chcú použiť alebo nie.</translation>
-<translation id="2294283832646774959">Umožňuje nakonfigurovať zoznam tlačiarní.
-
-      Toto pravidlo umožňuje správcom poskytnúť používateľom konfigurácie 
-      tlačiarní.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> a <ph name="PRINTER_DESCRIPTION" /> sú prispôsobiteľné textové reťazce, pomocou ktorých je možné zjednodušiť výber tlačiarne. Hodnoty <ph name="PRINTER_MANUFACTURER" /> a <ph name="PRINTER_MODEL" /> uľahčujú identifikáciu tlačiarní koncovými používateľmi. Predstavujú výrobcu a model tlačiarne. <ph name="PRINTER_URI" /> by mala byť adresa dostupná z klientského počítača vrátane údajov <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> a <ph name="URI_QUEUE" />. Hodnota <ph name="PRINTER_UUID" /> je voliteľná.  Ak je zadaná, používa sa na odobranie duplicitných tlačiarní <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> sa musí zhodovať s jedným reťazcom predstavujúcim podporovanú tlačiareň <ph name="PRODUCT_NAME" />. Reťazec sa použije na identifikáciu a inštaláciu príslušného súboru PPD pre tlačiareň. Ďalšie informácie nájdete na adrese https://support.google.com/chrome?p=noncloudprint.
-
-      Nastavenie tlačiarne sa dokončí pri prvom použití. Súbory PPD sa stiahnu až pri použití tlačiarne. Často používané súbory PPD sa následne uložia do vyrovnávacej pamäte.
-
-      Toto pravidlo nemá vplyv na to, či používatelia môžu konfigurovať tlačiarne v jednotlivých zariadeniach. Je určené ako doplnok konfigurácie tlačiarní jednotlivými používateľmi.
-
-      V prípade spravovaných zariadení Active Directory toto pravidlo podporuje rozšírenie premennej <ph name="MACHINE_NAME_VARIABLE" /> na názov zariadenia Active Directory alebo jeho podradený reťazec. Ak je napríklad názov zariadenia <ph name="MACHINE_NAME_EXAMPLE" />, potom bude premenná <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> nahradená štyrmi znakmi nasledujúcimi po šiestom mieste, t. j. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Pozície sa počítajú od nuly.
-      </translation>
 <translation id="2294382669900758280">Prehrávanie videí v aplikáciách pre Android sa neberie do úvahy ani v prípade, ak je toto pravidlo nastavené na hodnotu <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Nastavenie predvolenej stránky na novej karte v prehliadači <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Určiť zoznam povolených doplnkov</translation>
@@ -600,9 +585,6 @@
           Všetky nedávne verzie serverov Samba a Windows podporujú protokol NTLMv2. Mali by ste ho deaktivovať iba vtedy, ak potrebujete zaistiť spätnú kompatibilitu, pretože to znižuje zabezpečenie overenia totožnosti.
 
           Ak toto pravidlo nenastavíte, predvolená hodnota je True (Pravda) a protokol NTLMv2 je aktivovaný.</translation>
-<translation id="2598508021807251719">Konfiguruje miestne nastavenia, v ktorých sa <ph name="PRODUCT_OS_NAME" /> môže zobrazovať.
-
-      Ak toto pravidlo nastavíte, používateľ môže nakonfigurovať iba to, aby sa <ph name="PRODUCT_OS_NAME" /> zobrazoval v jednom z miestnych nastavení špecifikovaných týmto pravidlom. Ak toto pravidlo nenastavíte alebo ho nastavíte na prázdny zoznam, <ph name="PRODUCT_OS_NAME" /> sa môže zobrazovať vo všetkých podporovaných miestnych nastaveniach používateľského rozhrania. Ak pravidlo nastavíte na zoznam s neplatnými hodnotami, všetky neplatné hodnoty sa budú ignorovať. Ak používateľ predtým nakonfiguroval, aby sa <ph name="PRODUCT_OS_NAME" /> zobrazoval v jazyku, ktorý toto pravidlo nepovoľuje, pri najbližšom prihlásení používateľa sa zobrazené miestne nastavenie prepne na povolené miestne nastavenie používateľského rozhrania. Ak používateľ nakonfiguroval preferované miestne nastavenia a jedno z týchto nastavení je povolené týmto pravidlom, <ph name="PRODUCT_OS_NAME" /> sa prepne na toto miestne nastavenie. V opačnom prípade sa <ph name="PRODUCT_OS_NAME" /> prepne na prvú platnú hodnotu špecifikovanú týmto pravidlom alebo na záložné miestne nastavenie (aktuálne en-US), ak pravidlo obsahuje iba neplatné záznamy.</translation>
 <translation id="2604182581880595781">Konfigurácia pravidiel súvisiacich so zdieľaním súborov v sieti</translation>
 <translation id="2623014935069176671">Počkať na aktivitu používateľa</translation>
 <translation id="262740370354162807">Povolí odoslanie dokumentov do služby <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1497,13 +1479,6 @@
 <translation id="5130288486815037971">Ovláda, či sú v protokole TLS povolené šifrovacie súpravy RC4</translation>
 <translation id="5141670636904227950">Nastaviť predvolený typ lupy obrazovky, ktorý je povolený na prihlasovacej obrazovke</translation>
 <translation id="5142301680741828703">Vždy vykreslovať nasledujúce vzory webových adries v doplnku <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Umožňuje určiť názov hostiteľa zariadenia používaného v žiadostiach DHCP.
-
-      Ak toto pravidlo nastavíte na reťazec, ktorý nie je prázdna hodnota, daný reťazec sa použije ako názov hostiteľa zariadenia počas žiadosti DHCP.
-
-      Reťazec môže obsahovať premenné ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, ktoré budú v zariadení nahradené hodnotami ešte pred ich použitím ako názvu hostiteľa. Výsledné nahradenie by mal byť platný názov hostiteľa (podľa RFC 1035, časť 3.1).
-
-      Ak toto pravidlo nenastavíte alebo hodnota po nahradení nie je platný názov hostiteľa, v žiadosti DHCP nebude nastavený žiadny názov hostiteľa. </translation>
 <translation id="5148753489738115745">Umožňuje nastaviť dodatočné parametre, ktoré doplnok <ph name="PRODUCT_FRAME_NAME" /> pri spúšťaní aplikácie <ph name="PRODUCT_NAME" /> použije.
 
           Ak toto pravidlo nie je nastavené, použije sa predvolený príkazový riadok.</translation>
@@ -1752,7 +1727,6 @@
 <translation id="5835124959204887277">Umožňuje určiť webové adresy a domény, pri ktorých sa nebude zobrazovať žiadna výzva, keď sa budú vyžadovať atestačné certifikáty z bezpečnostných kľúčov. Okrem toho bude do bezpečnostného kľúča odoslaný signál označujúci, že je možné použiť individuálnu atestáciu. Bez toho sa používateľom v Chrome 65 alebo novšom zobrazí výzva, keď budú weby požadovať atestáciu bezpečnostných kľúčov.
 
       Webové adresy (ako https://príklad.com/nejaká/cesta) sa budú zhodovať iba ako identifikátory aplikácie U2F. Domény (ako príklad.com) sa budú zhodovať iba ako identifikátory webauthn RP. Ak majú byť pokryté obe rozhrania U2F aj webauthn API pre daný web, je potrebné uviesť webovú adresu a doménu identifikátora aplikácie.</translation>
-<translation id="5835412847081687053">Konfigurácia povolených miestnych nastavení používateľského rozhrania v relácii používateľa</translation>
 <translation id="5836064773277134605">Obmedzí rozsah portov UDP používaných hostiteľom vzdialeného prístupu</translation>
 <translation id="5862253018042179045">Nastaví predvolený stav hlasovej odozvy (funkcia na uľahčenie prístupu) na prihlasovacej obrazovke.
 
diff --git a/components/policy/resources/policy_templates_sl.xtb b/components/policy/resources/policy_templates_sl.xtb
index 95608ad..839d8ac 100644
--- a/components/policy/resources/policy_templates_sl.xtb
+++ b/components/policy/resources/policy_templates_sl.xtb
@@ -497,21 +497,6 @@
       Preverjanje črkovanja je še vedno mogoče z uporabo prenesenega slovarja; ta pravilnik nadzira samo uporabo spletne storitve.
 
       Če ta nastavitev ni nastavljena, lahko uporabniki izberejo, ali bo storitev preverjanja črkovanja uporabljena ali ne.</translation>
-<translation id="2294283832646774959">Konfigurira seznam tiskalnikov.
-
-      Ta pravilnik skrbnikom omogoča navajanje konfiguracij tiskalnikov
-      za uporabnike.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> in <ph name="PRINTER_DESCRIPTION" /> sta poljubno oblikovana niza, ki ju je mogoče prilagoditi za preprostejše izbiranje tiskalnika. <ph name="PRINTER_MANUFACTURER" /> in <ph name="PRINTER_MODEL" /> končnim uporabnikom olajšata prepoznavo tiskalnika, saj predstavljata proizvajalca in model tiskalnika. <ph name="PRINTER_URI" /> mora biti naslov, do katerega je mogoče dostopati iz odjemalskega računalnika, vključno s temi podatki: <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> in <ph name="URI_QUEUE" />. Identifikator <ph name="PRINTER_UUID" /> ni obvezen. Če je naveden, se uporablja za odstranjevanje podvojenih tiskalnikov <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> se mora ujemati z enim od nizov, ki predstavljajo tiskalnik s podporo za <ph name="PRODUCT_NAME" /> Niz se uporabi za odkrivanje in namestitev ustrezne datoteke PPD za tiskalnik. Več informacij je na voljo na https://support.google.com/chrome?p=noncloudprint.
-
-      Nastavitev tiskalnika se dokonča po njegovi prvi uporabi. Datoteke PPD se prenesejo, ko se začne tiskalnik uporabljati. Nato so pogosto uporabljene datoteke PPD predpomnjene.
-
-      Ta pravilnik ne vpliva na to, ali lahko uporabniki konfigurirajo tiskalnike v posameznih napravah. Namenjen je kot dodatek konfiguracijam tiskalnikov, ki jih opravijo posamezni uporabniki.
-
-      Za naprave, ki jih upravlja Active Directory, ta pravilnik podpira razširitev <ph name="MACHINE_NAME_VARIABLE" /> na ime naprave za Active Directory ali njegov podniz. Če je ime naprave na primer <ph name="MACHINE_NAME_EXAMPLE" />, potem <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> zamenjajo 4 znaki po 6. mestu, tj. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Položaj temelji na ničli.
-      </translation>
 <translation id="2294382669900758280">Predvajanje videoposnetkov v aplikacijah za Android se ne upošteva, tudi če je ta pravilnik nastavljen na <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfiguriranje privzetega novega zavihka s povezavami v brskalniku <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Določi seznam omogočenih vtičnikov</translation>
@@ -624,9 +609,6 @@
           Vse novejše različice strežnikov Samba in Windows podpirajo NTLMv2. To onemogočite samo za združljivost s prejšnjimi različicami, saj je v tem primeru zmanjšana varnost preverjanja pristnosti.
 
           Če ta pravilnik ni nastavljen, se uporabi privzeta vrednost in je preverjanje pristnosti NTLMv2 omogočeno.</translation>
-<translation id="2598508021807251719">Konfigurira jezike, v katerih je lahko prikazan <ph name="PRODUCT_OS_NAME" />.
-
-      Če je ta pravilnik nastavljen, lahko uporabnik konfigurira <ph name="PRODUCT_OS_NAME" /> za prikaz samo v enem od jezikov, ki jih določa ta pravilnik. Če ta pravilnik ni nastavljen ali je nastavljen na prazen seznam, je <ph name="PRODUCT_OS_NAME" /> lahko prikazan v vseh podprtih jezikih uporabniškega vmesnika. Če je ta pravilnik nastavljen na seznam z neveljavnimi vrednostmi, bodo vse neveljavne vrednosti prezrte. Če je uporabnik <ph name="PRODUCT_OS_NAME" /> v preteklosti konfiguriral za prikaz v jeziku, ki ga ta pravilnik ne dovoljuje, bo jezik prikaza preklopljen v dovoljen jezik uporabniškega vmesnika, ko se uporabnik naslednjič prijavi. Če je uporabnik konfiguriral prednostne jezike in enega izmed njih dovoljuje ta pravilnik, bo <ph name="PRODUCT_OS_NAME" /> preklopil v ta jezik. V nasprotnem primeru bo <ph name="PRODUCT_OS_NAME" /> preklopil na prvo veljavno vrednost, ki jo določa ta pravilnik, ali rezervni jezik (trenutno je to ameriška angleščina, en-US), če ta pravilnik vsebuje samo neveljavne vnose.</translation>
 <translation id="2604182581880595781">Konfiguriranje pravilnikov, povezanih z omrežnimi napravami za skupno rabo datotek.</translation>
 <translation id="2623014935069176671">Čakanje na začetno dejavnost uporabnika</translation>
 <translation id="262740370354162807">Omogoča pošiljanje dokumentov v storitev <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1524,13 +1506,6 @@
 <translation id="5130288486815037971">Ali so v protokolu TLS omogočene šifrirne zbirke RC4</translation>
 <translation id="5141670636904227950">Nastavitev privzete vrste lupe, omogočene na prijavnem zaslonu</translation>
 <translation id="5142301680741828703">Vedno upodobi te vzorce URL-jev v programu <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Določitev imena gostitelja naprave, uporabljenega v zahtevah DHCP
-
-      Če je ta pravilnik nastavljen na niz, ki ni prazen, bo ta niz uporabljen kot ime gostitelja naprave v zahtevi DHCP.
-
-      Niz lahko vsebuje sprejemljivke ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, ki jih pred uporabo kot ime gostitelja zamenjajo vrednosti v napravi. Posledična zamenjava mora biti veljavno ime gostitelja (skladno z RFC 1035, razdelek 3.1).
-
-      Če ta pravilnik ni nastavljen ali vrednost po zamenjavi ni veljavno ime gostitelja, v zahtevi DHCP ne bo nastavljeno ime gostitelja. </translation>
 <translation id="5148753489738115745">Določite lahko dodatne parametre, ki so uporabljeni, ko <ph name="PRODUCT_FRAME_NAME" /> zažene <ph name="PRODUCT_NAME" />.
 
           Če ta pravilnik ni nastavljen, je uporabljena privzeta ukazna vrstica.</translation>
@@ -1782,7 +1757,6 @@
 <translation id="5835124959204887277">Določa URL-je in domene, za katere ne bo prikazan poziv, ko so iz varnostnih ključev zahtevana potrditvena potrdila. Poleg tega bo varnostnemu ključu poslan signal, da je posamezno potrditev mogoče uporabiti. Brez tega bo v Chromu 65 in novejših različicah uporabnikom prikazan poziv, ko spletna mesta zahtevajo potrditev varnostnih ključev.
 
       URL-ji (npr. https://example.com/neka/pot) se bodo ujemali samo kot appID-ji U2F. Domene (npr. example.com) se ujemajo samo kot ID-ji za webauthn RP. Če želite, da so za določeno mesto obravnavani tako API-ji za U2F kot za webauthn, je torej treba navesti URL za appID in domeno.</translation>
-<translation id="5835412847081687053">Konfiguriranje dovoljenih jezikov uporabniškega vmesnika v uporabniški seji</translation>
 <translation id="5836064773277134605">Omeji obseg vrat UDP, ki jih uporablja gostitelj oddaljenega dostopa</translation>
 <translation id="5862253018042179045">Nastavitev privzetega stanja funkcije izgovorjave za ljudi s posebnimi potrebami na prijavnem zaslonu.
 
diff --git a/components/policy/resources/policy_templates_sr.xtb b/components/policy/resources/policy_templates_sr.xtb
index 5cfcac2c..112f37e 100644
--- a/components/policy/resources/policy_templates_sr.xtb
+++ b/components/policy/resources/policy_templates_sr.xtb
@@ -496,21 +496,6 @@
       Провера правописа и даље може да се обавља помоћу преузетог речника; ове смернице контролишу само коришћење услуге на мрежи.
 
       Ако ово подешавање није конфигурисано, корисници могу да изаберу да ли услуга провере правописа треба да се користи.</translation>
-<translation id="2294283832646774959">Конфигуришу листу штампача.
-
-      Ове смернице омогућавају администраторима да корисницима пруже
-      конфигурације штампача.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> и <ph name="PRINTER_DESCRIPTION" /> су стрингови слободног облика који могу да се прилагоде ради једноставног бирања штампача од стране крајњих корисника. <ph name="PRINTER_MANUFACTURER" /> и <ph name="PRINTER_MODEL" /> омогућавају крајњим корисницима да једноставније идентификују штампач. Представљају произвођача и модел штампача. <ph name="PRINTER_URI" />треба да буде адреса која је доступна рачунару клијента, укључујући <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> и <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" />је опционалан. Ако је омогућен, користи се за поништавање дупликата штампача <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> мора да се подудара са једним од стрингова који представљају штампач са <ph name="PRODUCT_NAME" /> подршком. Овај стринг ће се користити за идентификацију и инсталирање одговарајуће PPD датотеке за штампач. Више информација потражите на  https://support.google.com/chrome?p=noncloudprint.
-
-     Подешавање штампача се завршава при првом коришћењу штампача. PPD датотеке се не преузимају пре коришћења штампача. Често коришћене PPD датотеке се кеширају после тога.
-
-      Ове смернице не утичу на могућност корисника да конфигуришу штампаче на појединачним уређајима. Служе као додатак конфигурацији штампача од стране појединачних корисника.
-
-      Када су у питању уређаји којима управља домен Active Directory, ове смернице подржавају проширивање назива уређаја <ph name="MACHINE_NAME_VARIABLE" /> у Active Directory назив уређаја или његов подстринг. На пример, ако је назив уређаја <ph name="MACHINE_NAME_EXAMPLE" />,  онда ће назив <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> бити замењен са 4 знака која почињу после 6. места, тј. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Имајте на уму да бројање места почиње од нуле.
-      </translation>
 <translation id="2294382669900758280">Репродукција видео снимака у Android апликацијама се не узима у обзир, чак и ако се ове смернице подесе на <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Конфигуришу подразумевану страницу нове картице у прегледачу <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Наведи листу омогућених додатних компоненти</translation>
@@ -621,9 +606,6 @@
           Све недавне верзије Samba и Windows сервера подржавају NTLMv2. То треба онемогућити само за компатибилност са старијим верзијама, а тиме се смањује безбедност потврде идентитета.
 
           Када смернице нису подешене, подразумевана вредност је Тачно и NTLMv2 је омогућен.</translation>
-<translation id="2598508021807251719">Конфигуришу локалитете на којима <ph name="PRODUCT_OS_NAME" /> може да се приказује.
-
-      Ако подесите ове смернице, корисник може да конфигурише <ph name="PRODUCT_OS_NAME" /> само тако да се приказује на једном од локалитета који наводе ове смернице. Ако не подесите ове смернице или их подесите на празну листу, <ph name="PRODUCT_OS_NAME" /> може да се приказује на свим подржаним локалитетима корисничког интерфејса. Ако подесите ове смернице на листу са неважећим вредностима, све неважеће вредности се игноришу. Ако је корисник претходно конфигурисао <ph name="PRODUCT_OS_NAME" /> тако да се приказује на локалитету који ове смернице не дозвољавају, локалитет приказа се мења у дозвољени локалитет корисничког интерфејса када се корисник следећи пут пријави. Ако је корисник конфигурисао жељене локалитете и ако ове смернице дозвољавају један од њих, <ph name="PRODUCT_OS_NAME" /> се пребацује на тај локалитет. У супротном, <ph name="PRODUCT_OS_NAME" /> се пребацује на прву важећу вредност коју наводе ове смернице или на резервни локалитет (тренутно је то en-US) ако ове смернице садрже само неважеће локалитете.</translation>
 <translation id="2604182581880595781">Конфигурише сродне смернице за дељења датотека у мрежи.</translation>
 <translation id="2623014935069176671">Чекај првобитну активност корисника</translation>
 <translation id="262740370354162807">Омогући слање докумената на услугу <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1518,13 +1500,6 @@
 <translation id="5130288486815037971">Да ли су RC4 пакети за шифровање у TLS-у омогућени</translation>
 <translation id="5141670636904227950">Подешавање подразумеваног типа лупе омогућеног на екрану за пријављивање</translation>
 <translation id="5142301680741828703">Увек приказуј следеће обрасце URL адреса у прегледачу <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Одредите име хоста уређаја који се користи за DHCP захтеве.
-
-      Ако подесите ове смернице на стринг који није празан, тај стринг ће се користити као име хоста уређаја током DHCP захтева.
-
-      Стринг може да садржи променљиве ${ASSET_ID}, ${SERIAL_NUM} и ${MAC_ADDR} које ће бити замењене вредностима на уређају пре коришћења као име хоста. Замена која се тако добија би требало да буде важеће име хоста (у складу са: RFC 1035, одељак 3.1).
-
-      Ако не подесите ове смернице или ако вредност после замене није важеће име хоста, ниједно име хоста неће бити подешено у DHCP захтеву. </translation>
 <translation id="5148753489738115745">Омогућава вам да одредите додатне параметре који се користе када <ph name="PRODUCT_FRAME_NAME" /> покреће <ph name="PRODUCT_NAME" />.
 
           Ако ове смернице не буду подешене, биће коришћена подразумевана командна линија.</translation>
@@ -1774,7 +1749,6 @@
 <translation id="5835124959204887277">Наводи URL-ове и домене за које се неће приказивати упит када се захтевају сертификати за атестирање безбедносних кључева. Поред тога, безбедносном кључу ће бити послат сигнал који каже да индивидуално атестирање може да се користи. Без тога, корисницима ће се приказивати упити у Chrome-у 65 и новијим верзијама када сајтови захтевају атестирање безбедносних кључева.
 
       URL-ови (као што је https://example.com/some/path) ће се подударати само као U2F appID-ови. Домени (као што је example.com) се подударају само као webauthn RP ID-ови. За appID морају да буду наведени и URL и домен да би се покрили и U2F и webauthn API-ји за дати сајт.</translation>
-<translation id="5835412847081687053">Конфигуришу дозвољене локалитете корисничког интерфејса у корисничкој сесији</translation>
 <translation id="5836064773277134605">Ограничи опсег UDP порта који користи хост за даљински приступ</translation>
 <translation id="5862253018042179045">Подешавање подразумеваног статуса функције приступачности за говорне повратне информације на екрану за пријављивање.
 
diff --git a/components/policy/resources/policy_templates_sv.xtb b/components/policy/resources/policy_templates_sv.xtb
index 2930fe6..1c924f3 100644
--- a/components/policy/resources/policy_templates_sv.xtb
+++ b/components/policy/resources/policy_templates_sv.xtb
@@ -497,21 +497,6 @@
       Du kan fortfarande göra en stavningskontroll med hjälp av en ordlista som du laddar ned. Policyn styr endast användningen av onlinetjänsten.
 
       Om den här inställningen inte konfigureras kan användare välja om de vill använda stavningskontrollen eller inte.</translation>
-<translation id="2294283832646774959">Konfigurerar en lista över skrivare.
-
-      Med hjälp av den här principen kan administratören tillhandahålla
-      skrivarkonfigurationer åt användarna.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> och <ph name="PRINTER_DESCRIPTION" /> är strängar i fritt format som kan anpassas så att det blir enkelt att välja skrivare. <ph name="PRINTER_MANUFACTURER" /> och <ph name="PRINTER_MODEL" /> gör det enklare för användarna att identifiera skrivaren och står för tillverkare och märke. <ph name="PRINTER_URI" /> ska vara en adress som går att nå från en klientdator, inklusive <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> och <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> är valfritt. Om det anges används det för att deduplicera <ph name="ZEROCONF_DISCOVERY" />-skrivare.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> måste matcha någon av strängarna som står för en skrivare som stöds i <ph name="PRODUCT_NAME" />. Strängen används för att identifiera och installera rätt PPD-fil för skrivaren. Mer information finns på https://support.google.com/chrome?p=noncloudprint.
-
-      Skrivarkonfigureringen slutförs första gången en skrivare används. Inga PPD-filer laddas ned förrän skrivaren används. Därefter cachelagras PPD-filer som används ofta.
-
-      Principen påverkar inte om användarna kan konfigurera skrivare på enskilda enheter eller inte. Den är tänkt att vara ett supplement till de enskilda användarnas skrivarkonfiguration.
-
-      På enheter som hanteras via Active Directory har principen stöd för att utöka <ph name="MACHINE_NAME_VARIABLE" /> till datornamnet i Active Directory eller en delsträng av det. Med datornamnet <ph name="MACHINE_NAME_EXAMPLE" /> skulle till exempel <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> ersättas av de fyra tecknen från och med position nummer sex, d.v.s. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Observera att positionerna räknas från och med noll.
-      </translation>
 <translation id="2294382669900758280">Videouppspelning i Android-appar påverkas inte även om den här principen har ställts in på <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Konfigurera standardinställningen för sidan Ny flik i <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Ange en lista med aktiverade plugin-program</translation>
@@ -624,9 +609,6 @@
           Alla nyare versioner av Samba- och Windows-servrar har stöd för NTLMv2. Detta bör bara inaktiveras om det krävs för bakåtkompatibilitet eftersom det gör autentiseringen mindre säker.
 
           Om inget värde anges för principen används standardvärdet sant och NTLMv2 aktiveras.</translation>
-<translation id="2598508021807251719">Konfigurerar de språk som <ph name="PRODUCT_OS_NAME" /> får visas på.
-
-      Om principen har ställts in får användaren bara välja någon av de språkkoder som har angetts i principen som visningsspråk i <ph name="PRODUCT_OS_NAME" />. Om principen har lämnats utan inställning eller ställts in på en tom lista kan <ph name="PRODUCT_OS_NAME" /> visas på alla språk som användargränssnittet har stöd för. Om en lista med ogiltiga värden anges för principen ignoreras de ogiltiga värdena. Om en användare tidigare har ställt in <ph name="PRODUCT_OS_NAME" /> på en språkkod som inte är tillåten enligt denna princip byts visningsspråket ut mot ett tillåtet gränssnittsspråk nästa gång användaren loggar in. Om användaren har konfigurerat föredragna språkkoder och en av dem är tillåten enligt denna princip används den språkkoden i <ph name="PRODUCT_OS_NAME" />. I annat fall används det första giltiga värdet i denna princip eller, om principen bara innehåller ogiltiga värden, en standardspråkkod (för närvarande en-US) i <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="2604182581880595781">Konfigurera principer relaterade till Network File Share.</translation>
 <translation id="2623014935069176671">Vänta på inledande användaraktivitet</translation>
 <translation id="262740370354162807">Aktivera sändning av dokument till <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1520,13 +1502,6 @@
 <translation id="5130288486815037971">Om RC4-krypteringssviter i TLS är aktiverade eller inte</translation>
 <translation id="5141670636904227950">Ange standardtypen för skärmförstoraren på inloggningsskärmen</translation>
 <translation id="5142301680741828703">Rendera alltid följande webbadressmönster i <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Bestäm värdnamn för enheten som används i DHCP-begäranden.
-
-      Om principen är inställd på något annat än en tom sträng används den strängen som enhetens värdnamn under DHCP-begäran.
-
-      Strängen kan innehålla variablerna ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} som ersätts av värden på enheten innan de används som värdnamn. Detta ersättningsvärde ska bara ett giltigt värdnamn (enligt RFC 1035, avsnitt 3.1).
-
-      Om principen inte är inställd eller om värdet efter ersättningen inte är ett giltigt värdnamn så anges inget värdnamn i DHCP-förfrågan. </translation>
 <translation id="5148753489738115745">Innebär att du kan ange ytterligare parametrar som används när <ph name="PRODUCT_FRAME_NAME" /> startar <ph name="PRODUCT_NAME" />.
 
           Om policyn inte anges används standardkommandoraden.</translation>
@@ -1779,7 +1754,6 @@
 <translation id="5835124959204887277">Anger webbadresser och domäner som det inte visas meddelanden för när attesteringscertifikat begärs från säkerhetsnycklar. Dessutom skickas en signal till säkerhetsnyckeln som indikerar att enskild attestering kan användas. Utan detta meddelas användare i version 65 eller senare av Chrome när webbplatser begär attestering för säkerhetsnycklar.
 
       Webbadresser (som https://example.com/some/path) matchar endast som U2F appID. Domäner (som example.com) matchar endast som WebAuthn RP ID. Därför måste både webbadressen och domänen för appID anges om båda API:erna U2F och WebAuthn ska täcka en viss webbplats.</translation>
-<translation id="5835412847081687053">Konfigurera tillåtna gränssnittsspråk i en användarsession</translation>
 <translation id="5836064773277134605">Begränsa UDP-portintervallet som används av värden för fjärråtkomst</translation>
 <translation id="5862253018042179045">Ställer in standardtillståndet för hjälpmedelsfunktionen talad feedback på inloggningsskärmen.
 
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb
index 09f1cd9..c054e01 100644
--- a/components/policy/resources/policy_templates_sw.xtb
+++ b/components/policy/resources/policy_templates_sw.xtb
@@ -472,20 +472,6 @@
       Ukaguzi tahajia bado unaweza kutekelezwa kwa kutumia kamusi iliyopakuliwa; sera hii inadhibiti tu matumizi ya huduma ya mtandaoni.
 
       Ikiwa mpangilio huu haujasanidiwa basi watumiaji wanaweza kuchagua iwapo huduma ya ukaguzi tahajia unapaswa kutumika au la.</translation>
-<translation id="2294283832646774959">Huweka mipangilio ya orodha ya printa.
-
-      Sera hii huruhusu wasimamizi kutoa mipangilio ya printa kwa watumiaji wake.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> na <ph name="PRINTER_DESCRIPTION" /> ziko katika mifuatano wazi ambayo inaweza kubadilishwa ikufae ili kurahisisha kuchagua printa. <ph name="PRINTER_MANUFACTURER" /> na <ph name="PRINTER_MODEL" /> hukusaidia kutambulisha printa kulingana na watumiaji wake. Huwakilisha mtengenezaji na muundo wa printa. <ph name="PRINTER_URI" /> inapaswa kuwa mahali ambapo panafikika kutoka kwenye kiteja cha kompyuta ikiwa ni pamoja na <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> na <ph name="URI_QUEUE" />. Si lazima uweke <ph name="PRINTER_UUID" />. Ikiwekwa, itatumika kusaidia kuondoa nakala za printa za <ph name="ZEROCONF_DISCOVERY" />.
-
-      Ni lazima <ph name="PRINTER_EFFECTIVE_MODEL" /> ifanane na mojawapo ya mfuatano unaowakilisha printa inayotumika ya <ph name="PRODUCT_NAME" />. Mfuatano huo utatumiwa kutambua na kusakinisha PPD inayofaa kwenye printa. Maelezo zaidi yanaweza kupatikana katika https://support.google.com/chrome?p=noncloudprint.
-
-     Shughuli ya kuweka mipangilio ya printa hukamilika baada ya kutumia printa mara ya kwanza. PPD hazipakuliwi mpaka printa itumike. Baada ya hapo, PDD zinazotumiwa sana huakibishwa.
-
-      Sera hii haiathiri iwapo watumiaji wanaweza kuweka mipangilio kwenye vifaa vya kibinafsi. Imewekwa iwe mbinu ya ziada ya kuweka mipangilio ya printa inayotumiwa na watumiaji mahususi.
-
-      Kwa vifaa vinavyodhibitiwa na Saraka Inayotumika, sera hii inatumia upanuzi wa <ph name="MACHINE_NAME_VARIABLE" /> kwenye jina la mashine ya Saraka Inayotumika au kiambishi cha msimbo. Kwa mfano, ikiwa jina la mashine ni <ph name="MACHINE_NAME_EXAMPLE" />, basi herufi 4 zitatumiwa badala ya <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> kuanzia nafasi ya 6, kwa mfano <ph name="MACHINE_NAME_PART_EXAMPLE" />. Kumbuka kwamba nafasi hii inatumia sufuri.
-      </translation>
 <translation id="2294382669900758280">Video inayocheza katika programu za Android haizingatiwi, hata kama sera hii imewekwa kuwa <ph name="TRUE" />.</translation>
 <translation id="2298647742290373702">Weka ukurasa chaguomsingi wa Kichupo Kipya katika <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Bainisha orodha ya programu jalizi zilizowezeshwa</translation>
@@ -593,9 +579,6 @@
           Matoleo yote ya hivi majuzi ya seva za Samba na Windows yanatumia NTLMv2. Hali hii inastahili kuzimwa ili matoleo ya awali yaoane pekee na hupunguza usalama wa uthibishaji.
 
           Kama sera hii haijawekwa, sera chaguomsing itakuwa ndivyo na NTLMv2 imewashwa.</translation>
-<translation id="2598508021807251719">Huweka mipangilio ya lugha ambazo huenda zikatumika kuonyesha <ph name="PRODUCT_OS_NAME" />.
-
-      Ikiwa sera hii imewekwa, mtumiaji anaweza tu kuweka mipangilio ya <ph name="PRODUCT_OS_NAME" /> ili ionyeshwe katika mojawapo ya lugha zilizobainishwa kwenye sera hii. Ikiwa sera hii haijawekwa au imewekewa kuwa orodha isiyo na chochote, <ph name="PRODUCT_OS_NAME" /> inaweza kuonyeshwa katika lugha zote zinazotumika. Ikiwa sera hii imewekewa kuwa orodha yenye thamani zisizo sahihi, thamani zote zisizo sahihi zitapuuzwa. Ikiwa mtumiaji aliweka mipangilio ya <ph name="PRODUCT_OS_NAME" /> awali ili ionyeshwe katika lugha isiyokubalika na sera hii, lugha inayotumika kuonyesha itabadilishwa iwe lugha ya kiolesura inayokubalika mtumiaji atakapoingia tena katika akaunti. Ikiwa mtumiaji alikuwa ameweka lugha zinazopendelewa na mojawapo ya lugha zinazopendelewa imeruhusiwa na sera hii, <ph name="PRODUCT_OS_NAME" /> itatumia lugha hii. Vinginevyo, <ph name="PRODUCT_OS_NAME" /> itabadilisha itumie thamani ya kwanza inayoweza kutumika na iliyobainishwa kwenye sera hii au kwenye lugha mbadala (kwa sasa ni en-US), ikiwa sera hii ina maelezo ambayo si sahihi pekee.</translation>
 <translation id="2604182581880595781">Weka mipangilio ya sera zinazohusiana na Faili ya Kushiriki katika Mtandao.</translation>
 <translation id="2623014935069176671">Subiri shughuli ya kwanza ya mtumiaji</translation>
 <translation id="262740370354162807">Wezesha uwasilishaji wa nyaraka kwenye <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1484,13 +1467,6 @@
 <translation id="5130288486815037971">Ikiwa mipangilio ya kriptografia ya RC4 katika TLS imewashwa</translation>
 <translation id="5141670636904227950">Weka aina ya kikuza skrini cha msingi kama kimewashwa kwenye skrini ya kuingia katika skrini</translation>
 <translation id="5142301680741828703">Onyesha ruwaza zifuatazo za URL mara kwa mara katika <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Hubainisha jina la mpangishaji wa kifaa linalotumika katika maombi ya DHCP.
-
-      Kama sera hii imewekwa kuwa mfuatano ulio na herufi au nambari yoyote, mfuatano huo utatumika kama jina la mpangishaji wa kifaa wakati wa ombi la DHCP.
-
-      Mfuatano huu unaweza kujumuisha vigezo ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} ambavyo vinaweza kubadilishwa na thamani kwenye kifaa kabla ya kuvitumia kama jina la mpangishaji. Matokeo ya ubadilishaji sharti yawe na jina sahihi la mpangishaji (kulingana na RFC 1035, sehemu ya 3.1).
-
-      Kama sera hii haijawekwa au thamani ya baada ya ubadilishaji si jina sahihi la mpangishaji, jina la mpangishaji halitawekwa katika ombi la DHCP. </translation>
 <translation id="5148753489738115745">Inakuruhusu kubainisha kigezo za ziada ambazo ziinatumika wakati <ph name="PRODUCT_FRAME_NAME" /> inazindua <ph name="PRODUCT_NAME" />.
 
           Ikiwa sera hii haijawekwa mpangilio wa amri chaguomsingi  utatumika.</translation>
@@ -1742,7 +1718,6 @@
 <translation id="5835124959204887277">Hubainisha URL na vikoa ambavyo hakuna kidokezo kitakachoonyeshwa wakati vyeti vya ufikiaji uliothibitishwa vinaombwa kutoka Funguo za Usalama. Vile vile, ishara itatumwa kwa Funguo za Usalama inayoonyesha ufikiaji uliothibitishwa wa kibinafsi ambao unaweza kutumiwa. Bila hii, watumiaji watadokezewa katika Chrome 65+ wakati tovuti zinaomba ufikiaji uliothibitishwa wa Funguo za Usalama. 
 
     URL (kama vile https://example.com/some/path) zitalingana kama U2F appIDs pekee. Vikoa (kama vile example.com) vinalingana kama Vitambulisho vya webauthn RP pekee. Ili kushughulikia API zote mbili za U2F na webauthn za tovuti fulani iliyotolewa, ni sharti URL zote mbili za appID na kikoa ziorodheshwe.</translation>
-<translation id="5835412847081687053">Weka mipangilio ya lugha za kiolesura zinazoruhusiwa katika kipindi cha mtumiaji</translation>
 <translation id="5836064773277134605">Zuia masafa ya lango la UDP yaliyotumiwa na mpangishi wa ufikiaji wa mbali</translation>
 <translation id="5862253018042179045">Weka hali ya chaguomsingi ya kipengee cha ufikiaji cha maoni yaliyotamkwa kwenye skrini ya kuingi. 
         Iwapo sera hii imewekwa kuwa kweli, maoni yaliyosemwa yatawashwa skrini ya kuingina katika akaunti itakapoonyeshwa. 
diff --git a/components/policy/resources/policy_templates_ta.xtb b/components/policy/resources/policy_templates_ta.xtb
index 6448f5f..f0ade027 100644
--- a/components/policy/resources/policy_templates_ta.xtb
+++ b/components/policy/resources/policy_templates_ta.xtb
@@ -468,21 +468,6 @@
       பதிவிறக்கப்பட்ட அகராதியைப் பயன்படுத்தியும் எழுத்துப்பிழை சரிபார்ப்பைச் செயல்படுத்தலாம்; இந்தக் கொள்கையானது ஆன்லைன் சேவையின் பயன்பாட்டை மட்டுமே கட்டுப்படுத்துகிறது.
 
       இந்த அமைப்பை உள்ளமைக்கவில்லையெனில், பயனர்கள் எழுத்துப்பிழைச் சரிபார்ப்பு சேவையைப் பயன்படுத்த வேண்டுமா இல்லையா என்பதைத் தேர்வுசெய்யலாம்.</translation>
-<translation id="2294283832646774959">பிரிண்டர்களின் பட்டியலை உள்ளமைக்கும்.
-
-      இந்தக் கொள்கை, நிர்வாகிகள் தங்களின் பயனர்களுக்குப் பிரிண்டர் உள்ளமைவுகளை
-       வழங்க அனுமதிக்கும்.
-
-      <ph name="PRINTER_DISPLAY_NAME" />, <ph name="PRINTER_DESCRIPTION" /> ஆகியவை பிரிண்டரை எளிதாகத் தேர்ந்தெடுக்க உதவும் கட்டுப்பாடற்ற எழுத்துச்சரங்கள் ஆகும். இவற்றை விருப்பப்படி மாற்றிக்கொள்ளலாம். இறுதிப் பயனர்கள் பிரிண்டரை எளிதாக அடையாளம் காண்பதற்கு <ph name="PRINTER_MANUFACTURER" /> மற்றும் <ph name="PRINTER_MODEL" /> உதவுகின்றன. அவை பிரிண்டரின் உற்பத்தியாளரையும் மாடலையும் குறிக்கும். <ph name="PRINTER_URI" /> என்பது கிளையன்ட் கணினியிலிருந்து தொடர்புகொள்ளத்தக்க முகவரியாக இருக்க வேண்டும். அது <ph name="URI_SCHEME" />, <ph name="URI_PORT" />, <ph name="URI_QUEUE" /> ஆகியவற்றைக் கொண்டிருக்க வேண்டும்.  <ph name="PRINTER_UUID" />ஐ விரும்பினால் வழங்கலாம்.  அவ்வாறு வழங்கினால், அது <ph name="ZEROCONF_DISCOVERY" /> பிரிண்டர்களின் நகல்களை நீக்குவதற்குப் பயன்படுத்தப்படும்.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> ஆனது <ph name="PRODUCT_NAME" />ஐ ஆதரிக்கும் பிரிண்டரைக் குறிக்கும் எழுத்துச்சரங்களில் ஒன்றுடன் பொருந்த வேண்டும். இந்த எழுத்துச்சரம், பிரிண்டருக்கான சரியான PPDஐ அடையாளங்கண்டு, நிறுவப் பயன்படுத்தப்படும். கூடுதல் தகவலைப் பின்வரும் இணைப்பில் பார்க்கலாம்: https://support.google.com/chrome?p=noncloudprint.
-
-      பிரிண்டரை முதல்முறை பயன்படுத்தும் போது அது அமைக்கப்பட்டுவிடும்.  பிரிண்டரைப் பயன்படுத்தும் வரை, PPDகள் பதிவிறக்கப்படாது.  அதன் பின்னர், அடிக்கடி பயன்படுத்தும் PPDகள் தற்காலிகமாகச் சேமிக்கப்படும்.
-
-      தனிநபர் சாதனங்களில் பிரிண்டர்களை பயனர்கள் உள்ளமைக்க முடியுமா, முடியாதா என்பதை இந்தக் கொள்கை பாதிக்காது.  தனிப் பயனர்களின் பிரிண்டர்கள் உள்ளமைவிற்குத் துணையாக இருப்பதே இதன் நோக்கமாகும்.
-
-      ஆக்டிவ் டைரக்டரி நிர்வகிக்கும் சாதனங்களுக்கு, <ph name="MACHINE_NAME_VARIABLE" />ஐ ஆக்டிவ் டைரக்டரி சாதனத்தின் பெயர் அல்லது அதன் உட்சரத்திற்கு நீட்டிப்பதை இந்தக் கொள்கை அனுமதிக்கும். எடுத்துக்காட்டாக, சாதனத்தின் பெயர் <ph name="MACHINE_NAME_EXAMPLE" /> எனில், 6வது நிலைக்குப் (அதாவது <ph name="MACHINE_NAME_PART_EXAMPLE" /> இலிருந்து) பிறகு தொடங்கும் 4 எழுத்துகளால் <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> மாற்றியமைக்கப்படும். அந்த நிலையானது பூஜ்ஜியத்தை அடிப்படையாகக் கொண்டது என்பதைக் கவனத்தில்கொள்ளவும்.
-      </translation>
 <translation id="2294382669900758280">இந்தக் கொள்கை <ph name="TRUE" />க்கு அமைக்கப்பட்டாலும், Android பயன்பாடுகளில் இயங்கும் வீடியோ, கணக்கில் எடுக்கப்படாது.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> இல் இயல்புப் புதிய தாவல் பக்கத்தை உள்ளமைக்கும்.</translation>
 <translation id="2299220924812062390">செயலாக்கப்பட்ட செருகுநிரல்களின் பட்டியலைக் குறிப்பிடுக</translation>
@@ -589,9 +574,6 @@
           Samba மற்றும் Windows சேவையகங்களின் எல்லாச் சமீபத்திய பதிப்புகளும் NTLMv2ஐ ஆதரிக்கின்றன. பின்னோக்கிய இணக்கத்தன்மைக்காக மட்டுமே இதனை முடக்க வேண்டும். மேலும் இது அங்கீகரிப்பின் பாதுகாப்பைக் குறைக்கும்.
 
           இந்தக் கொள்கையை அமைக்கவில்லை எனில், இயல்புநிலை "சரி" என்று அமைக்கப்பட்டு, NTLMv2 இயக்கப்படும்.</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" /> இல் காட்டப்படக்கூடிய மொழிகளை உள்ளமைக்கிறது.
-
-      இந்தக் கொள்கை அமைக்கப்பட்டால், பயனரால் இந்தக் கொள்கையில் குறிப்பிடப்படும் மொழிகளில் ஒன்றில் மட்டுமே <ph name="PRODUCT_OS_NAME" />ஐக் காட்டும்படி உள்ளமைக்க முடியும். இந்தக் கொள்கை அமைக்கப்படவில்லை என்றாலோ அல்லது வெற்றுப் பட்டியலாக அமைக்கப்பட்டாலோ, ஆதரிக்கப்படும் எல்லா மொழிகளிலும், <ph name="PRODUCT_OS_NAME" />ஐக் காட்ட முடியும். இந்தக் கொள்கையானது தவறான மதிப்புகளைக் கொண்ட பட்டியலாக அமைக்கப்பட்டால், எல்லா தவறான மதிப்புகளும் புறக்கணிக்கப்படும். இந்தக் கொள்கை அனுமதிக்காத மொழியில் <ph name="PRODUCT_OS_NAME" /> ஐக் காட்டும்படி ஏற்கனவே பயனர் உள்ளமைத்திருந்தால், அடுத்தமுறை பயனர் உள்நுழையும் போது, காட்டப்படும் மொழியானது அனுமதிக்கப்படும் மொழிக்கு மாறும். விருப்ப மொழிகளை பயனர் உள்ளமைத்திருந்து, அந்த விருப்ப மொழிகளில் ஒன்று இந்தக் கொள்கையால் அனுமதிக்கப்பட்டால், அந்த மொழிக்கு <ph name="PRODUCT_OS_NAME" /> மாறும். இல்லையெனில், இந்தக் கொள்கையால் குறிப்பிடப்படும் சரியான முதல் மதிப்பில் <ph name="PRODUCT_OS_NAME" /> காட்டப்படும் அல்லது இந்தக் கொள்கையில் தவறான உள்ளீடுகள் மட்டுமே இருந்தால், இயல்பு மொழியில் (தற்சமயம் en-US) காட்டப்படும்.</translation>
 <translation id="2604182581880595781">’நெட்வொர்க் கோப்புப் பகிர்வு’ அம்சம் தொடர்பான கொள்கைகளை உள்ளமைக்கும்.</translation>
 <translation id="2623014935069176671">துவக்கப் பயனர் செயல்பாட்டிற்காக காத்திரு</translation>
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" /> இல் ஆவணங்களைச் சமர்ப்பித்தலை இயக்கு</translation>
@@ -1480,13 +1462,6 @@
 <translation id="5130288486815037971">TLS இல் உள்ள RC4 சைஃபர் பொதிகள் இயக்கப்பட்டுள்ளனவா என்பதைப் பார்க்கும்</translation>
 <translation id="5141670636904227950">உள்நுழைவுத் திரையில் இயக்கப்பட்டுள்ள இயல்புநிலை திரை உருப்பெருக்கியை அமை</translation>
 <translation id="5142301680741828703">எப்போதும் பின்வரும் URL களவடிவங்களை <ph name="PRODUCT_FRAME_NAME" /> இல் ரெண்டர் செய்க</translation>
-<translation id="5147665094011258322">DHCP கோரிக்கைகளில் பயன்படுத்தப்படும் சாதனத்தின் ஹோஸ்ட்பெயரைத் தீர்மானிக்கலாம்.
-
-      இந்தக் கொள்கையைக் காலி அல்லாத எழுத்துச்சரத்திற்கு அமைத்தால், DHCP கோரிக்கையின் போது சாதனத்தின் ஹோஸ்ட்பெயராக அந்த எழுத்துச்சரம் பயன்படுத்தப்படும்.
-
-      ஹோஸ்ட்பெயராகப் பயன்படுத்துவதற்கு முன்னர், சாதனத்தில் மதிப்புகளாக மாற்றப்படும் மாறிகளை ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} எழுத்துச்சரம் கொண்டிருக்கலாம். மாற்றப்படும் மதிப்பானது சரியான ஹோஸ்ட்பெயராக (RFC 1035 ஒன்றுக்கு, பிரிவு 3.1) இருக்க வேண்டும்.
-
-      இந்தக் கொள்கை அமைக்கப்படவில்லை என்றாலோ மாற்றப்பட்ட மதிப்பானது சரியான ஹோஸ்ட்பெயராக இல்லை என்றாலோ, DHCP கோரிக்கையில் எந்த ஹோஸ்ட்பெயரும் அமைக்கப்படாது. </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" />, <ph name="PRODUCT_NAME" /> ஐ வெளியிடும்போது பயன்படுத்தப்படும் கூடுதல் அளவுருக்களை குறிப்பிட அனுமதிக்கிறது.
 
           இந்தக் கொள்கையை அமைக்கவில்லையெனில், இயல்புநிலை கட்டளை வரி பயன்படுத்தப்படும்.</translation>
@@ -1718,7 +1693,6 @@
 <translation id="5835124959204887277">பாதுகாப்புச் சாவிகளிடமிருந்து சான்றொப்பமிட்ட சான்றிதழ்களைக் கோரும்போது, அறிவிப்பு எதுவும் காட்டப்படாத URLகளையும் டொமைன்களையும் குறிப்பிடும். கூடுதலாக, தனிப்பட்ட சான்றொப்பம் பயன்படுத்தப்படலாம் என்று குறிப்பிடும் சிக்னல், பாதுகாப்புச் சாவிக்கு அனுப்பப்படும். இது இல்லை எனில், பாதுகாப்புச் சாவிகளின் சான்றொப்பத்தைத் தளங்கள் கோரும்போது, Chrome65 இல் பயனர்களுக்குத் தெரிவிக்கப்படும்.
 
       U2F appIDகளாக மட்டுமே URLகள் (https://example.com/some/path போன்றவை) பொருந்தும். webauthn RP IDகளாக மட்டுமே டொமைன்கள் (example.com போன்றவை) பொருந்தும். அதனால், ஒரு தளத்திற்கான U2F மற்றும் webauthn APIகள் இரண்டையும் பயன்படுத்த, appID URL மற்றும் டொமைன் இரண்டும் பட்டியலிடப்பட வேண்டும்.</translation>
-<translation id="5835412847081687053">பயனர் அமர்வில் அனுமதிக்கப்படும் UI மொழிகளை உள்ளமைக்கும்</translation>
 <translation id="5836064773277134605">தொலைநிலை அணுகல் ஹோஸ்ட்டால் பயன்படுத்தப்படும் UDP போர்ட் வரம்பை வரம்பிடு</translation>
 <translation id="5862253018042179045">உள்நுழைவுத் திரையில் பேச்சுவடிவ கருத்தின் அணுகல் அம்சத்தின் இயல்புநிலையை அமைக்கவும்.
 
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb
index 72794276..47637c5 100644
--- a/components/policy/resources/policy_templates_te.xtb
+++ b/components/policy/resources/policy_templates_te.xtb
@@ -564,21 +564,6 @@
       అక్షరక్రమ తనిఖీని ఇప్పటికీ డౌన్‌లోడ్ చేయబడిన నిఘంటువును ఉపయోగించి అమలు చేయవచ్చు; ఈ విధానం ఆన్‌లైన్ సేవ యొక్క ఉపయోగాన్ని మాత్రమే నియంత్రిస్తుంది.
 
       ఈ సెట్టింగ్‌ను కాన్ఫిగర్ చేయకపోతే వినియోగదారులు అక్షరక్రమ తనిఖీ సేవను ఉపయోగించాలో లేదో ఎంచుకోవచ్చు.</translation>
-<translation id="2294283832646774959">ప్రింటర్‌ల జాబితాని కాన్ఫిగర్ చేస్తుంది.
-
-      నిర్వాహకులు తమ వినియోగదారులకు ప్రింటర్ కాన్ఫిగరేషన్‌లను అందించడానికి
-      ఈ విధానం అనుమతిస్తుంది.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> మరియు <ph name="PRINTER_DESCRIPTION" /> ప్రింటర్ ఎంపికను సులభతరం చేయడం కోసం అనుకూలీకరించగల వాక్యాలను కలిగి ఉంటాయి. <ph name="PRINTER_MANUFACTURER" /> మరియు <ph name="PRINTER_MODEL" /> తుది వినియోగదారులకు ప్రింటర్ గుర్తింపును సులభతరం చేస్తాయి. అవి తయారీదారు బ్రాండ్ పేరు మరియు ప్రింటర్ మోడల్‌ని సూచిస్తాయి. <ph name="PRINTER_URI" /> అనేది <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> మరియు <ph name="URI_QUEUE" />తో సహా క్లయింట్ కంప్యూటర్ నుండి చేరుకోగలిగే చిరునామా అయి ఉండాలి. <ph name="PRINTER_UUID" /> అనేది ఐచ్ఛికం. అందిస్తే, అది <ph name="ZEROCONF_DISCOVERY" /> ప్రింటర్‌ల నకిలీనీ తీసివేయడంలో సహాయపడడానికి ఉపయోగించబడుతుంది.
-
-      <ph name="PRODUCT_NAME" /> మద్దతు గల ప్రింటర్‌ని సూచించే వాక్యాల్లో ఒకదానికి తప్పక <ph name="PRINTER_EFFECTIVE_MODEL" /> సరిపోలాలి. ప్రింటర్ కోసం సరైన PPDని గుర్తించడానికి మరియు ఇన్‌స్టాల్ చేయడానికి వాక్యం ఉపయోగించబడుతుంది. https://support.google.com/chrome?p=noncloudprintలో మరింత సమాచారం పొందవచ్చు.
-
-      ప్రింటర్ యొక్క మొదటి వినియోగం తర్వాత ప్రింటర్ సెటప్ పూర్తవుతుంది.  ప్రింటర్‌ని ఉపయోగించే వరకు PPDలు డౌన్‌లోడ్ చేయబడవు.  ఆ సమయం తర్వాత, తరచూ ఉపయోగించే PPDలు కాష్ చేయబడతాయి.
-
-      వినియోగదారులు వారి వ్యక్తిగత పరికరాల్లో ప్రింటర్‌లను కాన్ఫిగర్ చేసే విషయంలో ఈ విధానం ఎలాంటి ప్రభావం చూపదు.  ఇది వేర్వేరు వినియోగదారుల యొక్క ప్రింటర్‌ల కాన్ఫిగరేషన్‌కు అదనపు తోడుగా ఉండేలా ఉద్దేశించినది.
-
-      Active Directory నిర్వహిత పరికరాల కోసం, ఈ విధానం Active Directory మెషీన్ పేరు లేదా దాని ఉపవాక్యానికి <ph name="MACHINE_NAME_VARIABLE" /> విస్తరణ మద్దతిస్తుంది. ఉదాహరణకు, మెషీన్ పేరు <ph name="MACHINE_NAME_EXAMPLE" /> అయితే, ఆపై <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> అనేది 6వ స్థానం తర్వాతి నుండి ప్రారంభమై 4 అక్షరాలు ఉంటుంది, అంటే <ph name="MACHINE_NAME_PART_EXAMPLE" />. స్థానం శూన్య ఆధారితమని గుర్తుంచుకోండి.
-      </translation>
 <translation id="2294382669900758280">ఈ విధానాన్ని <ph name="TRUE" />కి సెట్ చేసినప్పటికీ Android అనువర్తనాల్లో వీడియో ప్లే చేయడం పరిగణనలోకి తీసుకోబడదు.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" />లో డిఫాల్ట్ కొత్త ట్యాబ్ పేజీని కాన్ఫిగర్ చేస్తుంది.</translation>
 <translation id="2299220924812062390">ప్రారంభించబడిన ప్లగ్‌ఇన్‌ల జాబితాని పేర్కొను</translation>
@@ -691,9 +676,6 @@
           సర్వర్‌ల యొక్క అన్ని ఇటీవలి వెర్షన్‌లు NTLMv2కి మద్దతిస్తాయి. మునుపటి అనుకూలతకు మాత్రమే దీనిని నిలిపివేయాలి మరియు భద్రతా ప్రమాణీకరణ తగ్గుతుంది. 
 
           ఈ విధానం సెట్ కాకపొతే, డిఫాల్ట్‌గా ఒప్పు అవుతుంది మరియు NTLMv2 ప్రారంభించబడుతుంది.</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" />ని ప్రదర్శించే లొకేల్‌లను కాన్ఫిగర్ చేస్తుంది.
-
-      ఈ విధానం సెట్ చేయబడినట్లయితే, వినియోగదారు ఈ విధానం ద్వారా పేర్కొన్న లొకేల్‌లలో ఒకదానిలో ప్రదర్శించడానికి మాత్రమే <ph name="PRODUCT_OS_NAME" />ని కాన్ఫిగర్ చేయగలరు. ఈ విధానాన్ని సెట్ చేయకపోతే లేదా ఖాళీ జాబితాకి సెట్ చేయబడినట్లయితే, <ph name="PRODUCT_OS_NAME" /> మద్దతు ఉన్న అన్ని UI లొకేల్‌లలో ప్రదర్శించబడుతుంది. ఈ విధానం చెల్లని విలువలు ఉన్న జాబితాకి సెట్ చేయబడినట్లయితే, చెల్లని అన్ని విలువలు విస్మరించబడతాయి. వినియోగదారు మునుపు ఈ విధానం అనుమతించని లొకేల్‌లో ప్రదర్శించడానికి <ph name="PRODUCT_OS_NAME" />ని కాన్ఫిగర్ చేసి ఉంటే, తర్వాతి సారి వినియోగదారు సైన్ ఇన్ చేసినప్పుడు ప్రదర్శన లొకేల్ అనుమతించిన UI లొకేల్‌కి మార్చబడుతుంది. వినియోగదారు ప్రాధాన్య లొకేల్‌లను కాన్ఫిగర్ చేసి ఉంటే మరియు ఈ విధానం ద్వారా ప్రాధాన్య లొకేల్‌లో ఒకటి అనుమతించబడి ఉంటే, <ph name="PRODUCT_OS_NAME" /> ఈ లొకేల్‌కు మార్చబడుతుంది. లేదంటే, <ph name="PRODUCT_OS_NAME" /> ఈ విధానం ద్వారా పేర్కొన్న చెల్లుబాటు అయ్యే మొదటి విలువకు మార్చబడుతుంది లేదా ఈ విధానం చెల్లుబాటు కాని నమోదులను మాత్రమే కలిగి ఉంటే, ఫాల్‌బ్యాక్ లొకేల్‌కి (ప్రస్తుతం en-US) మార్చబడుతుంది.</translation>
 <translation id="2604182581880595781">నెట్‌వర్క్ ఫైల్ షేరింగ్‌ సంబంధిత విధానాలను కాన్ఫిగర్ చేయండి.</translation>
 <translation id="2623014935069176671">ప్రారంభ వినియోగదారు కార్యాచరణ కోసం వేచి ఉండండి</translation>
 <translation id="262740370354162807">పత్రాలను <ph name="CLOUD_PRINT_NAME" />కు సమర్పించడాన్ని ప్రారంభిస్తుంది</translation>
@@ -1714,13 +1696,6 @@
 <translation id="5130288486815037971">TLSలో RC4 సైఫర్ సూట్‌లు ప్రారంభించబడ్డాయి</translation>
 <translation id="5141670636904227950">లాగిన్ స్క్రీన్‌లో ప్రారంభించబడిన డిఫాల్ట్ స్క్రీన్ మాగ్నిఫైయర్ రకాన్ని సెట్ చేయండి</translation>
 <translation id="5142301680741828703">ఎల్లప్పుడు <ph name="PRODUCT_FRAME_NAME" />లో ఈ క్రింది URL విధానాలాని రెండర్ చెయ్యి</translation>
-<translation id="5147665094011258322">DHCP అభ్యర్ధనల నందు ఉపయోగించిన పరికరము యొక్క హోస్ట్‌పేరును గుర్తించండి.
-
-      ఈ విధానాన్ని ఖాళీగా ఉండని వాక్యానికి సెట్ చేస్తే, ఆ వాక్యం DHCP అభ్యర్థన సమయంలో పరికరం హోస్ట్ పేరుగా ఉపయోగించబడుతుంది.
-
-     వాక్యంలో $ {ASSET_ID}, $ {SERIAL_NUM}, $ {MAC_ADDR} అనే చరాంశాలు ఉంటాయి, అవి హోస్ట్ పేరుగా ఉపయోగించే ముందు పరికరంలో విలువలతో భర్తీ చేయబడతాయి. ఫలితంగా, ప్రత్యామ్నాయం చెల్లుబాటు అయ్యే హోస్ట్‌పేరు అయి ఉండాలి (RFC 1035 ప్రకారం, సెక్షన్ 3.1).
-
-      ఈ విధానాన్ని సెట్ చేసి ఉండకపోతే లేదా విలువ ప్రత్యామ్నాయం తర్వాత చెల్లుబాటు అయ్యే హోస్ట్‌పేరు కానప్పుడు, హోస్ట్ పేరు DHCP అభ్యర్ధనలో సెట్ చేయబడనప్పుడు. </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> <ph name="PRODUCT_NAME" />ను ప్రారంభించినప్పుడు ఉపయోగించే అదనపు పరామితులను పేర్కొనడానికి మిమ్మల్ని అనుమతిస్తుంది.
 
           ఈ విధానాన్ని సెట్ చేయకపోతే డిఫాల్ట్ ఆదేశ పంక్తి ఉపయోగించబడుతుంది.</translation>
@@ -2030,7 +2005,6 @@
 <translation id="5835124959204887277">భద్రతా కీల నుండి ధృవీకరణ సర్టిఫికేట్‌లను అభ్యర్థించినప్పుడు ప్రాంప్ట్ చేయబడవలసిన URLలు మరియు డొమైన్‌లను పేర్కొంటుంది. అదనంగా, వ్యక్తిగత ధృవీకరణను ఉపయోగించవచ్చని సూచించే భద్రతా కీకి ఒక సిగ్నల్ పంపబడుతుంది. ఇది లేకుండా, భద్రతా కీల యొక్క ధృవీకరణను సైట్‌లకు అభ్యర్థించినప్పుడు వినియోగదారులు Chrome 65+లో ప్రాంప్ట్ చేయబడతారు.
 
       URLలు (https://example.com/some/path వంటివి) U2F యాప్ IDలుగా మాత్రమే సరిపోతాయి. డొమైన్‌లు (example.com వంటివి) మాత్రమే webauthn RP IDలుగా సరిపోతాయి. ఈ విధంగా, ఇచ్చిన సైట్ కోసం U2F మరియు webauthn APIలను కవర్ చేయడానికి, యాప్ ID URL మరియు డొమైన్ రెండూ జాబితా చేయబడాలి.</translation>
-<translation id="5835412847081687053">వినియోగదారు సెషన్‌లో అనుమతించిన UI లొకేల్‌లను కాన్ఫిగర్ చేయండి</translation>
 <translation id="5836064773277134605">రిమోట్ ప్రాప్యత హోస్ట్ ద్వారా ఉపయోగించబడే UDP పోర్ట్ పరిధిని పరిమితం చేయండి</translation>
 <translation id="5862253018042179045">లాగిన్ స్క్రీన్‌లో చదివి వినిపించే అభిప్రాయం ప్రాప్యత లక్షణం యొక్క డిఫాల్ట్ స్థితిని సెట్ చేయండి.
 
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 3bf029d..d7dd517 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -482,20 +482,6 @@
       การตรวจสอบการสะกดยังสามารถทำงานได้โดยใช้พจนานุกรมที่ดาวน์โหลดมา แต่นโยบายนี้จะควบคุมเฉพาะการใช้งานบริการออนไลน์เท่านั้น
 
       หากการตั้งค่านี้ไม่ได้กำหนดค่าไว้ ผู้ใช้จะสามารถเลือกว่าจะใช้บริการตรวจสอบการสะกดหรือไม่</translation>
-<translation id="2294283832646774959">กำหนดค่ารายการเครื่องพิมพ์
-
-      นโยบายนี้อนุญาตให้ผู้ดูแลระบบทำการกำหนดค่าเครื่องพิมพ์ให้ผู้ใช้ของตนได้      
-
-      <ph name="PRINTER_DISPLAY_NAME" /> และ <ph name="PRINTER_DESCRIPTION" /> เป็นสตริงรูปแบบอิสระที่ปรับแต่งได้เพื่อการเลือกเครื่องพิมพ์ที่ง่ายขึ้น <ph name="PRINTER_MANUFACTURER" /> และ <ph name="PRINTER_MODEL" /> ช่วยให้ผู้ใช้ปลายทางระบุเครื่องพิมพ์ได้โดยง่าย ด้วยการแสดงชื่อผู้ผลิตและรุ่นของเครื่องพิมพ์ <ph name="PRINTER_URI" /> ควรเป็นที่อยู่ที่เข้าถึงได้จากคอมพิวเตอร์ของลูกค้า รวมถึง <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> และ <ph name="URI_QUEUE" /> ส่วน <ph name="PRINTER_UUID" /> นั้นจะระบุหรือไม่ก็ได้ หากระบุ ข้อมูลนี้จะใช้เพื่อช่วยกรองเครื่องพิมพ์ <ph name="ZEROCONF_DISCOVERY" /> ที่ซ้ำกันออก
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> ต้องตรงกับสตริงใดสตริงหนึ่งที่แสดงถึงเครื่องพิมพ์ที่รองรับ <ph name="PRODUCT_NAME" /> ระบบจะใช้สตริงนี้เพื่อระบุและติดตั้ง PPD ที่เหมาะสมสำหรับเครื่องพิมพ์ ดูข้อมูลเพิ่มเติมได้ที่ https://support.google.com/chrome?p=noncloudprint
-
-      การตั้งค่าเครื่องพิมพ์จะเสร็จสมบูรณ์เมื่อใช้เครื่องพิมพ์เป็นครั้งแรก จะไม่มีการดาวน์โหลด PPD จนกว่าจะมีการใช้เครื่องพิมพ์ หลังจากนั้น ระบบจะเก็บ PPD ที่ใช้บ่อยไว้ในแคช
-
-      นโยบายนี้ไม่มีผลต่อความสามารถในการกำหนดค่าเครื่องพิมพ์ของอุปกรณ์ใดๆ แต่เป็นเพียงนโยบายเพิ่มเติมการตั้งค่าเครื่องพิมพ์ของผู้ใช้แต่ละราย
-
-      สำหรับอุปกรณ์ที่จัดการโดย Active Directory นโยบายนี้รองรับส่วนขยาย <ph name="MACHINE_NAME_VARIABLE" /> ในชื่อเครื่อง Active Directory หรือสตริงย่อย ตัวอย่างเช่น หากชื่อเครื่องคือ <ph name="MACHINE_NAME_EXAMPLE" /> ระบบก็จะแทนที่ <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> ด้วยอักขระ 4 ตัวที่เริ่มหลังจากตำแหน่งที่ 6 นั่นคือ <ph name="MACHINE_NAME_PART_EXAMPLE" /> โปรดทราบว่าตำแหน่งจะเริ่มนับจากศูนย์
-      </translation>
 <translation id="2294382669900758280">ไม่มีการพิจารณาการเล่นวิดีโอในแอป Android แม้ว่าจะตั้งค่านโยบายนี้เป็น <ph name="TRUE" /> ก็ตาม</translation>
 <translation id="2298647742290373702">กำหนดค่าหน้าแท็บใหม่เริ่มต้นใน <ph name="PRODUCT_NAME" /></translation>
 <translation id="2299220924812062390">ระบุรายการปลั๊กอินที่เปิดใช้งาน</translation>
@@ -599,9 +585,6 @@
           เซิร์ฟเวอร์ Samba และ Windows เวอร์ชันล่าสุดทั้งหมดจะรองรับ NTLMv2 ควรปิดใช้การตั้งค่านี้เฉพาะเมื่อต้องการให้ใช้งานได้กับเวอร์ชันก่อนหน้าเท่านั้น เพราะการปิดใช้จะลดความปลอดภัยในการตรวจสอบสิทธิ์
 
           หากไม่ได้ตั้งค่าใช้นโยบายนี้ ค่าเริ่มต้นจะเป็น True และมีการเปิดใช้ NTLMv2</translation>
-<translation id="2598508021807251719">กำหนดค่าภาษาที่ <ph name="PRODUCT_OS_NAME" /> แสดงได้
-
-      หากตั้งค่านโยบายนี้ ผู้ใช้จะสามารถกำหนดค่าให้ <ph name="PRODUCT_OS_NAME" /> แสดงในภาษาที่ระบุไว้ในนโยบายนี้เท่านั้น หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็นรายการว่างเปล่า <ph name="PRODUCT_OS_NAME" /> จะแสดงได้ในทุกภาษา UI ที่รองรับ หากตั้งค่านโยบายเป็นรายการที่มีค่าที่ไม่ถูกต้อง ระบบจะเพิกเฉยต่อค่าที่ไม่ถูกต้องทั้งหมด หากผู้ใช้เคยกำหนดค่า <ph name="PRODUCT_OS_NAME" /> ให้แสดงในภาษาที่นโยบายนี้ไม่อนุญาต ระบบจะเปลี่ยนภาษาที่แสดงเป็นภาษา UI ที่อนุญาตในครั้งถัดไปที่ผู้ใช้ลงชื่อเข้าใช้ หากเคยกำหนดค่าภาษาที่ต้องการและนโยบายอนุญาตภาษาที่ต้องการ <ph name="PRODUCT_OS_NAME" /> จะเปลี่ยนไปใช้ภาษานี้ มิเช่นนั้น <ph name="PRODUCT_OS_NAME" /> จะเปลี่ยนไปใช้ค่าที่ถูกต้องค่าแรกที่นโยบายระบุไว้หรือเปลี่ยนไปใช้ภาษาสำรอง (ซึ่งตอนนี้คือ en-US) หากนโยบายนี้มีแต่รายการที่ไม่ถูกต้อง</translation>
 <translation id="2604182581880595781">กำหนดค่านโยบายที่เกี่ยวข้องกับพื้นที่แชร์ไฟล์ของเครือข่าย</translation>
 <translation id="2623014935069176671">รอกิจกรรมเริ่มต้นของผู้ใช้</translation>
 <translation id="262740370354162807">เปิดใช้งานการส่งเอกสารไปยัง <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1461,13 +1444,6 @@
 <translation id="5130288486815037971">เปิดใช้ชุดการเข้ารหัส RC4 ใน TLS อยู่ไหม</translation>
 <translation id="5141670636904227950">ตั้งค่าประเภทของแว่นขยายหน้าจอเริ่มต้นที่เปิดใช้งานบนหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="5142301680741828703">แสดงรูปแบบ URL ต่อไปนี้ใน <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">ระบุชื่อโฮสต์ของอุปกรณ์ที่ใช้ในคำขอ DHCP
-
-      หากตั้งค่านโยบายนี้เป็นสตริงที่ไม่ว่างเปล่า ระบบจะใช้สตริงนั้นเป็นชื่อโฮสต์ของอุปกรณ์ระหว่างคำขอ DHCP
-
-      สตริงจะมีตัวแปร ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} ได้ ซึ่งจะแทนที่ด้วยค่าในอุปกรณ์ก่อนที่จะใช้เป็นชื่อโฮสต์ ชื่อทดแทนที่ได้จะต้องเป็นชื่อโฮสต์ที่ถูกต้อง (ตาม RFC 1035 หัวข้อ 3.1)
-
-      หากไม่ได้ตั้งค่านโยบายนี้เอาไว้ หรือค่าหลังการแทนที่ไม่ใช่ชื่อโฮสต์ที่ถูกต้อง ก็จะไม่มีการกำหนดชื่อโฮสต์ในคำขอ DHCP </translation>
 <translation id="5148753489738115745">ช่วยให้คุณสามารถกำหนดพารามิเตอร์เพิ่มเติมที่จะนำมาใช้เมื่อ <ph name="PRODUCT_FRAME_NAME" /> เปิดใช้งาน <ph name="PRODUCT_NAME" />
 
           หากไม่ได้ตั้งค่านโยบายนี้เอาไว้ คำสั่งที่เป็นค่าเริ่มต้นจะถูกนำมาใช้</translation>
@@ -1693,7 +1669,6 @@
 <translation id="5835124959204887277">ระบุ URL และโดเมนที่จะไม่แสดงข้อความแจ้งเมื่อมีการขอใบรับรองการยืนยันจากกุญแจรักษาความปลอดภัย นอกจากนี้ จะมีการส่งสัญญาณไปยังกุญแจรักษาความปลอดภัยเพื่อแจ้งว่าอาจมีการใช้การยืนยันแยกทีละรายการ หากไม่มี ผู้ใช้จะได้รับข้อความแจ้งใน Chrome 65 ขึ้นไป เมื่อเว็บไซต์ขอการยืนยันของกุญแจรักษาความปลอดภัย
 
       URL (เช่น https://example.com/some/path) จะจับคู่เป็น U2F AppID เท่านั้น โดเมน (เช่น example.com) จะจับคู่เป็น Webauthn RP ID ดังนั้นเพื่อให้ครอบคลุมทั้ง U2F และ Webauthn API สำหรับเว็บไซต์ที่ต้องการ คุณต้องใส่ทั้ง URL และโดเมนของ AppID</translation>
-<translation id="5835412847081687053">กำหนดค่าภาษา UI ที่อนุญาตในเซสชันของผู้ใช้</translation>
 <translation id="5836064773277134605">จำกัดช่วงพอร์ต UDP ที่ใช้โดยโฮสต์การเข้าถึงระยะไกล</translation>
 <translation id="5862253018042179045">ตั้งค่าสถานะเริ่มต้นของฟีเจอร์การเข้าถึงเสียงพูดตอบรับบนหน้าจอการเข้าสู่ระบบ
 
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index b99e8e4..8c6e079 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -482,20 +482,6 @@
       Yazım denetimi indirilen bir sözlük kullanılarak gerçekleştirilebilir; bu politika yalnızca çevrimiçi hizmetin kullanımını denetler.
 
       Bu ayar yapılandırılmazsa, kullanıcılar yazım denetimi hizmetinin kullanılıp kullanılmayacağını belirleyebilirler.</translation>
-<translation id="2294283832646774959">Yazıcılar listesini yapılandırır.
-
-      Bu politika, yöneticilerin kendi kullanıcıları için yazıcı yapılandırmaları sunmalarına izin verir.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> ve <ph name="PRINTER_DESCRIPTION" />, yazıcı seçimini kolaylaştıracak şekilde özelleştirilebilen serbest biçimli dizelerdir. <ph name="PRINTER_MANUFACTURER" /> ve <ph name="PRINTER_MODEL" />, son kullanıcıların yazıcıyı tanımasını kolaylaştırmayı amaçlar. Bu ibareler yazıcının üreticisini ve modelini temsil eder. <ph name="PRINTER_URI" />; <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> ve <ph name="URI_QUEUE" /> bilgilerini içeren bir istemci bilgisayardan ulaşılabilen bir adres olmalıdır. <ph name="PRINTER_UUID" /> isteğe bağlıdır. Sağlandığı takdirde, <ph name="ZEROCONF_DISCOVERY" /> yazıcıların tekilleştirilmesine yardımcı olmak için kullanılabilir.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" />, <ph name="PRODUCT_NAME" /> tarafından desteklenen bir yazıcıyı temsil eden dizelerden biriyle eşleşmelidir. Dize, yazıcıya uygun PPD'yi tanımlamak ve yüklemek için kullanılır. Daha fazla bilgiye https://support.google.com/chrome?p=noncloudprint adresinden ulaşabilirsiniz.
-
-      Yazıcı ilk kez kullanıldığında kurulum tamamlanmış olur. Yazıcı kullanılana kadar PPD'ler indirilmez. Bundan sonra sık kullanılan PPD'ler önbelleğe alınır.
-
-      Bu politika, kullanıcıların yazıcıları ayrı ayrı cihazlarda yapılandırıp yapılandıramayacakları konusunu etkilemez. Ayrı ayrı kullanıcılar tarafından yazıcıların yapılandırılması konusunda tamamlayıcı olacak şekilde tasarlanmıştır.
-
-      Active Directory tarafından yönetilen cihazlarda bu politika, <ph name="MACHINE_NAME_VARIABLE" /> değişkeninin Active Directory makine adına veya bunun bir alt dizesine genişletilmesini destekler. Örneğin, makine adı <ph name="MACHINE_NAME_EXAMPLE" /> ise <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />, 6. konumdan sonra başlayan 4 karakterle değiştirilir (<ph name="MACHINE_NAME_PART_EXAMPLE" /> gibi). Konumun sıfır tabanlı olduğuna dikkat edin.
-      </translation>
 <translation id="2294382669900758280">Bu politika <ph name="TRUE" /> seçeneğine ayarlansa bile Android uygulamalarında video oynatma dikkate alınmaz.</translation>
 <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> ürününde varsayılan Yeni Sekme sayfasını yapılandırın.</translation>
 <translation id="2299220924812062390">Etkinleştirilmiş eklentilerin listesini belirt</translation>
@@ -606,9 +592,6 @@
           Son Samba ve Windows sunucularının tamamı NTLMv2'yi desteklemektedir. Bu politika yalnızca geriye dönük uyumluluk için devre dışı bırakılmalıdır ve kimlik doğrulaması güvenliğini azaltmaktadır.
 
           Bu politika ayarlanmazsa, varsayılan değer true (doğru) olarak belirlenir ve NTLMv2 etkinleştirilir.</translation>
-<translation id="2598508021807251719"><ph name="PRODUCT_OS_NAME" /> ürününün görüntülenebileceği yerel ayarları yapılandırır.
-
-      Bu politika ayarlanırsa kullanıcı, <ph name="PRODUCT_OS_NAME" /> ürününü yalnızca bu politikada belirtilen yerel ayarların birinde görüntülenecek şekilde yapılandırabilir. Bu politika ayarlanmazsa veya boş bir listeye ayarlanırsa <ph name="PRODUCT_OS_NAME" />, desteklenen tüm kullanıcı arayüzü yerel ayarlarında görüntülenebilir. Bu politika geçersiz değerler içeren bir listeye ayarlanırsa tüm geçersiz değerler yoksayılır. Bir kullanıcı daha önce <ph name="PRODUCT_OS_NAME" /> ürününü bu politika tarafından izin verilmeyen bir yerel ayarda görüntülenecek şekilde yapılandırmışsa, kullanıcı tekrar oturum açtığında görüntüleme yerel ayarı izin verilen bir kullanıcı arayüzü yerel ayarıyla değiştirilir. Kullanıcı tercih edilen yerel ayarları yapılandırdıysa ve bu politika, tercih edilen yerel ayarlardan birine izin veriyorsa <ph name="PRODUCT_OS_NAME" />, bu yerel ayara geçiş yapar. Aksi halde, <ph name="PRODUCT_OS_NAME" /> bu politika tarafından belirtilen geçerli değere veya bu politika yalnızca geçersiz girişler içerirse bir yedek yerel ayara (şu anda en-US) geçiş yapar.</translation>
 <translation id="2604182581880595781">Ağ Üzerinde Dosya Paylaşımı ile ilgili politikaları yapılandırın.</translation>
 <translation id="2623014935069176671">İlk kullanıcı etkinliğini bekle</translation>
 <translation id="262740370354162807">Dokümanların <ph name="CLOUD_PRINT_NAME" /> için gönderilmesini etkinleştir</translation>
@@ -1497,13 +1480,6 @@
 <translation id="5130288486815037971">TLS'deki RC4 şifre paketlerinin etkinleştirilip etkinleştirilmediği</translation>
 <translation id="5141670636904227950">Giriş ekranında varsayılan ekran büyüteci türünü etkin olarak ayarla</translation>
 <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" /> içinde aşağıdaki URL kalıplarını her zaman oluştur</translation>
-<translation id="5147665094011258322">DHCP isteklerinde kullanılan cihazın ana makine adını belirler.
-
-      Bu politika boş olmayan bir dizeye ayarlanırsa, o dize, DHCP isteği sırasında cihazın ana makine adı olarak kullanılır.
-
-      Dize, değişkenler (${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}) içerebilir. Ana makine adı olarak kullanılmadan önce cihazda bu değişkenlerin yerine değerler getirilir. Bu işlemin sonucunda ortaya çıkan değişikliğin geçerli bir ana makine adı olması gerekir (RFC 1035, bölüm 3.1 uyarınca).
-
-      Bu politika ayarlanmazsa veya değişiklikten sonraki değer, geçerli bir ana makine adı değilse, DHCP isteğinde ana makine adı ayarlanmaz. </translation>
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> tarafından <ph name="PRODUCT_NAME" /> başlatıldığında kullanılan ek parametreleri belirtmenize olanak verir.
 
           Bu politika ayarlanmazsa varsayılan komut satırı kullanılır.</translation>
@@ -1752,7 +1728,6 @@
 <translation id="5835124959204887277">Güvenlik Anahtarlarından doğrulama sertifikaları istendiğinde kendisi için hiçbir istemin gösterilmeyeceği URL'leri ve alan adlarını belirtir. Ayrıca, Güvenlik Anahtarına, bireysel doğrulamanın kullanılabileceğini belirten bir sinyal gönderilir. Bu olmadığında kullanıcılar, siteler Güvenlik Anahtarlarının doğrulanmasını istediğinde Chrome 65+ sürümünde istem alırlar.
 
       URL'ler (https://example.com/herhangibir/yoladı gibi) yalnızca U2F appID'leri olarak eşleşir. Alan adları (example.com gibi) yalnızca webauthn RP ID'leri olarak eşleşir. Dolayısıyla, belirli bir site için hem U2F hem de webauthn API'lerini kapsamak istiyorsanız hem appID URL'sini hem de alan adını listelemeniz gerekir.</translation>
-<translation id="5835412847081687053">Kullanıcı oturumunda izin verilen kullanıcı arayüzü yerel ayarlarını yapılandırma</translation>
 <translation id="5836064773277134605">Uzaktan erişen ana makine tarafından kullanılan UDP bağlantı noktası aralığını kısıtla</translation>
 <translation id="5862253018042179045">Giriş ekranında sesli geri bildirim erişilebilirlik özelliğinin varsayılan durumunu ayarla.
 
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 3ed544fd..a67834f 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -491,21 +491,6 @@
       Перевірка орфографії все ж може виконуватися за допомогою завантаженого словника. Це правило контролює лише використання онлайнової служби.
 
       Якщо цей параметр не налаштовано, користувачі можуть вибирати, чи потрібно використовувати службу перевірки орфографії.</translation>
-<translation id="2294283832646774959">Налаштовує список принтерів.
-
-      Це правило дає змогу адміністраторам налаштовувати принтери
-      своїх користувачів.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> і <ph name="PRINTER_DESCRIPTION" /> – це рядки довільної форми, які можна налаштувати, щоб легко вибирати принтери. <ph name="PRINTER_MANUFACTURER" /> і <ph name="PRINTER_MODEL" /> допомагають кінцевим користувачам розпізнавати принтери. Вони містять дані про виробника й модель принтера. <ph name="PRINTER_URI" /> має бути адресою, доступною з комп’ютера клієнта, і містити такі дані: <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> та <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> – додатковий рядок. Він допомагає видалити повтори принтерів <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> має відповідати одному з рядків принтера, який підтримує <ph name="PRODUCT_NAME" />. Цей рядок допомагає знайти й установити потрібний файл PPD для принтера. Докладніше читайте на сторінці https://support.google.com/chrome?p=noncloudprint.
-
-      Налаштування принтера завершується після його першого використання. Файли PPD не завантажуються, поки працює принтер. Після цього кешуються файли PPD, які часто використовуються.
-
-      Це правило не впливає на здатність користувачів налаштовувати принтери для окремих пристроїв. Воно доповнює такі налаштування.
-
-      Якщо пристроями керує Active Directory, це правило підтримує розширення <ph name="MACHINE_NAME_VARIABLE" /> до назви пристрою або її підрядків в Active Directory. Наприклад, якщо назва пристрою – <ph name="MACHINE_NAME_EXAMPLE" />, то <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> буде замінено 4 символами після 6-ї позиції, тобто <ph name="MACHINE_NAME_PART_EXAMPLE" />. Зауважте, що позиція починається з нуля.
-      </translation>
 <translation id="2294382669900758280">Це правило не впливає на відтворення відео в додатках Android, навіть якщо для нього встановлено значення "<ph name="TRUE" />".</translation>
 <translation id="2298647742290373702">Налаштувати сторінку нової вкладки за умовчанням у <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Указати список увімкнених плагінів</translation>
@@ -610,9 +595,6 @@
           Усі останні версії серверів Samba та Windows підтримують NTLMv2. Цей параметр потрібно вимкнути лише для зворотної сумісності, він зменшує надійність автентифікації.
 
           Якщо це правило не налаштовано, значенням за умовчанням вибирається значення true та вмикається NTLMv2.</translation>
-<translation id="2598508021807251719">Налаштовує мови, якими може відображатися <ph name="PRODUCT_OS_NAME" />.
-
-      Якщо це правило налаштовано, у <ph name="PRODUCT_OS_NAME" /> може використовуватися лише одна мова з указаних у ньому. Якщо це правило не налаштовано або для нього вказано порожній список, <ph name="PRODUCT_OS_NAME" /> може відображатися всіма підтримуваними мовами інтерфейсу. Якщо для цього правила вказано список із недійсними значеннями, усі вони ігноруватимуться. Якщо користувач раніше налаштував у <ph name="PRODUCT_OS_NAME" /> мову інтерфейсу, що забороняється цим правилом, під час наступного входу її буде змінено на дозволену. Якщо користувач вказав бажані мови й одна з них дозволена цим правилом, <ph name="PRODUCT_OS_NAME" /> використовуватиме її. В іншому випадку в <ph name="PRODUCT_OS_NAME" /> застосовуватиметься перше дійсне значення, указане в цьому правилі, або вихідна мова (наразі en-US), якщо правило містить лише недійсні значення.</translation>
 <translation id="2604182581880595781">Налаштовує правила, пов’язані зі спільними мережевими файлами.</translation>
 <translation id="2623014935069176671">Чекати на першу дію користувача</translation>
 <translation id="262740370354162807">Дозволяє надсилати документи в службу <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1474,13 +1456,6 @@
 <translation id="5130288486815037971">Коли набори шрифтів RC4 в TLS увімкнено</translation>
 <translation id="5141670636904227950">Установити тип лупи за умовчанням, яка вмикається на екрані входу</translation>
 <translation id="5142301680741828703">Завжди відтворювати перелічені шаблони URL-адрес у <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Визначає ім’я хосту пристрою, використане у запитах DHCP.
-
-      Якщо для цього правила вибрано непорожній рядок, цей рядок використовуватиметься як ім’я хосту пристрою під час запитів DHCP.
-
-      Рядок може містити змінні ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, які буде замінено значеннями на пристрої перед іменем хосту. Нове значення має бути дійсним іменем хосту (відповідно до документа RFC 1035, розділ 3.1).
-
-      Якщо це правило не налаштовано або замінене значення не є іменем хосту, це означає, що в запиті DHCP не буде налаштовано ім’я хосту. </translation>
 <translation id="5148753489738115745">Дозволяє вказувати додаткові параметри, які використовуються, коли <ph name="PRODUCT_FRAME_NAME" /> запускає <ph name="PRODUCT_NAME" />.
 
           Якщо це правило не встановлено, буде використовуватися командний рядок за умовчанням.</translation>
@@ -1707,7 +1682,6 @@
 <translation id="5835124959204887277">Указує URL-адреси й домени, де з’являтимуться запити, якщо потрібно вказати сертифікати засвідчення ключів безпеки. Крім цього, у ключ безпеки надсилатиметься сигнал про можливість окремого засвідчення. Без цього сигналу в Chrome 65+ з’являтиметься запит, коли сайти вимагатимуть засвідчення ключів безпеки.
 
       URL-адреси (як-от https://example.com/some/path) збігатимуться лише як ідентифікатори додатків U2F. Домени (як-от example.com) збігатимуться лише як ідентифікатори веб-автентифікації RP. Щоб отримати збіги для API U2F і веб-автентифікації на певному сайті, потрібно вказати URL-адресу ідентифікатора додатків і домен.</translation>
-<translation id="5835412847081687053">Налаштовує дозволені мови інтерфейсу в сеансі користувача</translation>
 <translation id="5836064773277134605">Обмежити діапазон порту UDP, який використовується хостом віддаленого доступу</translation>
 <translation id="5862253018042179045">Налаштувати стан за умовчанням для функції доступності голосових підказок на екрані входу.
 
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 3a29f7c..75ae9c1 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -498,21 +498,6 @@
       Kiểm tra lỗi chính tả có thể vẫn được thực hiện bằng từ điển đã tải xuống; chính sách này chỉ kiểm soát việc sử dụng dịch vụ trực tuyến.
 
       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="2294283832646774959">Định cấu hình danh sách máy in.
-
-      Chính sách này cho phép các quản trị viên cung cấp cấu hình máy in cho
-      người dùng của mình.
-
-      <ph name="PRINTER_DISPLAY_NAME" /> và <ph name="PRINTER_DESCRIPTION" /> là các chuỗi dạng tự do có thể tùy chỉnh để dễ dàng chọn máy in. <ph name="PRINTER_MANUFACTURER" /> và <ph name="PRINTER_MODEL" /> biểu thị nhà sản xuất và kiểu máy in, giúp người dùng cuối dễ dàng nhận diện máy in. <ph name="PRINTER_URI" /> phải là địa chỉ có thể truy cập từ một máy khách bao gồm <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> và <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> là tùy chọn. Nếu được cung cấp, tùy chọn này sẽ được sử dụng để giúp loại bỏ trùng lặp máy in <ph name="ZEROCONF_DISCOVERY" />.
-
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> phải khớp với một trong các chuỗi đại diện cho một máy in được hỗ trợ <ph name="PRODUCT_NAME" />. Chuỗi này sẽ được sử dụng để nhận diện và cài đặt PPD phù hợp cho máy in. Bạn có thể tìm thêm thông tin tại https://support.google.com/chrome?p=noncloudprint.
-
-      Thiết lập máy in được hoàn tất trong lần đầu tiên sử dụng máy in.  PPD sẽ không được tải xuống cho đến khi máy in được sử dụng. Sau lần đó, các PPD sử dụng thường xuyên sẽ được lưu vào bộ nhớ đệm.
-
-      Chính sách này không ảnh hưởng đến việc người dùng có thể định cấu hình máy in trên các thiết bị cá nhân hay không.  Chính sách này nhằm bổ sung cho quá trình định cấu hình máy in của người dùng cá nhân.
-
-      Đối với các thiết bị được quản lý bằng Active Directory, chính sách này hỗ trợ mở rộng <ph name="MACHINE_NAME_VARIABLE" /> thành tên máy Active Directory hoặc chuỗi con của tên máy đó. Ví dụ: nếu tên máy là <ph name="MACHINE_NAME_EXAMPLE" />, thì <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> sẽ được thay thế bằng 4 ký tự bắt đầu sau vị trí thứ 6, có nghĩa là <ph name="MACHINE_NAME_PART_EXAMPLE" />. Lưu ý rằng vị trí này dựa trên giá trị 0.
-      </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="2298647742290373702">Định cấu hình trang Tab mới mặc định trong <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2299220924812062390">Chỉ định danh sách plugin được phép</translation>
@@ -622,9 +607,6 @@
           Tất cả phiên bản gần đây của máy chủ Samba và Windows đều hỗ trợ NTLMv2. Chỉ nên tắt cài đặt này trong trường hợp muốn có khả năng tương thích ngược và giảm tính bảo mật của quá trình xác thực.
 
           Nếu bạn chưa đặt chính sách này thì mặc định sẽ là true và NTLMv2 được bật.</translation>
-<translation id="2598508021807251719">Định cấu hình các ngôn ngữ có thể hiển thị trong <ph name="PRODUCT_OS_NAME" />.
-
-      Nếu đặt chính sách này, thì người dùng chỉ có thể định cấu hình hiển thị <ph name="PRODUCT_OS_NAME" /> bằng một trong các ngôn ngữ mà chính sách này chỉ định. Nếu không đặt hoặc đặt chính sách này thành một danh sách trống, thì có thể hiển thị <ph name="PRODUCT_OS_NAME" /> bằng tất cả các ngôn ngữ giao diện người dùng được hỗ trợ. Nếu đặt chính sách này thành một danh sách gồm các giá trị không hợp lệ, thì tất cả các giá trị không hợp lệ sẽ bị bỏ qua. Nếu trước đây người dùng đã định cấu hình hiển thị <ph name="PRODUCT_OS_NAME" /> bằng một ngôn ngữ không được chính sách này cho phép, thì ngôn ngữ hiển thị sẽ được chuyển thành một ngôn ngữ giao diện người dùng được phép trong lần tiếp theo người dùng đăng nhập. Nếu người dùng đã định cấu hình các ngôn ngữ ưu tiên và chính sách này cho phép sử dụng một trong các ngôn ngữ ưu tiên đó, thì <ph name="PRODUCT_OS_NAME" /> sẽ chuyển sang ngôn ngữ đó. Nếu không, <ph name="PRODUCT_OS_NAME" /> sẽ chuyển sang giá trị hợp lệ đầu tiên được chính sách này chỉ định hoặc chuyển về ngôn ngữ dự phòng (hiện đang là en-US), nếu chính sách này chỉ chứa các mục không hợp lệ.</translation>
 <translation id="2604182581880595781">Định cấu hình các chính sách liên quan đến tính năng Chia sẻ tệp trong mạng.</translation>
 <translation id="2623014935069176671">Đợi hoạt động người dùng đầu tiên</translation>
 <translation id="262740370354162807">Cho phép gửi tài liệu tới <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1516,13 +1498,6 @@
 <translation id="5130288486815037971">Bộ mã hóa RC4 trong TLS có được bật không</translation>
 <translation id="5141670636904227950">Đặt loại kính lúp màn hình mặc định được bật trên màn hình đăng nhập</translation>
 <translation id="5142301680741828703">Luôn hiển thị các mẫu URL sau đây trong <ph name="PRODUCT_FRAME_NAME" /></translation>
-<translation id="5147665094011258322">Xác định tên máy chủ của thiết bị sử dụng trong yêu cầu DHCP.
-
-      Nếu bạn đặt chính sách này thành chuỗi có nội dung thì chuỗi đó sẽ được sử dụng làm tên máy chủ của thiết bị trong quá trình yêu cầu DHCP.
-
-      Chuỗi có thể chứa các biến ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} sẽ được thay thế bằng các giá trị trên thiết bị trước khi sử dụng làm tên máy chủ. Biến thay thế thu được sẽ là tên máy chủ hợp lệ (theo RFC 1035, mục 3.1).
-
-      Nếu bạn không đặt chính sách này hoặc giá trị sau biến thay thế không phải là tên máy chủ hợp lệ thì tên máy chủ sẽ không được đặt trong yêu cầu DHCP. </translation>
 <translation id="5148753489738115745">Cho phép bạn chỉ định tham số bổ sung được sử dụng khi <ph name="PRODUCT_FRAME_NAME" /> chạy <ph name="PRODUCT_NAME" />.
 
           Nếu chính sách này không được đặt, dòng lệnh mặc định sẽ được sử dụng.</translation>
@@ -1776,7 +1751,6 @@
 <translation id="5835124959204887277">Chỉ định các URL và miền để lời nhắc không hiển thị khi chứng chỉ chứng thực từ Khóa bảo mật được yêu cầu. Ngoài ra, một tín hiệu sẽ được gửi đến Khóa bảo mật cho biết rằng có thể sử dụng chứng thực cá nhân. Nếu không có tín hiệu này, trên trình duyệt Chrome 65 trở lên, người dùng sẽ được nhắc khi trang web yêu cầu chứng thực của Khóa bảo mật.
 
       Các URL (như https://example.com/some/path) sẽ chỉ khớp dưới dạng U2F appID. Các miền (như example.com) chỉ khớp dưới dạng ID RP webauthn. Do đó, để bao gồm cả API U2F và API webauthn cho một trang web cho trước, cần liệt kê cả miền và URL appID.</translation>
-<translation id="5835412847081687053">Định cấu hình ngôn ngữ giao diện người dùng được phép trong phiên người dùng</translation>
 <translation id="5836064773277134605">Hạn chế phạm vi cổng UDP được máy chủ truy cập từ xa sử dụng</translation>
 <translation id="5862253018042179045">Đặt trạng thái mặc định của tính năng trợ năng phản hồi bằng giọng nói trên màn hình đăng nhập.
 
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 245a322..4ea9d8c 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -453,20 +453,6 @@
       使用已下载的字典,仍然可以进行拼写检查,此策略仅控制在线服务的使用情况。
 
       如果未配置此设置,那么用户可以选择是否使用拼写检查服务。</translation>
-<translation id="2294283832646774959">配置打印机列表。
-
-      通过此政策,管理员可为他们的用户提供打印机配置。
-
-      “<ph name="PRINTER_DISPLAY_NAME" />”和“<ph name="PRINTER_DESCRIPTION" />”均是自由格式的字符串,且均可被自定义以便于选择打印机。“<ph name="PRINTER_MANUFACTURER" />”和“<ph name="PRINTER_MODEL" />”则可帮助最终用户轻松地识别打印机。它们分别代表打印机的制造商和型号。“<ph name="PRINTER_URI" />”应是可通过客户端计算机访问的地址,包括“<ph name="URI_SCHEME" />”、“<ph name="URI_PORT" />”和“<ph name="URI_QUEUE" />”。“<ph name="PRINTER_UUID" />”是可选项。如果提供的话,该项可用于帮助删除重复的“<ph name="ZEROCONF_DISCOVERY" />”打印机。
-
-      “<ph name="PRINTER_EFFECTIVE_MODEL" />”必须与代表 <ph name="PRODUCT_NAME" />所支持打印机的某个字符串匹配。该字符串将会被用来识别和为打印机安装相应的 PPD。如需了解详情,请访问 https://support.google.com/chrome?p=noncloudprint。
-
-      打印机设置会在用户首次使用打印机时完成。在用户开始使用打印机之前,系统不会下载 PPD。在用户开始使用打印机之后,系统则会缓存经常使用的 PPD。
-
-      此政策对用户能否在各台设备上配置打印机没有影响。它旨在对各用户的打印机配置进行补充。
-
-      对于由 Active Directory 托管的设备,此政策支持将“<ph name="MACHINE_NAME_VARIABLE" />”扩展为 Active Directory 机器名称或其子字符串。例如,如果机器名称是“<ph name="MACHINE_NAME_EXAMPLE" />”,则“<ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />”将被替换为第 6 个位置后面的 4 个字符(即 <ph name="MACHINE_NAME_PART_EXAMPLE" />)。请注意,位置序数从 0 起算。
-      </translation>
 <translation id="2294382669900758280">即使此政策设为 <ph name="TRUE" />,系统也不会考虑在 Android 应用中播放视频。</translation>
 <translation id="2298647742290373702">在 <ph name="PRODUCT_NAME" /> 中配置默认的“打开新的标签页”页面。</translation>
 <translation id="2299220924812062390">指定已启用插件的列表</translation>
@@ -571,9 +557,6 @@
           近期推出的所有 Samba 和 Windows 服务器版本都支持 NTLMv2。除非是为了实现向后兼容,否则请勿停用 NTLMv2(因为这样做会降低身份验证的安全性)。
 
           如果未设置此政策,则默认值为 true,且系统会启用 NTLMv2。</translation>
-<translation id="2598508021807251719">配置 <ph name="PRODUCT_OS_NAME" />可以使用哪些语言区域进行显示。
-
-      如果已设置此政策,则用户只能将 <ph name="PRODUCT_OS_NAME" />配置为使用此政策中指定的语言区域之一进行显示。如果此政策设为空列表或未设置,则 <ph name="PRODUCT_OS_NAME" />可以使用所有受支持的界面语言区域进行显示。如果此政策设为一个包含无效值的列表,则系统会忽略所有无效值。如果用户曾将 <ph name="PRODUCT_OS_NAME" />配置为使用此政策所不允许的某种语言区域进行显示,那么当用户下次登录时,相应的显示语言区域将会切换到所允许的某种界面语言区域。如果用户已配置了首选语言区域,并且此政策允许其中的某一种首选语言区域,<ph name="PRODUCT_OS_NAME" />将会切换到此语言区域。否则,<ph name="PRODUCT_OS_NAME" />将会切换到此政策中指定的第一个有效值;如果此政策所含的条目都无效,就会切换到后备语言区域(目前为 en-US)。</translation>
 <translation id="2604182581880595781">配置网络文件共享功能相关政策。</translation>
 <translation id="2623014935069176671">等待首个用户活动</translation>
 <translation id="262740370354162807">允许将文档提交到 <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -1427,13 +1410,6 @@
 <translation id="5130288486815037971">是否在 TLS 中启用 RC4 加密套件</translation>
 <translation id="5141670636904227950">设置登录屏幕上启用的默认放大镜类型</translation>
 <translation id="5142301680741828703">总是通过“<ph name="PRODUCT_FRAME_NAME" />”呈现以下网址格式</translation>
-<translation id="5147665094011258322">确定在 DHCP 请求中使用的设备主机名。
-
-      如果此政策设为非空字符串,该字符串将用作 DHCP 请求中的设备主机名。
-
-      该字符串可以包含变量 ${ASSET_ID}、${SERIAL_NUM}、${MAC_ADDR}。系统会先将这些变量替换为设备上的相应值,然后再将该字符串用作主机名。替换后的字符串应为有效的主机名(符合 RFC 1035 第 3.1 节中的规定)。
-
-      如果此政策未设置,或替换后的值不是有效的主机名,系统将不会在 DHCP 请求中设置主机名。 </translation>
 <translation id="5148753489738115745">可让您指定在 <ph name="PRODUCT_FRAME_NAME" />启动 <ph name="PRODUCT_NAME" />时所使用的其他参数。
 
           如果未设置此政策,系统将会使用默认命令行。</translation>
@@ -1657,7 +1633,6 @@
 <translation id="5835124959204887277">指定网址和网域,当相应网站需要取得安全密钥认证证书时,系统将不会显示任何提示。此外,系统还将向安全密钥发送信号,以指明可能会使用个人认证。如果未设置此政策,当网站需要取得安全密钥认证时,Chrome 65+ 将会提示用户。
 
       网址(如 https://example.com/some/path)将仅匹配为 U2F appID。网域(如 example.com)将仅匹配为 webauthn RP ID。因此,要同时涵盖指定网址的 U2F 和 webauthn API,必须同时列出 appID 网址和网域。</translation>
-<translation id="5835412847081687053">配置可在用户会话中使用的界面语言区域</translation>
 <translation id="5836064773277134605">限制远程访问主机使用的UDP端口范围</translation>
 <translation id="5862253018042179045">设置登录屏幕上语音反馈辅助功能的默认状态。
 
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 7830ba94..ae75c2e 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -474,21 +474,6 @@
       你仍可使用下載的字典執行拼字檢查,這項政策僅可控制是否使用線上服務。
 
       如果你並未設置這項設定,則使用者可自行選擇是否要使用拼字檢查服務。</translation>
-<translation id="2294283832646774959">設定印表機清單。
-
-      這項政策可讓管理員為每位使用者提供
-      印表機設定。
-
-      「<ph name="PRINTER_DISPLAY_NAME" />」和「<ph name="PRINTER_DESCRIPTION" />」是形式不拘的字串,可加以自訂方便選擇印表機。「<ph name="PRINTER_MANUFACTURER" />」和「<ph name="PRINTER_MODEL" />」則可讓使用者輕鬆識別印表機,兩者分別代表印表機的製造商和型號。「<ph name="PRINTER_URI" />」必須是可透過用戶端電腦連上的位址 (包括「<ph name="URI_SCHEME" />」、「<ph name="URI_PORT" />」和「<ph name="URI_QUEUE" />」)。「<ph name="PRINTER_UUID" />」可選用。如有提供,則會用於協助複製「<ph name="ZEROCONF_DISCOVERY" />」印表機。
-
-      「<ph name="PRINTER_EFFECTIVE_MODEL" />」必須是其中一個代表 <ph name="PRODUCT_NAME" /> 支援印表機的字串。系統會利用這個字串找出印表機適用的 PPD 並加以安裝。詳情請參閱 https://support.google.com/chrome?p=noncloudprint。
-
-      首次使用印表機時,會完成印表機設定程序。PPD 則會在使用該印表機時才下載,之後系統會快取常用的 PPD。
-
-      這項政策旨在補足個別使用者的印表機設定,對使用者能否在個別裝置上設定印表機沒有影響。
-
-      如果是受管理的 Active Directory 裝置,這項政策支援將「<ph name="MACHINE_NAME_VARIABLE" />」擴充為 Active Directory 電腦名稱或其子字串。舉例來說,如果電腦名稱為「<ph name="MACHINE_NAME_EXAMPLE" />」,「<ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />」將會被第 6 個位置後的 4 個字元取代 (亦即「<ph name="MACHINE_NAME_PART_EXAMPLE" />」)。請注意,位置序數從 0 開始計算。
-      </translation>
 <translation id="2294382669900758280">即使將這項政策設為 <ph name="TRUE" />,在 Android 應用程式中播放的影片仍不會受到影響。</translation>
 <translation id="2298647742290373702">設定 <ph name="PRODUCT_NAME" /> 的預設新分頁。</translation>
 <translation id="2299220924812062390">指定停用的外掛程式清單</translation>
@@ -593,9 +578,6 @@
           近期的所有 Samba 和 Windows 伺服器版本均支援 NTLMv2。除非是為了回溯相容性的緣故,否則請勿停用這項功能 (驗證功能的安全性會因此下降)。
 
           如果未設定這項政策,則預設值為 true 且系統將啟用 NTLMv2。</translation>
-<translation id="2598508021807251719">控制 <ph name="PRODUCT_OS_NAME" />顯示語言的語言代碼。
-
-      如果設定這項政策,使用者就只能將 <ph name="PRODUCT_OS_NAME" />的顯示語言設為這項政策指定的其中一個語言代碼。如果未設定這項政策,或是設定了空白清單,則可將 <ph name="PRODUCT_OS_NAME" />的顯示語言設為任一支援的語言代碼。如果將這項政策設為無效值清單,所有無效的值都會遭到忽略。如果使用者先前設定的 <ph name="PRODUCT_OS_NAME" />顯示語言代碼不是這項政策所允許的值,當使用者下次登入時,顯示語言代碼將切換成允許的 UI 語言代碼。如果使用者已設定偏好的語言代碼,而其中一個偏好的語言代碼是這項政策所允許的值,<ph name="PRODUCT_OS_NAME" />將改用該語言代碼,否則 <ph name="PRODUCT_OS_NAME" />將改用這項政策指定的第一個有效值,或是在這項政策指定的值均無效時改用備用語言代碼 (目前為 en-US)。</translation>
 <translation id="2604182581880595781">設定網路檔案共用功能相關政策。</translation>
 <translation id="2623014935069176671">等待初始使用者活動</translation>
 <translation id="262740370354162807">啟用「<ph name="CLOUD_PRINT_NAME" />」文件提交功能</translation>
@@ -1459,13 +1441,6 @@
 <translation id="5130288486815037971">是否在 TLS 中啟用 RC4 加密套件</translation>
 <translation id="5141670636904227950">設定啟用的螢幕放大鏡在登入畫面的預設類型</translation>
 <translation id="5142301680741828703">一律轉譯下列 <ph name="PRODUCT_FRAME_NAME" /> 中的網址模式</translation>
-<translation id="5147665094011258322">決定 DHCP 要求中所用的裝置主機名稱。
-
-      如果將這項政策的值設為非空白字串,該字串將成為 DHCP 要求中的裝置主機名稱。
-
-      該字串可包含 ${ASSET_ID}、${SERIAL_NUM}、${MAC_ADDR} 變數。這些變數可替換成對應的裝置屬性值,再供系統使用字串做為主機名稱。不過,替換後必須產生有效的主機名稱 (以 RFC 1035 文件第 3.1 條規定為準)。
-
-      如果未設定這項政策,或者經替換後的值不是有效的主機名稱,系統將不會在 DHCP 要求中設定主機名稱。 </translation>
 <translation id="5148753489738115745">允許你指定 <ph name="PRODUCT_FRAME_NAME" /> 啟動 <ph name="PRODUCT_NAME" /> 時使用的其他參數。
 
           如果未設定這項政策,系統會使用預設命令列。</translation>
@@ -1692,7 +1667,6 @@
 <translation id="5835124959204887277">指定在必須取得安全金鑰認證憑證的情況下不會顯示提示的網址和網域。此外,系統會傳送信號給安全金鑰,指出可能會使用個別認證。如未設定這項政策,當網站要求安全金鑰認證時,Chrome 65 以上版本的使用者會收到提示。
 
       網址 (例如 https://example.com/some/path) 只會比對為 U2F appID,網域 (例如 example.com) 則只會比對為 WebAuthn RP ID。因此,如要同時涵蓋指定網站的 U2F API 和 WebAuthn API,必須一併列出 appID 網址和網域。</translation>
-<translation id="5835412847081687053">設定可在使用者工作階段中使用的 UI 語言代碼</translation>
 <translation id="5836064773277134605">限制遠端存取主機所使用的 UDP 通訊埠範圍</translation>
 <translation id="5862253018042179045">設定互動朗讀協助功能在登入畫面的預設狀態。
 
diff --git a/components/search_engines/search_engine_data_type_controller_unittest.cc b/components/search_engines/search_engine_data_type_controller_unittest.cc
index 4d337524..517fd3e 100644
--- a/components/search_engines/search_engine_data_type_controller_unittest.cc
+++ b/components/search_engines/search_engine_data_type_controller_unittest.cc
@@ -139,7 +139,7 @@
   Start();
   EXPECT_EQ(syncer::DataTypeController::FAILED, search_engine_dtc_.state());
   EXPECT_FALSE(syncable_service_.syncing());
-  search_engine_dtc_.Stop(syncer::KEEP_METADATA);
+  search_engine_dtc_.Stop(syncer::STOP_SYNC);
   EXPECT_EQ(syncer::DataTypeController::NOT_RUNNING,
             search_engine_dtc_.state());
   EXPECT_FALSE(syncable_service_.syncing());
@@ -156,7 +156,7 @@
   Start();
   EXPECT_EQ(syncer::DataTypeController::RUNNING, search_engine_dtc_.state());
   EXPECT_TRUE(syncable_service_.syncing());
-  search_engine_dtc_.Stop(syncer::KEEP_METADATA);
+  search_engine_dtc_.Stop(syncer::STOP_SYNC);
   EXPECT_EQ(syncer::DataTypeController::NOT_RUNNING,
             search_engine_dtc_.state());
   // AsyncDirectoryTypeController::Stop posts call to StopLocalService to model
@@ -175,7 +175,7 @@
   EXPECT_EQ(syncer::DataTypeController::MODEL_STARTING,
             search_engine_dtc_.state());
   EXPECT_FALSE(syncable_service_.syncing());
-  search_engine_dtc_.Stop(syncer::KEEP_METADATA);
+  search_engine_dtc_.Stop(syncer::STOP_SYNC);
   EXPECT_EQ(nullptr, search_engine_dtc_.GetSubscriptionForTesting());
   EXPECT_EQ(syncer::DataTypeController::NOT_RUNNING,
             search_engine_dtc_.state());
diff --git a/components/signin/core/browser/about_signin_internals.cc b/components/signin/core/browser/about_signin_internals.cc
index dee77ac..3f45aab 100644
--- a/components/signin/core/browser/about_signin_internals.cc
+++ b/components/signin/core/browser/about_signin_internals.cc
@@ -91,8 +91,6 @@
 std::string TokenServiceLoadCredentialsStateToLabel(
     OAuth2TokenServiceDelegate::LoadCredentialsState state) {
   switch (state) {
-    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_UNKNOWN:
-      return "Unknown";
     case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_NOT_STARTED:
       return "Load credentials not started";
     case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS:
@@ -534,7 +532,7 @@
   AddSectionEntry(basic_info, "Signin Status",
       signin_manager->IsAuthenticated() ? "Signed In" : "Not Signed In");
   OAuth2TokenServiceDelegate::LoadCredentialsState load_tokens_state =
-      token_service->GetDelegate()->GetLoadCredentialsState();
+      token_service->GetDelegate()->load_credentials_state();
   AddSectionEntry(basic_info, "TokenService Load Status",
                   TokenServiceLoadCredentialsStateToLabel(load_tokens_state));
 
diff --git a/components/signin/core/browser/account_reconcilor_unittest.cc b/components/signin/core/browser/account_reconcilor_unittest.cc
index a8311c3..b449309 100644
--- a/components/signin/core/browser/account_reconcilor_unittest.cc
+++ b/components/signin/core/browser/account_reconcilor_unittest.cc
@@ -343,6 +343,7 @@
                       &cookie_manager_service_) {
 #endif
   AccountTrackerService::RegisterPrefs(pref_service_.registry());
+  ProfileOAuth2TokenService::RegisterProfilePrefs(pref_service_.registry());
   SigninManagerBase::RegisterProfilePrefs(pref_service_.registry());
   SigninManagerBase::RegisterPrefs(pref_service_.registry());
   pref_service_.registry()->RegisterBooleanPref(
diff --git a/components/signin/core/browser/android/BUILD.gn b/components/signin/core/browser/android/BUILD.gn
index 69db557..f52ad9c7 100644
--- a/components/signin/core/browser/android/BUILD.gn
+++ b/components/signin/core/browser/android/BUILD.gn
@@ -66,7 +66,6 @@
     "//third_party/android_deps:android_support_annotations_java",
     "//third_party/jsr-305:jsr_305_javalib",
     "//third_party/junit",
-    "//third_party/mockito:mockito_java",
   ]
 
   java_files = [ "javatests/src/org/chromium/components/signin/test/AccountManagerFacadeTest.java" ]
diff --git a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerFacade.java b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
index ee4bda5..00a8033 100644
--- a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
+++ b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
@@ -93,6 +93,8 @@
             new CachedMetrics.TimesHistogramSample(
                     "Signin.AndroidPopulateAccountCacheWaitingTime", TimeUnit.MILLISECONDS);
 
+    private final ArrayList<Runnable> mCallbacksWaitingForCachePopulation = new ArrayList<>();
+
     private int mUpdateTasksCounter;
     private final ArrayList<Runnable> mCallbacksWaitingForPendingUpdates = new ArrayList<>();
 
@@ -223,6 +225,34 @@
     }
 
     /**
+     * Runs a callback after the account list cache is populated. In the callback
+     * {@link #getGoogleAccounts()} and similar methods are guaranteed to return instantly (without
+     * blocking and waiting for the cache to be populated). If the cache has already been populated,
+     * the callback will be posted on UI thread.
+     * @param runnable The callback to call after cache is populated. Invoked on the main thread.
+     */
+    @MainThread
+    @VisibleForTesting
+    public void runAfterCacheIsPopulated(Runnable runnable) {
+        ThreadUtils.assertOnUiThread();
+        if (isCachePopulated()) {
+            ThreadUtils.postOnUiThread(runnable);
+            return;
+        }
+        mCallbacksWaitingForCachePopulation.add(runnable);
+    }
+
+    /**
+     * Returns whether the account cache has already been populated. {@link #getGoogleAccounts()}
+     * and similar methods will return instantly if the cache has been populated, otherwise these
+     * methods may block waiting for the cache to be populated.
+     */
+    @AnyThread
+    public boolean isCachePopulated() {
+        return mFilteredAccounts.get() != null;
+    }
+
+    /**
      * Retrieves a list of the Google account names on the device.
      *
      * @throws AccountManagerDelegateException if Google Play Services are out of date,
@@ -255,13 +285,7 @@
      */
     @MainThread
     public void tryGetGoogleAccountNames(final Callback<List<String>> callback) {
-        tryGetGoogleAccounts(accounts -> {
-            List<String> accountNames = new ArrayList<>();
-            for (Account account : accounts) {
-                accountNames.add(account.name);
-            }
-            callback.onResult(accountNames);
-        });
+        runAfterCacheIsPopulated(() -> callback.onResult(tryGetGoogleAccountNames()));
     }
 
     /**
@@ -270,7 +294,8 @@
     @MainThread
     public void getGoogleAccountNames(
             final Callback<AccountManagerResult<List<String>>> callback) {
-        getGoogleAccounts(accounts -> {
+        runAfterCacheIsPopulated(() -> {
+            final AccountManagerResult<Account[]> accounts = mFilteredAccounts.get();
             final AccountManagerResult<List<String>> result;
             if (accounts.hasValue()) {
                 List<String> accountNames = new ArrayList<>(accounts.getValue().length);
@@ -286,16 +311,6 @@
     }
 
     /**
-     * Returns whether the account cache has already been populated. {@link #getGoogleAccounts()}
-     * and similar methods will return instantly if the cache has been populated, otherwise these
-     * methods may block waiting for the cache to be populated.
-     */
-    @AnyThread
-    public boolean isCachePopulated() {
-        return mFilteredAccounts.get() != null;
-    }
-
-    /**
      * Retrieves all Google accounts on the device.
      *
      * @throws AccountManagerDelegateException if Google Play Services are out of date,
@@ -324,28 +339,9 @@
     /**
      * Asynchronous version of {@link #getGoogleAccounts()}.
      */
-    // Incorrectly infers that this is called on a worker thread because of AsyncTask doInBackground
-    // overriding.
-    @SuppressWarnings("WrongThread")
     @MainThread
     public void getGoogleAccounts(final Callback<AccountManagerResult<Account[]>> callback) {
-        ThreadUtils.assertOnUiThread();
-        new AsyncTask<AccountManagerResult<Account[]>>() {
-            @Override
-            protected AccountManagerResult<Account[]> doInBackground() {
-                try {
-                    return new AccountManagerResult<>(getGoogleAccounts());
-                } catch (AccountManagerDelegateException ex) {
-                    return new AccountManagerResult<>(ex);
-                }
-            }
-
-            @Override
-            protected void onPostExecute(AccountManagerResult<Account[]> accounts) {
-                callback.onResult(accounts);
-            }
-        }
-                .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+        runAfterCacheIsPopulated(() -> callback.onResult(mFilteredAccounts.get()));
     }
 
     /**
@@ -364,24 +360,9 @@
     /**
      * Asynchronous version of {@link #tryGetGoogleAccounts()}.
      */
-    // Incorrectly infers that this is called on a worker thread because of AsyncTask doInBackground
-    // overriding.
-    @SuppressWarnings("WrongThread")
     @MainThread
     public void tryGetGoogleAccounts(final Callback<Account[]> callback) {
-        ThreadUtils.assertOnUiThread();
-        new AsyncTask<Account[]>() {
-            @Override
-            protected Account[] doInBackground() {
-                return tryGetGoogleAccounts();
-            }
-
-            @Override
-            protected void onPostExecute(Account[] accounts) {
-                callback.onResult(accounts);
-            }
-        }
-                .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+        runAfterCacheIsPopulated(() -> callback.onResult(tryGetGoogleAccounts()));
     }
 
     /**
@@ -398,7 +379,7 @@
      */
     @MainThread
     public void hasGoogleAccounts(final Callback<Boolean> callback) {
-        tryGetGoogleAccounts(accounts -> callback.onResult(accounts.length > 0));
+        runAfterCacheIsPopulated(() -> callback.onResult(hasGoogleAccounts()));
     }
 
     private String canonicalizeName(String name) {
@@ -435,17 +416,7 @@
      */
     @MainThread
     public void getAccountFromName(String accountName, final Callback<Account> callback) {
-        final String canonicalName = canonicalizeName(accountName);
-        tryGetGoogleAccounts(accounts -> {
-            Account accountForName = null;
-            for (Account account : accounts) {
-                if (canonicalizeName(account.name).equals(canonicalName)) {
-                    accountForName = account;
-                    break;
-                }
-            }
-            callback.onResult(accountForName);
-        });
+        runAfterCacheIsPopulated(() -> callback.onResult(getAccountFromName(accountName)));
     }
 
     /**
@@ -464,7 +435,7 @@
     @VisibleForTesting
     @MainThread
     public void hasAccountForName(String accountName, final Callback<Boolean> callback) {
-        getAccountFromName(accountName, account -> callback.onResult(account != null));
+        runAfterCacheIsPopulated(() -> callback.onResult(hasAccountForName(accountName)));
     }
 
     /**
@@ -746,6 +717,11 @@
 
         @Override
         protected void onPostExecute(Void v) {
+            for (Runnable callback : mCallbacksWaitingForCachePopulation) {
+                callback.run();
+            }
+            mCallbacksWaitingForCachePopulation.clear();
+
             fireOnAccountsChangedNotification();
             decrementUpdateCounter();
         }
diff --git a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AuthException.java b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AuthException.java
index 3cf4f1c..807ee2c 100644
--- a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AuthException.java
+++ b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AuthException.java
@@ -38,6 +38,17 @@
     }
 
     /**
+     * Constructs an instance without a wrapped exception, based on transience flag and message.
+     * @param isTransientError Whether the error is transient and we can retry.
+     *         Use {@link #TRANSIENT} and {@link #NONTRANSIENT} for readability.
+     * @param message Message describing context in which auth failure happened.
+     */
+    public AuthException(boolean isTransientError, String message) {
+        super(message);
+        mIsTransientError = isTransientError;
+    }
+
+    /**
      * @return Whether the error is transient and we can retry.
      */
     public boolean isTransientError() {
diff --git a/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/AccountManagerFacadeTest.java b/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/AccountManagerFacadeTest.java
index a8823d2..4c1ed67 100644
--- a/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/AccountManagerFacadeTest.java
+++ b/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/AccountManagerFacadeTest.java
@@ -4,20 +4,29 @@
 
 package org.chromium.components.signin.test;
 
-import static org.mockito.Mockito.doAnswer;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import android.accounts.Account;
+import android.accounts.AuthenticatorDescription;
+import android.app.Activity;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 
-import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mockito;
 
+import org.chromium.base.Callback;
+import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.components.signin.AccountManagerDelegate;
 import org.chromium.components.signin.AccountManagerDelegateException;
 import org.chromium.components.signin.AccountManagerFacade;
+import org.chromium.components.signin.AccountsChangeObserver;
 
 import java.util.concurrent.CountDownLatch;
 
@@ -26,28 +35,106 @@
  */
 @RunWith(BaseJUnit4ClassRunner.class)
 public class AccountManagerFacadeTest {
+    private BlockingAccountManagerDelegate mDelegate = new BlockingAccountManagerDelegate();
+    // TODO(https://crbug.com/885235): Use Mockito instead when it no longer produces test errors.
+    private static class BlockingAccountManagerDelegate implements AccountManagerDelegate {
+        private final CountDownLatch mBlockGetAccounts = new CountDownLatch(1);
+
+        // getAccountsSync always returns the same accounts, so there's no way to track observers.
+        @Override
+        public void registerObservers() {}
+        @Override
+        public void addObserver(AccountsChangeObserver observer) {}
+        @Override
+        public void removeObserver(AccountsChangeObserver observer) {}
+
+        @Override
+        public Account[] getAccountsSync() {
+            // Block background thread that's trying to get accounts from the delegate.
+            try {
+                mBlockGetAccounts.await();
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+            return new Account[] {AccountManagerFacade.createAccountFromName("test@gmail.com")};
+        }
+
+        void unblockGetAccounts() {
+            mBlockGetAccounts.countDown();
+        }
+
+        @Override
+        public String getAuthToken(Account account, String authTokenScope) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void invalidateAuthToken(String authToken) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public AuthenticatorDescription[] getAuthenticatorTypes() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public boolean hasFeatures(Account account, String[] features) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void createAddAccountIntent(Callback<Intent> callback) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void updateCredentials(
+                Account account, Activity activity, @Nullable Callback<Boolean> callback) {
+            throw new UnsupportedOperationException();
+        }
+    };
+
+    @Before
+    public void setUp() throws Exception {
+        AccountManagerFacade.overrideAccountManagerFacadeForTests(mDelegate);
+    }
+
     @Test
     @SmallTest
     public void testIsCachePopulated() throws AccountManagerDelegateException {
-        AccountManagerDelegate delegate = Mockito.mock(AccountManagerDelegate.class);
-
-        final Account account = AccountManagerFacade.createAccountFromName("test@gmail.com");
-        final CountDownLatch blockGetAccounts = new CountDownLatch(1);
-        doAnswer(invocation -> {
-            // Block background thread that's trying to get accounts from the delegate.
-            blockGetAccounts.await();
-            return new Account[] {account};
-        }).when(delegate).getAccountsSync();
-
-        AccountManagerFacade.overrideAccountManagerFacadeForTests(delegate);
-        AccountManagerFacade facade = AccountManagerFacade.get();
-
         // Cache shouldn't be populated until getAccountsSync is unblocked.
-        Assert.assertFalse(facade.isCachePopulated());
+        assertFalse(AccountManagerFacade.get().isCachePopulated());
 
-        blockGetAccounts.countDown();
+        mDelegate.unblockGetAccounts();
         // Wait for cache population to finish.
         AccountManagerFacade.get().getGoogleAccounts();
-        Assert.assertTrue(facade.isCachePopulated());
+        assertTrue(AccountManagerFacade.get().isCachePopulated());
+    }
+
+    @Test
+    @SmallTest
+    public void testRunAfterCacheIsPopulated() throws InterruptedException {
+        CountDownLatch firstCounter = new CountDownLatch(1);
+        ThreadUtils.runOnUiThreadBlocking(() -> {
+            // Add callback. This should be done on the main thread.
+            AccountManagerFacade.get().runAfterCacheIsPopulated(firstCounter::countDown);
+        });
+        assertEquals("Callback shouldn't be invoked until cache is populated", 1,
+                firstCounter.getCount());
+
+        mDelegate.unblockGetAccounts();
+        // Cache should be populated & callback should be invoked
+        firstCounter.await();
+
+        CountDownLatch secondCounter = new CountDownLatch(1);
+        ThreadUtils.runOnUiThreadBlocking(() -> {
+            AccountManagerFacade.get().runAfterCacheIsPopulated(secondCounter::countDown);
+            assertEquals("Callback should be posted on UI thread, not executed synchronously", 1,
+                    secondCounter.getCount());
+        });
+        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+        assertEquals(
+                "Callback should be posted to UI thread right away", 0, secondCounter.getCount());
     }
 }
diff --git a/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java b/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java
index 22f3f3e..31777ab 100644
--- a/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java
+++ b/components/signin/core/browser/android/javatests/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java
@@ -21,6 +21,7 @@
 import org.chromium.components.signin.AccountManagerDelegateException;
 import org.chromium.components.signin.AccountManagerFacade;
 import org.chromium.components.signin.AccountsChangeObserver;
+import org.chromium.components.signin.AuthException;
 import org.chromium.components.signin.ProfileDataSource;
 
 import java.lang.annotation.Retention;
@@ -255,8 +256,12 @@
     }
 
     @Override
-    public String getAuthToken(Account account, String authTokenScope) {
-        AccountHolder ah = getAccountHolder(account);
+    public String getAuthToken(Account account, String authTokenScope) throws AuthException {
+        AccountHolder ah = tryGetAccountHolder(account);
+        if (ah == null) {
+            throw new AuthException(AuthException.NONTRANSIENT,
+                    "Cannot get auth token for unknown account '" + account + "'");
+        }
         assert ah.hasBeenAccepted(authTokenScope);
         synchronized (mAccounts) {
             // Some tests register auth tokens with value null, and those should be preserved.
@@ -327,7 +332,7 @@
         ThreadUtils.postOnUiThread(() -> callback.onResult(true));
     }
 
-    private AccountHolder getAccountHolder(Account account) {
+    private AccountHolder tryGetAccountHolder(Account account) {
         if (account == null) {
             throw new IllegalArgumentException("Account can not be null");
         }
@@ -338,6 +343,14 @@
                 }
             }
         }
-        throw new IllegalArgumentException("Can not find AccountHolder for account " + account);
+        return null;
+    }
+
+    private AccountHolder getAccountHolder(Account account) {
+        AccountHolder ah = tryGetAccountHolder(account);
+        if (ah == null) {
+            throw new IllegalArgumentException("Can not find AccountHolder for account " + account);
+        }
+        return ah;
     }
 }
diff --git a/components/signin/core/browser/fake_profile_oauth2_token_service.h b/components/signin/core/browser/fake_profile_oauth2_token_service.h
index f7cc844..b57a428 100644
--- a/components/signin/core/browser/fake_profile_oauth2_token_service.h
+++ b/components/signin/core/browser/fake_profile_oauth2_token_service.h
@@ -47,8 +47,8 @@
     base::WeakPtr<RequestImpl> request;
   };
 
-  FakeProfileOAuth2TokenService(PrefService* user_prefs);
-  explicit FakeProfileOAuth2TokenService(
+  explicit FakeProfileOAuth2TokenService(PrefService* user_prefs);
+  FakeProfileOAuth2TokenService(
       PrefService* user_prefs,
       std::unique_ptr<OAuth2TokenServiceDelegate> delegate);
   ~FakeProfileOAuth2TokenService() override;
diff --git a/components/signin/core/browser/profile_oauth2_token_service.cc b/components/signin/core/browser/profile_oauth2_token_service.cc
index 9057cd7..e840a3bf9 100644
--- a/components/signin/core/browser/profile_oauth2_token_service.cc
+++ b/components/signin/core/browser/profile_oauth2_token_service.cc
@@ -91,42 +91,45 @@
 }
 
 void ProfileOAuth2TokenService::OnRefreshTokensLoaded() {
+  DCHECK_NE(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_NOT_STARTED,
+            GetDelegate()->load_credentials_state());
+  DCHECK_NE(OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS,
+            GetDelegate()->load_credentials_state());
+
+  all_credentials_loaded_ = true;
+
   // Ensure the device ID is not empty, and recreate it if all tokens were
   // cleared during the loading process.
   RecreateDeviceIdIfNeeded();
+}
 
-  all_credentials_loaded_ = true;
+bool ProfileOAuth2TokenService::HasLoadCredentialsFinishedWithNoErrors() {
+  switch (GetDelegate()->load_credentials_state()) {
+    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_NOT_STARTED:
+    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS:
+      // LoadCredentials has not finished.
+      return false;
+    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_DB_ERRORS:
+    case OAuth2TokenServiceDelegate::
+        LOAD_CREDENTIALS_FINISHED_WITH_DECRYPT_ERRORS:
+    case OAuth2TokenServiceDelegate::
+        LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS:
+      // LoadCredentials finished, but with errors
+      return false;
+    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS:
+    case OAuth2TokenServiceDelegate::
+        LOAD_CREDENTIALS_FINISHED_WITH_NO_TOKEN_FOR_PRIMARY_ACCOUNT:
+      // Load credentials finished with success.
+      return true;
+  }
 }
 
 void ProfileOAuth2TokenService::RecreateDeviceIdIfNeeded() {
 // On ChromeOS the device ID is not managed by the token service.
 #if !defined(OS_CHROMEOS)
-  // Re-create a new device ID if needed.
-  switch (GetDelegate()->GetLoadCredentialsState()) {
-    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_UNKNOWN:
-    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_NOT_STARTED:
-    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_IN_PROGRESS:
-      // TODO(droger): Add a DCHECK here, because this would mean that the token
-      // service is being used before tokens are loaded. This currently would
-      // fire in tests though.
-      return;
-    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_DB_ERRORS:
-    case OAuth2TokenServiceDelegate::
-        LOAD_CREDENTIALS_FINISHED_WITH_DECRYPT_ERRORS:
-      // Do not recreate a new device ID if Chrome fails to decrypt tokens as it
-      // may successfully load them on the next restart.
-      return;
-    case OAuth2TokenServiceDelegate::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS:
-    case OAuth2TokenServiceDelegate::
-        LOAD_CREDENTIALS_FINISHED_WITH_NO_TOKEN_FOR_PRIMARY_ACCOUNT:
-    case OAuth2TokenServiceDelegate::
-        LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS:
-      // this is the only case when we recreate the device ID.
-      if (GetAccounts().empty())
-        signin::RecreateSigninScopedDeviceId(user_prefs_);
-      return;
+  if (AreAllCredentialsLoaded() && HasLoadCredentialsFinishedWithNoErrors() &&
+      GetAccounts().empty()) {
+    signin::RecreateSigninScopedDeviceId(user_prefs_);
   }
-
-  NOTREACHED();
 #endif
 }
diff --git a/components/signin/core/browser/profile_oauth2_token_service.h b/components/signin/core/browser/profile_oauth2_token_service.h
index f871b33..fdb4bec 100644
--- a/components/signin/core/browser/profile_oauth2_token_service.h
+++ b/components/signin/core/browser/profile_oauth2_token_service.h
@@ -61,6 +61,9 @@
   // Returns true iff all credentials have been loaded from disk.
   bool AreAllCredentialsLoaded();
 
+  // Returns true if LoadCredentials finished with no errors.
+  bool HasLoadCredentialsFinishedWithNoErrors();
+
   // Updates a |refresh_token| for an |account_id|. Credentials are persisted,
   // and available through |LoadCredentials| after service is restarted.
   virtual void UpdateCredentials(const std::string& account_id,
diff --git a/components/signin/core/browser/signin_manager.cc b/components/signin/core/browser/signin_manager.cc
index 8b250a8..8b38dc10 100644
--- a/components/signin/core/browser/signin_manager.cc
+++ b/components/signin/core/browser/signin_manager.cc
@@ -47,11 +47,6 @@
 
 SigninManager::~SigninManager() {}
 
-void SigninManager::InitTokenService() {
-  if (token_service_)
-    token_service_->LoadCredentials(GetAuthenticatedAccountId());
-}
-
 std::string SigninManager::SigninTypeToString(SigninManager::SigninType type) {
   switch (type) {
     case SIGNIN_TYPE_NONE:
@@ -297,15 +292,16 @@
                               signin_metrics::SignoutDelete::IGNORE_METRIC);
   }
 
-  if (account_tracker_service()->GetMigrationState() ==
-      AccountTrackerService::MIGRATION_IN_PROGRESS) {
-    token_service_->AddObserver(this);
-  }
-  InitTokenService();
   account_tracker_service()->AddObserver(this);
+
+  // It is important to only load credentials after starting to observe the
+  // token service.
+  token_service_->AddObserver(this);
+  token_service_->LoadCredentials(GetAuthenticatedAccountId());
 }
 
 void SigninManager::Shutdown() {
+  token_service_->RemoveObserver(this);
   account_tracker_service()->RemoveObserver(this);
   local_state_pref_registrar_.RemoveAll();
   SigninManagerBase::Shutdown();
@@ -507,9 +503,24 @@
 }
 
 void SigninManager::OnRefreshTokensLoaded() {
+  token_service_->RemoveObserver(this);
+
   if (account_tracker_service()->GetMigrationState() ==
       AccountTrackerService::MIGRATION_IN_PROGRESS) {
     account_tracker_service()->SetMigrationDone();
-    token_service_->RemoveObserver(this);
+  }
+
+  // Remove account information from the account tracker service if needed.
+  if (token_service_->HasLoadCredentialsFinishedWithNoErrors()) {
+    std::vector<AccountInfo> accounts_in_tracker_service =
+        account_tracker_service()->GetAccounts();
+    for (const auto& account : accounts_in_tracker_service) {
+      if (GetAuthenticatedAccountId() != account.account_id &&
+          !token_service_->RefreshTokenIsAvailable(account.account_id)) {
+        DVLOG(0) << "Removed account from account tracker service: "
+                 << account.account_id;
+        account_tracker_service()->RemoveAccount(account.account_id);
+      }
+    }
   }
 }
diff --git a/components/signin/core/browser/signin_manager.h b/components/signin/core/browser/signin_manager.h
index 0c9559a..ded4a94 100644
--- a/components/signin/core/browser/signin_manager.h
+++ b/components/signin/core/browser/signin_manager.h
@@ -208,9 +208,6 @@
   FRIEND_TEST_ALL_PREFIXES(SigninManagerTest, ProvideSecondFactorSuccess);
   FRIEND_TEST_ALL_PREFIXES(SigninManagerTest, ProvideSecondFactorFailure);
 
-  // If user was signed in, load tokens from DB if available.
-  void InitTokenService();
-
   // Called to setup the transient signin data during one of the
   // StartSigninXXX methods.  |type| indicates which of the methods is being
   // used to perform the signin while |username| and |password| identify the
diff --git a/components/signin/core/browser/signin_manager_unittest.cc b/components/signin/core/browser/signin_manager_unittest.cc
index 2a2b0b4d..58556a9c 100644
--- a/components/signin/core/browser/signin_manager_unittest.cc
+++ b/components/signin/core/browser/signin_manager_unittest.cc
@@ -87,6 +87,7 @@
         account_consistency_(signin::AccountConsistencyMethod::kDisabled) {
     AccountFetcherService::RegisterPrefs(user_prefs_.registry());
     AccountTrackerService::RegisterPrefs(user_prefs_.registry());
+    ProfileOAuth2TokenService::RegisterProfilePrefs(user_prefs_.registry());
     SigninManagerBase::RegisterProfilePrefs(user_prefs_.registry());
     SigninManagerBase::RegisterPrefs(local_state_.registry());
     account_tracker_.Initialize(&user_prefs_, base::FilePath());
diff --git a/components/signin/ios/browser/account_consistency_service_unittest.mm b/components/signin/ios/browser/account_consistency_service_unittest.mm
index b37e4d8..2313aefb 100644
--- a/components/signin/ios/browser/account_consistency_service_unittest.mm
+++ b/components/signin/ios/browser/account_consistency_service_unittest.mm
@@ -14,6 +14,7 @@
 #include "components/signin/core/browser/account_reconcilor.h"
 #include "components/signin/core/browser/account_reconcilor_delegate.h"
 #include "components/signin/core/browser/account_tracker_service.h"
+#include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
 #include "components/signin/core/browser/fake_signin_manager.h"
 #include "components/signin/core/browser/gaia_cookie_manager_service.h"
 #include "components/signin/core/browser/signin_pref_names.h"
@@ -142,6 +143,7 @@
     ActiveStateManager::FromBrowserState(&browser_state_)->SetActive(true);
     AccountConsistencyService::RegisterPrefs(prefs_.registry());
     AccountTrackerService::RegisterPrefs(prefs_.registry());
+    ProfileOAuth2TokenService::RegisterProfilePrefs(prefs_.registry());
     content_settings::CookieSettings::RegisterProfilePrefs(prefs_.registry());
     HostContentSettingsMap::RegisterProfilePrefs(prefs_.registry());
     SigninManagerBase::RegisterProfilePrefs(prefs_.registry());
@@ -150,8 +152,10 @@
     gaia_cookie_manager_service_.reset(new MockGaiaCookieManagerService());
     signin_client_.reset(new TestSigninClient(&prefs_));
     account_tracker_service_.Initialize(&prefs_, base::FilePath());
-    signin_manager_.reset(new FakeSigninManager(
-        signin_client_.get(), nullptr, &account_tracker_service_, nullptr));
+    token_service_.reset(new FakeProfileOAuth2TokenService(&prefs_));
+    signin_manager_.reset(
+        new FakeSigninManager(signin_client_.get(), token_service_.get(),
+                              &account_tracker_service_, nullptr));
     signin_manager_->Initialize(nullptr);
     settings_map_ = new HostContentSettingsMap(
         &prefs_, false /* incognito_profile */, false /* guest_profile */,
@@ -258,6 +262,7 @@
   // FakeAccountConsistencyService to be able to use a mock web view.
   std::unique_ptr<AccountConsistencyService> account_consistency_service_;
   std::unique_ptr<TestSigninClient> signin_client_;
+  std::unique_ptr<FakeProfileOAuth2TokenService> token_service_;
   std::unique_ptr<FakeSigninManager> signin_manager_;
   std::unique_ptr<MockGaiaCookieManagerService> gaia_cookie_manager_service_;
   std::unique_ptr<MockAccountReconcilor> account_reconcilor_;
diff --git a/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm b/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm
index 96f0fc1..c27f49c 100644
--- a/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm
+++ b/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm
@@ -206,17 +206,23 @@
     const std::string& primary_account_id) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
+  DCHECK_EQ(LOAD_CREDENTIALS_NOT_STARTED, load_credentials_state());
+  set_load_credentials_state(LOAD_CREDENTIALS_IN_PROGRESS);
+
   // Clean-up stale data from prefs.
   ClearExcludedSecondaryAccounts();
 
   if (primary_account_id.empty()) {
     // On startup, always fire refresh token loaded even if there is nothing
     // to load (not authenticated).
+    set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
     FireRefreshTokensLoaded();
     return;
   }
 
   ReloadCredentials(primary_account_id);
+
+  set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
   FireRefreshTokensLoaded();
 }
 
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 4a29179..c96a6f0 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -314,7 +314,7 @@
 <translation id="3083099961703215236">{COUNT,plural, =0{ללא}=1{סיסמה אחת}two{שתי סיסמאות}many{# סיסמאות}other{# סיסמאות}}</translation>
 <translation id="3096100844101284527">הוספת כתובת לאיסוף</translation>
 <translation id="3105172416063519923">מזהה נכס:</translation>
-<translation id="3109728660330352905">אין לך הרשאה להציג את הדף הזה.</translation>
+<translation id="3109728660330352905">אין לך הרשאה לצפות בדף הזה.</translation>
 <translation id="3120730422813725195">Elo</translation>
 <translation id="31207688938192855"><ph name="BEGIN_LINK" />נסה להפעיל את אבחון הקישוריות<ph name="END_LINK" />.</translation>
 <translation id="3145945101586104090">פענוח התגובה נכשל</translation>
@@ -679,7 +679,7 @@
 <translation id="5540224163453853">לא ניתן היה למצוא את הפריט המבוקש.</translation>
 <translation id="5541546772353173584">הוספת כתובת אימייל</translation>
 <translation id="5545756402275714221">מאמרים שעשויים לעניין אותך</translation>
-<translation id="5556459405103347317">טען שוב</translation>
+<translation id="5556459405103347317">ניסיון טעינה נוסף</translation>
 <translation id="5560088892362098740">תאריך תפוגה</translation>
 <translation id="5565735124758917034">פעיל</translation>
 <translation id="5571083550517324815">לא ניתן לבצע איסוף מהכתובת הזו. עליך לבחור כתובת אחרת.</translation>
diff --git a/components/sync/driver/async_directory_type_controller.cc b/components/sync/driver/async_directory_type_controller.cc
index f91881f..13ed256 100644
--- a/components/sync/driver/async_directory_type_controller.cc
+++ b/components/sync/driver/async_directory_type_controller.cc
@@ -126,8 +126,7 @@
   }
 }
 
-// For directory datatypes metadata clears by SyncManager::PurgeDisabledTypes().
-void AsyncDirectoryTypeController::Stop(SyncStopMetadataFate metadata_fate) {
+void AsyncDirectoryTypeController::Stop(ShutdownReason shutdown_reason) {
   DCHECK(CalledOnValidThread());
 
   if (state() == NOT_RUNNING)
diff --git a/components/sync/driver/async_directory_type_controller.h b/components/sync/driver/async_directory_type_controller.h
index fac752f..00d172c 100644
--- a/components/sync/driver/async_directory_type_controller.h
+++ b/components/sync/driver/async_directory_type_controller.h
@@ -38,7 +38,7 @@
   void LoadModels(const ConfigureContext& configure_context,
                   const ModelLoadCallback& model_load_callback) override;
   void StartAssociating(const StartCallback& start_callback) override;
-  void Stop(SyncStopMetadataFate metadata_fate) override;
+  void Stop(ShutdownReason shutdown_reason) override;
   ChangeProcessor* GetChangeProcessor() const override;
   State state() const override;
 
diff --git a/components/sync/driver/async_directory_type_controller_mock.h b/components/sync/driver/async_directory_type_controller_mock.h
index 1ec3c99..5d43ae2 100644
--- a/components/sync/driver/async_directory_type_controller_mock.h
+++ b/components/sync/driver/async_directory_type_controller_mock.h
@@ -23,7 +23,7 @@
   MOCK_METHOD2(LoadModels,
                void(const ConfigureContext& configure_context,
                     const ModelLoadCallback& model_load_callback));
-  MOCK_METHOD1(Stop, void(SyncStopMetadataFate));
+  MOCK_METHOD1(Stop, void(ShutdownReason));
   MOCK_CONST_METHOD0(type, ModelType());
   MOCK_CONST_METHOD0(name, std::string());
   MOCK_CONST_METHOD0(state, State());
diff --git a/components/sync/driver/async_directory_type_controller_unittest.cc b/components/sync/driver/async_directory_type_controller_unittest.cc
index 60cccdd..68d78b2d 100644
--- a/components/sync/driver/async_directory_type_controller_unittest.cc
+++ b/components/sync/driver/async_directory_type_controller_unittest.cc
@@ -308,7 +308,7 @@
                                      base::Unretained(&model_load_callback_)));
   WaitForDTC();
   EXPECT_EQ(DataTypeController::MODEL_STARTING, non_ui_dtc_->state());
-  non_ui_dtc_->Stop(KEEP_METADATA);
+  non_ui_dtc_->Stop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
 }
 
@@ -333,7 +333,7 @@
   Start();
   WaitForDTC();
   EXPECT_EQ(DataTypeController::FAILED, non_ui_dtc_->state());
-  non_ui_dtc_->Stop(KEEP_METADATA);
+  non_ui_dtc_->Stop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
 }
 
@@ -393,7 +393,7 @@
   EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
   Start();
   wait_for_db_thread_pause.Wait();
-  non_ui_dtc_->Stop(KEEP_METADATA);
+  non_ui_dtc_->Stop(STOP_SYNC);
   WaitForDTC();
   EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
 }
@@ -409,7 +409,7 @@
   SetStopExpectations();
   EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
   Start();
-  non_ui_dtc_->Stop(KEEP_METADATA);
+  non_ui_dtc_->Stop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
   Mock::VerifyAndClearExpectations(change_processor_.get());
   Mock::VerifyAndClearExpectations(dtc_mock_.get());
@@ -427,7 +427,7 @@
   Start();
   WaitForDTC();
   EXPECT_EQ(DataTypeController::RUNNING, non_ui_dtc_->state());
-  non_ui_dtc_->Stop(KEEP_METADATA);
+  non_ui_dtc_->Stop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
 }
 
@@ -446,7 +446,7 @@
   EXPECT_EQ(DataTypeController::RUNNING, non_ui_dtc_->state());
 
   non_ui_dtc_->BlockBackendTasks();
-  non_ui_dtc_->Stop(KEEP_METADATA);
+  non_ui_dtc_->Stop(STOP_SYNC);
   SetStartExpectations();
   SetAssociateExpectations();
   SetActivateExpectations(DataTypeController::OK);
diff --git a/components/sync/driver/data_type_controller.h b/components/sync/driver/data_type_controller.h
index d148865..c65780b 100644
--- a/components/sync/driver/data_type_controller.h
+++ b/components/sync/driver/data_type_controller.h
@@ -15,9 +15,9 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "components/sync/base/model_type.h"
-#include "components/sync/base/sync_stop_metadata_fate.h"
 #include "components/sync/base/unrecoverable_error_handler.h"
 #include "components/sync/engine/cycle/status_counters.h"
+#include "components/sync/engine/shutdown_reason.h"
 #include "components/sync/model/data_type_error_handler.h"
 
 namespace syncer {
@@ -142,10 +142,7 @@
   // logic shuts down gracefully by flushing remaining changes and calling
   // StopSyncing on the SyncableService. This assumes no changes will ever
   // propagate from sync again from point where Stop() is called.
-  // KEEP_METADATA is used when the engine just stops sync, and CLEAR_METADATA
-  // is used when the user disables sync for data type.
-  virtual void Stop(SyncStopMetadataFate metadata_fate,
-                    StopCallback callback) = 0;
+  virtual void Stop(ShutdownReason shutdown_reason, StopCallback callback) = 0;
 
   // Name of this data type.  For logging purposes only.
   std::string name() const { return ModelTypeToString(type()); }
diff --git a/components/sync/driver/directory_data_type_controller.cc b/components/sync/driver/directory_data_type_controller.cc
index 3d5ca23..ba56cad 100644
--- a/components/sync/driver/directory_data_type_controller.cc
+++ b/components/sync/driver/directory_data_type_controller.cc
@@ -60,10 +60,10 @@
   configurer->UnregisterDirectoryDataType(type());
 }
 
-void DirectoryDataTypeController::Stop(SyncStopMetadataFate metadata_fate,
+void DirectoryDataTypeController::Stop(ShutdownReason shutdown_reason,
                                        StopCallback callback) {
   DCHECK(CalledOnValidThread());
-  Stop(metadata_fate);
+  Stop(shutdown_reason);
   std::move(callback).Run();
 }
 
diff --git a/components/sync/driver/directory_data_type_controller.h b/components/sync/driver/directory_data_type_controller.h
index 7ee6747..1e62df9 100644
--- a/components/sync/driver/directory_data_type_controller.h
+++ b/components/sync/driver/directory_data_type_controller.h
@@ -46,14 +46,14 @@
   // the data type's ChangeProcessor registration with the backend).
   // See ModelTypeConfigurer::DeactivateDataType for more details.
   void DeactivateDataType(ModelTypeConfigurer* configurer) override;
-  void Stop(SyncStopMetadataFate metadata_fate, StopCallback callback) final;
+  void Stop(ShutdownReason shutdown_reason, StopCallback callback) final;
   void GetAllNodes(const AllNodesCallback& callback) override;
   void GetStatusCounters(const StatusCountersCallback& callback) override;
   void RecordMemoryUsageAndCountsHistograms() override;
 
   // Convenience overload with synchronous API, since directory types are always
   // capable of stopping immediately.
-  virtual void Stop(SyncStopMetadataFate metadata_fate) = 0;
+  virtual void Stop(ShutdownReason shutdown_reason) = 0;
 
   // Returns a ListValue representing all nodes for a specified type by querying
   // the directory.
diff --git a/components/sync/driver/fake_data_type_controller.cc b/components/sync/driver/fake_data_type_controller.cc
index 160f8cb..36f5afd 100644
--- a/components/sync/driver/fake_data_type_controller.cc
+++ b/components/sync/driver/fake_data_type_controller.cc
@@ -102,7 +102,7 @@
 }
 
 // * -> NOT_RUNNING
-void FakeDataTypeController::Stop(SyncStopMetadataFate metadata_fate) {
+void FakeDataTypeController::Stop(ShutdownReason shutdown_reason) {
   DCHECK(CalledOnValidThread());
   if (state() == MODEL_STARTING) {
     // Real data type controllers run the callback and specify "ABORTED" as an
@@ -111,7 +111,7 @@
     SimulateModelLoadFinishing();
   }
 
-  if (metadata_fate == CLEAR_METADATA)
+  if (shutdown_reason == DISABLE_SYNC)
     ++clear_metadata_call_count_;
 
   state_ = NOT_RUNNING;
diff --git a/components/sync/driver/fake_data_type_controller.h b/components/sync/driver/fake_data_type_controller.h
index a3376af7..2f20644 100644
--- a/components/sync/driver/fake_data_type_controller.h
+++ b/components/sync/driver/fake_data_type_controller.h
@@ -34,7 +34,7 @@
   void RegisterWithBackend(base::Callback<void(bool)> set_downloaded,
                            ModelTypeConfigurer* configurer) override;
   void StartAssociating(const StartCallback& start_callback) override;
-  void Stop(SyncStopMetadataFate metadata_fate) override;
+  void Stop(ShutdownReason shutdown_reason) override;
   ChangeProcessor* GetChangeProcessor() const override;
   State state() const override;
   bool ReadyForStart() const override;
diff --git a/components/sync/driver/frontend_data_type_controller.cc b/components/sync/driver/frontend_data_type_controller.cc
index 21d7eb2..9838916 100644
--- a/components/sync/driver/frontend_data_type_controller.cc
+++ b/components/sync/driver/frontend_data_type_controller.cc
@@ -81,8 +81,7 @@
                                 base::AsWeakPtr(this)));
 }
 
-// For directory datatypes metadata clears by SyncManager::PurgeDisabledTypes().
-void FrontendDataTypeController::Stop(SyncStopMetadataFate metadata_fate) {
+void FrontendDataTypeController::Stop(ShutdownReason shutdown_reason) {
   DCHECK(CalledOnValidThread());
 
   if (state_ == NOT_RUNNING)
diff --git a/components/sync/driver/frontend_data_type_controller.h b/components/sync/driver/frontend_data_type_controller.h
index 796e4bb..993921b 100644
--- a/components/sync/driver/frontend_data_type_controller.h
+++ b/components/sync/driver/frontend_data_type_controller.h
@@ -46,7 +46,7 @@
   void LoadModels(const ConfigureContext& configure_context,
                   const ModelLoadCallback& model_load_callback) override;
   void StartAssociating(const StartCallback& start_callback) override;
-  void Stop(SyncStopMetadataFate metadata_fate) override;
+  void Stop(ShutdownReason shutdown_reason) override;
   State state() const override;
 
  protected:
diff --git a/components/sync/driver/frontend_data_type_controller_mock.h b/components/sync/driver/frontend_data_type_controller_mock.h
index 4e3cf22..768f03a 100644
--- a/components/sync/driver/frontend_data_type_controller_mock.h
+++ b/components/sync/driver/frontend_data_type_controller_mock.h
@@ -26,7 +26,7 @@
   MOCK_METHOD2(LoadModels,
                void(const ConfigureContext& configure_context,
                     const ModelLoadCallback& model_load_callback));
-  MOCK_METHOD1(Stop, void(SyncStopMetadataFate));
+  MOCK_METHOD1(Stop, void(ShutdownReason));
   MOCK_CONST_METHOD0(type, ModelType());
   MOCK_CONST_METHOD0(name, std::string());
   MOCK_CONST_METHOD0(state, State());
diff --git a/components/sync/driver/frontend_data_type_controller_unittest.cc b/components/sync/driver/frontend_data_type_controller_unittest.cc
index 25ca7bd..c77b3143 100644
--- a/components/sync/driver/frontend_data_type_controller_unittest.cc
+++ b/components/sync/driver/frontend_data_type_controller_unittest.cc
@@ -181,7 +181,7 @@
   base::SequencedTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
       base::BindOnce(&FrontendDataTypeController::Stop,
-                     base::AsWeakPtr(frontend_dtc_.get()), KEEP_METADATA));
+                     base::AsWeakPtr(frontend_dtc_.get()), STOP_SYNC));
   Start();
   EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
 }
@@ -194,7 +194,7 @@
       ConfigureContext(), base::Bind(&ModelLoadCallbackMock::Run,
                                      base::Unretained(&model_load_callback_)));
   EXPECT_EQ(DataTypeController::MODEL_STARTING, frontend_dtc_->state());
-  frontend_dtc_->Stop(KEEP_METADATA);
+  frontend_dtc_->Stop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
 }
 
@@ -249,7 +249,7 @@
   EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
   Start();
   EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state());
-  frontend_dtc_->Stop(KEEP_METADATA);
+  frontend_dtc_->Stop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
 }
 
diff --git a/components/sync/driver/model_association_manager.cc b/components/sync/driver/model_association_manager.cc
index 7691ddc..4b1c1fb 100644
--- a/components/sync/driver/model_association_manager.cc
+++ b/components/sync/driver/model_association_manager.cc
@@ -180,25 +180,10 @@
 
   delegate_->OnSingleDataTypeWillStop(dtc->type(), error);
 
-  // Leave metadata if we do not disable sync completely.
-  SyncStopMetadataFate metadata_fate = KEEP_METADATA;
-  switch (shutdown_reason) {
-    case STOP_SYNC:
-      // Special case: For AUTOFILL_WALLET_DATA, we want to clear all data even
-      // when Sync is stopped temporarily.
-      // TODO(crbug.com/890361): Consider moving this decision into the
-      // individual controller
-      if (dtc->type() == AUTOFILL_WALLET_DATA) {
-        metadata_fate = CLEAR_METADATA;
-      }
-      break;
-    case DISABLE_SYNC:
-      metadata_fate = CLEAR_METADATA;
-      break;
-    case BROWSER_SHUTDOWN:
-      break;
-  }
-  dtc->Stop(metadata_fate, std::move(callback));
+  // Note: Depending on |shutdown_reason|, USS types might clear their metadata
+  // in response to Stop(). For directory types, the clearing happens in
+  // SyncManager::PurgeDisabledTypes() instead.
+  dtc->Stop(shutdown_reason, std::move(callback));
 }
 
 void ModelAssociationManager::LoadEnabledTypes() {
diff --git a/components/sync/driver/model_type_controller.cc b/components/sync/driver/model_type_controller.cc
index a7541dd3..3522062 100644
--- a/components/sync/driver/model_type_controller.cc
+++ b/components/sync/driver/model_type_controller.cc
@@ -216,10 +216,29 @@
   }
 }
 
-void ModelTypeController::Stop(SyncStopMetadataFate metadata_fate,
+void ModelTypeController::Stop(ShutdownReason shutdown_reason,
                                StopCallback callback) {
   DCHECK(CalledOnValidThread());
 
+  // Leave metadata if we do not disable sync completely.
+  SyncStopMetadataFate metadata_fate = KEEP_METADATA;
+  switch (shutdown_reason) {
+    case STOP_SYNC:
+      // Special case: For AUTOFILL_WALLET_DATA, we want to clear all data even
+      // when Sync is stopped temporarily.
+      // TODO(crbug.com/890361,crbug.com/890737): Move this into the
+      // Wallet-specific ModelTypeController once we have one.
+      if (type() == AUTOFILL_WALLET_DATA) {
+        metadata_fate = CLEAR_METADATA;
+      }
+      break;
+    case DISABLE_SYNC:
+      metadata_fate = CLEAR_METADATA;
+      break;
+    case BROWSER_SHUTDOWN:
+      break;
+  }
+
   switch (state()) {
     case ASSOCIATING:
       // We don't really use this state in this class.
diff --git a/components/sync/driver/model_type_controller.h b/components/sync/driver/model_type_controller.h
index c455a4a..2e3f321 100644
--- a/components/sync/driver/model_type_controller.h
+++ b/components/sync/driver/model_type_controller.h
@@ -47,7 +47,7 @@
   void StartAssociating(const StartCallback& start_callback) override;
   void ActivateDataType(ModelTypeConfigurer* configurer) override;
   void DeactivateDataType(ModelTypeConfigurer* configurer) override;
-  void Stop(SyncStopMetadataFate metadata_fate, StopCallback callback) override;
+  void Stop(ShutdownReason shutdown_reason, StopCallback callback) override;
   State state() const override;
   void GetAllNodes(const AllNodesCallback& callback) override;
   void GetStatusCounters(const StatusCountersCallback& callback) override;
diff --git a/components/sync/driver/model_type_controller_unittest.cc b/components/sync/driver/model_type_controller_unittest.cc
index d86895d9..f027c7e 100644
--- a/components/sync/driver/model_type_controller_unittest.cc
+++ b/components/sync/driver/model_type_controller_unittest.cc
@@ -191,9 +191,9 @@
     controller_.StartAssociating(callback.Get());
   }
 
-  void DeactivateDataTypeAndStop(SyncStopMetadataFate metadata_fate) {
+  void DeactivateDataTypeAndStop(ShutdownReason shutdown_reason) {
     controller_.DeactivateDataType(&configurer_);
-    controller_.Stop(metadata_fate, base::DoNothing());
+    controller_.Stop(shutdown_reason, base::DoNothing());
     // ModelTypeProcessorProxy does posting of tasks.
     base::RunLoop().RunUntilIdle();
   }
@@ -282,7 +282,7 @@
 
   StartAssociating();
 
-  DeactivateDataTypeAndStop(KEEP_METADATA);
+  DeactivateDataTypeAndStop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 }
 
@@ -293,7 +293,7 @@
 
   // Ensures that metadata was not cleared.
   EXPECT_CALL(*delegate(), OnSyncStopping(KEEP_METADATA));
-  DeactivateDataTypeAndStop(KEEP_METADATA);
+  DeactivateDataTypeAndStop(STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
   EXPECT_FALSE(processor()->is_connected());
 }
@@ -305,7 +305,7 @@
   StartAssociating();
 
   EXPECT_CALL(*delegate(), OnSyncStopping(CLEAR_METADATA));
-  DeactivateDataTypeAndStop(CLEAR_METADATA);
+  DeactivateDataTypeAndStop(DISABLE_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
   EXPECT_FALSE(processor()->is_connected());
 }
@@ -317,7 +317,7 @@
 
   ASSERT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 
-  controller()->Stop(CLEAR_METADATA, base::DoNothing());
+  controller()->Stop(DISABLE_SYNC, base::DoNothing());
 
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 }
@@ -340,7 +340,7 @@
   base::MockCallback<base::OnceClosure> stop_completion;
   EXPECT_CALL(stop_completion, Run()).Times(0);
   EXPECT_CALL(*delegate(), OnSyncStopping(_)).Times(0);
-  controller()->Stop(CLEAR_METADATA, stop_completion.Get());
+  controller()->Stop(DISABLE_SYNC, stop_completion.Get());
   EXPECT_EQ(DataTypeController::STOPPING, controller()->state());
 
   // Mimic completion for OnSyncStarting().
@@ -369,7 +369,7 @@
   base::MockCallback<base::OnceClosure> stop_completion;
   EXPECT_CALL(stop_completion, Run()).Times(0);
   EXPECT_CALL(*delegate(), OnSyncStopping(_)).Times(0);
-  controller()->Stop(CLEAR_METADATA, stop_completion.Get());
+  controller()->Stop(DISABLE_SYNC, stop_completion.Get());
   EXPECT_EQ(DataTypeController::STOPPING, controller()->state());
 
   // Mimic completion for OnSyncStarting(), with an error.
@@ -408,7 +408,7 @@
   // At this point, the UI stops the datatype, but it's possible that the
   // backend has already posted a task to the UI thread, which we'll process
   // later below.
-  controller()->Stop(CLEAR_METADATA, base::DoNothing());
+  controller()->Stop(DISABLE_SYNC, base::DoNothing());
   ASSERT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 
   // In the next loop iteration, the UI thread receives the error.
@@ -459,7 +459,7 @@
   // Stop sync.
   EXPECT_CALL(delegate_on_disk, OnSyncStopping(_)).Times(0);
   EXPECT_CALL(delegate_in_memory, OnSyncStopping(_));
-  controller.Stop(CLEAR_METADATA, base::DoNothing());
+  controller.Stop(DISABLE_SYNC, base::DoNothing());
   ASSERT_EQ(DataTypeController::NOT_RUNNING, controller.state());
 
   // Start sync with STORAGE_ON_DISK.
@@ -482,7 +482,7 @@
   // Stop sync.
   EXPECT_CALL(delegate_in_memory, OnSyncStopping(_)).Times(0);
   EXPECT_CALL(delegate_on_disk, OnSyncStopping(_));
-  controller.Stop(CLEAR_METADATA, base::DoNothing());
+  controller.Stop(DISABLE_SYNC, base::DoNothing());
   ASSERT_EQ(DataTypeController::NOT_RUNNING, controller.state());
 }
 
diff --git a/components/sync/driver/proxy_data_type_controller.cc b/components/sync/driver/proxy_data_type_controller.cc
index 400a804..ca11297 100644
--- a/components/sync/driver/proxy_data_type_controller.cc
+++ b/components/sync/driver/proxy_data_type_controller.cc
@@ -59,7 +59,7 @@
                      syncer_merge_result);
 }
 
-void ProxyDataTypeController::Stop(SyncStopMetadataFate metadata_fate,
+void ProxyDataTypeController::Stop(ShutdownReason shutdown_reason,
                                    StopCallback callback) {
   state_ = NOT_RUNNING;
   std::move(callback).Run();
diff --git a/components/sync/driver/proxy_data_type_controller.h b/components/sync/driver/proxy_data_type_controller.h
index 1be8792..1ccbf85 100644
--- a/components/sync/driver/proxy_data_type_controller.h
+++ b/components/sync/driver/proxy_data_type_controller.h
@@ -29,7 +29,7 @@
   void RegisterWithBackend(base::Callback<void(bool)> set_downloaded,
                            ModelTypeConfigurer* configurer) override;
   void StartAssociating(const StartCallback& start_callback) override;
-  void Stop(SyncStopMetadataFate metadata_fate, StopCallback callback) override;
+  void Stop(ShutdownReason shutdown_reason, StopCallback callback) override;
   State state() const override;
   void ActivateDataType(ModelTypeConfigurer* configurer) override;
   void DeactivateDataType(ModelTypeConfigurer* configurer) override;
diff --git a/components/sync/model_impl/model_type_store_backend.cc b/components/sync/model_impl/model_type_store_backend.cc
index 9bf4379..666c8c5 100644
--- a/components/sync/model_impl/model_type_store_backend.cc
+++ b/components/sync/model_impl/model_type_store_backend.cc
@@ -31,9 +31,9 @@
     "Sync.ModelTypeStoreInitResult";
 
 const base::Feature kModelTypeStoreAvoidReadCache{
-    "kModelTypeStoreAvoidReadCache", base::FEATURE_DISABLED_BY_DEFAULT};
+    "kModelTypeStoreAvoidReadCache", base::FEATURE_ENABLED_BY_DEFAULT};
 const base::Feature kModelTypeStoreSmallWriteBufferSize{
-    "kModelTypeStoreSmallWriteBufferSize", base::FEATURE_DISABLED_BY_DEFAULT};
+    "kModelTypeStoreSmallWriteBufferSize", base::FEATURE_ENABLED_BY_DEFAULT};
 
 namespace {
 
diff --git a/components/sync/model_impl/syncable_service_based_bridge.cc b/components/sync/model_impl/syncable_service_based_bridge.cc
index daeb696..e604393 100644
--- a/components/sync/model_impl/syncable_service_based_bridge.cc
+++ b/components/sync/model_impl/syncable_service_based_bridge.cc
@@ -439,6 +439,18 @@
     return;
   }
 
+  // Guard against inconsistent state, and recover from it by starting from
+  // scratch, which will cause the eventual refetching of all entities from the
+  // server.
+  if (!metadata_batch->GetModelTypeState().initial_sync_done() &&
+      !in_memory_store_.empty()) {
+    in_memory_store_.clear();
+    store_->DeleteAllDataAndMetadata(base::DoNothing());
+    change_processor()->ModelReadyToSync(std::make_unique<MetadataBatch>());
+    DCHECK(!change_processor()->IsTrackingMetadata());
+    return;
+  }
+
   change_processor()->ModelReadyToSync(std::move(metadata_batch));
   MaybeStartSyncableService();
 }
@@ -487,10 +499,11 @@
 }
 
 SyncChangeList SyncableServiceBasedBridge::StoreAndConvertRemoteChanges(
-    std::unique_ptr<MetadataChangeList> metadata_change_list,
+    std::unique_ptr<MetadataChangeList> initial_metadata_change_list,
     EntityChangeList entity_change_list) {
   std::unique_ptr<ModelTypeStore::WriteBatch> batch =
       store_->CreateWriteBatch();
+  batch->TakeMetadataChangesFrom(std::move(initial_metadata_change_list));
 
   SyncChangeList output_change_list;
   output_change_list.reserve(entity_change_list.size());
@@ -523,7 +536,7 @@
         // know.
         change_processor()->UpdateStorageKey(
             change.data(), /*storage_key=*/change.data().client_tag_hash,
-            metadata_change_list.get());
+            batch->GetMetadataChangeList());
         FALLTHROUGH;
 
       case EntityChange::ACTION_UPDATE: {
diff --git a/components/sync/model_impl/syncable_service_based_bridge_unittest.cc b/components/sync/model_impl/syncable_service_based_bridge_unittest.cc
index 4682028..89679e8 100644
--- a/components/sync/model_impl/syncable_service_based_bridge_unittest.cc
+++ b/components/sync/model_impl/syncable_service_based_bridge_unittest.cc
@@ -79,7 +79,8 @@
 
 class SyncableServiceBasedBridgeTest : public ::testing::Test {
  protected:
-  SyncableServiceBasedBridgeTest() {
+  SyncableServiceBasedBridgeTest()
+      : store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()) {
     ON_CALL(syncable_service_, MergeDataAndStartSyncing(_, _, _, _))
         .WillByDefault(
             [&](ModelType type, const SyncDataList& initial_sync_data,
@@ -99,7 +100,8 @@
             /*commit_only=*/false);
     mock_processor_.DelegateCallsByDefaultTo(real_processor_.get());
     bridge_ = std::make_unique<SyncableServiceBasedBridge>(
-        kModelType, ModelTypeStoreTestUtil::FactoryForInMemoryStoreForTest(),
+        kModelType,
+        ModelTypeStoreTestUtil::FactoryForForwardingStore(store_.get()),
         mock_processor_.CreateForwardingProcessor(), &syncable_service_);
   }
 
@@ -154,6 +156,7 @@
   testing::NiceMock<MockSyncableService> syncable_service_;
   testing::NiceMock<MockModelTypeChangeProcessor> mock_processor_;
   base::MockCallback<ModelErrorHandler> mock_error_handler_;
+  const std::unique_ptr<ModelTypeStore> store_;
   std::unique_ptr<syncer::ClientTagBasedModelTypeProcessor> real_processor_;
   std::unique_ptr<SyncableServiceBasedBridge> bridge_;
   std::unique_ptr<MockModelTypeWorker> worker_;
@@ -259,7 +262,7 @@
 }
 
 TEST_F(SyncableServiceBasedBridgeTest,
-       ShouldStartSyncingWithPreviousDirectoryData) {
+       ShouldStartSyncingWithPreviousDirectoryDataWithoutRestart) {
   InitializeBridge();
   StartSyncing();
   worker_->UpdateFromServer(kClientTagHash, GetTestSpecifics("name1"));
@@ -273,6 +276,25 @@
   StartSyncing();
 }
 
+TEST_F(SyncableServiceBasedBridgeTest,
+       ShouldStartSyncingWithPreviousDirectoryDataAfterRestart) {
+  InitializeBridge();
+  StartSyncing();
+  worker_->UpdateFromServer(kClientTagHash, GetTestSpecifics("name1"));
+
+  // Mimic restart, which shouldn't start syncing until OnSyncStarting() is
+  // received (exercised in StartSyncing()).
+  EXPECT_CALL(syncable_service_, MergeDataAndStartSyncing(_, _, _, _)).Times(0);
+  ShutdownBridge();
+  InitializeBridge();
+
+  EXPECT_CALL(syncable_service_,
+              MergeDataAndStartSyncing(
+                  kModelType, ElementsAre(SyncDataRemoteMatches("name1")),
+                  NotNull(), NotNull()));
+  StartSyncing();
+}
+
 TEST_F(SyncableServiceBasedBridgeTest, ShouldSupportDisableReenableSequence) {
   InitializeBridge();
   StartSyncing();
diff --git a/components/sync_bookmarks/bookmark_data_type_controller_unittest.cc b/components/sync_bookmarks/bookmark_data_type_controller_unittest.cc
index 88d638b..c68a7a5 100644
--- a/components/sync_bookmarks/bookmark_data_type_controller_unittest.cc
+++ b/components/sync_bookmarks/bookmark_data_type_controller_unittest.cc
@@ -299,7 +299,7 @@
       base::Bind(&ModelLoadCallbackMock::Run,
                  base::Unretained(&model_load_callback_)));
 
-  bookmark_dtc_->Stop(syncer::KEEP_METADATA);
+  bookmark_dtc_->Stop(syncer::STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, bookmark_dtc_->state());
 }
 
@@ -314,6 +314,6 @@
   EXPECT_CALL(start_callback_, Run(DataTypeController::OK, _, _));
   Start();
   EXPECT_EQ(DataTypeController::RUNNING, bookmark_dtc_->state());
-  bookmark_dtc_->Stop(syncer::KEEP_METADATA);
+  bookmark_dtc_->Stop(syncer::STOP_SYNC);
   EXPECT_EQ(DataTypeController::NOT_RUNNING, bookmark_dtc_->state());
 }
diff --git a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
index 2839dff..91baaa6 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
@@ -303,8 +303,7 @@
 
   const base::ListValue* states_value;
   node.GetList("states", &states_value);
-  for (base::ListValue::const_iterator it = states_value->begin();
-       it != states_value->end(); ++it) {
+  for (auto it = states_value->begin(); it != states_value->end(); ++it) {
     std::string state_value;
     if (it->GetAsString(&state_value))
       WriteAttribute(false, state_value, &line);
diff --git a/content/browser/appcache/appcache.cc b/content/browser/appcache/appcache.cc
index 5390894..0dc8369 100644
--- a/content/browser/appcache/appcache.cc
+++ b/content/browser/appcache/appcache.cc
@@ -61,14 +61,14 @@
 }
 
 void AppCache::RemoveEntry(const GURL& url) {
-  EntryMap::iterator found = entries_.find(url);
+  auto found = entries_.find(url);
   DCHECK(found != entries_.end());
   cache_size_ -= found->second.response_size();
   entries_.erase(found);
 }
 
 AppCacheEntry* AppCache::GetEntry(const GURL& url) {
-  EntryMap::iterator it = entries_.find(url);
+  auto it = entries_.find(url);
   return (it != entries_.end()) ? &(it->second) : nullptr;
 }
 
diff --git a/content/browser/appcache/appcache_group.cc b/content/browser/appcache/appcache_group.cc
index 6a83480..42a94cc 100644
--- a/content/browser/appcache/appcache_group.cc
+++ b/content/browser/appcache/appcache_group.cc
@@ -100,8 +100,7 @@
     // Update hosts of older caches to add a reference to the newest cache.
     // (This loop mutates |old_caches_| so a range-based for-loop cannot be
     // used, because it caches the end iterator.)
-    for (Caches::iterator it = old_caches_.begin(); it != old_caches_.end();
-         ++it) {
+    for (auto it = old_caches_.begin(); it != old_caches_.end(); ++it) {
       AppCache* cache = *it;
       for (AppCacheHost* host : cache->associated_hosts())
         host->SetSwappableCache(this);
@@ -121,8 +120,7 @@
   } else {
     scoped_refptr<AppCacheGroup> protect(this);
 
-    Caches::iterator it =
-        std::find(old_caches_.begin(), old_caches_.end(), cache);
+    auto it = std::find(old_caches_.begin(), old_caches_.end(), cache);
     if (it != old_caches_.end()) {
       AppCache* tmp_cache = *it;
       old_caches_.erase(it);
diff --git a/content/browser/appcache/appcache_storage_impl.cc b/content/browser/appcache/appcache_storage_impl.cc
index 34c4faf..af4eb1a 100644
--- a/content/browser/appcache/appcache_storage_impl.cc
+++ b/content/browser/appcache/appcache_storage_impl.cc
@@ -1568,8 +1568,7 @@
       working_set()->GetGroupsInOrigin(origin);
   if (groups_in_use) {
     if (!preferred_manifest_url.is_empty()) {
-      AppCacheWorkingSet::GroupMap::const_iterator found =
-          groups_in_use->find(preferred_manifest_url);
+      auto found = groups_in_use->find(preferred_manifest_url);
       if (found != groups_in_use->end() &&
           FindResponseForMainRequestInGroup(
               found->second, *url_ptr, delegate)) {
@@ -1847,7 +1846,7 @@
 
 AppCacheStorageImpl::CacheLoadTask*
 AppCacheStorageImpl::GetPendingCacheLoadTask(int64_t cache_id) {
-  PendingCacheLoads::iterator found = pending_cache_loads_.find(cache_id);
+  auto found = pending_cache_loads_.find(cache_id);
   if (found != pending_cache_loads_.end())
     return found->second;
   return nullptr;
@@ -1855,7 +1854,7 @@
 
 AppCacheStorageImpl::GroupLoadTask*
 AppCacheStorageImpl::GetPendingGroupLoadTask(const GURL& manifest_url) {
-  PendingGroupLoads::iterator found = pending_group_loads_.find(manifest_url);
+  auto found = pending_group_loads_.find(manifest_url);
   if (found != pending_group_loads_.end())
     return found->second;
   return nullptr;
diff --git a/content/browser/appcache/appcache_update_job.cc b/content/browser/appcache/appcache_update_job.cc
index 2e7a074..46f01ad 100644
--- a/content/browser/appcache/appcache_update_job.cc
+++ b/content/browser/appcache/appcache_update_job.cc
@@ -599,7 +599,7 @@
 
   int response_code = net_error == net::OK ? request->GetResponseCode() : -1;
 
-  PendingMasters::iterator found = pending_master_entries_.find(url);
+  auto found = pending_master_entries_.find(url);
   DCHECK(found != pending_master_entries_.end());
   PendingHosts& hosts = found->second;
 
@@ -861,11 +861,10 @@
 
 void AppCacheUpdateJob::OnDestructionImminent(AppCacheHost* host) {
   // The host is about to be deleted; remove from our collection.
-  PendingMasters::iterator found =
-      pending_master_entries_.find(host->pending_master_entry_url());
+  auto found = pending_master_entries_.find(host->pending_master_entry_url());
   CHECK(found != pending_master_entries_.end());
   PendingHosts& hosts = found->second;
-  PendingHosts::iterator it = std::find(hosts.begin(), hosts.end(), host);
+  auto it = std::find(hosts.begin(), hosts.end(), host);
   CHECK(it != hosts.end());
   hosts.erase(it);
 }
@@ -968,7 +967,7 @@
     UrlToFetch url_to_fetch = urls_to_fetch_.front();
     urls_to_fetch_.pop_front();
 
-    AppCache::EntryMap::iterator it = url_file_list_.find(url_to_fetch.url);
+    auto it = url_file_list_.find(url_to_fetch.url);
     DCHECK(it != url_file_list_.end());
     AppCacheEntry& entry = it->second;
     if (ShouldSkipUrlFetch(entry)) {
@@ -1094,7 +1093,7 @@
         // TODO(michaeln): defer until the updated cache has been stored.
         DCHECK(!inprogress_cache_.get());
         AppCache* cache = group_->newest_complete_cache();
-        PendingMasters::iterator found = pending_master_entries_.find(url);
+        auto found = pending_master_entries_.find(url);
         DCHECK(found != pending_master_entries_.end());
         PendingHosts& hosts = found->second;
         for (AppCacheHost* host : hosts)
@@ -1133,7 +1132,7 @@
   HostNotifier host_notifier;
   while (!master_entries_to_fetch_.empty()) {
     const GURL& url = *master_entries_to_fetch_.begin();
-    PendingMasters::iterator found = pending_master_entries_.find(url);
+    auto found = pending_master_entries_.find(url);
     DCHECK(found != pending_master_entries_.end());
     PendingHosts& hosts = found->second;
     for (AppCacheHost* host : hosts) {
@@ -1181,7 +1180,7 @@
     return;
   }
 
-  LoadingResponses::iterator found = loading_responses_.find(response_id);
+  auto found = loading_responses_.find(response_id);
   DCHECK(found != loading_responses_.end());
   const GURL& url = found->second;
 
@@ -1195,7 +1194,7 @@
     DCHECK(copy_me);
     DCHECK_EQ(copy_me->response_id(), response_id);
 
-    AppCache::EntryMap::iterator it = url_file_list_.find(url);
+    auto it = url_file_list_.find(url);
     DCHECK(it != url_file_list_.end());
     AppCacheEntry& entry = it->second;
     entry.set_response_id(response_id);
diff --git a/content/browser/appcache/appcache_update_job_unittest.cc b/content/browser/appcache/appcache_update_job_unittest.cc
index 14224cf..53aecac2 100644
--- a/content/browser/appcache/appcache_update_job_unittest.cc
+++ b/content/browser/appcache/appcache_update_job_unittest.cc
@@ -3630,8 +3630,7 @@
 
           // Check that any copied entries have the expected response id
           // and that entries that are not copied have a different response id.
-          std::map<GURL, int64_t>::iterator found =
-              expect_response_ids_.find(pair.first);
+          auto found = expect_response_ids_.find(pair.first);
           if (found != expect_response_ids_.end()) {
             EXPECT_EQ(found->second, pair.second.response_id());
           } else if (expect_old_cache_) {
diff --git a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
index ee7072b..3003797 100644
--- a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
@@ -1316,7 +1316,7 @@
                           2 /* completed_requests */}));
 }
 
-TEST_F(BackgroundFetchDataManagerTest, DownloadTotalUpdated) {
+TEST_F(BackgroundFetchDataManagerTest, DownloadedUpdated) {
   int64_t sw_id = RegisterServiceWorker();
   ASSERT_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, sw_id);
 
@@ -1336,7 +1336,7 @@
   auto registration =
       GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
   ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
-  EXPECT_EQ(registration.download_total, 0u);
+  EXPECT_EQ(registration.downloaded, 0u);
 
   scoped_refptr<BackgroundFetchRequestInfo> request_info;
   PopNextRequest(registration_id, &error, &request_info);
@@ -1348,7 +1348,7 @@
 
   registration = GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
   ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
-  EXPECT_EQ(registration.download_total, kResponseFileSize);
+  EXPECT_EQ(registration.downloaded, kResponseFileSize);
 
   PopNextRequest(registration_id, &error, &request_info);
   ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
@@ -1359,7 +1359,7 @@
 
   registration = GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
   ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
-  EXPECT_EQ(registration.download_total, 2 * kResponseFileSize);
+  EXPECT_EQ(registration.downloaded, 2 * kResponseFileSize);
 
   PopNextRequest(registration_id, &error, &request_info);
   ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
@@ -1370,8 +1370,8 @@
 
   registration = GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
   ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
-  // |download_total| is unchanged.
-  EXPECT_EQ(registration.download_total, 2 * kResponseFileSize);
+  // |registration.downloaded| is unchanged.
+  EXPECT_EQ(registration.downloaded, 2 * kResponseFileSize);
 }
 
 TEST_F(BackgroundFetchDataManagerTest, ExceedingQuotaAbandonsFetch) {
diff --git a/content/browser/background_fetch/storage/mark_request_complete_task.cc b/content/browser/background_fetch/storage/mark_request_complete_task.cc
index 5fb06db..a941ac2 100644
--- a/content/browser/background_fetch/storage/mark_request_complete_task.cc
+++ b/content/browser/background_fetch/storage/mark_request_complete_task.cc
@@ -283,8 +283,8 @@
     return;
   }
 
-  metadata->mutable_registration()->set_download_total(
-      metadata->registration().download_total() + request_info_->GetFileSize());
+  metadata->mutable_registration()->set_downloaded(
+      metadata->registration().downloaded() + request_info_->GetFileSize());
 
   service_worker_context()->StoreRegistrationUserData(
       registration_id_.service_worker_registration_id(),
diff --git a/content/browser/background_sync/background_sync_manager.cc b/content/browser/background_sync/background_sync_manager.cc
index 6c18321c..73d01cf 100644
--- a/content/browser/background_sync/background_sync_manager.cc
+++ b/content/browser/background_sync/background_sync_manager.cc
@@ -640,8 +640,7 @@
     const std::string& tag) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
-  SWIdToRegistrationsMap::iterator it =
-      active_registrations_.find(sw_registration_id);
+  auto it = active_registrations_.find(sw_registration_id);
   if (it == active_registrations_.end())
     return nullptr;
 
@@ -838,8 +837,7 @@
     return;
   }
 
-  SWIdToRegistrationsMap::iterator it =
-      active_registrations_.find(sw_registration_id);
+  auto it = active_registrations_.find(sw_registration_id);
 
   if (it != active_registrations_.end()) {
     const BackgroundSyncRegistrations& registrations = it->second;
diff --git a/content/browser/browser_child_process_host_impl.cc b/content/browser/browser_child_process_host_impl.cc
index 49d2a4a9..0d338c2 100644
--- a/content/browser/browser_child_process_host_impl.cc
+++ b/content/browser/browser_child_process_host_impl.cc
@@ -198,8 +198,7 @@
   // Make a copy since the BrowserChildProcessHost dtor mutates the original
   // list.
   BrowserChildProcessList copy = g_child_process_list.Get();
-  for (BrowserChildProcessList::iterator it = copy.begin();
-       it != copy.end(); ++it) {
+  for (auto it = copy.begin(); it != copy.end(); ++it) {
     delete (*it)->delegate();  // ~*HostDelegate deletes *HostImpl.
   }
 }
diff --git a/content/browser/browsing_data/storage_partition_http_cache_data_remover.cc b/content/browser/browsing_data/storage_partition_http_cache_data_remover.cc
index 68e6527..1f0e366 100644
--- a/content/browser/browsing_data/storage_partition_http_cache_data_remover.cc
+++ b/content/browser/browsing_data/storage_partition_http_cache_data_remover.cc
@@ -99,8 +99,8 @@
 
 // The expected state sequence is CacheState::NONE --> CacheState::CREATE_MAIN
 // --> CacheState::DELETE_MAIN --> CacheState::CREATE_MEDIA -->
-// CacheState::DELETE_MEDIA --> CacheState::DELETE_CODE --> CacheState::DONE,
-// and any errors are ignored.
+// CacheState::DELETE_MEDIA --> CacheState::DELETE_CODE_JS --> DELETE_CODE_WASM
+// -> CacheState::DONE, and any errors are ignored.
 void StoragePartitionHttpCacheDataRemover::DoClearCache(int rv) {
   DCHECK_NE(CacheState::NONE, next_cache_state_);
 
@@ -118,7 +118,7 @@
         if (!getter) {
           next_cache_state_ = (next_cache_state_ == CacheState::CREATE_MAIN)
                                   ? CacheState::CREATE_MEDIA
-                                  : CacheState::DELETE_CODE;
+                                  : CacheState::DELETE_CODE_JS;
           break;
         }
 
@@ -145,7 +145,7 @@
       case CacheState::DELETE_MEDIA: {
         next_cache_state_ = (next_cache_state_ == CacheState::DELETE_MAIN)
                                 ? CacheState::CREATE_MEDIA
-                                : CacheState::DELETE_CODE;
+                                : CacheState::DELETE_CODE_JS;
 
         // |cache_| can be null if it cannot be initialized.
         if (cache_) {
@@ -172,22 +172,28 @@
         }
         break;
       }
-      case CacheState::DELETE_CODE: {
+      case CacheState::DELETE_CODE_JS: {
+        next_cache_state_ = CacheState::DELETE_CODE_WASM;
+        // TODO(crbug.com/866419): Currently we just clear entire caches.
+        // Change it to conditionally clear entries based on the filters.
+        // Likewise for DELETE_CODE_WASM.
+        if (generated_code_cache_context_ &&
+            generated_code_cache_context_->generated_js_code_cache()) {
+          rv = generated_code_cache_context_->generated_js_code_cache()
+                   ->ClearCache(base::BindRepeating(
+                       &StoragePartitionHttpCacheDataRemover::DoClearCache,
+                       base::Unretained(this)));
+        }
+        break;
+      }
+      case CacheState::DELETE_CODE_WASM: {
         next_cache_state_ = CacheState::DONE;
-        if (generated_code_cache_context_) {
-          // TODO(crbug.com/866419): Currently we just clear entire caches.
-          // Change it to conditionally clear entries based on the filters.
-          auto callback = base::BindRepeating(
-              &StoragePartitionHttpCacheDataRemover::DoClearCache,
-              base::Unretained(this));
-          if (generated_code_cache_context_->generated_js_code_cache()) {
-            rv = generated_code_cache_context_->generated_js_code_cache()
-                     ->ClearCache(callback);
-          }
-          if (generated_code_cache_context_->generated_wasm_code_cache()) {
-            rv = generated_code_cache_context_->generated_wasm_code_cache()
-                     ->ClearCache(callback);
-          }
+        if (generated_code_cache_context_ &&
+            generated_code_cache_context_->generated_wasm_code_cache()) {
+          rv = generated_code_cache_context_->generated_wasm_code_cache()
+                   ->ClearCache(base::BindRepeating(
+                       &StoragePartitionHttpCacheDataRemover::DoClearCache,
+                       base::Unretained(this)));
         }
         break;
       }
diff --git a/content/browser/browsing_data/storage_partition_http_cache_data_remover.h b/content/browser/browsing_data/storage_partition_http_cache_data_remover.h
index 665a8f4..e9bf114 100644
--- a/content/browser/browsing_data/storage_partition_http_cache_data_remover.h
+++ b/content/browser/browsing_data/storage_partition_http_cache_data_remover.h
@@ -57,7 +57,8 @@
     CREATE_MEDIA,
     DELETE_MAIN,
     DELETE_MEDIA,
-    DELETE_CODE,
+    DELETE_CODE_JS,
+    DELETE_CODE_WASM,
     DONE
   };
 
diff --git a/content/browser/browsing_instance.cc b/content/browser/browsing_instance.cc
index 07a6aa1..2b6c41a 100644
--- a/content/browser/browsing_instance.cc
+++ b/content/browser/browsing_instance.cc
@@ -32,7 +32,7 @@
   std::string site = SiteInstance::GetSiteForURL(browser_context_, url)
                          .possibly_invalid_spec();
 
-  SiteInstanceMap::iterator i = site_instance_map_.find(site);
+  auto i = site_instance_map_.find(site);
   if (i != site_instance_map_.end())
     return i->second;
 
@@ -55,7 +55,7 @@
   // tabs are navigated there at the same time.  (We don't call SetSite or
   // register them until DidNavigate.)  If there is a previously existing
   // SiteInstance for this site, we just won't register the new one.
-  SiteInstanceMap::iterator i = site_instance_map_.find(site);
+  auto i = site_instance_map_.find(site);
   if (i == site_instance_map_.end()) {
     // Not previously registered, so register it.
     site_instance_map_[site] = site_instance;
@@ -70,7 +70,7 @@
   // Only unregister the SiteInstance if it is the same one that is registered
   // for the site.  (It might have been an unregistered SiteInstance.  See the
   // comments in RegisterSiteInstance.)
-  SiteInstanceMap::iterator i = site_instance_map_.find(site);
+  auto i = site_instance_map_.find(site);
   if (i != site_instance_map_.end() && i->second == site_instance) {
     // Matches, so erase it.
     site_instance_map_.erase(i);
diff --git a/content/browser/cache_storage/cache_storage.cc b/content/browser/cache_storage/cache_storage.cc
index 6ac6747..5371daf 100644
--- a/content/browser/cache_storage/cache_storage.cc
+++ b/content/browser/cache_storage/cache_storage.cc
@@ -975,8 +975,7 @@
 
   cache_index_->FinalizeDoomedCache();
 
-  CacheMap::iterator map_iter =
-      cache_map_.find(cache_handle.value()->cache_name());
+  auto map_iter = cache_map_.find(cache_handle.value()->cache_name());
   DCHECK(map_iter != cache_map_.end());
 
   doomed_caches_.insert(
@@ -1162,7 +1161,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(initialized_);
 
-  CacheMap::iterator map_iter = cache_map_.find(cache_name);
+  auto map_iter = cache_map_.find(cache_name);
   if (map_iter == cache_map_.end())
     return CacheStorageCacheHandle();
 
diff --git a/content/browser/cache_storage/cache_storage_cache.cc b/content/browser/cache_storage/cache_storage_cache.cc
index c6cd338..72f27bb 100644
--- a/content/browser/cache_storage/cache_storage_cache.cc
+++ b/content/browser/cache_storage/cache_storage_cache.cc
@@ -151,9 +151,8 @@
     if (trimmed == "*")
       return false;
 
-    ServiceWorkerHeaderMap::const_iterator request_iter = request.find(trimmed);
-    ServiceWorkerHeaderMap::const_iterator cached_request_iter =
-        cached_request.find(trimmed);
+    auto request_iter = request.find(trimmed);
+    auto cached_request_iter = cached_request.find(trimmed);
 
     // If the header exists in one but not the other, no match.
     if ((request_iter == request.end()) !=
diff --git a/content/browser/cache_storage/cache_storage_manager.cc b/content/browser/cache_storage/cache_storage_manager.cc
index 6eab90f..2b5c01e 100644
--- a/content/browser/cache_storage/cache_storage_manager.cc
+++ b/content/browser/cache_storage/cache_storage_manager.cc
@@ -431,7 +431,7 @@
   // Create the CacheStorage for the origin if it hasn't been loaded yet.
   FindOrCreateCacheStorage(origin, owner);
 
-  CacheStorageMap::iterator it = cache_storage_map_.find({origin, owner});
+  auto it = cache_storage_map_.find({origin, owner});
   DCHECK(it != cache_storage_map_.end());
 
   CacheStorage* cache_storage = it->second.release();
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index f444e2d..872f7e1a 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -108,9 +108,8 @@
   ~SecurityState() {
     storage::IsolatedContext* isolated_context =
         storage::IsolatedContext::GetInstance();
-    for (FileSystemMap::iterator iter = filesystem_permissions_.begin();
-         iter != filesystem_permissions_.end();
-         ++iter) {
+    for (auto iter = filesystem_permissions_.begin();
+         iter != filesystem_permissions_.end(); ++iter) {
       isolated_context->RemoveReference(iter->first);
     }
     UMA_HISTOGRAM_COUNTS_1M(
@@ -544,7 +543,7 @@
 
   {
     base::AutoLock lock(lock_);
-    SecurityStateMap::iterator state = security_state_.find(child_id);
+    auto state = security_state_.find(child_id);
     if (state == security_state_.end())
       return;
 
@@ -580,7 +579,7 @@
     int child_id, const base::FilePath& file, int permissions) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -591,7 +590,7 @@
     int child_id, const base::FilePath& file) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -632,7 +631,7 @@
 void ChildProcessSecurityPolicyImpl::GrantSendMidiSysExMessage(int child_id) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -644,7 +643,7 @@
     const url::Origin& origin) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -656,7 +655,7 @@
     const url::Origin& origin) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -683,7 +682,7 @@
 
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -699,7 +698,7 @@
 void ChildProcessSecurityPolicyImpl::GrantReadRawCookies(int child_id) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -709,7 +708,7 @@
 void ChildProcessSecurityPolicyImpl::RevokeReadRawCookies(int child_id) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
 
@@ -751,7 +750,7 @@
   {
     base::AutoLock lock(lock_);
 
-    SecurityStateMap::iterator state = security_state_.find(child_id);
+    auto state = security_state_.find(child_id);
     if (state == security_state_.end())
       return false;
 
@@ -839,7 +838,7 @@
     if (base::ContainsKey(schemes_okay_to_commit_in_any_process_, scheme))
       return true;
 
-    SecurityStateMap::iterator state = security_state_.find(child_id);
+    auto state = security_state_.find(child_id);
     if (state == security_state_.end())
       return false;
 
@@ -989,7 +988,7 @@
   if (!result) {
     // If this is a worker thread that has no access to a given file,
     // let's check that its renderer process has access to that file instead.
-    WorkerToMainProcessMap::iterator iter = worker_map_.find(child_id);
+    auto iter = worker_map_.find(child_id);
     if (iter != worker_map_.end() && iter->second != 0) {
       result = ChildProcessHasPermissionsForFile(iter->second,
                                                  file,
@@ -1034,8 +1033,7 @@
   int found_permissions = 0;
   {
     base::AutoLock lock(lock_);
-    FileSystemPermissionPolicyMap::iterator found =
-        file_system_policy_map_.find(filesystem_url.type());
+    auto found = file_system_policy_map_.find(filesystem_url.type());
     if (found == file_system_policy_map_.end())
       return false;
     found_permissions = found->second;
@@ -1103,7 +1101,7 @@
 bool ChildProcessSecurityPolicyImpl::HasWebUIBindings(int child_id) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return false;
 
@@ -1113,7 +1111,7 @@
 bool ChildProcessSecurityPolicyImpl::CanReadRawCookies(int child_id) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return false;
 
@@ -1131,7 +1129,7 @@
 
 bool ChildProcessSecurityPolicyImpl::ChildProcessHasPermissionsForFile(
     int child_id, const base::FilePath& file, int permissions) {
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return false;
   return state->second->HasPermissionsForFile(file, permissions);
@@ -1149,7 +1147,7 @@
   GURL site_url = SiteInstance::GetSiteForURL(nullptr, url);
 
   base::AutoLock lock(lock_);
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end()) {
     // TODO(nick): Returning true instead of false here is a temporary
     // workaround for https://crbug.com/600441
@@ -1181,7 +1179,7 @@
   // "gurl" can be currently empty in some cases, such as file://blah.
   DCHECK_EQ(SiteInstanceImpl::DetermineProcessLockURL(nullptr, gurl), gurl);
   base::AutoLock lock(lock_);
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   DCHECK(state != security_state_.end());
   state->second->LockToOrigin(gurl);
 }
@@ -1190,7 +1188,7 @@
 ChildProcessSecurityPolicyImpl::CheckOriginLock(int child_id,
                                                 const GURL& site_url) {
   base::AutoLock lock(lock_);
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return ChildProcessSecurityPolicyImpl::CheckOriginLockResult::NO_LOCK;
   return state->second->CheckOriginLock(site_url);
@@ -1198,7 +1196,7 @@
 
 GURL ChildProcessSecurityPolicyImpl::GetOriginLock(int child_id) {
   base::AutoLock lock(lock_);
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return GURL();
   return state->second->origin_lock();
@@ -1210,7 +1208,7 @@
     int permission) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return;
   state->second->GrantPermissionsForFileSystem(filesystem_id, permission);
@@ -1222,7 +1220,7 @@
     int permission) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return false;
   return state->second->HasPermissionsForFileSystem(filesystem_id, permission);
@@ -1238,7 +1236,7 @@
 bool ChildProcessSecurityPolicyImpl::CanSendMidiSysExMessage(int child_id) {
   base::AutoLock lock(lock_);
 
-  SecurityStateMap::iterator state = security_state_.find(child_id);
+  auto state = security_state_.find(child_id);
   if (state == security_state_.end())
     return false;
 
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index 78e52104..e8741ca 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -344,8 +344,7 @@
     use_gpu_compositing = false;
 
   // The widget might have been released in the meantime.
-  PerCompositorDataMap::iterator it =
-      per_compositor_data_.find(compositor.get());
+  auto it = per_compositor_data_.find(compositor.get());
   if (it == per_compositor_data_.end())
     return;
 
@@ -708,7 +707,7 @@
 }
 
 void GpuProcessTransportFactory::RemoveCompositor(ui::Compositor* compositor) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -780,7 +779,7 @@
 
 void GpuProcessTransportFactory::SetDisplayVisible(ui::Compositor* compositor,
                                                    bool visible) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -793,7 +792,7 @@
 
 void GpuProcessTransportFactory::ResizeDisplay(ui::Compositor* compositor,
                                                const gfx::Size& size) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -804,7 +803,7 @@
 
 void GpuProcessTransportFactory::DisableSwapUntilResize(
     ui::Compositor* compositor) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -816,7 +815,7 @@
 void GpuProcessTransportFactory::SetDisplayColorMatrix(
     ui::Compositor* compositor,
     const SkMatrix44& matrix) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -830,7 +829,7 @@
     ui::Compositor* compositor,
     const gfx::ColorSpace& blending_color_space,
     const gfx::ColorSpace& output_color_space) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -845,7 +844,7 @@
     ui::Compositor* compositor,
     base::TimeTicks timebase,
     base::TimeDelta interval) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -859,7 +858,7 @@
 void GpuProcessTransportFactory::IssueExternalBeginFrame(
     ui::Compositor* compositor,
     const viz::BeginFrameArgs& args) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
@@ -870,7 +869,7 @@
 
 void GpuProcessTransportFactory::SetOutputIsSecure(ui::Compositor* compositor,
                                                    bool secure) {
-  PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+  auto it = per_compositor_data_.find(compositor);
   if (it == per_compositor_data_.end())
     return;
   PerCompositorData* data = it->second.get();
diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc
index beaf2b8..32d7899b 100644
--- a/content/browser/devtools/devtools_agent_host_impl.cc
+++ b/content/browser/devtools/devtools_agent_host_impl.cc
@@ -129,7 +129,7 @@
     const std::string& id) {
   if (!g_devtools_instances.IsCreated())
     return nullptr;
-  DevToolsMap::iterator it = g_devtools_instances.Get().find(id);
+  auto it = g_devtools_instances.Get().find(id);
   if (it == g_devtools_instances.Get().end())
     return nullptr;
   return it->second;
@@ -348,12 +348,10 @@
   // Make a copy, since detaching may lead to agent destruction, which
   // removes it from the instances.
   std::vector<scoped_refptr<DevToolsAgentHostImpl>> copy;
-  for (DevToolsMap::iterator it(g_devtools_instances.Get().begin());
+  for (auto it(g_devtools_instances.Get().begin());
        it != g_devtools_instances.Get().end(); ++it)
     copy.push_back(it->second);
-  for (std::vector<scoped_refptr<DevToolsAgentHostImpl>>::iterator it(
-           copy.begin());
-       it != copy.end(); ++it)
+  for (auto it(copy.begin()); it != copy.end(); ++it)
     it->get()->ForceDetachAllSessions();
 }
 
diff --git a/content/browser/devtools/devtools_http_handler.cc b/content/browser/devtools/devtools_http_handler.cc
index 7e237fd..baa7d79 100644
--- a/content/browser/devtools/devtools_http_handler.cc
+++ b/content/browser/devtools/devtools_http_handler.cc
@@ -765,8 +765,7 @@
 void DevToolsHttpHandler::OnWebSocketMessage(
     int connection_id,
     const std::string& data) {
-  ConnectionToClientMap::iterator it =
-      connection_to_client_.find(connection_id);
+  auto it = connection_to_client_.find(connection_id);
   if (it != connection_to_client_.end())
     it->second->OnMessage(data);
 }
diff --git a/content/browser/dom_storage/dom_storage_context_impl.cc b/content/browser/dom_storage/dom_storage_context_impl.cc
index 010770b6..16c0e28 100644
--- a/content/browser/dom_storage/dom_storage_context_impl.cc
+++ b/content/browser/dom_storage/dom_storage_context_impl.cc
@@ -108,7 +108,7 @@
     const std::string& namespace_id) {
   if (is_shutdown_)
     return nullptr;
-  StorageNamespaceMap::iterator found = namespaces_.find(namespace_id);
+  auto found = namespaces_.find(namespace_id);
   if (found == namespaces_.end())
     return nullptr;
   return found->second.get();
@@ -300,7 +300,7 @@
     return;
   DCHECK(!existing_id.empty());
   DCHECK(!new_id.empty());
-  StorageNamespaceMap::iterator found = namespaces_.find(existing_id);
+  auto found = namespaces_.find(existing_id);
   if (found != namespaces_.end()) {
     namespaces_[new_id] = found->second->Clone(new_id);
     return;
diff --git a/content/browser/dom_storage/dom_storage_database.cc b/content/browser/dom_storage/dom_storage_database.cc
index 2609b89..376f1ac 100644
--- a/content/browser/dom_storage/dom_storage_database.cc
+++ b/content/browser/dom_storage/dom_storage_database.cc
@@ -81,7 +81,7 @@
 
   bool did_delete = false;
   bool did_insert = false;
-  DOMStorageValuesMap::const_iterator it = changes.begin();
+  auto it = changes.begin();
   for(; it != changes.end(); ++it) {
     sql::Statement statement;
     base::string16 key = it->first;
diff --git a/content/browser/dom_storage/dom_storage_database_unittest.cc b/content/browser/dom_storage/dom_storage_database_unittest.cc
index 7c83def7..de24b0f 100644
--- a/content/browser/dom_storage/dom_storage_database_unittest.cc
+++ b/content/browser/dom_storage/dom_storage_database_unittest.cc
@@ -128,7 +128,7 @@
   {
     DOMStorageDatabase db(file_name);
     ASSERT_TRUE(db.CommitChanges(false, storage));
-    DOMStorageValuesMap::iterator it = storage.begin();
+    auto it = storage.begin();
     for (; it != storage.end(); ++it)
       it->second = base::NullableString16();
     ASSERT_TRUE(db.CommitChanges(false, storage));
diff --git a/content/browser/dom_storage/dom_storage_namespace.cc b/content/browser/dom_storage/dom_storage_namespace.cc
index d78f30f..2f1f8559 100644
--- a/content/browser/dom_storage/dom_storage_namespace.cc
+++ b/content/browser/dom_storage/dom_storage_namespace.cc
@@ -98,7 +98,7 @@
 }
 
 void DOMStorageNamespace::PurgeMemory(bool aggressively) {
-  AreaMap::iterator it = areas_.begin();
+  auto it = areas_.begin();
   while (it != areas_.end()) {
     const AreaHolder& holder = it->second;
 
@@ -148,7 +148,7 @@
 DOMStorageNamespace::UsageStatistics DOMStorageNamespace::GetUsageStatistics()
     const {
   UsageStatistics stats = {0};
-  for (AreaMap::const_iterator it = areas_.begin(); it != areas_.end(); ++it) {
+  for (auto it = areas_.begin(); it != areas_.end(); ++it) {
     if (it->second.area_->map_memory_used()) {
       stats.total_cache_size += it->second.area_->map_memory_used();
       ++stats.total_area_count;
@@ -182,7 +182,7 @@
 
 DOMStorageNamespace::AreaHolder* DOMStorageNamespace::GetAreaHolder(
     const url::Origin& origin) {
-  AreaMap::iterator found = areas_.find(origin);
+  auto found = areas_.find(origin);
   if (found == areas_.end())
     return nullptr;
   return &(found->second);
diff --git a/content/browser/dom_storage/session_storage_context_mojo.cc b/content/browser/dom_storage/session_storage_context_mojo.cc
index f64bab5..e90a108e 100644
--- a/content/browser/dom_storage/session_storage_context_mojo.cc
+++ b/content/browser/dom_storage/session_storage_context_mojo.cc
@@ -540,8 +540,7 @@
     }
   }
 
-  SessionStorageMetadata::NamespaceEntry namespace_entry =
-      metadata_.GetOrCreateNamespaceEntry(new_namespace_id);
+  auto namespace_entry = metadata_.GetOrCreateNamespaceEntry(new_namespace_id);
   metadata_.RegisterShallowClonedNamespace(source_namespace_entry,
                                            namespace_entry, &save_operations);
   database_->Write(std::move(save_operations),
diff --git a/content/browser/dom_storage/session_storage_database.cc b/content/browser/dom_storage/session_storage_database.cc
index 2a8d889..4c660ab 100644
--- a/content/browser/dom_storage/session_storage_database.cc
+++ b/content/browser/dom_storage/session_storage_database.cc
@@ -730,9 +730,7 @@
 void SessionStorageDatabase::WriteValuesToMap(const std::string& map_id,
                                               const DOMStorageValuesMap& values,
                                               leveldb::WriteBatch* batch) {
-  for (DOMStorageValuesMap::const_iterator it = values.begin();
-       it != values.end();
-       ++it) {
+  for (auto it = values.begin(); it != values.end(); ++it) {
     base::NullableString16 value = it->second;
     std::string key = MapKey(map_id, base::UTF16ToUTF8(it->first));
     if (value.is_null()) {
diff --git a/content/browser/dom_storage/session_storage_database_unittest.cc b/content/browser/dom_storage/session_storage_database_unittest.cc
index af7de58..c8f00281 100644
--- a/content/browser/dom_storage/session_storage_database_unittest.cc
+++ b/content/browser/dom_storage/session_storage_database_unittest.cc
@@ -336,8 +336,7 @@
     const DOMStorageValuesMap& map1,
     const DOMStorageValuesMap& map2) const {
   ASSERT_EQ(map2.size(), map1.size());
-  for (DOMStorageValuesMap::const_iterator it = map1.begin();
-       it != map1.end(); ++it) {
+  for (auto it = map1.begin(); it != map1.end(); ++it) {
     base::string16 key = it->first;
     ASSERT_TRUE(map2.find(key) != map2.end());
     base::NullableString16 val1 = it->second;
diff --git a/content/browser/dom_storage/session_storage_metadata.cc b/content/browser/dom_storage/session_storage_metadata.cc
index a5c7cc6..772fa0d 100644
--- a/content/browser/dom_storage/session_storage_metadata.cc
+++ b/content/browser/dom_storage/session_storage_metadata.cc
@@ -347,7 +347,7 @@
     const std::string& namespace_id,
     const url::Origin& origin,
     std::vector<BatchedOperationPtr>* delete_operations) {
-  NamespaceEntry ns_entry = namespace_origin_map_.find(namespace_id);
+  auto ns_entry = namespace_origin_map_.find(namespace_id);
   if (ns_entry == namespace_origin_map_.end())
     return;
 
diff --git a/content/browser/dom_storage/session_storage_namespace_impl_mojo_unittest.cc b/content/browser/dom_storage/session_storage_namespace_impl_mojo_unittest.cc
index 5080467..fb9e5c43 100644
--- a/content/browser/dom_storage/session_storage_namespace_impl_mojo_unittest.cc
+++ b/content/browser/dom_storage/session_storage_namespace_impl_mojo_unittest.cc
@@ -59,8 +59,7 @@
     // Create a database that already has a namespace saved.
     metadata_.SetupNewDatabase();
     std::vector<leveldb::mojom::BatchedOperationPtr> save_operations;
-    NamespaceEntry entry =
-        metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_);
+    auto entry = metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_);
     auto map_id =
         metadata_.RegisterNewMap(entry, test_origin1_, &save_operations);
     DCHECK(map_id->KeyPrefix() == StdStringToUint8Vector("map-0-"));
@@ -130,7 +129,7 @@
       const SessionStorageNamespaceImplMojo::OriginAreas& areas_to_clone)
       override {
     std::vector<leveldb::mojom::BatchedOperationPtr> save_operations;
-    NamespaceEntry namespace_entry =
+    auto namespace_entry =
         metadata_.GetOrCreateNamespaceEntry(destination_namespace);
     metadata_.RegisterShallowClonedNamespace(source_namespace, namespace_entry,
                                              &save_operations);
diff --git a/content/browser/dom_storage/storage_area_impl.cc b/content/browser/dom_storage/storage_area_impl.cc
index 63930ec..b5cff87 100644
--- a/content/browser/dom_storage/storage_area_impl.cc
+++ b/content/browser/dom_storage/storage_area_impl.cc
@@ -284,7 +284,7 @@
     new_item_memory = key.size() + sizeof(size_t);
   } else {
     DCHECK_EQ(map_state_, MapState::LOADED_KEYS_AND_VALUES);
-    ValueMap::iterator found = keys_values_map_.find(key);
+    auto found = keys_values_map_.find(key);
     if (found != keys_values_map_.end()) {
       if (found->second == value) {
         std::move(callback).Run(true);  // Key already has this value.
@@ -398,7 +398,7 @@
       commit_batch_->changed_values[key] = std::vector<uint8_t>();
   } else {
     DCHECK_EQ(map_state_, MapState::LOADED_KEYS_AND_VALUES);
-    ValueMap::iterator found = keys_values_map_.find(key);
+    auto found = keys_values_map_.find(key);
     if (found == keys_values_map_.end()) {
       std::move(callback).Run(true);
       return;
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index 7df5b5b6..fa6bd70 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -188,8 +188,7 @@
   if (items_.empty())
     return nullptr;
 
-  std::map<uint32_t, download::MockDownloadItemImpl*>::iterator first_item =
-      items_.begin();
+  auto first_item = items_.begin();
   download::MockDownloadItemImpl* result = first_item->second;
   items_.erase(first_item);
   return result;
diff --git a/content/browser/download/save_package.cc b/content/browser/download/save_package.cc
index 187d622..cba288a 100644
--- a/content/browser/download/save_package.cc
+++ b/content/browser/download/save_package.cc
@@ -441,7 +441,7 @@
   base::FilePath::StringType file_name = base_name + file_name_ext;
 
   // Check whether we already have same name in a case insensitive manner.
-  FileNameSet::const_iterator iter = file_name_set_.find(file_name);
+  auto iter = file_name_set_.find(file_name);
   if (iter == file_name_set_.end()) {
     DCHECK(!file_name.empty());
     file_name_set_.insert(file_name);
@@ -463,7 +463,7 @@
 
   // Prepare the new ordinal number.
   uint32_t ordinal_number;
-  FileNameCountMap::iterator it = file_name_count_map_.find(base_file_name);
+  auto it = file_name_count_map_.find(base_file_name);
   if (it == file_name_count_map_.end()) {
     // First base-name-conflict resolving, use 1 as initial ordinal number.
     file_name_count_map_[base_file_name] = 1;
diff --git a/content/browser/frame_host/debug_urls.cc b/content/browser/frame_host/debug_urls.cc
index 0276f80..85db4c8 100644
--- a/content/browser/frame_host/debug_urls.cc
+++ b/content/browser/frame_host/debug_urls.cc
@@ -59,8 +59,7 @@
   std::vector<PpapiPluginProcessHost*> hosts;
   PpapiPluginProcessHost::FindByName(
       base::UTF8ToUTF16(kFlashPluginName), &hosts);
-  for (std::vector<PpapiPluginProcessHost*>::iterator iter = hosts.begin();
-       iter != hosts.end(); ++iter) {
+  for (auto iter = hosts.begin(); iter != hosts.end(); ++iter) {
     if (crash)
       (*iter)->Send(new PpapiMsg_Crash());
     else
diff --git a/content/browser/frame_host/frame_tree.cc b/content/browser/frame_host/frame_tree.cc
index 8baa4a4..d5d00549 100644
--- a/content/browser/frame_host/frame_tree.cc
+++ b/content/browser/frame_host/frame_tree.cc
@@ -351,8 +351,7 @@
     int32_t widget_routing_id,
     bool swapped_out,
     bool hidden) {
-  RenderViewHostMap::iterator iter =
-      render_view_host_map_.find(site_instance->GetId());
+  auto iter = render_view_host_map_.find(site_instance->GetId());
   if (iter != render_view_host_map_.end())
     return iter->second;
 
@@ -367,8 +366,7 @@
 }
 
 RenderViewHostImpl* FrameTree::GetRenderViewHost(SiteInstance* site_instance) {
-  RenderViewHostMap::iterator iter =
-      render_view_host_map_.find(site_instance->GetId());
+  auto iter = render_view_host_map_.find(site_instance->GetId());
   if (iter != render_view_host_map_.end())
     return iter->second;
 
@@ -377,8 +375,7 @@
 
 void FrameTree::AddRenderViewHostRef(RenderViewHostImpl* render_view_host) {
   SiteInstance* site_instance = render_view_host->GetSiteInstance();
-  RenderViewHostMap::iterator iter =
-      render_view_host_map_.find(site_instance->GetId());
+  auto iter = render_view_host_map_.find(site_instance->GetId());
   CHECK(iter != render_view_host_map_.end());
   CHECK(iter->second == render_view_host);
 
@@ -388,8 +385,7 @@
 void FrameTree::ReleaseRenderViewHostRef(RenderViewHostImpl* render_view_host) {
   SiteInstance* site_instance = render_view_host->GetSiteInstance();
   int32_t site_instance_id = site_instance->GetId();
-  RenderViewHostMap::iterator iter =
-      render_view_host_map_.find(site_instance_id);
+  auto iter = render_view_host_map_.find(site_instance_id);
 
   CHECK(iter != render_view_host_map_.end());
   CHECK_EQ(iter->second, render_view_host);
diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc
index 49d12d5..8563fb7 100644
--- a/content/browser/frame_host/frame_tree_node.cc
+++ b/content/browser/frame_host/frame_tree_node.cc
@@ -82,7 +82,7 @@
 FrameTreeNode* FrameTreeNode::GloballyFindByID(int frame_tree_node_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   FrameTreeNodeIdMap* nodes = g_frame_tree_node_id_map.Pointer();
-  FrameTreeNodeIdMap::iterator it = nodes->find(frame_tree_node_id);
+  auto it = nodes->find(frame_tree_node_id);
   return it == nodes->end() ? nullptr : it->second;
 }
 
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index f17c20d..f206f1e 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -310,8 +310,7 @@
 
   static_cast<WebContentsImpl*>(web_contents_)->DidChangeVisibleSecurityState();
 
-  InterstitialPageMap::iterator iter =
-      g_web_contents_to_interstitial_page->find(web_contents_);
+  auto iter = g_web_contents_to_interstitial_page->find(web_contents_);
   DCHECK(iter != g_web_contents_to_interstitial_page->end());
   if (iter != g_web_contents_to_interstitial_page->end())
     g_web_contents_to_interstitial_page->erase(iter);
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index 56b8311..bd5221c 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -1661,10 +1661,8 @@
   needs_reload_ = needs_reload;
   InsertEntriesFrom(source, source.GetEntryCount());
 
-  for (SessionStorageNamespaceMap::const_iterator it =
-           source.session_storage_namespace_map_.begin();
-       it != source.session_storage_namespace_map_.end();
-       ++it) {
+  for (auto it = source.session_storage_namespace_map_.begin();
+       it != source.session_storage_namespace_map_.end(); ++it) {
     SessionStorageNamespaceImpl* source_namespace =
         static_cast<SessionStorageNamespaceImpl*>(it->second.get());
     session_storage_namespace_map_[it->first] = source_namespace->Clone();
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index f1b34e9..43af58f 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -4004,12 +4004,9 @@
       other_controller.GetSessionStorageNamespaceMap();
   EXPECT_EQ(session_storage_namespace_map.size(),
             other_session_storage_namespace_map.size());
-  for (SessionStorageNamespaceMap::const_iterator it =
-           session_storage_namespace_map.begin();
-       it != session_storage_namespace_map.end();
-       ++it) {
-    SessionStorageNamespaceMap::const_iterator other =
-        other_session_storage_namespace_map.find(it->first);
+  for (auto it = session_storage_namespace_map.begin();
+       it != session_storage_namespace_map.end(); ++it) {
+    auto other = other_session_storage_namespace_map.find(it->first);
     EXPECT_TRUE(other != other_session_storage_namespace_map.end());
   }
 }
diff --git a/content/browser/frame_host/navigation_entry_impl.cc b/content/browser/frame_host/navigation_entry_impl.cc
index bd85169..ff776ee 100644
--- a/content/browser/frame_host/navigation_entry_impl.cc
+++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -613,8 +613,7 @@
 
 bool NavigationEntryImpl::GetExtraData(const std::string& key,
                                        base::string16* data) const {
-  std::map<std::string, base::string16>::const_iterator iter =
-      extra_data_.find(key);
+  auto iter = extra_data_.find(key);
   if (iter == extra_data_.end())
     return false;
   *data = iter->second;
diff --git a/content/browser/frame_host/origin_policy_throttle.cc b/content/browser/frame_host/origin_policy_throttle.cc
index 724d4f8..323db40 100644
--- a/content/browser/frame_host/origin_policy_throttle.cc
+++ b/content/browser/frame_host/origin_policy_throttle.cc
@@ -120,7 +120,7 @@
   DCHECK(!origin.Serialize().empty());
   DCHECK(!origin.opaque());
   KnownVersionMap& versions = GetKnownVersions();
-  KnownVersionMap::iterator iter = versions.find(origin);
+  auto iter = versions.find(origin);
 
   // Process policy deletion first!
   if (header_found && response_version == kDeletePolicy) {
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 34e4ea2..9d82fe28 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -616,8 +616,7 @@
                                                  int routing_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RoutingIDFrameMap* frames = g_routing_id_frame_map.Pointer();
-  RoutingIDFrameMap::iterator it = frames->find(
-      RenderFrameHostID(process_id, routing_id));
+  auto it = frames->find(RenderFrameHostID(process_id, routing_id));
   return it == frames->end() ? NULL : it->second;
 }
 
@@ -2413,8 +2412,7 @@
     return;
   }
 
-  std::map<int, JavaScriptResultCallback>::iterator it =
-      javascript_callbacks_.find(id);
+  auto it = javascript_callbacks_.find(id);
   if (it != javascript_callbacks_.end()) {
     it->second.Run(result_value);
     javascript_callbacks_.erase(it);
@@ -5653,7 +5651,7 @@
   // be modified to take |validated_params| by const reference.
   process->FilterURL(false, &validated_params->url);
   process->FilterURL(true, &validated_params->referrer.url);
-  for (std::vector<GURL>::iterator it(validated_params->redirects.begin());
+  for (auto it(validated_params->redirects.begin());
        it != validated_params->redirects.end(); ++it) {
     process->FilterURL(false, &(*it));
   }
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index dc90d7d..a6499cf 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -446,9 +446,8 @@
 
 bool RenderFrameHostManager::DeleteFromPendingList(
     RenderFrameHostImpl* render_frame_host) {
-  for (RFHPendingDeleteList::iterator iter = pending_delete_hosts_.begin();
-       iter != pending_delete_hosts_.end();
-       iter++) {
+  for (auto iter = pending_delete_hosts_.begin();
+       iter != pending_delete_hosts_.end(); iter++) {
     if (iter->get() == render_frame_host) {
       pending_delete_hosts_.erase(iter);
       return true;
diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc
index c357287..80d51c9 100644
--- a/content/browser/frame_host/render_frame_proxy_host.cc
+++ b/content/browser/frame_host/render_frame_proxy_host.cc
@@ -45,8 +45,7 @@
                                                    int routing_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RoutingIDFrameProxyMap* frames = g_routing_id_frame_proxy_map.Pointer();
-  RoutingIDFrameProxyMap::iterator it = frames->find(
-      RenderFrameProxyHostID(process_id, routing_id));
+  auto it = frames->find(RenderFrameProxyHostID(process_id, routing_id));
   return it == frames->end() ? NULL : it->second;
 }
 
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index 67b5a059..03a570f 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -821,7 +821,7 @@
   // TODO(kbr): make this pay attention to the TDR thresholds in the
   // Windows registry, but make sure it continues to be testable.
   {
-    std::list<base::Time>::iterator iter = timestamps_of_gpu_resets_.begin();
+    auto iter = timestamps_of_gpu_resets_.begin();
     int num_resets_within_timeframe = 0;
     while (iter != timestamps_of_gpu_resets_.end()) {
       base::Time time = *iter;
diff --git a/content/browser/histogram_synchronizer.cc b/content/browser/histogram_synchronizer.cc
index 92fab9e..9dc2eed 100644
--- a/content/browser/histogram_synchronizer.cc
+++ b/content/browser/histogram_synchronizer.cc
@@ -96,8 +96,7 @@
   static RequestContext* GetRequestContext(int sequence_number) {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-    RequestContextMap::iterator it =
-        outstanding_requests_.Get().find(sequence_number);
+    auto it = outstanding_requests_.Get().find(sequence_number);
     if (it == outstanding_requests_.Get().end())
       return nullptr;
 
@@ -112,8 +111,7 @@
   static void Unregister(int sequence_number) {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-    RequestContextMap::iterator it =
-        outstanding_requests_.Get().find(sequence_number);
+    auto it = outstanding_requests_.Get().find(sequence_number);
     if (it == outstanding_requests_.Get().end())
       return;
 
@@ -137,7 +135,7 @@
   static void OnShutdown() {
     // Just in case we have any pending tasks, clear them out.
     while (!outstanding_requests_.Get().empty()) {
-      RequestContextMap::iterator it = outstanding_requests_.Get().begin();
+      auto it = outstanding_requests_.Get().begin();
       delete it->second;
       outstanding_requests_.Get().erase(it);
     }
diff --git a/content/browser/host_zoom_map_impl.cc b/content/browser/host_zoom_map_impl.cc
index 34775d02..b97855d 100644
--- a/content/browser/host_zoom_map_impl.cc
+++ b/content/browser/host_zoom_map_impl.cc
@@ -153,8 +153,7 @@
 bool HostZoomMapImpl::HasZoomLevel(const std::string& scheme,
                                    const std::string& host) const {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  SchemeHostZoomLevels::const_iterator scheme_iterator(
-      scheme_host_zoom_levels_.find(scheme));
+  auto scheme_iterator(scheme_host_zoom_levels_.find(scheme));
 
   const HostZoomLevels& zoom_levels =
       (scheme_iterator != scheme_host_zoom_levels_.end())
@@ -168,10 +167,9 @@
     const std::string& scheme,
     const std::string& host) const {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  SchemeHostZoomLevels::const_iterator scheme_iterator(
-      scheme_host_zoom_levels_.find(scheme));
+  auto scheme_iterator(scheme_host_zoom_levels_.find(scheme));
   if (scheme_iterator != scheme_host_zoom_levels_.end()) {
-    HostZoomLevels::const_iterator i(scheme_iterator->second.find(host));
+    auto i(scheme_iterator->second.find(host));
     if (i != scheme_iterator->second.end())
       return i->second.level;
   }
@@ -499,7 +497,7 @@
                                               int render_view_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RenderViewKey key(render_process_id, render_view_id);
-  TemporaryZoomLevels::iterator it = temporary_zoom_levels_.find(key);
+  auto it = temporary_zoom_levels_.find(key);
   if (it == temporary_zoom_levels_.end())
     return;
 
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry.cc b/content/browser/indexed_db/indexed_db_active_blob_registry.cc
index a3edf62..370906e 100644
--- a/content/browser/indexed_db/indexed_db_active_blob_registry.cc
+++ b/content/browser/indexed_db/indexed_db_active_blob_registry.cc
@@ -29,7 +29,7 @@
   DCHECK(!base::ContainsKey(deleted_dbs_, database_id));
   bool need_ref = use_tracker_.empty();
   SingleDBMap& single_db_map = use_tracker_[database_id];
-  SingleDBMap::iterator iter = single_db_map.find(blob_key);
+  auto iter = single_db_map.find(blob_key);
   if (iter == single_db_map.end()) {
     single_db_map[blob_key] = false;
     if (need_ref) {
@@ -54,7 +54,7 @@
     return;
   }
   SingleDBMap& single_db = db_pair->second;
-  SingleDBMap::iterator blob_pair = single_db.find(blob_key);
+  auto blob_pair = single_db.find(blob_key);
   if (blob_pair == single_db.end()) {
     NOTREACHED();
     return;
@@ -97,7 +97,7 @@
   }
 
   SingleDBMap& single_db = db_pair->second;
-  SingleDBMap::iterator iter = single_db.find(blob_key);
+  auto iter = single_db.find(blob_key);
   if (iter == single_db.end())
     return false;
 
diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc
index 979377b..bea395b 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store.cc
@@ -1886,9 +1886,8 @@
   // matching (database_id, blob_key) tuple, we should move it to the primary
   // journal.
   BlobJournalType new_live_blob_journal;
-  for (BlobJournalType::iterator journal_iter = live_blob_journal.begin();
-       journal_iter != live_blob_journal.end();
-       ++journal_iter) {
+  for (auto journal_iter = live_blob_journal.begin();
+       journal_iter != live_blob_journal.end(); ++journal_iter) {
     int64_t current_database_id = journal_iter->first;
     int64_t current_blob_key = journal_iter->second;
     bool current_all_blobs =
diff --git a/content/browser/indexed_db/indexed_db_context_impl.cc b/content/browser/indexed_db/indexed_db_context_impl.cc
index 5a24194f..d9d8f896 100644
--- a/content/browser/indexed_db/indexed_db_context_impl.cc
+++ b/content/browser/indexed_db/indexed_db_context_impl.cc
@@ -200,9 +200,7 @@
       std::unique_ptr<base::ListValue> database_list(
           std::make_unique<base::ListValue>());
 
-      for (IndexedDBFactory::OriginDBMapIterator it = range.first;
-           it != range.second;
-           ++it) {
+      for (auto it = range.first; it != range.second; ++it) {
         const IndexedDBDatabase* db = it->second;
         std::unique_ptr<base::DictionaryValue> db_info(
             std::make_unique<base::DictionaryValue>());
diff --git a/content/browser/indexed_db/indexed_db_factory_impl.cc b/content/browser/indexed_db/indexed_db_factory_impl.cc
index da555dc5..e7bb4a7 100644
--- a/content/browser/indexed_db/indexed_db_factory_impl.cc
+++ b/content/browser/indexed_db/indexed_db_factory_impl.cc
@@ -138,7 +138,7 @@
   std::pair<OriginDBMap::iterator, OriginDBMap::iterator> range =
       origin_dbs_.equal_range(database->identifier().first);
   DCHECK(range.first != range.second);
-  for (OriginDBMap::iterator it2 = range.first; it2 != range.second; ++it2) {
+  for (auto it2 = range.first; it2 != range.second; ++it2) {
     if (it2->second == database) {
       origin_dbs_.erase(it2);
       break;
@@ -768,7 +768,7 @@
   size_t count(0);
 
   OriginDBs range = GetOpenDatabasesForOrigin(origin);
-  for (OriginDBMapIterator it = range.first; it != range.second; ++it)
+  for (auto it = range.first; it != range.second; ++it)
     count += it->second->ConnectionCount();
 
   return count;
diff --git a/content/browser/indexed_db/indexed_db_transaction_coordinator.cc b/content/browser/indexed_db/indexed_db_transaction_coordinator.cc
index 91dd9571..f8e127b 100644
--- a/content/browser/indexed_db/indexed_db_transaction_coordinator.cc
+++ b/content/browser/indexed_db/indexed_db_transaction_coordinator.cc
@@ -147,8 +147,8 @@
 template<typename T>
 static bool DoSetsIntersect(const std::set<T>& set1,
                             const std::set<T>& set2) {
-  typename std::set<T>::const_iterator it1 = set1.begin();
-  typename std::set<T>::const_iterator it2 = set2.begin();
+  auto it1 = set1.begin();
+  auto it2 = set2.begin();
   while (it1 != set1.end() && it2 != set2.end()) {
     if (*it1 < *it2)
       ++it1;
diff --git a/content/browser/indexed_db/leveldb/leveldb_transaction.cc b/content/browser/indexed_db/leveldb/leveldb_transaction.cc
index 89035f6..97690b6 100644
--- a/content/browser/indexed_db/leveldb/leveldb_transaction.cc
+++ b/content/browser/indexed_db/leveldb/leveldb_transaction.cc
@@ -46,7 +46,7 @@
                              std::string* value,
                              bool deleted) {
   DCHECK(!finished_);
-  DataType::iterator it = data_.find(key);
+  auto it = data_.find(key);
 
   if (it == data_.end()) {
     std::unique_ptr<Record> record = std::make_unique<Record>();
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index c0a78b1..bd2a4a6 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -373,8 +373,7 @@
   typedef std::vector<std::unique_ptr<ResourceLoader>> LoaderList;
   LoaderList loaders_to_cancel;
 
-  for (LoaderMap::iterator i = pending_loaders_.begin();
-       i != pending_loaders_.end();) {
+  for (auto i = pending_loaders_.begin(); i != pending_loaders_.end();) {
     ResourceLoader* loader = i->second.get();
     if (loader->GetRequestInfo()->GetContext() == context) {
       loaders_to_cancel.push_back(std::move(i->second));
@@ -389,7 +388,7 @@
     }
   }
 
-  for (BlockedLoadersMap::iterator i = blocked_loaders_map_.begin();
+  for (auto i = blocked_loaders_map_.begin();
        i != blocked_loaders_map_.end();) {
     BlockedLoadersList* loaders = i->second.get();
     if (loaders->empty()) {
@@ -771,8 +770,7 @@
   // the request needs to be aborted or continued.
   for (net::HttpRequestHeaders::Iterator it(request_data.headers);
        it.GetNext();) {
-    HeaderInterceptorMap::iterator index =
-        http_header_interceptor_map_.find(it.name());
+    auto index = http_header_interceptor_map_.find(it.name());
     if (index != http_header_interceptor_map_.end()) {
       HeaderInterceptorInfo& interceptor_info = index->second;
 
@@ -1276,7 +1274,7 @@
 
   // Remove matches.
   for (size_t i = 0; i < matching_requests.size(); ++i) {
-    LoaderMap::iterator iter = pending_loaders_.find(matching_requests[i]);
+    auto iter = pending_loaders_.find(matching_requests[i]);
     // Although every matching request was in pending_requests_ when we built
     // matching_requests, it is normal for a matching request to be not found
     // in pending_requests_ after we have removed some matching requests from
@@ -1315,8 +1313,7 @@
 // Cancels the request and removes it from the list.
 void ResourceDispatcherHostImpl::RemovePendingRequest(int child_id,
                                                       int request_id) {
-  LoaderMap::iterator i = pending_loaders_.find(
-      GlobalRequestID(child_id, request_id));
+  auto i = pending_loaders_.find(GlobalRequestID(child_id, request_id));
   if (i == pending_loaders_.end()) {
     NOTREACHED() << "Trying to remove a request that's not here";
     return;
@@ -1355,8 +1352,7 @@
 ResourceDispatcherHostImpl::OustandingRequestsStats
 ResourceDispatcherHostImpl::GetOutstandingRequestsStats(
     const ResourceRequestInfoImpl& info) {
-  OutstandingRequestsStatsMap::iterator entry =
-      outstanding_requests_stats_map_.find(info.GetChildID());
+  auto entry = outstanding_requests_stats_map_.find(info.GetChildID());
   OustandingRequestsStats stats = { 0, 0 };
   if (entry != outstanding_requests_stats_map_.end())
     stats = entry->second;
@@ -2048,8 +2044,7 @@
 void ResourceDispatcherHostImpl::ProcessBlockedRequestsForRoute(
     const GlobalFrameRoutingId& global_routing_id,
     bool cancel_requests) {
-  BlockedLoadersMap::iterator iter =
-      blocked_loaders_map_.find(global_routing_id);
+  auto iter = blocked_loaders_map_.find(global_routing_id);
   if (iter == blocked_loaders_map_.end()) {
     // It's possible to reach here if the renderer crashed while an interstitial
     // page was showing.
@@ -2105,7 +2100,7 @@
     const GlobalRequestID& id) const {
   DCHECK(io_thread_task_runner_->BelongsToCurrentThread());
 
-  LoaderMap::const_iterator i = pending_loaders_.find(id);
+  auto i = pending_loaders_.find(id);
   if (i == pending_loaders_.end())
     return nullptr;
 
diff --git a/content/browser/loader/resource_dispatcher_host_unittest.cc b/content/browser/loader/resource_dispatcher_host_unittest.cc
index 8796ec1..eeaff0c 100644
--- a/content/browser/loader/resource_dispatcher_host_unittest.cc
+++ b/content/browser/loader/resource_dispatcher_host_unittest.cc
@@ -716,8 +716,7 @@
     EXPECT_TRUE(URLRequestTestDelayedStartJob::DelayedStartQueueEmpty());
     URLRequestTestDelayedStartJob::ClearQueue();
 
-    for (std::set<int>::iterator it = child_ids_.begin();
-         it != child_ids_.end(); ++it) {
+    for (auto it = child_ids_.begin(); it != child_ids_.end(); ++it) {
       host_.CancelRequestsForProcess(*it);
     }
 
diff --git a/content/browser/media/capture/audio_mirroring_manager.cc b/content/browser/media/capture/audio_mirroring_manager.cc
index 32544941..c630a2b8 100644
--- a/content/browser/media/capture/audio_mirroring_manager.cc
+++ b/content/browser/media/capture/audio_mirroring_manager.cc
@@ -50,7 +50,7 @@
 
   // Find and remove the entry from the routing table.  If the stream is being
   // diverted, it is stopped.
-  for (StreamRoutes::iterator it = routes_.begin(); it != routes_.end(); ++it) {
+  for (auto it = routes_.begin(); it != routes_.end(); ++it) {
     if (it->diverter == diverter) {
       // Stop the diverted flow.
       RouteDivertedFlow(&(*it), nullptr);
@@ -103,7 +103,7 @@
   // Each stopped stream becomes a candidate to be diverted to another
   // destination.
   std::set<GlobalFrameRoutingId> redivert_candidates;
-  for (StreamRoutes::iterator it = routes_.begin(); it != routes_.end(); ++it) {
+  for (auto it = routes_.begin(); it != routes_.end(); ++it) {
     if (it->destination == destination) {
       RouteDivertedFlow(&(*it), nullptr);
       redivert_candidates.insert(it->source_render_frame);
@@ -202,7 +202,7 @@
   // Start/stop diverting based on |matches|.  Any stopped stream becomes a
   // candidate to be diverted to another destination.
   std::set<GlobalFrameRoutingId> redivert_candidates;
-  for (StreamRoutes::iterator it = routes_.begin(); it != routes_.end(); ++it) {
+  for (auto it = routes_.begin(); it != routes_.end(); ++it) {
     if (matches.find(it->source_render_frame) != matches.end()) {
       // Only change the route if the stream is not already being diverted.
       if (!it->destination)
@@ -230,7 +230,7 @@
     return;  // Query result callback invoked after StopMirroring().
   }
 
-  for (StreamRoutes::iterator it = routes_.begin(); it != routes_.end(); ++it) {
+  for (auto it = routes_.begin(); it != routes_.end(); ++it) {
     if (matches.find(it->source_render_frame) != matches.end()) {
       // The same destination cannot have both a diverted audio flow and a
       // duplicated flow from the same source.
diff --git a/content/browser/media/capture/audio_mirroring_manager_unittest.cc b/content/browser/media/capture/audio_mirroring_manager_unittest.cc
index a662d2a9..a2e4137 100644
--- a/content/browser/media/capture/audio_mirroring_manager_unittest.cc
+++ b/content/browser/media/capture/audio_mirroring_manager_unittest.cc
@@ -197,7 +197,7 @@
   int CountStreamsDivertedTo(
       const std::unique_ptr<MockMirroringDestination>& dest) const {
     int count = 0;
-    for (StreamRoutes::const_iterator it = mirroring_manager_.routes_.begin();
+    for (auto it = mirroring_manager_.routes_.begin();
          it != mirroring_manager_.routes_.end(); ++it) {
       if (it->destination == dest.get())
         ++count;
@@ -208,7 +208,7 @@
   int CountStreamsDuplicatedTo(
       const std::unique_ptr<MockMirroringDestination>& dest) const {
     int count = 0;
-    for (StreamRoutes::const_iterator it = mirroring_manager_.routes_.begin();
+    for (auto it = mirroring_manager_.routes_.begin();
          it != mirroring_manager_.routes_.end(); ++it) {
       if (it->duplications.find(dest.get()) != it->duplications.end())
         ++count;
diff --git a/content/browser/media/capture/desktop_streams_registry_impl.cc b/content/browser/media/capture/desktop_streams_registry_impl.cc
index b74af41..5c78c89 100644
--- a/content/browser/media/capture/desktop_streams_registry_impl.cc
+++ b/content/browser/media/capture/desktop_streams_registry_impl.cc
@@ -84,7 +84,7 @@
     const DesktopStreamRegistryType type) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-  StreamsMap::iterator it = approved_streams_.find(id);
+  auto it = approved_streams_.find(id);
 
   // Verify that if there is a request with the specified ID it was created for
   // the same origin and the same renderer.
diff --git a/content/browser/notification_service_impl.cc b/content/browser/notification_service_impl.cc
index 9f38bb0..12581ec 100644
--- a/content/browser/notification_service_impl.cc
+++ b/content/browser/notification_service_impl.cc
@@ -146,8 +146,7 @@
 
   for (int i = 0; i < static_cast<int>(observers_.size()); i++) {
     NotificationSourceMap omap = observers_[i];
-    for (NotificationSourceMap::iterator it = omap.begin();
-         it != omap.end(); ++it)
+    for (auto it = omap.begin(); it != omap.end(); ++it)
       delete it->second;
   }
 }
diff --git a/content/browser/plugin_data_remover_impl.cc b/content/browser/plugin_data_remover_impl.cc
index 72ab57708..43ec1a50 100644
--- a/content/browser/plugin_data_remover_impl.cc
+++ b/content/browser/plugin_data_remover_impl.cc
@@ -50,8 +50,7 @@
   PluginService::GetInstance()->GetPluginInfoArray(
       GURL(), kFlashPluginSwfMimeType, allow_wildcard, &plugins, nullptr);
   base::Version min_version(kMinFlashVersion);
-  for (std::vector<WebPluginInfo>::iterator it = plugins.begin();
-       it != plugins.end(); ++it) {
+  for (auto it = plugins.begin(); it != plugins.end(); ++it) {
     base::Version version;
     WebPluginInfo::CreateVersionFromString(it->version, &version);
     if (version.IsValid() && min_version.CompareTo(version) == -1)
diff --git a/content/browser/plugin_service_impl.cc b/content/browser/plugin_service_impl.cc
index 36fb2c8..7834d3d1 100644
--- a/content/browser/plugin_service_impl.cc
+++ b/content/browser/plugin_service_impl.cc
@@ -415,8 +415,7 @@
 
 void PluginServiceImpl::RegisterPluginCrash(const base::FilePath& path) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  std::map<base::FilePath, std::vector<base::Time> >::iterator i =
-      crash_times_.find(path);
+  auto i = crash_times_.find(path);
   if (i == crash_times_.end()) {
     crash_times_[path] = std::vector<base::Time>();
     i = crash_times_.find(path);
diff --git a/content/browser/portal/portal_browsertest.cc b/content/browser/portal/portal_browsertest.cc
index ad80fe2..82fdddf2 100644
--- a/content/browser/portal/portal_browsertest.cc
+++ b/content/browser/portal/portal_browsertest.cc
@@ -350,7 +350,7 @@
 #else
 #define MAYBE_ActivatePortalInShell ActivatePortalInShell
 #endif
-IN_PROC_BROWSER_TEST_F(PortalBrowserTest, ActivatePortalInShell) {
+IN_PROC_BROWSER_TEST_F(PortalBrowserTest, MAYBE_ActivatePortalInShell) {
   EXPECT_TRUE(NavigateToURL(
       shell(), embedded_test_server()->GetURL("portal.test", "/title1.html")));
   WebContentsImpl* web_contents_impl =
diff --git a/content/browser/renderer_host/media/audio_input_device_manager.cc b/content/browser/renderer_host/media/audio_input_device_manager.cc
index f25a306..26172e5 100644
--- a/content/browser/renderer_host/media/audio_input_device_manager.cc
+++ b/content/browser/renderer_host/media/audio_input_device_manager.cc
@@ -59,7 +59,7 @@
 const MediaStreamDevice* AudioInputDeviceManager::GetOpenedDeviceById(
     int session_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  MediaStreamDevices::iterator device = GetDevice(session_id);
+  auto device = GetDevice(session_id);
   if (device == devices_.end())
     return nullptr;
 
@@ -117,7 +117,7 @@
 
 void AudioInputDeviceManager::Close(int session_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  MediaStreamDevices::iterator device = GetDevice(session_id);
+  auto device = GetDevice(session_id);
   if (device == devices_.end())
     return;
   const MediaStreamType stream_type = device->type;
@@ -223,8 +223,7 @@
 
 MediaStreamDevices::iterator AudioInputDeviceManager::GetDevice(
     int session_id) {
-  for (MediaStreamDevices::iterator it = devices_.begin(); it != devices_.end();
-       ++it) {
+  for (auto it = devices_.begin(); it != devices_.end(); ++it) {
     if (it->session_id == session_id)
       return it;
   }
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index 3348445d..280d5f2 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -713,7 +713,7 @@
 void MediaStreamManager::CancelAllRequests(int render_process_id,
                                            int render_frame_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  DeviceRequests::iterator request_it = requests_.begin();
+  auto request_it = requests_.begin();
   while (request_it != requests_.end()) {
     if (request_it->second->requesting_process_id != render_process_id ||
         request_it->second->requesting_frame_id != render_frame_id) {
@@ -773,7 +773,7 @@
   DVLOG(1) << "StopDevice"
            << "{type = " << type << "}"
            << "{session_id = " << session_id << "}";
-  DeviceRequests::iterator request_it = requests_.begin();
+  auto request_it = requests_.begin();
   while (request_it != requests_.end()) {
     DeviceRequest* request = request_it->second;
     MediaStreamDevices* devices = &request->devices;
@@ -782,7 +782,7 @@
       ++request_it;
       continue;
     }
-    MediaStreamDevices::iterator device_it = devices->begin();
+    auto device_it = devices->begin();
     while (device_it != devices->end()) {
       if (device_it->type != type || device_it->session_id != session_id) {
         ++device_it;
@@ -1034,8 +1034,8 @@
 void MediaStreamManager::DeleteRequest(const std::string& label) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DVLOG(1) << "DeleteRequest({label= " << label << "})";
-  for (DeviceRequests::iterator request_it = requests_.begin();
-       request_it != requests_.end(); ++request_it) {
+  for (auto request_it = requests_.begin(); request_it != requests_.end();
+       ++request_it) {
     if (request_it->first == label) {
       std::unique_ptr<DeviceRequest> request(request_it->second);
       requests_.erase(request_it);
diff --git a/content/browser/renderer_host/media/media_stream_track_metrics_host.cc b/content/browser/renderer_host/media/media_stream_track_metrics_host.cc
index 4d22fb1c..120bc443 100644
--- a/content/browser/renderer_host/media/media_stream_track_metrics_host.cc
+++ b/content/browser/renderer_host/media/media_stream_track_metrics_host.cc
@@ -21,9 +21,7 @@
 MediaStreamTrackMetricsHost::~MediaStreamTrackMetricsHost() {
   // Our render process has exited. We won't receive any more IPC
   // messages from it. Assume all tracks ended now.
-  for (TrackMap::iterator it = tracks_.begin();
-       it != tracks_.end();
-       ++it) {
+  for (auto it = tracks_.begin(); it != tracks_.end(); ++it) {
     TrackInfo& info = it->second;
     ReportDuration(info);
   }
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc
index 943a684..ec2803c 100644
--- a/content/browser/renderer_host/media/video_capture_manager.cc
+++ b/content/browser/renderer_host/media/video_capture_manager.cc
@@ -181,7 +181,7 @@
                 << capture_session_id;
   EmitLogMessage(string_stream.str(), 1);
 
-  SessionMap::iterator session_it = sessions_.find(capture_session_id);
+  auto session_it = sessions_.find(capture_session_id);
   if (session_it == sessions_.end()) {
     return;
   }
@@ -259,7 +259,7 @@
 
 void VideoCaptureManager::ProcessDeviceStartRequestQueue() {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  DeviceStartQueue::iterator request = device_start_request_queue_.begin();
+  auto request = device_start_request_queue_.begin();
   if (request == device_start_request_queue_.end())
     return;
 
@@ -516,7 +516,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(supported_formats->empty());
 
-  SessionMap::iterator it = sessions_.find(capture_session_id);
+  auto it = sessions_.find(capture_session_id);
   if (it == sessions_.end())
     return false;
   std::ostringstream string_stream;
@@ -545,7 +545,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(formats_in_use->empty());
 
-  SessionMap::iterator it = sessions_.find(capture_session_id);
+  auto it = sessions_.find(capture_session_id);
   if (it == sessions_.end())
     return false;
   std::ostringstream string_stream;
@@ -582,7 +582,7 @@
 
 void VideoCaptureManager::MaybePostDesktopCaptureWindowId(
     media::VideoCaptureSessionId session_id) {
-  SessionMap::iterator session_it = sessions_.find(session_id);
+  auto session_it = sessions_.find(session_id);
   if (session_it == sessions_.end())
     return;
 
@@ -812,7 +812,7 @@
     const media::VideoCaptureParams& params) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
-  SessionMap::iterator session_it = sessions_.find(capture_session_id);
+  auto session_it = sessions_.find(capture_session_id);
   if (session_it == sessions_.end())
     return nullptr;
   const MediaStreamDevice& device_info = session_it->second;
diff --git a/content/browser/renderer_host/media/video_capture_manager_unittest.cc b/content/browser/renderer_host/media/video_capture_manager_unittest.cc
index 61f9f83..b9d98f0 100644
--- a/content/browser/renderer_host/media/video_capture_manager_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_manager_unittest.cc
@@ -691,7 +691,7 @@
   EXPECT_CALL(*listener_, Opened(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(2);
   EXPECT_CALL(*listener_, Closed(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(2);
 
-  MediaStreamDevices::iterator it = devices_.begin();
+  auto it = devices_.begin();
 
   int video_session_id_first = vcm_->Open(*it);
   ++it;
diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
index c41c809..a53e3155 100644
--- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
@@ -137,7 +137,7 @@
     PepperFileIOHost* file_io_host,
     const ppapi::FileGrowth& file_growth) {
   int32_t id = file_io_host->pp_resource();
-  FileMap::iterator it = files_.find(id);
+  auto it = files_.find(id);
   if (it != files_.end()) {
     files_.erase(it);
   } else {
diff --git a/content/browser/renderer_host/pepper/quota_reservation.cc b/content/browser/renderer_host/pepper/quota_reservation.cc
index 5fdb141..72f6123 100644
--- a/content/browser/renderer_host/pepper/quota_reservation.cc
+++ b/content/browser/renderer_host/pepper/quota_reservation.cc
@@ -48,7 +48,7 @@
 QuotaReservation::~QuotaReservation() {
   // We should have no open files at this point.
   DCHECK(files_.size() == 0);
-  for (FileMap::iterator it = files_.begin(); it != files_.end(); ++it)
+  for (auto it = files_.begin(); it != files_.end(); ++it)
     delete it->second;
 }
 
@@ -83,7 +83,7 @@
 
 void QuotaReservation::CloseFile(int32_t id,
                                  const ppapi::FileGrowth& file_growth) {
-  FileMap::iterator it = files_.find(id);
+  auto it = files_.find(id);
   if (it != files_.end()) {
     it->second->UpdateMaxWrittenOffset(file_growth.max_written_offset);
     it->second->AddAppendModeWriteAmount(file_growth.append_mode_write_amount);
@@ -97,9 +97,8 @@
 void QuotaReservation::ReserveQuota(int64_t amount,
                                     const ppapi::FileGrowthMap& file_growths,
                                     const ReserveQuotaCallback& callback) {
-  for (FileMap::iterator it = files_.begin(); it != files_.end(); ++it) {
-    ppapi::FileGrowthMap::const_iterator growth_it =
-        file_growths.find(it->first);
+  for (auto it = files_.begin(); it != files_.end(); ++it) {
+    auto growth_it = file_growths.find(it->first);
     if (growth_it != file_growths.end()) {
       it->second->UpdateMaxWrittenOffset(growth_it->second.max_written_offset);
       it->second->AddAppendModeWriteAmount(
@@ -118,7 +117,7 @@
 void QuotaReservation::GotReservedQuota(const ReserveQuotaCallback& callback,
                                         base::File::Error error) {
   ppapi::FileSizeMap file_sizes;
-  for (FileMap::iterator it = files_.begin(); it != files_.end(); ++it)
+  for (auto it = files_.begin(); it != files_.end(); ++it)
     file_sizes[it->first] = it->second->GetMaxWrittenOffset();
 
   if (file_system_context_.get()) {
diff --git a/content/browser/renderer_host/pepper/quota_reservation_unittest.cc b/content/browser/renderer_host/pepper/quota_reservation_unittest.cc
index 204ed5a..cc2f82f5 100644
--- a/content/browser/renderer_host/pepper/quota_reservation_unittest.cc
+++ b/content/browser/renderer_host/pepper/quota_reservation_unittest.cc
@@ -136,9 +136,8 @@
   *reserved_quota_ptr = reserved_quota;
 
   file_growths_ptr->clear();
-  for (ppapi::FileSizeMap::const_iterator it = maximum_written_offsets.begin();
-       it != maximum_written_offsets.end();
-       ++it)
+  for (auto it = maximum_written_offsets.begin();
+       it != maximum_written_offsets.end(); ++it)
     (*file_growths_ptr)[it->first] = ppapi::FileGrowth(it->second, 0);
 }
 
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 6da5e15..07ec546a 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -422,13 +422,13 @@
     // two WebContents with blank SiteInstances. If that occurs, keeping the
     // exising entry and not overwriting it is a predictable behavior that is
     // safe.
-    SiteToProcessMap::iterator i = map_.find(site);
+    auto i = map_.find(site);
     if (i == map_.end())
       map_[site] = process;
   }
 
   RenderProcessHost* FindProcess(const std::string& site) {
-    SiteToProcessMap::iterator i = map_.find(site);
+    auto i = map_.find(site);
     if (i != map_.end())
       return i->second;
     return nullptr;
@@ -443,9 +443,8 @@
       if (i->second == host)
         sites.insert(i->first);
     }
-    for (std::set<std::string>::iterator i = sites.begin(); i != sites.end();
-         ++i) {
-      SiteToProcessMap::iterator iter = map_.find(*i);
+    for (auto i = sites.begin(); i != sites.end(); ++i) {
+      auto iter = map_.find(*i);
       if (iter != map_.end()) {
         DCHECK_EQ(iter->second, host);
         map_.erase(iter);
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 9442799..6d5570f 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -187,8 +187,7 @@
 RenderViewHostImpl* RenderViewHostImpl::FromID(int process_id, int routing_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RoutingIDViewMap* views = g_routing_id_view_map.Pointer();
-  RoutingIDViewMap::iterator it =
-      views->find(RenderViewHostID(process_id, routing_id));
+  auto it = views->find(RenderViewHostID(process_id, routing_id));
   return it == views->end() ? nullptr : it->second;
 }
 
@@ -725,8 +724,7 @@
     int request_id,
     const std::vector<base::FilePath>& files) {
   // Grant the security access requested to the given files.
-  for (std::vector<base::FilePath>::const_iterator file = files.begin();
-       file != files.end(); ++file) {
+  for (auto file = files.begin(); file != files.end(); ++file) {
     ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile(
         GetProcess()->GetID(), *file);
   }
diff --git a/content/browser/renderer_host/render_widget_helper.cc b/content/browser/renderer_host/render_widget_helper.cc
index 4376c124..2fe9789 100644
--- a/content/browser/renderer_host/render_widget_helper.cc
+++ b/content/browser/renderer_host/render_widget_helper.cc
@@ -41,7 +41,7 @@
 
   // Delete this RWH from the map if it is found.
   WidgetHelperMap& widget_map = g_widget_helpers.Get();
-  WidgetHelperMap::iterator it = widget_map.find(render_process_id_);
+  auto it = widget_map.find(render_process_id_);
   if (it != widget_map.end() && it->second == this)
     widget_map.erase(it);
 }
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index f141b8e..b2ee991 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -457,8 +457,7 @@
     int32_t routing_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RoutingIDWidgetMap* widgets = g_routing_id_widget_map.Pointer();
-  RoutingIDWidgetMap::iterator it = widgets->find(
-      RenderWidgetHostID(process_id, routing_id));
+  auto it = widgets->find(RenderWidgetHostID(process_id, routing_id));
   return it == widgets->end() ? NULL : it->second;
 }
 
@@ -2722,7 +2721,7 @@
     image = gfx::Image::CreateFrom1xBitmap(bitmap);
   // Any pending snapshots with a lower ID than the one received are considered
   // to be implicitly complete, and returned the same snapshot data.
-  PendingSnapshotMap::iterator it = pending_surface_browser_snapshots_.begin();
+  auto it = pending_surface_browser_snapshots_.begin();
   while (it != pending_surface_browser_snapshots_.end()) {
     if (it->first <= snapshot_id) {
       it->second.Run(image);
@@ -2737,7 +2736,7 @@
                                               gfx::Image image) {
   // Any pending snapshots with a lower ID than the one received are considered
   // to be implicitly complete, and returned the same snapshot data.
-  PendingSnapshotMap::iterator it = pending_browser_snapshots_.begin();
+  auto it = pending_browser_snapshots_.begin();
   while (it != pending_browser_snapshots_.end()) {
     if (it->first <= snapshot_id) {
       it->second.Run(image);
diff --git a/content/browser/service_worker/embedded_worker_registry.cc b/content/browser/service_worker/embedded_worker_registry.cc
index 34287d99..896a724 100644
--- a/content/browser/service_worker/embedded_worker_registry.cc
+++ b/content/browser/service_worker/embedded_worker_registry.cc
@@ -44,9 +44,7 @@
 }
 
 void EmbeddedWorkerRegistry::Shutdown() {
-  for (WorkerInstanceMap::iterator it = worker_map_.begin();
-       it != worker_map_.end();
-       ++it) {
+  for (auto it = worker_map_.begin(); it != worker_map_.end(); ++it) {
     it->second->Stop();
   }
 }
@@ -74,7 +72,7 @@
 
 EmbeddedWorkerInstance* EmbeddedWorkerRegistry::GetWorker(
     int embedded_worker_id) {
-  WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id);
+  auto found = worker_map_.find(embedded_worker_id);
   if (found == worker_map_.end())
     return nullptr;
   return found->second;
diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc
index 1b3517a..e7e9dfa0 100644
--- a/content/browser/service_worker/service_worker_context_core.cc
+++ b/content/browser/service_worker/service_worker_context_core.cc
@@ -607,7 +607,7 @@
 
 ServiceWorkerRegistration* ServiceWorkerContextCore::GetLiveRegistration(
     int64_t id) {
-  RegistrationsMap::iterator it = live_registrations_.find(id);
+  auto it = live_registrations_.find(id);
   return (it != live_registrations_.end()) ? it->second : nullptr;
 }
 
@@ -625,7 +625,7 @@
 }
 
 ServiceWorkerVersion* ServiceWorkerContextCore::GetLiveVersion(int64_t id) {
-  VersionMap::iterator it = live_versions_.find(id);
+  auto it = live_versions_.find(id);
   return (it != live_versions_.end()) ? it->second : nullptr;
 }
 
diff --git a/content/browser/service_worker/service_worker_database.cc b/content/browser/service_worker/service_worker_database.cc
index ce68bb22..4f39ee0 100644
--- a/content/browser/service_worker/service_worker_database.cc
+++ b/content/browser/service_worker/service_worker_database.cc
@@ -576,8 +576,7 @@
   // Used for avoiding multiple writes for the same resource id or url.
   std::set<int64_t> pushed_resources;
   std::set<GURL> pushed_urls;
-  for (std::vector<ResourceRecord>::const_iterator itr = resources.begin();
-       itr != resources.end(); ++itr) {
+  for (auto itr = resources.begin(); itr != resources.end(); ++itr) {
     if (!itr->url.is_valid())
       return STATUS_ERROR_FAILED;
 
@@ -1682,8 +1681,7 @@
 
   if (ids.empty())
     return STATUS_OK;
-  for (std::set<int64_t>::const_iterator itr = ids.begin(); itr != ids.end();
-       ++itr) {
+  for (auto itr = ids.begin(); itr != ids.end(); ++itr) {
     // Value should be empty.
     batch->Put(CreateResourceIdKey(id_key_prefix, *itr), "");
   }
@@ -1705,8 +1703,7 @@
   if (status != STATUS_OK)
     return status;
 
-  for (std::set<int64_t>::const_iterator itr = ids.begin(); itr != ids.end();
-       ++itr) {
+  for (auto itr = ids.begin(); itr != ids.end(); ++itr) {
     batch->Delete(CreateResourceIdKey(id_key_prefix, *itr));
   }
   return STATUS_OK;
diff --git a/content/browser/service_worker/service_worker_internals_ui.cc b/content/browser/service_worker/service_worker_internals_ui.cc
index 038ef77..926a0559 100644
--- a/content/browser/service_worker/service_worker_internals_ui.cc
+++ b/content/browser/service_worker/service_worker_internals_ui.cc
@@ -157,10 +157,7 @@
 std::unique_ptr<ListValue> GetRegistrationListValue(
     const std::vector<ServiceWorkerRegistrationInfo>& registrations) {
   auto result = std::make_unique<ListValue>();
-  for (std::vector<ServiceWorkerRegistrationInfo>::const_iterator it =
-           registrations.begin();
-       it != registrations.end();
-       ++it) {
+  for (auto it = registrations.begin(); it != registrations.end(); ++it) {
     const ServiceWorkerRegistrationInfo& registration = *it;
     auto registration_info = std::make_unique<DictionaryValue>();
     registration_info->SetString("scope", registration.pattern.spec());
@@ -194,10 +191,7 @@
 std::unique_ptr<ListValue> GetVersionListValue(
     const std::vector<ServiceWorkerVersionInfo>& versions) {
   auto result = std::make_unique<ListValue>();
-  for (std::vector<ServiceWorkerVersionInfo>::const_iterator it =
-           versions.begin();
-       it != versions.end();
-       ++it) {
+  for (auto it = versions.begin(); it != versions.end(); ++it) {
     auto info = std::make_unique<DictionaryValue>();
     UpdateVersionInfo(*it, info.get());
     result->Append(std::move(info));
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc
index 7159d70..ec2bf0f 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -587,8 +587,7 @@
 
 ServiceWorkerRegistration*
 ServiceWorkerProviderHost::MatchRegistration() const {
-  ServiceWorkerRegistrationMap::const_reverse_iterator it =
-      matching_registrations_.rbegin();
+  auto it = matching_registrations_.rbegin();
   for (; it != matching_registrations_.rend(); ++it) {
     if (it->second->is_uninstalled())
       continue;
diff --git a/content/browser/service_worker/service_worker_script_cache_map.cc b/content/browser/service_worker/service_worker_script_cache_map.cc
index d916428..6ac7fb1 100644
--- a/content/browser/service_worker/service_worker_script_cache_map.cc
+++ b/content/browser/service_worker/service_worker_script_cache_map.cc
@@ -81,9 +81,7 @@
 void ServiceWorkerScriptCacheMap::SetResources(
     const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources) {
   DCHECK(resource_map_.empty());
-  typedef std::vector<ServiceWorkerDatabase::ResourceRecord> RecordVector;
-  for (RecordVector::const_iterator it = resources.begin();
-       it != resources.end(); ++it) {
+  for (auto it = resources.begin(); it != resources.end(); ++it) {
     resource_map_[it->url] = *it;
   }
 }
@@ -97,7 +95,7 @@
     return;
   }
 
-  ResourceMap::iterator found = resource_map_.find(url);
+  auto found = resource_map_.find(url);
   if (found == resource_map_.end() ||
       found->second.resource_id == kInvalidServiceWorkerResourceId) {
     callback.Run(net::ERR_FILE_NOT_FOUND);
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 7cab5ba..da4a396 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -632,8 +632,7 @@
   if (running_status() != EmbeddedWorkerStatus::RUNNING)
     return false;
 
-  RequestUUIDToRequestIDMap::iterator iter =
-      external_request_uuid_to_request_id_.find(request_uuid);
+  auto iter = external_request_uuid_to_request_id_.find(request_uuid);
   if (iter != external_request_uuid_to_request_id_.end()) {
     int request_id = iter->second;
     external_request_uuid_to_request_id_.erase(iter);
diff --git a/content/browser/speech/speech_recognition_engine_unittest.cc b/content/browser/speech/speech_recognition_engine_unittest.cc
index 3fc7a3b..a0ef459 100644
--- a/content/browser/speech/speech_recognition_engine_unittest.cc
+++ b/content/browser/speech/speech_recognition_engine_unittest.cc
@@ -667,10 +667,8 @@
   if (a.size() != b.size())
     return false;
 
-  std::vector<blink::mojom::SpeechRecognitionResultPtr>::const_iterator it_a =
-      a.begin();
-  std::vector<blink::mojom::SpeechRecognitionResultPtr>::const_iterator it_b =
-      b.begin();
+  auto it_a = a.begin();
+  auto it_b = b.begin();
   for (; it_a != a.end() && it_b != b.end(); ++it_a, ++it_b) {
     if ((*it_a)->is_provisional != (*it_b)->is_provisional ||
         (*it_a)->hypotheses.size() != (*it_b)->hypotheses.size()) {
diff --git a/content/browser/speech/speech_recognizer_impl.cc b/content/browser/speech/speech_recognizer_impl.cc
index 960416b..e915ff1 100644
--- a/content/browser/speech/speech_recognizer_impl.cc
+++ b/content/browser/speech/speech_recognizer_impl.cc
@@ -784,8 +784,7 @@
 SpeechRecognizerImpl::ProcessFinalResult(const FSMEventArgs& event_args) {
   const std::vector<blink::mojom::SpeechRecognitionResultPtr>& results =
       event_args.engine_results;
-  std::vector<blink::mojom::SpeechRecognitionResultPtr>::const_iterator i =
-      results.begin();
+  auto i = results.begin();
   bool provisional_results_pending = false;
   bool results_are_empty = true;
   for (; i != results.end(); ++i) {
diff --git a/content/browser/ssl/ssl_manager.cc b/content/browser/ssl/ssl_manager.cc
index f36f004..fe1d790 100644
--- a/content/browser/ssl/ssl_manager.cc
+++ b/content/browser/ssl/ssl_manager.cc
@@ -413,8 +413,7 @@
   SSLManagerSet* managers =
       static_cast<SSLManagerSet*>(context->GetUserData(kSSLManagerKeyName));
 
-  for (std::set<SSLManager*>::iterator i = managers->get().begin();
-       i != managers->get().end(); ++i) {
+  for (auto i = managers->get().begin(); i != managers->get().end(); ++i) {
     (*i)->UpdateEntry((*i)->controller()->GetLastCommittedEntry(), 0, 0);
   }
 }
diff --git a/content/browser/startup_task_runner.cc b/content/browser/startup_task_runner.cc
index 319bc8f1..51c98506 100644
--- a/content/browser/startup_task_runner.cc
+++ b/content/browser/startup_task_runner.cc
@@ -37,9 +37,7 @@
 
 void StartupTaskRunner::RunAllTasksNow() {
   int result = 0;
-  for (std::list<StartupTask>::iterator it = task_list_.begin();
-       it != task_list_.end();
-       it++) {
+  for (auto it = task_list_.begin(); it != task_list_.end(); it++) {
     result = it->Run();
     if (result > 0) break;
   }
diff --git a/content/browser/storage_partition_impl_map.cc b/content/browser/storage_partition_impl_map.cc
index b161e771..173d8a0 100644
--- a/content/browser/storage_partition_impl_map.cc
+++ b/content/browser/storage_partition_impl_map.cc
@@ -188,9 +188,7 @@
     // Enum tracking which of the 3 possible actions to take for |to_delete|.
     enum { kSkip, kEnqueue, kDelete } action = kDelete;
 
-    for (std::vector<base::FilePath>::const_iterator to_keep =
-             paths_to_keep.begin();
-         to_keep != paths_to_keep.end();
+    for (auto to_keep = paths_to_keep.begin(); to_keep != paths_to_keep.end();
          ++to_keep) {
       if (to_delete == *to_keep) {
         action = kSkip;
@@ -246,9 +244,7 @@
 
   // Reduce |paths_to_keep| set to those under the root and actually on disk.
   std::vector<base::FilePath> valid_paths_to_keep;
-  for (std::vector<base::FilePath>::const_iterator it = paths_to_keep.begin();
-       it != paths_to_keep.end();
-       ++it) {
+  for (auto it = paths_to_keep.begin(); it != paths_to_keep.end(); ++it) {
     if (root.IsParent(*it) && base::PathExists(*it))
       valid_paths_to_keep.push_back(*it);
   }
@@ -278,8 +274,7 @@
                           base::hash_set<base::FilePath>* active_paths) {
   base::hash_set<base::FilePath> normalized_active_paths;
 
-  for (base::hash_set<base::FilePath>::iterator iter = active_paths->begin();
-       iter != active_paths->end(); ++iter) {
+  for (auto iter = active_paths->begin(); iter != active_paths->end(); ++iter) {
     base::FilePath relative_path;
     if (!storage_root.AppendRelativePath(*iter, &relative_path))
       continue;
diff --git a/content/browser/storage_partition_impl_unittest.cc b/content/browser/storage_partition_impl_unittest.cc
index 03a95d8..bea6001 100644
--- a/content/browser/storage_partition_impl_unittest.cc
+++ b/content/browser/storage_partition_impl_unittest.cc
@@ -287,26 +287,36 @@
   explicit RemoveCodeCacheTester(GeneratedCodeCacheContext* code_cache_context)
       : code_cache_context_(code_cache_context) {}
 
-  bool ContainsEntry(GURL url, url::Origin origin) {
+  enum Cache { kJs, kWebAssembly };
+
+  bool ContainsEntry(Cache cache, GURL url, url::Origin origin) {
     entry_exists_ = false;
     GeneratedCodeCache::ReadDataCallback callback = base::BindRepeating(
         &RemoveCodeCacheTester::FetchEntryCallback, base::Unretained(this));
-    code_cache_context_->generated_js_code_cache()->FetchEntry(url, origin,
-                                                               callback);
+    GetCache(cache)->FetchEntry(url, origin, callback);
     await_completion_.BlockUntilNotified();
     return entry_exists_;
   }
 
-  void AddEntry(GURL url, url::Origin origin, const std::string& data) {
+  void AddEntry(Cache cache,
+                GURL url,
+                url::Origin origin,
+                const std::string& data) {
     std::vector<uint8_t> data_vector(data.begin(), data.end());
-    code_cache_context_->generated_js_code_cache()->WriteData(
-        url, origin, base::Time::Now(), data_vector);
+    GetCache(cache)->WriteData(url, origin, base::Time::Now(), data_vector);
     base::RunLoop().RunUntilIdle();
   }
 
   std::string received_data() { return received_data_; }
 
  private:
+  GeneratedCodeCache* GetCache(Cache cache) {
+    if (cache == kJs)
+      return code_cache_context_->generated_js_code_cache();
+    else
+      return code_cache_context_->generated_wasm_code_cache();
+  }
+
   void FetchEntryCallback(const base::Time& response_time,
                           const std::vector<uint8_t>& data) {
     if (!response_time.is_null()) {
@@ -1337,16 +1347,30 @@
 
   url::Origin origin = kOrigin1;
   std::string data("SomeData");
-  tester.AddEntry(kResourceURL, origin, data);
-  EXPECT_TRUE(tester.ContainsEntry(kResourceURL, origin));
+  std::string data2("SomeData.wasm");
+  tester.AddEntry(RemoveCodeCacheTester::kJs, kResourceURL, origin, data);
+  tester.AddEntry(RemoveCodeCacheTester::kWebAssembly, kResourceURL, origin,
+                  data2);
+  EXPECT_TRUE(
+      tester.ContainsEntry(RemoveCodeCacheTester::kJs, kResourceURL, origin));
   EXPECT_EQ(tester.received_data(), data);
+  EXPECT_TRUE(tester.ContainsEntry(RemoveCodeCacheTester::kWebAssembly,
+                                   kResourceURL, origin));
+  EXPECT_EQ(tester.received_data(), data2);
 
   base::RunLoop run_loop;
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE, base::BindOnce(&ClearCodeCache, partition, &run_loop));
   run_loop.Run();
 
-  EXPECT_FALSE(tester.ContainsEntry(kResourceURL, origin));
+  EXPECT_FALSE(
+      tester.ContainsEntry(RemoveCodeCacheTester::kJs, kResourceURL, origin));
+  EXPECT_FALSE(tester.ContainsEntry(RemoveCodeCacheTester::kWebAssembly,
+                                    kResourceURL, origin));
+
+  // Make sure there isn't a second invalid callback sitting in the queue.
+  // (this used to be a bug).
+  base::RunLoop().RunUntilIdle();
 }
 
 TEST_F(StoragePartitionImplTest, ClearCodeCacheNoIsolatedCodeCache) {
diff --git a/content/browser/streams/stream_registry.cc b/content/browser/streams/stream_registry.cc
index ca6baee3..a905f48 100644
--- a/content/browser/streams/stream_registry.cc
+++ b/content/browser/streams/stream_registry.cc
@@ -63,7 +63,7 @@
 void StreamRegistry::UnregisterStream(const GURL& url) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  StreamMap::iterator iter = streams_.find(url);
+  auto iter = streams_.find(url);
   if (iter == streams_.end())
     return;
 
@@ -83,7 +83,7 @@
                                        size_t increase) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  StreamMap::iterator iter = streams_.find(url);
+  auto iter = streams_.find(url);
   // A Stream must be registered with its parent registry to get memory.
   if (iter == streams_.end())
     return false;
diff --git a/content/browser/tracing/tracing_controller_impl.cc b/content/browser/tracing/tracing_controller_impl.cc
index a358cfd..fabde42 100644
--- a/content/browser/tracing/tracing_controller_impl.cc
+++ b/content/browser/tracing/tracing_controller_impl.cc
@@ -402,7 +402,7 @@
 }
 
 void TracingControllerImpl::UnregisterTracingUI(TracingUI* tracing_ui) {
-  std::set<TracingUI*>::iterator it = tracing_uis_.find(tracing_ui);
+  auto it = tracing_uis_.find(tracing_ui);
   DCHECK(it != tracing_uis_.end());
   tracing_uis_.erase(it);
 }
diff --git a/content/browser/tracing/tracing_ui.cc b/content/browser/tracing/tracing_ui.cc
index dec9a19..aa9a169 100644
--- a/content/browser/tracing/tracing_ui.cc
+++ b/content/browser/tracing/tracing_ui.cc
@@ -46,8 +46,7 @@
 void OnGotCategories(const WebUIDataSource::GotDataCallback& callback,
                      const std::set<std::string>& categorySet) {
   base::ListValue category_list;
-  for (std::set<std::string>::const_iterator it = categorySet.begin();
-       it != categorySet.end(); it++) {
+  for (auto it = categorySet.begin(); it != categorySet.end(); it++) {
     category_list.AppendString(*it);
   }
 
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
index dd4de01..ac90d33 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
@@ -38,9 +38,7 @@
   if (entry->GetURL() == url)
     return true;
   const std::vector<GURL>& redirect_chain = entry->GetRedirectChain();
-  for (std::vector<GURL>::const_iterator it = redirect_chain.begin();
-       it != redirect_chain.end();
-       it++) {
+  for (auto it = redirect_chain.begin(); it != redirect_chain.end(); it++) {
     if (*it == url)
       return true;
   }
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 50c8c00..169aa36 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -357,10 +357,8 @@
     opener = opener_rfh->frame_tree_node();
   new_contents->SetOpenerForNewContents(opener, params.opener_suppressed);
 
-  for (SessionStorageNamespaceMap::const_iterator it =
-           session_storage_namespace_map.begin();
-       it != session_storage_namespace_map.end();
-       ++it) {
+  for (auto it = session_storage_namespace_map.begin();
+       it != session_storage_namespace_map.end(); ++it) {
     new_contents->GetController()
         .SetSessionStorageNamespace(it->first, it->second.get());
   }
diff --git a/content/browser/webrtc/webrtc_getusermedia_browsertest.cc b/content/browser/webrtc/webrtc_getusermedia_browsertest.cc
index bb6e4cbf2..c9dc8a3 100644
--- a/content/browser/webrtc/webrtc_getusermedia_browsertest.cc
+++ b/content/browser/webrtc/webrtc_getusermedia_browsertest.cc
@@ -158,8 +158,7 @@
     base::ListValue* values;
     ASSERT_TRUE(value->GetAsList(&values));
 
-    for (base::ListValue::iterator it = values->begin();
-         it != values->end(); ++it) {
+    for (auto it = values->begin(); it != values->end(); ++it) {
       const base::DictionaryValue* dict;
       std::string kind;
       std::string device_id;
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc
index fb664114..9df2980 100644
--- a/content/browser/webui/url_data_manager_backend.cc
+++ b/content/browser/webui/url_data_manager_backend.cc
@@ -445,7 +445,7 @@
     URLDataSourceImpl* source) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   if (!source->source()->ShouldReplaceExistingSource()) {
-    DataSourceMap::iterator i = data_sources_.find(source->source_name());
+    auto i = data_sources_.find(source->source_name());
     if (i != data_sources_.end())
       return;
   }
@@ -456,7 +456,7 @@
 void URLDataManagerBackend::UpdateWebUIDataSource(
     const std::string& source_name,
     const base::DictionaryValue& update) {
-  DataSourceMap::iterator it = data_sources_.find(source_name);
+  auto it = data_sources_.find(source_name);
   if (it == data_sources_.end() || !it->second->IsWebUIDataSourceImpl()) {
     NOTREACHED();
     return;
@@ -467,8 +467,7 @@
 
 bool URLDataManagerBackend::HasPendingJob(
     URLRequestChromeJob* job) const {
-  for (PendingRequestMap::const_iterator i = pending_requests_.begin();
-       i != pending_requests_.end(); ++i) {
+  for (auto i = pending_requests_.begin(); i != pending_requests_.end(); ++i) {
     if (i->second == job)
       return true;
   }
@@ -540,7 +539,7 @@
     const GURL& url) {
   // The input usually looks like: chrome://source_name/extra_bits?foo
   // so do a lookup using the host of the URL.
-  DataSourceMap::iterator i = data_sources_.find(url.host());
+  auto i = data_sources_.find(url.host());
   if (i != data_sources_.end())
     return i->second.get();
 
@@ -569,8 +568,7 @@
   // Remove the request from our list of pending requests.
   // If/when the source sends the data that was requested, the data will just
   // be thrown away.
-  for (PendingRequestMap::iterator i = pending_requests_.begin();
-       i != pending_requests_.end(); ++i) {
+  for (auto i = pending_requests_.begin(); i != pending_requests_.end(); ++i) {
     if (i->second == job) {
       pending_requests_.erase(i);
       return;
@@ -581,7 +579,7 @@
 void URLDataManagerBackend::DataAvailable(RequestID request_id,
                                           base::RefCountedMemory* bytes) {
   // Forward this data on to the pending net::URLRequest, if it exists.
-  PendingRequestMap::iterator i = pending_requests_.find(request_id);
+  auto i = pending_requests_.find(request_id);
   if (i != pending_requests_.end()) {
     URLRequestChromeJob* job = i->second;
     pending_requests_.erase(i);
diff --git a/content/public/renderer/render_view_observer.h b/content/public/renderer/render_view_observer.h
index 4c54de5..3eb08a310 100644
--- a/content/public/renderer/render_view_observer.h
+++ b/content/public/renderer/render_view_observer.h
@@ -35,8 +35,6 @@
   virtual void OnDestruct() = 0;
 
   // These match the WebKit API notifications
-  virtual void DidStartLoading() {}
-  virtual void DidStopLoading() {}
   virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame,
                                       const blink::WebURLError& error) {}
   virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
diff --git a/content/public/test/navigation_simulator.cc b/content/public/test/navigation_simulator.cc
index f4c6fc1..5872f8bb 100644
--- a/content/public/test/navigation_simulator.cc
+++ b/content/public/test/navigation_simulator.cc
@@ -572,7 +572,9 @@
   CHECK_EQ(1, num_did_finish_navigation_called_);
 }
 
-void NavigationSimulator::Fail(int error_code) {
+void NavigationSimulator::FailWithResponseHeaders(
+    int error_code,
+    scoped_refptr<net::HttpResponseHeaders> response_headers) {
   CHECK_LE(state_, STARTED) << "NavigationSimulator::Fail can only be "
                                "called once, and cannot be called after "
                                "NavigationSimulator::ReadyToCommit";
@@ -584,6 +586,10 @@
   if (state_ == INITIALIZATION)
     Start();
 
+  DCHECK(!handle_->GetResponseHeaders());
+  static_cast<NavigationHandleImpl*>(handle_)->set_response_headers_for_testing(
+      response_headers);
+
   state_ = FAILED;
 
   PrepareCompleteCallbackOnHandle();
@@ -604,6 +610,10 @@
   std::move(complete_closure).Run();
 }
 
+void NavigationSimulator::Fail(int error_code) {
+  FailWithResponseHeaders(error_code, nullptr);
+}
+
 void NavigationSimulator::FailComplete(int error_code) {
   bool should_result_in_error_page = error_code != net::ERR_ABORTED;
   if (error_code != net::ERR_ABORTED) {
diff --git a/content/public/test/navigation_simulator.h b/content/public/test/navigation_simulator.h
index 85a0914..4a94e00 100644
--- a/content/public/test/navigation_simulator.h
+++ b/content/public/test/navigation_simulator.h
@@ -203,6 +203,12 @@
   // Simulates the commit of a navigation or an error page aborting.
   virtual void AbortCommit();
 
+  // Simulates the navigation failing with the error code |error_code| and
+  // response headers |response_headers|.
+  virtual void FailWithResponseHeaders(
+      int error_code,
+      scoped_refptr<net::HttpResponseHeaders> response_headers);
+
   // Simulates the navigation failing with the error code |error_code|.
   virtual void Fail(int error_code);
 
diff --git a/content/public/test/web_contents_tester.h b/content/public/test/web_contents_tester.h
index 916078d..ca36d6e 100644
--- a/content/public/test/web_contents_tester.h
+++ b/content/public/test/web_contents_tester.h
@@ -82,6 +82,13 @@
   // emulates what happens on a new navigation.
   virtual void NavigateAndCommit(const GURL& url) = 0;
 
+  // Creates a pending navigation to the given URL with the default parameters
+  // and then aborts it with the given |error_code| and |response_headers|.
+  virtual void NavigateAndFail(
+      const GURL& url,
+      int error_code,
+      scoped_refptr<net::HttpResponseHeaders> response_headers) = 0;
+
   // Sets the loading state to the given value.
   virtual void TestSetIsLoading(bool value) = 0;
 
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index d7b27af79..e62bc40 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -591,8 +591,6 @@
     "skia_benchmarking_extension.h",
     "stats_collection_controller.cc",
     "stats_collection_controller.h",
-    "stats_collection_observer.cc",
-    "stats_collection_observer.h",
     "storage_util.cc",
     "storage_util.h",
     "text_input_client_observer.cc",
diff --git a/content/renderer/media/renderer_webaudiodevice_impl.cc b/content/renderer/media/renderer_webaudiodevice_impl.cc
index df038f3..16dfe2e6 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl.cc
+++ b/content/renderer/media/renderer_webaudiodevice_impl.cc
@@ -50,10 +50,6 @@
 int GetOutputBufferSize(const blink::WebAudioLatencyHint& latency_hint,
                         media::AudioLatency::LatencyType latency,
                         const media::AudioParameters& hardware_params) {
-  media::AudioParameters::HardwareCapabilities hardware_capabilities =
-      hardware_params.hardware_capabilities().value_or(
-          media::AudioParameters::HardwareCapabilities());
-
   // Adjust output buffer size according to the latency requirement.
   switch (latency) {
     case media::AudioLatency::LATENCY_INTERACTIVE:
@@ -71,9 +67,7 @@
     case media::AudioLatency::LATENCY_EXACT_MS:
       return media::AudioLatency::GetExactBufferSize(
           base::TimeDelta::FromSecondsD(latency_hint.Seconds()),
-          hardware_params.sample_rate(), hardware_params.frames_per_buffer(),
-          hardware_capabilities.min_frames_per_buffer,
-          hardware_capabilities.max_frames_per_buffer);
+          hardware_params.sample_rate(), hardware_params.frames_per_buffer());
       break;
     default:
       NOTREACHED();
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 845ed00b..20d0ca5 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -5930,9 +5930,9 @@
 }
 
 void RenderFrameImpl::DidStartLoading() {
+  // TODO(dgozman): consider removing this callback.
   TRACE_EVENT1("navigation,rail", "RenderFrameImpl::didStartLoading",
                "id", routing_id_);
-  render_view_->FrameDidStartLoading(frame_);
 }
 
 void RenderFrameImpl::DidStopLoading() {
@@ -5946,7 +5946,6 @@
 
   SendUpdateFaviconURL();
 
-  render_view_->FrameDidStopLoading(frame_);
   Send(new FrameHostMsg_DidStopLoading(routing_id_));
 }
 
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 6b411b19..ae44c7a 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -489,9 +489,6 @@
   const base::CommandLine& command_line =
       *base::CommandLine::ForCurrentProcess();
 
-  if (command_line.HasSwitch(switches::kStatsCollectionController))
-    stats_collection_observer_.reset(new StatsCollectionObserver(this));
-
   webview()->SetDisplayMode(GetWidget()->display_mode());
   webview()->GetSettings()->SetThreadedScrollingEnabled(
       !command_line.HasSwitch(switches::kDisableThreadedScrolling));
@@ -1559,27 +1556,6 @@
       GetRoutingID(), id, blink::WebStringToFilePath(path)));
 }
 
-void RenderViewImpl::FrameDidStartLoading(WebFrame* frame) {
-  DCHECK_GE(frames_in_progress_, 0);
-  if (frames_in_progress_ == 0) {
-    for (auto& observer : observers_)
-      observer.DidStartLoading();
-  }
-  frames_in_progress_++;
-}
-
-void RenderViewImpl::FrameDidStopLoading(WebFrame* frame) {
-  // TODO(japhet): This should be a DCHECK, but the pdf plugin sometimes
-  // calls DidStopLoading() without a matching DidStartLoading().
-  if (frames_in_progress_ == 0)
-    return;
-  frames_in_progress_--;
-  if (frames_in_progress_ == 0) {
-    for (auto& observer : observers_)
-      observer.DidStopLoading();
-  }
-}
-
 void RenderViewImpl::AttachWebFrameWidget(blink::WebFrameWidget* frame_widget) {
   // The previous WebFrameWidget must already be detached by CloseForFrame().
   DCHECK(!frame_widget_);
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index bb14a5d..2345f63b 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -38,7 +38,6 @@
 #include "content/renderer/render_frame_impl.h"
 #include "content/renderer/render_widget.h"
 #include "content/renderer/render_widget_owner_delegate.h"
-#include "content/renderer/stats_collection_observer.h"
 #include "ipc/ipc_platform_file.h"
 #include "mojo/public/cpp/bindings/interface_ptr_set.h"
 #include "third_party/blink/public/platform/web_input_event.h"
@@ -144,21 +143,10 @@
   void AddObserver(RenderViewObserver* observer);
   void RemoveObserver(RenderViewObserver* observer);
 
-  // Returns the StatsCollectionObserver associated with this view, or NULL
-  // if one wasn't created;
-  StatsCollectionObserver* GetStatsCollectionObserver() {
-    return stats_collection_observer_.get();
-  }
-
 #if defined(OS_ANDROID)
   void DismissDateTimeDialog();
 #endif
 
-  bool is_loading() const { return frames_in_progress_ != 0; }
-
-  void FrameDidStartLoading(blink::WebFrame* frame);
-  void FrameDidStopLoading(blink::WebFrame* frame);
-
   // Sets the zoom level and notifies observers.
   void SetZoomLevel(double zoom_level);
 
@@ -575,12 +563,6 @@
   // process.
   int history_list_length_ = 0;
 
-  // Counter to track how many frames have sent start notifications but not stop
-  // notifications.
-  // TODO(avi): Remove this once FrameDidStartLoading/FrameDidStopLoading are
-  // gone.
-  int frames_in_progress_ = 0;
-
   // UI state ------------------------------------------------------------------
 
   // The state of our target_url transmissions. When we receive a request to
@@ -663,10 +645,6 @@
   // is fine.
   base::ObserverList<RenderViewObserver>::Unchecked observers_;
 
-  // NOTE: stats_collection_observer_ should be the last members because their
-  // constructors call the AddObservers method of RenderViewImpl.
-  std::unique_ptr<StatsCollectionObserver> stats_collection_observer_;
-
   blink::WebScopedVirtualTimePauser history_navigation_virtual_time_pauser_;
 
   // ---------------------------------------------------------------------------
diff --git a/content/renderer/stats_collection_controller.cc b/content/renderer/stats_collection_controller.cc
index d528f49e5..8a62df4a 100644
--- a/content/renderer/stats_collection_controller.cc
+++ b/content/renderer/stats_collection_controller.cc
@@ -22,59 +22,6 @@
 
 namespace content {
 
-namespace {
-
-bool CurrentRenderViewImpl(RenderViewImpl** out) {
-  blink::WebLocalFrame* web_frame =
-      blink::WebLocalFrame::FrameForCurrentContext();
-  if (!web_frame)
-    return false;
-
-  blink::WebView* web_view = web_frame->View();
-  if (!web_view)
-    return false;
-
-  RenderViewImpl* render_view_impl =
-      RenderViewImpl::FromWebView(web_view);
-  if (!render_view_impl)
-    return false;
-
-  *out = render_view_impl;
-  return true;
-}
-
-// Encodes a WebContentsLoadTime as JSON.
-// Input:
-// - |load_start_time| - time at which page load started.
-// - |load_stop_time| - time at which page load stopped.
-// - |result| - returned JSON.
-// Example return value:
-// {'load_start_ms': 1, 'load_duration_ms': 2.5}
-// either value may be null if a web contents hasn't fully loaded.
-// load_start_ms is represented as milliseconds since the unix epoch.
-void ConvertLoadTimeToJSON(
-    const base::Time& load_start_time,
-    const base::Time& load_stop_time,
-    std::string *result) {
-  base::DictionaryValue item;
-
-  if (load_start_time.is_null()) {
-    item.Set("load_start_ms", std::make_unique<base::Value>());
-  } else {
-    item.SetDouble("load_start_ms", (load_start_time - base::Time::UnixEpoch())
-                   .InMillisecondsF());
-  }
-  if (load_start_time.is_null() || load_stop_time.is_null()) {
-    item.Set("load_duration_ms", std::make_unique<base::Value>());
-  } else {
-    item.SetDouble("load_duration_ms",
-        (load_stop_time - load_start_time).InMillisecondsF());
-  }
-  base::JSONWriter::Write(item, result);
-}
-
-}  // namespace
-
 // static
 gin::WrapperInfo StatsCollectionController::kWrapperInfo = {
     gin::kEmbedderNativeGin
@@ -106,11 +53,10 @@
 gin::ObjectTemplateBuilder StatsCollectionController::GetObjectTemplateBuilder(
     v8::Isolate* isolate) {
   return gin::Wrappable<StatsCollectionController>::GetObjectTemplateBuilder(
-      isolate)
+             isolate)
       .SetMethod("getHistogram", &StatsCollectionController::GetHistogram)
       .SetMethod("getBrowserHistogram",
-                 &StatsCollectionController::GetBrowserHistogram)
-      .SetMethod("tabLoadTiming", &StatsCollectionController::GetTabLoadTiming);
+                 &StatsCollectionController::GetBrowserHistogram);
 }
 
 std::string StatsCollectionController::GetHistogram(
@@ -135,20 +81,4 @@
   return histogram_json;
 }
 
-std::string StatsCollectionController::GetTabLoadTiming() {
-  RenderViewImpl* render_view_impl = nullptr;
-  bool result = CurrentRenderViewImpl(&render_view_impl);
-  DCHECK(result);
-
-  StatsCollectionObserver* observer =
-      render_view_impl->GetStatsCollectionObserver();
-  DCHECK(observer);
-
-  std::string tab_timing_json;
-  ConvertLoadTimeToJSON(
-      observer->load_start_time(), observer->load_stop_time(),
-      &tab_timing_json);
-  return tab_timing_json;
-}
-
 }  // namespace content
diff --git a/content/renderer/stats_collection_observer.cc b/content/renderer/stats_collection_observer.cc
deleted file mode 100644
index f2c45bf..0000000
--- a/content/renderer/stats_collection_observer.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2013 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/renderer/stats_collection_observer.h"
-
-#include "base/time/time.h"
-#include "content/renderer/render_view_impl.h"
-
-namespace content {
-
-StatsCollectionObserver::StatsCollectionObserver(RenderViewImpl* render_view)
-    : RenderViewObserver(render_view) {
-}
-
-StatsCollectionObserver::~StatsCollectionObserver() {
-}
-
-void StatsCollectionObserver::DidStartLoading() {
-  DCHECK(start_time_.is_null());
-  start_time_ = base::Time::Now();
-}
-
-void StatsCollectionObserver::DidStopLoading() {
-  DCHECK(stop_time_.is_null());
-  stop_time_ = base::Time::Now();
-
-  // Stop observing so we don't get called again.
-  RenderViewImpl* impl = static_cast<RenderViewImpl*>(render_view());
-  impl->RemoveObserver(this);
-}
-
-void StatsCollectionObserver::OnDestruct() {
-  delete this;
-}
-
-}  // namespace content
diff --git a/content/renderer/stats_collection_observer.h b/content/renderer/stats_collection_observer.h
deleted file mode 100644
index e1b7323..0000000
--- a/content/renderer/stats_collection_observer.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2013 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_RENDERER_STATS_COLLECTION_OBSERVER_H_
-#define CONTENT_RENDERER_STATS_COLLECTION_OBSERVER_H_
-
-#include "base/macros.h"
-#include "base/time/time.h"
-#include "content/public/renderer/render_view_observer.h"
-
-namespace content {
-
-class RenderViewImpl;
-
-// Collect timing information for page loads.
-// If a Renderview performs multiple loads, only the first one is recorded.
-class StatsCollectionObserver : public RenderViewObserver {
- public:
-  explicit StatsCollectionObserver(RenderViewImpl* render_view);
-  ~StatsCollectionObserver() override;
-
-  // RenderViewObserver implementation
-  void DidStartLoading() override;
-  void DidStopLoading() override;
-
-  // Timing for the page load start and stop.  These functions may return
-  // a null time value under various circumstances.
-  const base::Time& load_start_time() { return start_time_; }
-  const base::Time& load_stop_time() { return stop_time_; }
-
- private:
-  // RenderViewObserver implementation.
-  void OnDestruct() override;
-
-  base::Time start_time_;
-  base::Time stop_time_;
-
-   DISALLOW_COPY_AND_ASSIGN(StatsCollectionObserver);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_STATS_COLLECTION_OBSERVER_H_
diff --git a/content/test/navigation_simulator_unittest.cc b/content/test/navigation_simulator_unittest.cc
index 4018456..f937044d 100644
--- a/content/test/navigation_simulator_unittest.cc
+++ b/content/test/navigation_simulator_unittest.cc
@@ -119,6 +119,9 @@
 
   void DidFinishNavigation(content::NavigationHandle* handle) override {
     did_finish_navigation_ = true;
+    if (handle->GetResponseHeaders()) {
+      response_headers_ = handle->GetResponseHeaders()->raw_headers();
+    }
   }
 
   void OnWillFailRequestCalled() { will_fail_request_called_ = true; }
@@ -128,6 +131,7 @@
   std::unique_ptr<NavigationSimulator> simulator_;
   bool did_finish_navigation_ = false;
   bool will_fail_request_called_ = false;
+  std::string response_headers_;
   base::WeakPtrFactory<CancellingNavigationSimulatorTest> weak_ptr_factory_;
 
  private:
@@ -286,6 +290,21 @@
             simulator_->GetLastThrottleCheckResult());
 }
 
+// Test canceling the simulated navigation with response headers.
+TEST_P(NavigationSimulatorTestCancelFail, FailWithResponseHeaders) {
+  simulator_->Start();
+
+  using namespace std::string_literals;
+  std::string header =
+      "HTTP/1.1 404 Not Found\0"
+      "content-encoding: gzip\0\0"s;
+
+  simulator_->FailWithResponseHeaders(
+      net::ERR_CERT_DATE_INVALID,
+      base::MakeRefCounted<net::HttpResponseHeaders>(header));
+  EXPECT_EQ(response_headers_, header);
+}
+
 INSTANTIATE_TEST_CASE_P(
     Fail,
     NavigationSimulatorTestCancelFail,
diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc
index 8347591..c44dce1 100644
--- a/content/test/test_web_contents.cc
+++ b/content/test/test_web_contents.cc
@@ -292,6 +292,15 @@
   navigation->Commit();
 }
 
+void TestWebContents::NavigateAndFail(
+    const GURL& url,
+    int error_code,
+    scoped_refptr<net::HttpResponseHeaders> response_headers) {
+  std::unique_ptr<NavigationSimulator> navigation =
+      NavigationSimulator::CreateBrowserInitiated(url, this);
+  navigation->FailWithResponseHeaders(error_code, std::move(response_headers));
+}
+
 void TestWebContents::TestSetIsLoading(bool value) {
   if (value) {
     DidStartLoading(GetMainFrame()->frame_tree_node(), true);
diff --git a/content/test/test_web_contents.h b/content/test/test_web_contents.h
index a930934b..880b4ae 100644
--- a/content/test/test_web_contents.h
+++ b/content/test/test_web_contents.h
@@ -68,6 +68,10 @@
   void CommitPendingNavigation() override;
   TestRenderFrameHost* GetPendingMainFrame() override;
   void NavigateAndCommit(const GURL& url) override;
+  void NavigateAndFail(
+      const GURL& url,
+      int error_code,
+      scoped_refptr<net::HttpResponseHeaders> response_headers) override;
   void TestSetIsLoading(bool value) override;
   void TestDidNavigate(RenderFrameHost* render_frame_host,
                        int nav_entry_id,
diff --git a/extensions/browser/extension_creator.cc b/extensions/browser/extension_creator.cc
index 27c8761d..e34c929 100644
--- a/extensions/browser/extension_creator.cc
+++ b/extensions/browser/extension_creator.cc
@@ -107,6 +107,9 @@
   if (run_flags & kRequireModernManifestVersion)
     create_flags |= Extension::REQUIRE_MODERN_MANIFEST_VERSION;
 
+  if (run_flags & kBookmarkApp)
+    create_flags |= Extension::FROM_BOOKMARK;
+
   scoped_refptr<Extension> extension(
       file_util::LoadExtension(extension_dir, extension_id, Manifest::INTERNAL,
                                create_flags, &error_message_));
diff --git a/extensions/browser/extension_creator.h b/extensions/browser/extension_creator.h
index b9ce0789..f888adb 100644
--- a/extensions/browser/extension_creator.h
+++ b/extensions/browser/extension_creator.h
@@ -34,9 +34,10 @@
 
   // Settings to specify treatment of special or ignorable error conditions.
   enum RunFlags {
-    kNoRunFlags = 0x0,
-    kOverwriteCRX = 0x1,
-    kRequireModernManifestVersion = 0x2,
+    kNoRunFlags = 0,
+    kOverwriteCRX = 1 << 0,
+    kRequireModernManifestVersion = 1 << 1,
+    kBookmarkApp = 1 << 2,
   };
 
   // Categories of error that may need special handling on the UI end.
diff --git a/google_apis/gaia/fake_oauth2_token_service_delegate.cc b/google_apis/gaia/fake_oauth2_token_service_delegate.cc
index 9ee0ce4..8bd195c 100644
--- a/google_apis/gaia/fake_oauth2_token_service_delegate.cc
+++ b/google_apis/gaia/fake_oauth2_token_service_delegate.cc
@@ -68,6 +68,7 @@
 
 void FakeOAuth2TokenServiceDelegate::LoadCredentials(
     const std::string& primary_account_id) {
+  set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
   FireRefreshTokensLoaded();
 }
 
@@ -116,6 +117,12 @@
   if (GetAuthError(account_id) == error)
     return;
 
+  // Drop transient errors to match OAuth2TokenService's stated contract for
+  // GetAuthError() and to allow clients to test proper behavior in the case of
+  // transient errors.
+  if (error.IsTransientError())
+    return;
+
   auto it = refresh_tokens_.find(account_id);
   DCHECK(it != refresh_tokens_.end());
   it->second->error = error;
diff --git a/google_apis/gaia/oauth2_token_service_delegate.cc b/google_apis/gaia/oauth2_token_service_delegate.cc
index 9949802..ec6bfba 100644
--- a/google_apis/gaia/oauth2_token_service_delegate.cc
+++ b/google_apis/gaia/oauth2_token_service_delegate.cc
@@ -115,7 +115,9 @@
   return nullptr;
 }
 
-OAuth2TokenServiceDelegate::LoadCredentialsState
-OAuth2TokenServiceDelegate::GetLoadCredentialsState() const {
-  return LOAD_CREDENTIALS_UNKNOWN;
+void OAuth2TokenServiceDelegate::LoadCredentials(
+    const std::string& primary_account_id) {
+  NOTREACHED() << "OAuth2TokenServiceDelegate does not load credentials. "
+                  "Subclasses that need to load credentials must provide "
+                  "an implemenation of this method";
 }
diff --git a/google_apis/gaia/oauth2_token_service_delegate.h b/google_apis/gaia/oauth2_token_service_delegate.h
index 0f63e751..9f6ef5f 100644
--- a/google_apis/gaia/oauth2_token_service_delegate.h
+++ b/google_apis/gaia/oauth2_token_service_delegate.h
@@ -26,7 +26,6 @@
   static const char kInvalidRefreshToken[];
 
   enum LoadCredentialsState {
-    LOAD_CREDENTIALS_UNKNOWN,
     LOAD_CREDENTIALS_NOT_STARTED,
     LOAD_CREDENTIALS_IN_PROGRESS,
     LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS,
@@ -59,7 +58,6 @@
                                      const std::string& access_token) {}
 
   virtual void Shutdown() {}
-  virtual void LoadCredentials(const std::string& primary_account_id) {}
   virtual void UpdateCredentials(const std::string& account_id,
                                  const std::string& refresh_token) {}
   virtual void RevokeCredentials(const std::string& account_id) {}
@@ -76,12 +74,30 @@
   // a nullptr otherwise.
   virtual const net::BackoffEntry* BackoffEntry() const;
 
-  // Diagnostic methods
+  // -----------------------------------------------------------------------
+  // Methods that are only used by ProfileOAuth2TokenService.
+  // -----------------------------------------------------------------------
+
+  // Loads the credentials from disk. Called only once when the token service
+  // is initialized. Default implementation is NOTREACHED - subsclasses that
+  // are used by the ProfileOAuth2TokenService must provide an implementation
+  // for this method.
+  virtual void LoadCredentials(const std::string& primary_account_id);
 
   // Returns the state of the load credentials operation.
-  virtual LoadCredentialsState GetLoadCredentialsState() const;
+  LoadCredentialsState load_credentials_state() const {
+    return load_credentials_state_;
+  }
+
+  // -----------------------------------------------------------------------
+  // End of methods that are only used by ProfileOAuth2TokenService
+  // -----------------------------------------------------------------------
 
  protected:
+  void set_load_credentials_state(LoadCredentialsState state) {
+    load_credentials_state_ = state;
+  }
+
   // Called by subclasses to notify observers. Some are virtual to allow Android
   // to broadcast the notifications to Java code.
   virtual void FireRefreshTokenAvailable(const std::string& account_id);
@@ -107,6 +123,9 @@
   base::ObserverList<OAuth2TokenService::Observer, true>::Unchecked
       observer_list_;
 
+  // The state of the load credentials operation.
+  LoadCredentialsState load_credentials_state_ = LOAD_CREDENTIALS_NOT_STARTED;
+
   void StartBatchChanges();
   void EndBatchChanges();
 
diff --git a/infra/config/global/cr-buildbucket.cfg b/infra/config/global/cr-buildbucket.cfg
index c248a3f..661f757 100644
--- a/infra/config/global/cr-buildbucket.cfg
+++ b/infra/config/global/cr-buildbucket.cfg
@@ -1857,11 +1857,6 @@
       mixins: "chromedriver-ci"
     }
     builders {
-      name: "WebKit Android (Nexus4)"
-      dimensions: "os:Ubuntu-14.04"
-      mixins: "webkit-ci"
-    }
-    builders {
       name: "Android ChromeDriver Tests (dbg)"
       dimensions: "os:Ubuntu-14.04"
       mixins: "fyi-ci"
@@ -2176,11 +2171,6 @@
       mixins: "deterministic"
     }
     builders {
-      name: "Android Builder"
-      dimensions: "os:Ubuntu-14.04"
-      mixins: "webkit-ci"
-    }
-    builders {
       name: "ASAN Release"
       dimensions: "os:Ubuntu-14.04"
       mixins: "lkgr-ci"
@@ -3192,11 +3182,6 @@
       mixins: "android-try"
     }
     builders {
-      name: "android_blink_rel"
-      dimensions: "os:Ubuntu-14.04"
-      mixins: "android-try"
-    }
-    builders {
       name: "android_archive_rel_ng"
       dimensions: "os:Ubuntu-14.04"
       mixins: "android-try"
diff --git a/infra/config/global/luci-milo.cfg b/infra/config/global/luci-milo.cfg
index 8de59ba..635fb38 100644
--- a/infra/config/global/luci-milo.cfg
+++ b/infra/config/global/luci-milo.cfg
@@ -731,16 +731,6 @@
     category: "chromium.webkit|linux|release"
     short_name: "lk"
   }
-  builders {
-    name: "buildbot/chromium.webkit/Android Builder"
-    category: "chromium.webkit|android"
-    short_name: "bld"
-  }
-  builders {
-    name: "buildbot/chromium.webkit/WebKit Android (Nexus4)"
-    category: "chromium.webkit|android"
-    short_name: "n4"
-  }
 }
 
 consoles {
@@ -1195,18 +1185,6 @@
     category: "linux|release"
     short_name: "lk"
   }
-  builders {
-    name: "buildbot/chromium.webkit/Android Builder"
-    name: "buildbucket/luci.chromium.ci/Android Builder"
-    category: "android"
-    short_name: "bld"
-  }
-  builders {
-    name: "buildbot/chromium.webkit/WebKit Android (Nexus4)"
-    name: "buildbucket/luci.chromium.ci/WebKit Android (Nexus4)"
-    category: "android"
-    short_name: "n4"
-  }
 }
 
 consoles {
@@ -4240,9 +4218,6 @@
     name: "buildbucket/luci.chromium.try/android-binary-size"
   }
   builders {
-    name: "buildbot/tryserver.chromium.android/android_blink_rel"
-  }
-  builders {
     name: "buildbot/tryserver.chromium.android/android_cfi_rel_ng"
   }
   builders {
diff --git a/infra/config/global/luci-scheduler.cfg b/infra/config/global/luci-scheduler.cfg
index 888d6d483..d354b64 100644
--- a/infra/config/global/luci-scheduler.cfg
+++ b/infra/config/global/luci-scheduler.cfg
@@ -2649,27 +2649,6 @@
 }
 
 job {
-  id: "Android Builder"
-  acl_sets: "default"
-  buildbucket: {
-    server: "cr-buildbucket.appspot.com"
-    bucket: "luci.chromium.ci"
-    builder: "Android Builder"
-  }
-}
-
-job {
-  id: "WebKit Android (Nexus4)"
-  # Triggered by "Android Builder"
-  acl_sets: "triggered-by-parent-builders"
-  buildbucket: {
-    server: "cr-buildbucket.appspot.com"
-    bucket: "luci.chromium.ci"
-    builder: "WebKit Android (Nexus4)"
-  }
-}
-
-job {
   id: "Android Builder (dbg)"
   acl_sets: "default"
   buildbucket: {
diff --git a/ios/chrome/DEPS b/ios/chrome/DEPS
index 1f2c51c..e6c4737 100644
--- a/ios/chrome/DEPS
+++ b/ios/chrome/DEPS
@@ -27,4 +27,8 @@
   # web::TestBrowserState in ios/chrome.
   "+ios/web/public",
   "-ios/web/public/test/fakes/test_browser_state.h",
+
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # See crbug.com/891834.
+  "-ios/web/public/test/http_server",
 ]
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index baa55a6..906c8888 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -255,7 +255,7 @@
 
 יש להפעיל את Handoff גם בקטע 'כללי' ב'הגדרות', ועל המכשירים להשתמש באותו חשבון iCloud.</translation>
 <translation id="5554368826343982379">סנכרון והתאמה אישית</translation>
-<translation id="5556459405103347317">טען שוב</translation>
+<translation id="5556459405103347317">ניסיון טעינה נוסף</translation>
 <translation id="5614553682702429503">לשמור את הסיסמה?</translation>
 <translation id="5619279135193775234">דואר</translation>
 <translation id="5626245204502895507">לא ניתן להוריד את הקובץ בשלב הזה.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index f7dc1aab..efb90ae 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -57,7 +57,7 @@
 <translation id="1752547299766512813">Shranjena gesla</translation>
 <translation id="1753905327828125965">Najpogosteje obiskane</translation>
 <translation id="1809939268435598390">Izbriši mapo</translation>
-<translation id="1813414402673211292">Brisanje podatov brskanja</translation>
+<translation id="1813414402673211292">Brisanje podatkov brskanja</translation>
 <translation id="1820259098641718022">Dodano na bralni seznam</translation>
 <translation id="1821253160463689938">Uporablja piškotke, da si zapomni vaše nastavitve, tudi če teh strani ne obiskujete</translation>
 <translation id="1876721852596493031">Pošlji pod. o upor.</translation>
diff --git a/ios/chrome/browser/autofill/DEPS b/ios/chrome/browser/autofill/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/autofill/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/autofill/automation/DEPS b/ios/chrome/browser/autofill/automation/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/autofill/automation/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/device_sharing/DEPS b/ios/chrome/browser/device_sharing/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/device_sharing/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/metrics/DEPS b/ios/chrome/browser/metrics/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/metrics/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/net/DEPS b/ios/chrome/browser/net/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/net/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ntp_tiles/DEPS b/ios/chrome/browser/ntp_tiles/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ntp_tiles/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/passwords/DEPS b/ios/chrome/browser/passwords/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/passwords/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/translate/DEPS b/ios/chrome/browser/translate/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/translate/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/DEPS b/ios/chrome/browser/ui/DEPS
index b91362ad..8fe1178 100644
--- a/ios/chrome/browser/ui/DEPS
+++ b/ios/chrome/browser/ui/DEPS
@@ -22,3 +22,9 @@
     "+ios/web/web_state/ui/crw_web_controller.h",
   ],
 }
+
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/activity_services/DEPS b/ios/chrome/browser/ui/activity_services/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/activity_services/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/autofill/DEPS b/ios/chrome/browser/ui/autofill/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/autofill/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/DEPS b/ios/chrome/browser/ui/autofill/manual_fill/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/autofill/manual_fill/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/bookmarks/DEPS b/ios/chrome/browser/ui/bookmarks/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/bookmarks/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/download/download_manager_egtest.mm b/ios/chrome/browser/ui/download/download_manager_egtest.mm
index 3d70e37..340dc96 100644
--- a/ios/chrome/browser/ui/download/download_manager_egtest.mm
+++ b/ios/chrome/browser/ui/download/download_manager_egtest.mm
@@ -60,6 +60,19 @@
   });
 }
 
+// Waits until Download button is shown.
+bool WaitForDownloadButton() WARN_UNUSED_RESULT;
+bool WaitForDownloadButton() {
+  return base::test::ios::WaitUntilConditionOrTimeout(
+      base::test::ios::kWaitForPageLoadTimeout, ^{
+        NSError* error = nil;
+        [[EarlGrey selectElementWithMatcher:DownloadButton()]
+            assertWithMatcher:grey_notNil()
+                        error:&error];
+        return (error == nil);
+      });
+}
+
 }  // namespace
 
 // Tests critical user journeys for Download Manager.
@@ -85,12 +98,12 @@
 // Tests sucessfull download up to the point where "Open in..." button is
 // presented. EarlGrey does not allow testing "Open in..." dialog, because it
 // is run in a separate process.
-// TODO(crbug.com/892883): Test is flaky on iOS 12 simulators.
-- (void)FLAKY_testSucessfullDownload {
+- (void)testSucessfullDownload {
   [ChromeEarlGrey loadURL:self.testServer->GetURL("/")];
   [ChromeEarlGrey waitForWebViewContainingText:"Download"];
   [ChromeEarlGrey tapWebViewElementWithID:@"download"];
 
+  GREYAssert(WaitForDownloadButton(), @"Download button did not show up");
   [[EarlGrey selectElementWithMatcher:DownloadButton()]
       performAction:grey_tap()];
 
@@ -108,6 +121,7 @@
   [ChromeEarlGrey waitForWebViewContainingText:"Download"];
   [ChromeEarlGrey tapWebViewElementWithID:@"download"];
 
+  GREYAssert(WaitForDownloadButton(), @"Download button did not show up");
   [[EarlGrey selectElementWithMatcher:DownloadButton()]
       performAction:grey_tap()];
 
@@ -115,12 +129,12 @@
 }
 
 // Tests cancelling download UI.
-// TODO(crbug.com/892883): Test is flaky on iOS 12 simulators.
-- (void)FLAKY_testCancellingDownload {
+- (void)testCancellingDownload {
   [ChromeEarlGrey loadURL:self.testServer->GetURL("/")];
   [ChromeEarlGrey waitForWebViewContainingText:"Download"];
   [ChromeEarlGrey tapWebViewElementWithID:@"download"];
 
+  GREYAssert(WaitForDownloadButton(), @"Download button did not show up");
   [[EarlGrey selectElementWithMatcher:DownloadButton()]
       assertWithMatcher:grey_notNil()];
 
@@ -141,6 +155,7 @@
   [ChromeEarlGrey waitForWebViewContainingText:"Download"];
   [ChromeEarlGrey tapWebViewElementWithID:@"download"];
 
+  GREYAssert(WaitForDownloadButton(), @"Download button did not show up");
   [[EarlGrey selectElementWithMatcher:DownloadButton()]
       performAction:grey_tap()];
 
@@ -169,6 +184,7 @@
   [ChromeEarlGrey waitForWebViewContainingText:"Download"];
   [ChromeEarlGrey tapWebViewElementWithID:@"download"];
 
+  GREYAssert(WaitForDownloadButton(), @"Download button did not show up");
   [[EarlGrey selectElementWithMatcher:DownloadButton()]
       assertWithMatcher:grey_notNil()];
 
@@ -176,12 +192,12 @@
 }
 
 // Tests accessibility on Download Manager UI when download is complete.
-// TODO(crbug.com/892883): Test is flaky on iOS 12 simulators.
-- (void)FLAKY_testAccessibilityOnCompletedDownloadToolbar {
+- (void)testAccessibilityOnCompletedDownloadToolbar {
   [ChromeEarlGrey loadURL:self.testServer->GetURL("/")];
   [ChromeEarlGrey waitForWebViewContainingText:"Download"];
   [ChromeEarlGrey tapWebViewElementWithID:@"download"];
 
+  GREYAssert(WaitForDownloadButton(), @"Download button did not show up");
   [[EarlGrey selectElementWithMatcher:DownloadButton()]
       performAction:grey_tap()];
 
diff --git a/ios/chrome/browser/ui/find_bar/DEPS b/ios/chrome/browser/ui/find_bar/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/find_bar/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/fullscreen/DEPS b/ios/chrome/browser/ui/fullscreen/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/fullscreen/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/history/DEPS b/ios/chrome/browser/ui/history/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/history/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/infobars/DEPS b/ios/chrome/browser/ui/infobars/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/infobars/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/open_in_controller.mm b/ios/chrome/browser/ui/open_in_controller.mm
index 976fa9d..b8e8d63 100644
--- a/ios/chrome/browser/ui/open_in_controller.mm
+++ b/ios/chrome/browser/ui/open_in_controller.mm
@@ -463,10 +463,7 @@
 }
 
 - (void)showDownloadOverlayView {
-  UIViewController* topViewController =
-      [[[UIApplication sharedApplication] keyWindow] rootViewController];
-  UIView* topView = topViewController.view;
-  overlayedView_ = [[UIView alloc] initWithFrame:[topView bounds]];
+  overlayedView_ = [[UIView alloc] initWithFrame:[self.baseView bounds]];
   [overlayedView_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
                                        UIViewAutoresizingFlexibleHeight)];
   UIView* grayBackgroundView =
@@ -515,9 +512,8 @@
               action:@selector(handleTapOnOverlayedView:)];
   [tapRecognizer setDelegate:self];
   [overlayedView_ addGestureRecognizer:tapRecognizer];
-
   [overlayedView_ setAlpha:0.0];
-  [topView addSubview:overlayedView_];
+  [self.baseView addSubview:overlayedView_];
   UIView* overlayedView = overlayedView_;
   [UIView animateWithDuration:kOverlayViewAnimationDuration
                    animations:^{
diff --git a/ios/chrome/browser/ui/payments/DEPS b/ios/chrome/browser/ui/payments/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/payments/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/popup_menu/DEPS b/ios/chrome/browser/ui/popup_menu/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/popup_menu/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/print/DEPS b/ios/chrome/browser/ui/print/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/print/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/qr_scanner/DEPS b/ios/chrome/browser/ui/qr_scanner/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/qr_scanner/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/reading_list/DEPS b/ios/chrome/browser/ui/reading_list/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/reading_list/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/recent_tabs/DEPS b/ios/chrome/browser/ui/recent_tabs/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/recent_tabs/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/sad_tab/DEPS b/ios/chrome/browser/ui/sad_tab/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/sad_tab/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/settings/DEPS b/ios/chrome/browser/ui/settings/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/settings/sync_utils/DEPS b/ios/chrome/browser/ui/settings/sync_utils/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/sync_utils/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/tab_grid/DEPS b/ios/chrome/browser/ui/tab_grid/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/ui/tab_grid/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/ui/toolbar/DEPS b/ios/chrome/browser/ui/toolbar/DEPS
index be2b185..b3a59e7 100644
--- a/ios/chrome/browser/ui/toolbar/DEPS
+++ b/ios/chrome/browser/ui/toolbar/DEPS
@@ -3,3 +3,9 @@
     "+ios/web/web_state/ui/crw_web_controller.h",
   ],
 }
+
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/browser/web/DEPS b/ios/chrome/browser/web/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/browser/web/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/ios/chrome/test/earl_grey/DEPS b/ios/chrome/test/earl_grey/DEPS
new file mode 100644
index 0000000..28cde8e
--- /dev/null
+++ b/ios/chrome/test/earl_grey/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # web::HttpServer is deprecated in favor of net::EmbeddedTestServer.
+  # TODO:(crbug.com/891834) Remove this exception.
+  "+ios/web/public/test/http_server",
+]
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc
index 1541631..508c571 100644
--- a/media/audio/audio_output_controller.cc
+++ b/media/audio/audio_output_controller.cc
@@ -582,10 +582,7 @@
 
   DCHECK(!diverting_to_stream_);
   diverting_to_stream_ = to_stream;
-  // Note: OnDeviceChange() will engage the "re-create" process, which will
-  // detect and use the alternate AudioOutputStream rather than create a new one
-  // via AudioManager.
-  OnDeviceChange();
+  DoStartOrStopDivertingInternal();
 }
 
 void AudioOutputController::DoStopDiverting() {
@@ -594,13 +591,43 @@
   if (state_ == kClosed)
     return;
 
-  // Note: OnDeviceChange() will cause the existing stream (the consumer of the
-  // diverted audio data) to be closed, and diverting_to_stream_ will be set
-  // back to NULL.
-  OnDeviceChange();
+  DoStartOrStopDivertingInternal();
   DCHECK(!diverting_to_stream_);
 }
 
+void AudioOutputController::DoStartOrStopDivertingInternal() {
+  TRACE_EVENT0("audio",
+               "AudioOutputController::DoStartOrStopDivertingInternal");
+
+  handler_->OnLog(base::StringPrintf(
+      "AOC::DoStartOrStopDivertingInternal() will %s diverting",
+      (stream_ == diverting_to_stream_) ? "stop" : "start"));
+
+  // Re-create the stream: First, shut down an existing stream (if any), then
+  // attempt to open either: a) the |diverting_to_stream_|, or b) a normal
+  // stream from the AudioManager. If that fails, error-out the controller.
+  // Otherwise, set the volume and restore playback if the prior stream was
+  // playing.
+  const bool restore_playback = (state_ == kPlaying);
+  DoStopCloseAndClearStream();  // Calls RemoveOutputDeviceChangeListener().
+  DCHECK_EQ(kEmpty, state_);
+  stream_ = diverting_to_stream_ ? diverting_to_stream_
+                                 : audio_manager_->MakeAudioOutputStreamProxy(
+                                       params_, output_device_id_);
+  if (!stream_ || !stream_->Open()) {
+    DoStopCloseAndClearStream();
+    state_ = kError;
+    handler_->OnControllerError();
+    return;
+  }
+  if (stream_ != diverting_to_stream_)
+    audio_manager_->AddOutputDeviceChangeListener(this);
+  stream_->SetVolume(volume_);
+  state_ = kCreated;
+  if (restore_playback)
+    DoPlay();
+}
+
 void AudioOutputController::DoStartDuplicating(AudioPushSink* to_stream) {
   DCHECK(task_runner_->BelongsToCurrentThread());
   if (state_ == kClosed)
diff --git a/media/audio/audio_output_controller.h b/media/audio/audio_output_controller.h
index a76ef38..b3721f1 100644
--- a/media/audio/audio_output_controller.h
+++ b/media/audio/audio_output_controller.h
@@ -260,6 +260,11 @@
   // Helper method that stops, closes, and NULLs |*stream_|.
   void DoStopCloseAndClearStream();
 
+  // Equivalent to OnDeviceChange(), but without any UMA events recorded. This
+  // is necessary for proper apples-to-apples comparison with the new Audio
+  // Service code paths. http://crbug.com/866455
+  void DoStartOrStopDivertingInternal();
+
   // Send audio data to each duplication target.
   void BroadcastDataToDuplicationTargets(std::unique_ptr<AudioBus> audio_bus,
                                          base::TimeTicks reference_time);
diff --git a/media/audio/cras/audio_manager_cras.cc b/media/audio/cras/audio_manager_cras.cc
index 5f030ca..e84164d 100644
--- a/media/audio/cras/audio_manager_cras.cc
+++ b/media/audio/cras/audio_manager_cras.cc
@@ -178,11 +178,9 @@
 
   // TODO(hshi): Fine-tune audio parameters based on |device_id|. The optimal
   // parameters for the loopback stream may differ from the default.
-  AudioParameters params(
-      AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
-      kDefaultSampleRate, buffer_size,
-      AudioParameters::HardwareCapabilities(limits::kMinAudioBufferSize,
-                                            limits::kMaxAudioBufferSize));
+  AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                         CHANNEL_LAYOUT_STEREO, kDefaultSampleRate,
+                         buffer_size);
   chromeos::AudioDeviceList devices;
   GetAudioDevices(&devices);
   if (HasKeyboardMic(devices))
@@ -356,13 +354,8 @@
   if (user_buffer_size)
     buffer_size = user_buffer_size;
 
-  AudioParameters params(
-      AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, sample_rate,
-      buffer_size,
-      AudioParameters::HardwareCapabilities(limits::kMinAudioBufferSize,
-                                            limits::kMaxAudioBufferSize));
-
-  return params;
+  return AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
+                         sample_rate, buffer_size);
 }
 
 AudioOutputStream* AudioManagerCras::MakeOutputStream(
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc
index a10919608..31f593c 100644
--- a/media/audio/mac/audio_manager_mac.cc
+++ b/media/audio/mac/audio_manager_mac.cc
@@ -629,12 +629,8 @@
   const int buffer_size = ChooseBufferSize(true, sample_rate);
 
   // TODO(grunell): query the native channel layout for the specific device.
-  AudioParameters params(
-      AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, sample_rate,
-      buffer_size,
-      AudioParameters::HardwareCapabilities(
-          GetMinAudioBufferSizeMacOS(limits::kMinAudioBufferSize, sample_rate),
-          limits::kMaxAudioBufferSize));
+  AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
+                         sample_rate, buffer_size);
 
   if (DeviceSupportsAmbientNoiseReduction(device)) {
     params.set_effects(AudioParameters::NOISE_SUPPRESSION);
@@ -864,13 +860,8 @@
       channel_layout = CHANNEL_LAYOUT_DISCRETE;
   }
 
-  AudioParameters params(
-      AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
-      hardware_sample_rate, buffer_size,
-      AudioParameters::HardwareCapabilities(
-          GetMinAudioBufferSizeMacOS(limits::kMinAudioBufferSize,
-                                     hardware_sample_rate),
-          limits::kMaxAudioBufferSize));
+  AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
+                         hardware_sample_rate, buffer_size);
   params.set_channels_for_discrete(output_channels);
   return params;
 }
diff --git a/media/audio/win/audio_low_latency_output_win.cc b/media/audio/win/audio_low_latency_output_win.cc
index dfd700c7..eae4236 100644
--- a/media/audio/win/audio_low_latency_output_win.cc
+++ b/media/audio/win/audio_low_latency_output_win.cc
@@ -48,7 +48,6 @@
       opened_(false),
       volume_(1.0),
       packet_size_frames_(0),
-      requested_iaudioclient3_buffer_size_(0),
       packet_size_bytes_(0),
       endpoint_buffer_size_frames_(0),
       device_id_(device_id),
@@ -103,18 +102,6 @@
   DVLOG(1) << "Number of milliseconds per packet: "
            << params.GetBufferDuration().InMillisecondsF();
 
-  AudioParameters::HardwareCapabilities hardware_capabilities =
-      params.hardware_capabilities().value_or(
-          AudioParameters::HardwareCapabilities());
-
-  // Only request an explicit buffer size if we are requesting the minimum
-  // supported by the hardware, everything else uses the older IAudioClient API.
-  if (params.frames_per_buffer() ==
-      hardware_capabilities.min_frames_per_buffer) {
-    requested_iaudioclient3_buffer_size_ =
-        hardware_capabilities.min_frames_per_buffer;
-  }
-
   // All events are auto-reset events and non-signaled initially.
 
   // Create the event which the audio engine will signal each time
@@ -162,7 +149,7 @@
     // mode and using event-driven buffer handling.
     hr = CoreAudioUtil::SharedModeInitialize(
         audio_client.Get(), &format_, audio_samples_render_event_.Get(),
-        requested_iaudioclient3_buffer_size_, &endpoint_buffer_size_frames_,
+        &endpoint_buffer_size_frames_,
         communications_device ? &kCommunicationsSessionId : NULL);
     if (FAILED(hr))
       return false;
diff --git a/media/audio/win/audio_low_latency_output_win.h b/media/audio/win/audio_low_latency_output_win.h
index ad70b39..f294c66 100644
--- a/media/audio/win/audio_low_latency_output_win.h
+++ b/media/audio/win/audio_low_latency_output_win.h
@@ -196,10 +196,6 @@
   // in each OnMoreData() callback.
   size_t packet_size_frames_;
 
-  // If requesting an explicitly-lower frame size using the IAudioClient3
-  // interface this is the requested size.
-  size_t requested_iaudioclient3_buffer_size_;
-
   // Size in bytes of each audio packet.
   size_t packet_size_bytes_;
 
diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc
index cd8b411..0dd2120f 100644
--- a/media/audio/win/audio_manager_win.cc
+++ b/media/audio/win/audio_manager_win.cc
@@ -297,8 +297,6 @@
   int sample_rate = 48000;
   int buffer_size = kFallbackBufferSize;
   int effects = AudioParameters::NO_EFFECTS;
-  int min_buffer_size = 0;
-  int max_buffer_size = 0;
 
   // TODO(henrika): Remove kEnableExclusiveAudio and related code. It doesn't
   // look like it's used.
@@ -333,12 +331,6 @@
     channel_layout = params.channel_layout();
     sample_rate = params.sample_rate();
     effects = params.effects();
-
-    AudioParameters::HardwareCapabilities hardware_capabilities =
-        params.hardware_capabilities().value_or(
-            AudioParameters::HardwareCapabilities());
-    min_buffer_size = hardware_capabilities.min_frames_per_buffer;
-    max_buffer_size = hardware_capabilities.max_frames_per_buffer;
   }
 
   if (input_params.IsValid()) {
@@ -370,21 +362,14 @@
     }
 
     effects |= input_params.effects();
-
-    // Allow non-default buffer sizes if requested.
-    buffer_size =
-        std::min(max_buffer_size,
-                 std::max(input_params.frames_per_buffer(), min_buffer_size));
   }
 
   int user_buffer_size = GetUserBufferSize();
   if (user_buffer_size)
     buffer_size = user_buffer_size;
 
-  AudioParameters params(
-      AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, sample_rate,
-      buffer_size,
-      AudioParameters::HardwareCapabilities(min_buffer_size, max_buffer_size));
+  AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
+                         sample_rate, buffer_size);
   params.set_effects(effects);
   return params;
 }
diff --git a/media/audio/win/core_audio_util_win.cc b/media/audio/win/core_audio_util_win.cc
index d19010e..59869e9 100644
--- a/media/audio/win/core_audio_util_win.cc
+++ b/media/audio/win/core_audio_util_win.cc
@@ -47,7 +47,6 @@
   CREATE_CLIENT,
   GET_MIX_FORMAT,
   GET_DEVICE_PERIOD,
-  GET_SHARED_MODE_ENGINE_PERIOD,
 };
 
 using UMALogCallback = base::RepeatingCallback<void(UmaLogStep, HRESULT)>;
@@ -92,9 +91,6 @@
           "GetPreferredOutputStreamParametersWin.GetDevicePeriodResult",
           hr);
       break;
-    case UmaLogStep::GET_SHARED_MODE_ENGINE_PERIOD:
-      // TODO(crbug.com/892044): add histogram logging.
-      break;
   }
 }
 
@@ -396,58 +392,29 @@
   if (FAILED(hr))
     return hr;
 
+  REFERENCE_TIME default_period = 0;
+  hr = CoreAudioUtil::GetDevicePeriod(client, AUDCLNT_SHAREMODE_SHARED,
+                                      &default_period);
+  uma_log_cb.Run(UmaLogStep::GET_DEVICE_PERIOD, hr);
+  if (FAILED(hr))
+    return hr;
+
+  ChannelLayout channel_layout = GetChannelLayout(mix_format);
+
   // Preferred sample rate.
   int sample_rate = mix_format.Format.nSamplesPerSec;
 
-  int min_frames_per_buffer = 0;
-  int max_frames_per_buffer = 0;
-  int frames_per_buffer;
+  // We are using the native device period to derive the smallest possible
+  // buffer size in shared mode. Note that the actual endpoint buffer will be
+  // larger than this size but it will be possible to fill it up in two calls.
+  // TODO(henrika): ensure that this scheme works for capturing as well.
+  int frames_per_buffer = static_cast<int>(
+      sample_rate *
+          CoreAudioUtil::ReferenceTimeToTimeDelta(default_period).InSecondsF() +
+      0.5);
 
-  ComPtr<IAudioClient3> audio_client_3;
-  hr = client->QueryInterface(audio_client_3.GetAddressOf());
-  if (SUCCEEDED(hr)) {
-    UINT32 default_period_frames;
-    UINT32 fundamental_period_frames;
-    UINT32 min_period_frames;
-    UINT32 max_period_frames;
-    hr = audio_client_3->GetSharedModeEnginePeriod(
-        &(mix_format.Format), &default_period_frames,
-        &fundamental_period_frames, &min_period_frames, &max_period_frames);
-
-    uma_log_cb.Run(UmaLogStep::GET_SHARED_MODE_ENGINE_PERIOD, hr);
-    if (SUCCEEDED(hr)) {
-      min_frames_per_buffer = min_period_frames;
-      max_frames_per_buffer = max_period_frames;
-      frames_per_buffer = default_period_frames;
-    }
-  }
-
-  // If we don't have access to IAudioClient3 or if the call to
-  // GetSharedModeEnginePeriod() fails we fall back to GetDevicePeriod().
-  if (FAILED(hr)) {
-    REFERENCE_TIME default_period = 0;
-    hr = CoreAudioUtil::GetDevicePeriod(client, AUDCLNT_SHAREMODE_SHARED,
-                                        &default_period);
-    uma_log_cb.Run(UmaLogStep::GET_DEVICE_PERIOD, hr);
-    if (FAILED(hr))
-      return hr;
-
-    // We are using the native device period to derive the smallest possible
-    // buffer size in shared mode. Note that the actual endpoint buffer will be
-    // larger than this size but it will be possible to fill it up in two calls.
-    // TODO(henrika): ensure that this scheme works for capturing as well.
-    frames_per_buffer = static_cast<int>(
-        sample_rate * CoreAudioUtil::ReferenceTimeToTimeDelta(default_period)
-                          .InSecondsF() +
-        0.5);
-  }
-
-  ChannelLayout channel_layout = GetChannelLayout(mix_format);
-  AudioParameters audio_params(
-      AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, sample_rate,
-      frames_per_buffer,
-      AudioParameters::HardwareCapabilities(min_frames_per_buffer,
-                                            max_frames_per_buffer));
+  AudioParameters audio_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                               channel_layout, sample_rate, frames_per_buffer);
   *params = audio_params;
   DVLOG(1) << params->AsHumanReadableString();
 
@@ -839,7 +806,6 @@
 HRESULT CoreAudioUtil::SharedModeInitialize(IAudioClient* client,
                                             const WAVEFORMATPCMEX* format,
                                             HANDLE event_handle,
-                                            uint32_t requested_buffer_size,
                                             uint32_t* endpoint_buffer_size,
                                             const GUID* session_guid) {
   // Use default flags (i.e, dont set AUDCLNT_STREAMFLAGS_NOPERSIST) to
@@ -859,31 +825,16 @@
     stream_flags |= AUDCLNT_STREAMFLAGS_EVENTCALLBACK;
   DVLOG(2) << "stream_flags: 0x" << std::hex << stream_flags;
 
-  HRESULT hr;
-  if (requested_buffer_size > 0) {
-    ComPtr<IAudioClient3> audio_client_3;
-    hr = client->QueryInterface(audio_client_3.GetAddressOf());
-    if (FAILED(hr)) {
-      DVLOG(1) << "Failed to QueryInterface on IAudioClient3 with explicit "
-                  "buffer size: "
-               << std::hex << hr;
-      return hr;
-    }
-    hr = audio_client_3->InitializeSharedAudioStream(
-        stream_flags, requested_buffer_size, &(format->Format), session_guid);
-    if (FAILED(hr)) {
-      DVLOG(1) << "IAudioClient3::InitializeSharedAudioStream: " << std::hex
-               << hr;
-      return hr;
-    }
-  } else {
-    // Initialize the shared mode client for minimal delay.
-    hr = client->Initialize(AUDCLNT_SHAREMODE_SHARED, stream_flags, 0, 0,
-                            &(format->Format), session_guid);
-    if (FAILED(hr)) {
-      DVLOG(1) << "IAudioClient::Initialize: " << std::hex << hr;
-      return hr;
-    }
+  // Initialize the shared mode client for minimal delay.
+  HRESULT hr = client->Initialize(AUDCLNT_SHAREMODE_SHARED,
+                                  stream_flags,
+                                  0,
+                                  0,
+                                  reinterpret_cast<const WAVEFORMATEX*>(format),
+                                  session_guid);
+  if (FAILED(hr)) {
+    DVLOG(1) << "IAudioClient::Initialize: " << std::hex << hr;
+    return hr;
   }
 
   if (use_event) {
diff --git a/media/audio/win/core_audio_util_win.h b/media/audio/win/core_audio_util_win.h
index 71d6302..6a2b0dab 100644
--- a/media/audio/win/core_audio_util_win.h
+++ b/media/audio/win/core_audio_util_win.h
@@ -184,7 +184,6 @@
   static HRESULT SharedModeInitialize(IAudioClient* client,
                                       const WAVEFORMATPCMEX* format,
                                       HANDLE event_handle,
-                                      uint32_t requested_buffer_size,
                                       uint32_t* endpoint_buffer_size,
                                       const GUID* session_guid);
 
diff --git a/media/audio/win/core_audio_util_win_unittest.cc b/media/audio/win/core_audio_util_win_unittest.cc
index 3415f98..7371406 100644
--- a/media/audio/win/core_audio_util_win_unittest.cc
+++ b/media/audio/win/core_audio_util_win_unittest.cc
@@ -304,13 +304,13 @@
 
   // Perform a shared-mode initialization without event-driven buffer handling.
   uint32_t endpoint_buffer_size = 0;
-  HRESULT hr = CoreAudioUtil::SharedModeInitialize(
-      client.Get(), &format, NULL, 0, &endpoint_buffer_size, NULL);
+  HRESULT hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL,
+                                                   &endpoint_buffer_size, NULL);
   EXPECT_TRUE(SUCCEEDED(hr));
   EXPECT_GT(endpoint_buffer_size, 0u);
 
   // It is only possible to create a client once.
-  hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL, 0,
+  hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL,
                                            &endpoint_buffer_size, NULL);
   EXPECT_FALSE(SUCCEEDED(hr));
   EXPECT_EQ(hr, AUDCLNT_E_ALREADY_INITIALIZED);
@@ -319,7 +319,7 @@
   client = CoreAudioUtil::CreateClient(AudioDeviceDescription::kDefaultDeviceId,
                                        eRender, eConsole);
   EXPECT_TRUE(client.Get());
-  hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL, 0,
+  hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL,
                                            &endpoint_buffer_size, NULL);
   EXPECT_TRUE(SUCCEEDED(hr));
   EXPECT_GT(endpoint_buffer_size, 0u);
@@ -333,7 +333,7 @@
   format.Format.nSamplesPerSec = format.Format.nSamplesPerSec + 1;
   EXPECT_FALSE(CoreAudioUtil::IsFormatSupported(
       client.Get(), AUDCLNT_SHAREMODE_SHARED, &format));
-  hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL, 0,
+  hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL,
                                            &endpoint_buffer_size, NULL);
   EXPECT_TRUE(FAILED(hr));
   EXPECT_EQ(hr, E_INVALIDARG);
@@ -350,9 +350,8 @@
       SUCCEEDED(CoreAudioUtil::GetSharedModeMixFormat(client.Get(), &format)));
   EXPECT_TRUE(CoreAudioUtil::IsFormatSupported(
       client.Get(), AUDCLNT_SHAREMODE_SHARED, &format));
-  hr = CoreAudioUtil::SharedModeInitialize(client.Get(), &format,
-                                           event_handle.Get(), 0,
-                                           &endpoint_buffer_size, NULL);
+  hr = CoreAudioUtil::SharedModeInitialize(
+      client.Get(), &format, event_handle.Get(), &endpoint_buffer_size, NULL);
   EXPECT_TRUE(SUCCEEDED(hr));
   EXPECT_GT(endpoint_buffer_size, 0u);
 }
@@ -382,7 +381,7 @@
       EXPECT_FALSE(render_client.Get());
 
       // Do a proper initialization and verify that it works this time.
-      CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL, 0,
+      CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL,
                                           &endpoint_buffer_size, NULL);
       render_client = CoreAudioUtil::CreateRenderClient(client.Get());
       EXPECT_TRUE(render_client.Get());
@@ -394,7 +393,7 @@
       EXPECT_FALSE(capture_client.Get());
 
       // Do a proper initialization and verify that it works this time.
-      CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL, 0,
+      CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL,
                                           &endpoint_buffer_size, NULL);
       capture_client = CoreAudioUtil::CreateCaptureClient(client.Get());
       EXPECT_TRUE(capture_client.Get());
@@ -415,7 +414,7 @@
   uint32_t endpoint_buffer_size = 0;
   EXPECT_TRUE(
       SUCCEEDED(CoreAudioUtil::GetSharedModeMixFormat(client.Get(), &format)));
-  CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL, 0,
+  CoreAudioUtil::SharedModeInitialize(client.Get(), &format, NULL,
                                       &endpoint_buffer_size, NULL);
   EXPECT_GT(endpoint_buffer_size, 0u);
 
@@ -516,11 +515,6 @@
       AudioDeviceDescription::kDefaultDeviceId, true, &output_params);
   EXPECT_TRUE(SUCCEEDED(hr));
   EXPECT_TRUE(output_params.IsValid());
-
-  AudioParameters::HardwareCapabilities output_hardware_capabilities =
-      output_params.hardware_capabilities().value_or(
-          AudioParameters::HardwareCapabilities());
-
   tester.ExpectTotalCount(
       "Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin."
       "CreateDeviceEnumeratorResult",
@@ -537,65 +531,10 @@
       "Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin."
       "GetMixFormatResult",
       1);
-
-  // If we have a min_frames_per_buffer then it came from the new API.
-  if (!output_hardware_capabilities.min_frames_per_buffer) {
-    tester.ExpectTotalCount(
-        "Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin."
-        "GetDevicePeriodResult",
-        1);
-  }
-}
-
-TEST_F(CoreAudioUtilWinTest, SharedModeLowerBufferSize) {
-  ABORT_AUDIO_TEST_IF_NOT(DevicesAvailable());
-
-  AudioParameters params;
-  EXPECT_TRUE(SUCCEEDED(CoreAudioUtil::GetPreferredAudioParameters(
-      AudioDeviceDescription::kDefaultDeviceId, true, &params)));
-
-  AudioParameters::HardwareCapabilities hardware_capabilities =
-      params.hardware_capabilities().value_or(
-          AudioParameters::HardwareCapabilities());
-
-  // If min_frames_per_buffer is 0 then we don't support the IAudioClient3
-  // low-latency API.
-  ABORT_AUDIO_TEST_IF_NOT(hardware_capabilities.min_frames_per_buffer > 0);
-
-  // Nothing to test if the default is already the minimum.
-  ABORT_AUDIO_TEST_IF_NOT(hardware_capabilities.min_frames_per_buffer <
-                          params.frames_per_buffer());
-
-  ComPtr<IAudioClient> default_client;
-  default_client = CoreAudioUtil::CreateClient(
-      AudioDeviceDescription::kDefaultDeviceId, eRender, eConsole);
-  EXPECT_TRUE(default_client.Get());
-
-  WAVEFORMATPCMEX format;
-  EXPECT_TRUE(SUCCEEDED(
-      CoreAudioUtil::GetSharedModeMixFormat(default_client.Get(), &format)));
-
-  uint32_t default_endpoint_buffer_size = 0;
-  HRESULT hr = CoreAudioUtil::SharedModeInitialize(
-      default_client.Get(), &format, NULL, 0, &default_endpoint_buffer_size,
-      NULL);
-  EXPECT_TRUE(SUCCEEDED(hr));
-  EXPECT_GT(default_endpoint_buffer_size, 0u);
-
-  ComPtr<IAudioClient> low_latency_client;
-  low_latency_client = CoreAudioUtil::CreateClient(
-      AudioDeviceDescription::kDefaultDeviceId, eRender, eConsole);
-  EXPECT_TRUE(low_latency_client.Get());
-
-  uint32_t low_latency_endpoint_buffer_size = 0;
-  hr = CoreAudioUtil::SharedModeInitialize(
-      low_latency_client.Get(), &format, NULL,
-      hardware_capabilities.min_frames_per_buffer,
-      &low_latency_endpoint_buffer_size, NULL);
-  EXPECT_TRUE(SUCCEEDED(hr));
-  EXPECT_GT(low_latency_endpoint_buffer_size, 0u);
-
-  EXPECT_LT(low_latency_endpoint_buffer_size, default_endpoint_buffer_size);
+  tester.ExpectTotalCount(
+      "Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin."
+      "GetDevicePeriodResult",
+      1);
 }
 
 }  // namespace media
diff --git a/media/base/audio_latency.cc b/media/base/audio_latency.cc
index a257707..5816ad0 100644
--- a/media/base/audio_latency.cc
+++ b/media/base/audio_latency.cc
@@ -141,56 +141,53 @@
 
 int AudioLatency::GetExactBufferSize(base::TimeDelta duration,
                                      int sample_rate,
-                                     int hardware_buffer_size,
-                                     int min_hardware_buffer_size,
-                                     int max_hardware_buffer_size) {
+                                     int hardware_buffer_size) {
   DCHECK_NE(0, hardware_buffer_size);
-  DCHECK_GE(hardware_buffer_size, min_hardware_buffer_size);
-  DCHECK_GE(max_hardware_buffer_size, min_hardware_buffer_size);
-  DCHECK(max_hardware_buffer_size == 0 ||
-         hardware_buffer_size <= max_hardware_buffer_size);
-  DCHECK(max_hardware_buffer_size == 0 ||
-         max_hardware_buffer_size <= limits::kMaxWebAudioBufferSize);
 
-  int requested_buffer_size = std::round(duration.InSecondsF() * sample_rate);
+  const int requested_buffer_size = duration.InSecondsF() * sample_rate;
 
-  if (min_hardware_buffer_size &&
-      requested_buffer_size <= min_hardware_buffer_size)
-    return min_hardware_buffer_size;
-
-  if (requested_buffer_size <= hardware_buffer_size)
-    return hardware_buffer_size;
-
-#if defined(OS_WIN)
-  // On Windows we allow either exactly the minimum buffer size (using
-  // IAudioClient3) or multiples of the default buffer size using the previous
-  // IAudioClient API.
-  const int multiplier = hardware_buffer_size;
+// On OSX and CRAS the preferred buffer size is larger than the minimum,
+// however we allow values down to the minimum if requested explicitly.
+#if defined(OS_MACOSX)
+  const int minimum_buffer_size =
+      GetMinAudioBufferSizeMacOS(limits::kMinAudioBufferSize, sample_rate);
+  if (requested_buffer_size > limits::kMaxAudioBufferSize) {
+    // Mac OS is currently the only platform with a max buffer size less than
+    // kMaxWebAudioBufferSize. Since Mac OS audio hardware can run at
+    // kMaxAudioBufferSize (currently 4096) and it only makes sense for Web
+    // Audio to run at multiples of the hardware buffer size, tell Web Audio to
+    // just use web audio max (8192) if the user requests >4096.
+    static_assert(
+        limits::kMaxWebAudioBufferSize % limits::kMaxAudioBufferSize == 0,
+        "Returning kMaxWebAudioBufferSize here assumes it's a multiple of the "
+        "hardware buffer size.");
+    return limits::kMaxWebAudioBufferSize;
+  }
+#elif defined(USE_CRAS)
+  const int minimum_buffer_size = limits::kMinAudioBufferSize;
+  static_assert(limits::kMaxAudioBufferSize >= limits::kMaxWebAudioBufferSize,
+                "Algorithm needs refactoring if kMaxAudioBufferSize for CRAS "
+                "is lowered.");
 #else
-  const int multiplier = min_hardware_buffer_size > 0 ? min_hardware_buffer_size
-                                                      : hardware_buffer_size;
+  const int minimum_buffer_size = hardware_buffer_size;
 #endif
 
-  int buffer_size =
-      std::ceil(requested_buffer_size / static_cast<double>(multiplier)) *
-      multiplier;
+  // Round requested size up to next multiple of the minimum hardware size. The
+  // minimum hardware size is one that we know is allowed by the platform audio
+  // layer and may be smaller than its preferred buffer size (the
+  // hardware_buffer_size). For platforms where this is supported we know that
+  // using a buffer size that is a multiple of this minimum is safe.
+  const int buffer_size = std::ceil(std::max(requested_buffer_size, 1) /
+                                    static_cast<double>(minimum_buffer_size)) *
+                          minimum_buffer_size;
 
-  // If the user is requesting a buffer size >= max_hardware_buffer_size then we
-  // want the hardware to run at this max and then only return sizes that are
-  // multiples of this here so that we don't end up with Web Audio running with
-  // a period that's misaligned with the hardware one.
-  if (max_hardware_buffer_size && buffer_size >= max_hardware_buffer_size) {
-    buffer_size = std::ceil(requested_buffer_size /
-                            static_cast<double>(max_hardware_buffer_size)) *
-                  max_hardware_buffer_size;
-  }
+  // The maximum must also be a multiple of the minimum hardware buffer size in
+  // case the clamping below is required.
+  const int maximum_buffer_size =
+      (limits::kMaxWebAudioBufferSize / minimum_buffer_size) *
+      minimum_buffer_size;
 
-  const int platform_max_buffer_size =
-      max_hardware_buffer_size
-          ? (limits::kMaxWebAudioBufferSize / max_hardware_buffer_size) *
-                max_hardware_buffer_size
-          : (limits::kMaxWebAudioBufferSize / multiplier) * multiplier;
-
-  return std::min(buffer_size, platform_max_buffer_size);
+  return std::min(maximum_buffer_size,
+                  std::max(buffer_size, minimum_buffer_size));
 }
 }  // namespace media
diff --git a/media/base/audio_latency.h b/media/base/audio_latency.h
index fe0bc59..5ffa90e 100644
--- a/media/base/audio_latency.h
+++ b/media/base/audio_latency.h
@@ -43,20 +43,9 @@
 
   static int GetInteractiveBufferSize(int hardware_buffer_size);
 
-  // Return the closest buffer size for this platform that will result in a
-  // latency not less than |duration| for the given |sample_rate|. The returned
-  // buffer size must be >= |min_hardware_buffer_size| and must be <=
-  // |kMaxWebAudioBufferSize|. |max_hardware_buffer_size| is used to help
-  // determine a buffer size that won't cause web audio and the hardware to run
-  // at unsynchronized buffer sizes (e.g. hardware running at 4096 and web audio
-  // running at 4224). |hardware_buffer_size| is the platform's preferred buffer
-  // size. It is valid for both the min and max to be zero in which case only
-  // |hardware_buffer_size| and multiples of it will be used.
   static int GetExactBufferSize(base::TimeDelta duration,
                                 int sample_rate,
-                                int hardware_buffer_size,
-                                int min_hardware_buffer_size,
-                                int max_hardware_buffer_size);
+                                int hardware_buffer_size);
 };
 
 }  // namespace media
diff --git a/media/base/audio_latency_unittest.cc b/media/base/audio_latency_unittest.cc
index 5b3e6812..e638958 100644
--- a/media/base/audio_latency_unittest.cc
+++ b/media/base/audio_latency_unittest.cc
@@ -14,116 +14,6 @@
 
 namespace media {
 
-// Tuple of <sample rate, hardware buffer size, min buffer size, max buffer
-// size>.
-using AudioLatencyTestData = std::tuple<int, int, int, int>;
-
-class AudioLatencyTest : public testing::TestWithParam<AudioLatencyTestData> {
- public:
-  AudioLatencyTest() = default;
-  ~AudioLatencyTest() override = default;
-
-  void TestExactBufferSizes() {
-    const int hardware_sample_rate = std::get<0>(GetParam());
-    const int hardware_buffer_size = std::get<1>(GetParam());
-    const int min_buffer_size = std::get<2>(GetParam());
-    const int max_buffer_size = std::get<3>(GetParam());
-
-    const int platform_min_buffer_size =
-        min_buffer_size ? min_buffer_size : hardware_buffer_size;
-
-// Windows 10 may allow exactly the minimum buffer size using the IAudioClient3
-// API but any other buffer size must be a multiple of the hardware_buffer_size
-// and not the min_buffer_size.
-#if defined(OS_WIN)
-    const int multiplier = hardware_buffer_size;
-#else
-    const int multiplier = platform_min_buffer_size;
-#endif
-
-    const int platform_max_buffer_size =
-        max_buffer_size
-            ? (limits::kMaxWebAudioBufferSize / max_buffer_size) *
-                  max_buffer_size
-            : (limits::kMaxWebAudioBufferSize / multiplier) * multiplier;
-
-    EXPECT_EQ(platform_min_buffer_size,
-              media::AudioLatency::GetExactBufferSize(
-                  base::TimeDelta::FromSecondsD(0.0), hardware_sample_rate,
-                  hardware_buffer_size, min_buffer_size, max_buffer_size));
-    EXPECT_EQ(
-        platform_min_buffer_size,
-        media::AudioLatency::GetExactBufferSize(
-            base::TimeDelta::FromSecondsD(
-                min_buffer_size / static_cast<double>(hardware_sample_rate)),
-            hardware_sample_rate, hardware_buffer_size, min_buffer_size,
-            max_buffer_size));
-    EXPECT_EQ(
-        multiplier * 2,
-        media::AudioLatency::GetExactBufferSize(
-            base::TimeDelta::FromSecondsD(
-                (multiplier * 2) / static_cast<double>(hardware_sample_rate)),
-            hardware_sample_rate, hardware_buffer_size, min_buffer_size,
-            max_buffer_size));
-    EXPECT_EQ(
-        multiplier * 2,
-        media::AudioLatency::GetExactBufferSize(
-            base::TimeDelta::FromSecondsD(
-                (multiplier * 1.1) / static_cast<double>(hardware_sample_rate)),
-            hardware_sample_rate, hardware_buffer_size, min_buffer_size,
-            max_buffer_size));
-    EXPECT_EQ(platform_max_buffer_size,
-              media::AudioLatency::GetExactBufferSize(
-                  base::TimeDelta::FromSecondsD(10.0), hardware_sample_rate,
-                  hardware_buffer_size, min_buffer_size, max_buffer_size));
-    if (max_buffer_size) {
-      EXPECT_EQ(
-          max_buffer_size,
-          media::AudioLatency::GetExactBufferSize(
-              base::TimeDelta::FromSecondsD(
-                  max_buffer_size / static_cast<double>(hardware_sample_rate)),
-              hardware_sample_rate, hardware_buffer_size, min_buffer_size,
-              max_buffer_size));
-    }
-
-#if defined(OS_WIN)
-    if (min_buffer_size && min_buffer_size < hardware_buffer_size) {
-      EXPECT_EQ(hardware_buffer_size,
-                media::AudioLatency::GetExactBufferSize(
-                    base::TimeDelta::FromSecondsD(
-                        (min_buffer_size * 1.1) /
-                        static_cast<double>(hardware_sample_rate)),
-                    hardware_sample_rate, hardware_buffer_size, min_buffer_size,
-                    max_buffer_size));
-    }
-#elif defined(OS_MACOSX)
-    EXPECT_EQ(limits::kMaxWebAudioBufferSize,
-              media::AudioLatency::GetExactBufferSize(
-                  base::TimeDelta::FromSecondsD(
-                      (limits::kMaxAudioBufferSize * 1.1) /
-                      static_cast<double>(hardware_sample_rate)),
-                  hardware_sample_rate, hardware_buffer_size, min_buffer_size,
-                  max_buffer_size));
-#endif
-
-    int previous_buffer_size = 0;
-    for (int i = 0; i < 1000; i++) {
-      int buffer_size = media::AudioLatency::GetExactBufferSize(
-          base::TimeDelta::FromSecondsD(i / 1000.0), hardware_sample_rate,
-          hardware_buffer_size, min_buffer_size, max_buffer_size);
-      EXPECT_GE(buffer_size, previous_buffer_size);
-#if defined(OS_WIN)
-      EXPECT_TRUE(buffer_size == min_buffer_size ||
-                  buffer_size % multiplier == 0 ||
-                  buffer_size % max_buffer_size == 0);
-#else
-      EXPECT_EQ(buffer_size, buffer_size / multiplier * multiplier);
-#endif
-      previous_buffer_size = buffer_size;
-    }
-  }
-};
-
 // TODO(olka): extend unit tests, use real-world sample rates.
 
 TEST(AudioLatency, HighLatencyBufferSizes) {
@@ -157,35 +47,68 @@
   }
 }
 
-TEST_P(AudioLatencyTest, ExactBufferSizes) {
-  TestExactBufferSizes();
-}
+TEST(AudioLatency, ExactBufferSizes) {
+  const int hardware_buffer_size = 256;
+  const int hardware_sample_rate = 44100;
+  const int max_webaudio_buffer_size = 8192;
 
-INSTANTIATE_TEST_CASE_P(
-    /* no prefix */,
-    AudioLatencyTest,
-#if defined(OS_WIN)
-    // Windows 10 with supported driver will have valid min and max buffer sizes
-    // whereas older Windows will have zeros. The specific min, max and hardware
-    // are device-dependent.
-    testing::Values(std::make_tuple(44100, 440, 128, 440),
-                    std::make_tuple(44100, 440, 440, 440),
-                    std::make_tuple(44100, 440, 440, 880),
-                    std::make_tuple(44100, 440, 440, 4400),
-                    std::make_tuple(44100, 440, 128, 4196),
-                    std::make_tuple(44100, 440, 440, 4196),
-                    std::make_tuple(44100, 440, 0, 0),
-                    std::make_tuple(44100, 256, 128, 512),
-                    std::make_tuple(44100, 256, 0, 0))
-#elif defined(OS_MACOSX) || defined(USE_CRAS)
-    // These values are constant on Mac and ChromeOS, regardless of device.
-    testing::Values(std::make_tuple(44100,
-                                    256,
-                                    limits::kMinAudioBufferSize,
-                                    limits::kMaxAudioBufferSize))
+#if defined(OS_MACOSX) || defined(USE_CRAS)
+  const int minimum_buffer_size = limits::kMinAudioBufferSize;
 #else
-    testing::Values(std::make_tuple(44100, 256, 0, 0),
-                    std::make_tuple(44100, 440, 0, 0))
+  const int minimum_buffer_size = hardware_buffer_size;
 #endif
-        );
+
+  EXPECT_EQ(minimum_buffer_size,
+            media::AudioLatency::GetExactBufferSize(
+                base::TimeDelta::FromSecondsD(0.0), hardware_sample_rate,
+                hardware_buffer_size));
+  EXPECT_EQ(
+      minimum_buffer_size,
+      media::AudioLatency::GetExactBufferSize(
+          base::TimeDelta::FromSecondsD(
+              minimum_buffer_size / static_cast<double>(hardware_sample_rate)),
+          hardware_sample_rate, hardware_buffer_size));
+  EXPECT_EQ(minimum_buffer_size * 2,
+            media::AudioLatency::GetExactBufferSize(
+                base::TimeDelta::FromSecondsD(
+                    (minimum_buffer_size * 2) /
+                    static_cast<double>(hardware_sample_rate)),
+                hardware_sample_rate, hardware_buffer_size));
+  EXPECT_EQ(minimum_buffer_size * 2,
+            media::AudioLatency::GetExactBufferSize(
+                base::TimeDelta::FromSecondsD(
+                    (minimum_buffer_size * 1.1) /
+                    static_cast<double>(hardware_sample_rate)),
+                hardware_sample_rate, hardware_buffer_size));
+  EXPECT_EQ(max_webaudio_buffer_size,
+            media::AudioLatency::GetExactBufferSize(
+                base::TimeDelta::FromSecondsD(10.0), hardware_sample_rate,
+                hardware_buffer_size));
+
+#if defined(OS_MACOSX)
+  EXPECT_EQ(limits::kMaxAudioBufferSize,
+            media::AudioLatency::GetExactBufferSize(
+                base::TimeDelta::FromSecondsD(
+                    limits::kMaxAudioBufferSize /
+                    static_cast<double>(hardware_sample_rate)),
+                hardware_sample_rate, hardware_buffer_size));
+  EXPECT_EQ(max_webaudio_buffer_size,
+            media::AudioLatency::GetExactBufferSize(
+                base::TimeDelta::FromSecondsD(
+                    (limits::kMaxAudioBufferSize * 1.1) /
+                    static_cast<double>(hardware_sample_rate)),
+                hardware_sample_rate, hardware_buffer_size));
+#endif
+
+  int previous_buffer_size = 0;
+  for (int i = 0; i < 1000; i++) {
+    int buffer_size = media::AudioLatency::GetExactBufferSize(
+        base::TimeDelta::FromSecondsD(i / 1000.0), hardware_sample_rate,
+        hardware_buffer_size);
+    EXPECT_GE(buffer_size, previous_buffer_size);
+    EXPECT_EQ(buffer_size,
+              buffer_size / minimum_buffer_size * minimum_buffer_size);
+    previous_buffer_size = buffer_size;
+  }
+}
 }  // namespace media
diff --git a/media/base/audio_parameters.cc b/media/base/audio_parameters.cc
index 9bde69dd..bacbef8 100644
--- a/media/base/audio_parameters.cc
+++ b/media/base/audio_parameters.cc
@@ -66,17 +66,6 @@
   Reset(format, channel_layout, sample_rate, frames_per_buffer);
 }
 
-AudioParameters::AudioParameters(
-    Format format,
-    ChannelLayout channel_layout,
-    int sample_rate,
-    int frames_per_buffer,
-    const HardwareCapabilities& hardware_capabilities)
-    : latency_tag_(AudioLatency::LATENCY_COUNT),
-      hardware_capabilities_(hardware_capabilities) {
-  Reset(format, channel_layout, sample_rate, frames_per_buffer);
-}
-
 AudioParameters::~AudioParameters() = default;
 
 AudioParameters::AudioParameters(const AudioParameters&) = default;
@@ -102,13 +91,6 @@
          (sample_rate_ <= media::limits::kMaxSampleRate) &&
          (frames_per_buffer_ > 0) &&
          (frames_per_buffer_ <= media::limits::kMaxSamplesPerPacket) &&
-         (!hardware_capabilities_ ||
-          ((hardware_capabilities_->min_frames_per_buffer >= 0) &&
-           (hardware_capabilities_->min_frames_per_buffer <=
-            media::limits::kMaxSamplesPerPacket) &&
-           (hardware_capabilities_->max_frames_per_buffer >= 0) &&
-           (hardware_capabilities_->max_frames_per_buffer <=
-            media::limits::kMaxSamplesPerPacket))) &&
          (channel_layout_ == CHANNEL_LAYOUT_DISCRETE ||
           channels_ == ChannelLayoutToChannelCount(channel_layout_));
 }
diff --git a/media/base/audio_parameters.h b/media/base/audio_parameters.h
index 7862759..fa6eb8ea 100644
--- a/media/base/audio_parameters.h
+++ b/media/base/audio_parameters.h
@@ -11,7 +11,6 @@
 
 #include "base/compiler_specific.h"
 #include "base/numerics/checked_math.h"
-#include "base/optional.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "media/base/audio_bus.h"
@@ -148,36 +147,15 @@
     MULTIZONE = 0x80,
   };
 
-  struct HardwareCapabilities {
-    HardwareCapabilities(int min_frames_per_buffer, int max_frames_per_buffer)
-        : min_frames_per_buffer(min_frames_per_buffer),
-          max_frames_per_buffer(max_frames_per_buffer) {}
-    HardwareCapabilities()
-        : min_frames_per_buffer(0), max_frames_per_buffer(0) {}
-
-    // Minimum and maximum buffer sizes supported by the audio hardware. Opening
-    // a device with frames_per_buffer set to a value between min and max should
-    // result in the audio hardware running close to this buffer size, values
-    // above or below will be clamped to the min or max by the audio system.
-    // Either value can be 0 and means that the min or max is not known.
-    int min_frames_per_buffer;
-    int max_frames_per_buffer;
-  };
-
   AudioParameters();
   AudioParameters(Format format,
                   ChannelLayout channel_layout,
                   int sample_rate,
                   int frames_per_buffer);
-  AudioParameters(Format format,
-                  ChannelLayout channel_layout,
-                  int sample_rate,
-                  int frames_per_buffer,
-                  const HardwareCapabilities& hardware_capabilities);
 
   ~AudioParameters();
 
-  // Re-initializes all members except for |hardware_capabilities_|.
+  // Re-initializes all members.
   void Reset(Format format,
              ChannelLayout channel_layout,
              int sample_rate,
@@ -237,10 +215,6 @@
   }
   int frames_per_buffer() const { return frames_per_buffer_; }
 
-  base::Optional<HardwareCapabilities> hardware_capabilities() const {
-    return hardware_capabilities_;
-  }
-
   void set_effects(int effects) { effects_ = effects; }
   int effects() const { return effects_; }
 
@@ -285,10 +259,6 @@
   // Optional tag to pass latency info from renderer to browser. Set to
   // AudioLatency::LATENCY_COUNT by default, which means "not specified".
   AudioLatency::LatencyType latency_tag_;
-
-  // Audio hardware specific parameters, these are treated as read-only and
-  // changing them has no effect.
-  base::Optional<HardwareCapabilities> hardware_capabilities_;
 };
 
 // Comparison is useful when AudioParameters is used with std structures.
diff --git a/media/base/ipc/media_param_traits.cc b/media/base/ipc/media_param_traits.cc
index 64db44e7..9967314 100644
--- a/media/base/ipc/media_param_traits.cc
+++ b/media/base/ipc/media_param_traits.cc
@@ -31,7 +31,6 @@
   WriteParam(m, p.effects());
   WriteParam(m, p.mic_positions());
   WriteParam(m, p.latency_tag());
-  WriteParam(m, p.hardware_capabilities());
 }
 
 bool ParamTraits<AudioParameters>::Read(const base::Pickle* m,
@@ -42,32 +41,24 @@
   int sample_rate, frames_per_buffer, channels, effects;
   std::vector<media::Point> mic_positions;
   AudioLatency::LatencyType latency_tag;
-  base::Optional<media::AudioParameters::HardwareCapabilities>
-      hardware_capabilities;
 
   if (!ReadParam(m, iter, &format) || !ReadParam(m, iter, &channel_layout) ||
       !ReadParam(m, iter, &sample_rate) ||
       !ReadParam(m, iter, &frames_per_buffer) ||
       !ReadParam(m, iter, &channels) || !ReadParam(m, iter, &effects) ||
       !ReadParam(m, iter, &mic_positions) ||
-      !ReadParam(m, iter, &latency_tag) ||
-      !ReadParam(m, iter, &hardware_capabilities)) {
+      !ReadParam(m, iter, &latency_tag)) {
     return false;
   }
 
-  if (hardware_capabilities) {
-    *r = AudioParameters(format, channel_layout, sample_rate, frames_per_buffer,
-                         *hardware_capabilities);
-  } else {
-    *r =
-        AudioParameters(format, channel_layout, sample_rate, frames_per_buffer);
-  }
+  AudioParameters params(format, channel_layout, sample_rate,
+                         frames_per_buffer);
+  params.set_channels_for_discrete(channels);
+  params.set_effects(effects);
+  params.set_mic_positions(mic_positions);
+  params.set_latency_tag(latency_tag);
 
-  r->set_channels_for_discrete(channels);
-  r->set_effects(effects);
-  r->set_mic_positions(mic_positions);
-  r->set_latency_tag(latency_tag);
-
+  *r = params;
   return r->IsValid();
 }
 
@@ -76,33 +67,6 @@
   l->append(base::StringPrintf("<AudioParameters>"));
 }
 
-void ParamTraits<AudioParameters::HardwareCapabilities>::Write(
-    base::Pickle* m,
-    const param_type& p) {
-  WriteParam(m, p.min_frames_per_buffer);
-  WriteParam(m, p.max_frames_per_buffer);
-}
-
-bool ParamTraits<AudioParameters::HardwareCapabilities>::Read(
-    const base::Pickle* m,
-    base::PickleIterator* iter,
-    param_type* r) {
-  int max_frames_per_buffer, min_frames_per_buffer;
-  if (!ReadParam(m, iter, &min_frames_per_buffer) ||
-      !ReadParam(m, iter, &max_frames_per_buffer)) {
-    return false;
-  }
-  r->min_frames_per_buffer = min_frames_per_buffer;
-  r->max_frames_per_buffer = max_frames_per_buffer;
-  return true;
-}
-
-void ParamTraits<AudioParameters::HardwareCapabilities>::Log(
-    const param_type& p,
-    std::string* l) {
-  l->append(base::StringPrintf("<AudioParameters::HardwareCapabilities>"));
-}
-
 template <>
 struct ParamTraits<media::EncryptionPattern> {
   typedef media::EncryptionPattern param_type;
diff --git a/media/base/ipc/media_param_traits.h b/media/base/ipc/media_param_traits.h
index b4205f5..7327542 100644
--- a/media/base/ipc/media_param_traits.h
+++ b/media/base/ipc/media_param_traits.h
@@ -27,16 +27,6 @@
 };
 
 template <>
-struct ParamTraits<media::AudioParameters::HardwareCapabilities> {
-  typedef media::AudioParameters::HardwareCapabilities param_type;
-  static void Write(base::Pickle* m, const param_type& p);
-  static bool Read(const base::Pickle* m,
-                   base::PickleIterator* iter,
-                   param_type* r);
-  static void Log(const param_type& p, std::string* l);
-};
-
-template <>
 struct ParamTraits<media::EncryptionScheme> {
   typedef media::EncryptionScheme param_type;
   static void Write(base::Pickle* m, const param_type& p);
diff --git a/media/webrtc/BUILD.gn b/media/webrtc/BUILD.gn
index 5939ab9..3a47f3a 100644
--- a/media/webrtc/BUILD.gn
+++ b/media/webrtc/BUILD.gn
@@ -24,6 +24,14 @@
 
   defines = [ "IS_MEDIA_WEBRTC_IMPL" ]
 
+  # TODO(bugs.webrtc.org/9419): Remove this when Chromium will depend on a
+  # WebRTC component instead of rtc_static_libraries. In this phase we are
+  # marking WebRTC symbols as visible, but since this target is a component
+  # too, it will statically link WebRTC code so it doesn't need to dllimport
+  # symbols (this config tells the build system that //media/webrtc is part
+  # of the WebRTC implementation).
+  configs += [ "//third_party/webrtc:library_impl_config" ]
+
   deps = [
     "//base",
     "//third_party/webrtc/modules/audio_processing",
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 1e2f8d7..78806ad 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -1734,6 +1734,8 @@
         "network_error_logging/network_error_logging_delegate.h",
         "network_error_logging/network_error_logging_service.cc",
         "network_error_logging/network_error_logging_service.h",
+        "reporting/json_parser_delegate.cc",
+        "reporting/json_parser_delegate.h",
         "reporting/reporting_browsing_data_remover.cc",
         "reporting/reporting_browsing_data_remover.h",
         "reporting/reporting_cache.cc",
diff --git a/net/network_error_logging/network_error_logging_end_to_end_test.cc b/net/network_error_logging/network_error_logging_end_to_end_test.cc
index e7a7e32..61854b6a 100644
--- a/net/network_error_logging/network_error_logging_end_to_end_test.cc
+++ b/net/network_error_logging/network_error_logging_end_to_end_test.cc
@@ -13,6 +13,7 @@
 #include "build/build_config.h"
 #include "net/base/net_errors.h"
 #include "net/network_error_logging/network_error_logging_service.h"
+#include "net/reporting/json_parser_delegate.h"
 #include "net/reporting/reporting_policy.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "net/test/embedded_test_server/http_request.h"
@@ -68,7 +69,8 @@
     builder.set_proxy_config_service(std::make_unique<ProxyConfigServiceFixed>(
         ProxyConfigWithAnnotation::CreateDirect()));
 #endif  // defined(OS_LINUX) || defined(OS_ANDROID)
-    builder.set_reporting_policy(std::move(policy));
+    builder.enable_reporting(std::move(policy),
+                             std::make_unique<InProcessJSONParser>());
     builder.set_network_error_logging_enabled(true);
     url_request_context_ = builder.Build();
 
diff --git a/net/reporting/json_parser_delegate.cc b/net/reporting/json_parser_delegate.cc
new file mode 100644
index 0000000..66fb55b3
--- /dev/null
+++ b/net/reporting/json_parser_delegate.cc
@@ -0,0 +1,33 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/json_parser_delegate.h"
+
+#include "base/json/json_reader.h"
+#include "base/values.h"
+
+namespace net {
+
+namespace {
+constexpr int kMaxJsonSize = 16 * 1024;
+constexpr int kMaxJsonDepth = 5;
+}  // namespace
+
+void InProcessJSONParser::ParseJson(const std::string& unsafe_json,
+                                    SuccessCallback success_callback,
+                                    FailureCallback failure_callback) const {
+  if (unsafe_json.size() > kMaxJsonSize) {
+    std::move(failure_callback).Run();
+    return;
+  }
+
+  std::unique_ptr<base::Value> value =
+      base::JSONReader::Read(unsafe_json, base::JSON_PARSE_RFC, kMaxJsonDepth);
+  if (value)
+    std::move(success_callback).Run(std::move(value));
+  else
+    std::move(failure_callback).Run();
+}
+
+}  // namespace net
diff --git a/net/reporting/json_parser_delegate.h b/net/reporting/json_parser_delegate.h
new file mode 100644
index 0000000..d3351c4
--- /dev/null
+++ b/net/reporting/json_parser_delegate.h
@@ -0,0 +1,65 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_JSON_PARSER_DELEGATE_H_
+#define NET_REPORTING_JSON_PARSER_DELEGATE_H_
+
+#include <memory>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+namespace base {
+class Value;
+}  // namespace base
+
+namespace net {
+
+// Used by the Reporting API implementation to parse JSON policy headers safely.
+// Where possible, Reporting embedders should use data_decoder's SafeJsonParser,
+// since the policy headers are untrusted content.
+class NET_EXPORT JSONParserDelegate {
+ public:
+  using SuccessCallback =
+      base::OnceCallback<void(std::unique_ptr<base::Value>)>;
+  using FailureCallback = base::OnceCallback<void()>;
+
+  JSONParserDelegate() = default;
+  virtual ~JSONParserDelegate() = default;
+
+  // Parses JSON. How safely, and using what mechanism, is up to the embedder,
+  // but //components/data_decoder is recommended if available.
+  //
+  // Exactly one callback should be made, either to |success_callback| (with the
+  // parsed value) if parsing succeeded or to |failure_callback| if parsing
+  // failed.  The callbacks may be called either synchronously or
+  // asynchronously.
+  virtual void ParseJson(const std::string& unsafe_json,
+                         SuccessCallback success_callback,
+                         FailureCallback failure_callback) const = 0;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(JSONParserDelegate);
+};
+
+// A JSONParserDelegate that parses JSON in-process using JSONReader.
+//
+// TODO(crbug.com/892148): Replace this with an implementation that uses
+// //components/data_decoder, and only allow in-process parsing during tests.
+class NET_EXPORT InProcessJSONParser : public JSONParserDelegate {
+ public:
+  InProcessJSONParser() = default;
+
+  void ParseJson(const std::string& unsafe_json,
+                 SuccessCallback success_callback,
+                 FailureCallback failure_callback) const override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(InProcessJSONParser);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_JSON_PARSER_DELEGATE_H_
diff --git a/net/reporting/reporting_context.cc b/net/reporting/reporting_context.cc
index 04ee3b5d..789b4fa 100644
--- a/net/reporting/reporting_context.cc
+++ b/net/reporting/reporting_context.cc
@@ -16,6 +16,7 @@
 #include "base/time/time.h"
 #include "net/base/backoff_entry.h"
 #include "net/base/rand_callback.h"
+#include "net/reporting/json_parser_delegate.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_delivery_agent.h"
@@ -35,12 +36,14 @@
 class ReportingContextImpl : public ReportingContext {
  public:
   ReportingContextImpl(const ReportingPolicy& policy,
+                       std::unique_ptr<JSONParserDelegate> json_parser,
                        URLRequestContext* request_context)
       : ReportingContext(policy,
                          base::DefaultClock::GetInstance(),
                          base::DefaultTickClock::GetInstance(),
                          base::BindRepeating(&base::RandInt),
                          ReportingUploader::Create(request_context),
+                         std::move(json_parser),
                          ReportingDelegate::Create(request_context)) {}
 };
 
@@ -49,8 +52,10 @@
 // static
 std::unique_ptr<ReportingContext> ReportingContext::Create(
     const ReportingPolicy& policy,
+    std::unique_ptr<JSONParserDelegate> json_parser,
     URLRequestContext* request_context) {
-  return std::make_unique<ReportingContextImpl>(policy, request_context);
+  return std::make_unique<ReportingContextImpl>(policy, std::move(json_parser),
+                                                request_context);
 }
 
 ReportingContext::~ReportingContext() = default;
@@ -70,16 +75,19 @@
     observer.OnCacheUpdated();
 }
 
-ReportingContext::ReportingContext(const ReportingPolicy& policy,
-                                   base::Clock* clock,
-                                   const base::TickClock* tick_clock,
-                                   const RandIntCallback& rand_callback,
-                                   std::unique_ptr<ReportingUploader> uploader,
-                                   std::unique_ptr<ReportingDelegate> delegate)
+ReportingContext::ReportingContext(
+    const ReportingPolicy& policy,
+    base::Clock* clock,
+    const base::TickClock* tick_clock,
+    const RandIntCallback& rand_callback,
+    std::unique_ptr<ReportingUploader> uploader,
+    std::unique_ptr<JSONParserDelegate> json_parser,
+    std::unique_ptr<ReportingDelegate> delegate)
     : policy_(policy),
       clock_(clock),
       tick_clock_(tick_clock),
       uploader_(std::move(uploader)),
+      json_parser_(std::move(json_parser)),
       delegate_(std::move(delegate)),
       cache_(ReportingCache::Create(this)),
       endpoint_manager_(ReportingEndpointManager::Create(this, rand_callback)),
diff --git a/net/reporting/reporting_context.h b/net/reporting/reporting_context.h
index 0c63bba..1bd96185 100644
--- a/net/reporting/reporting_context.h
+++ b/net/reporting/reporting_context.h
@@ -21,6 +21,7 @@
 
 namespace net {
 
+class JSONParserDelegate;
 class ReportingCache;
 class ReportingDelegate;
 class ReportingDeliveryAgent;
@@ -37,6 +38,7 @@
  public:
   static std::unique_ptr<ReportingContext> Create(
       const ReportingPolicy& policy,
+      std::unique_ptr<JSONParserDelegate> json_parser,
       URLRequestContext* request_context);
 
   ~ReportingContext();
@@ -47,6 +49,7 @@
   const base::TickClock* tick_clock() { return tick_clock_; }
   ReportingUploader* uploader() { return uploader_.get(); }
 
+  JSONParserDelegate* json_parser() { return json_parser_.get(); }
   ReportingDelegate* delegate() { return delegate_.get(); }
   ReportingCache* cache() { return cache_.get(); }
   ReportingEndpointManager* endpoint_manager() {
@@ -68,6 +71,7 @@
                    const base::TickClock* tick_clock,
                    const RandIntCallback& rand_callback,
                    std::unique_ptr<ReportingUploader> uploader,
+                   std::unique_ptr<JSONParserDelegate> json_parser,
                    std::unique_ptr<ReportingDelegate> delegate);
 
  private:
@@ -80,6 +84,7 @@
   base::ObserverList<ReportingObserver, /* check_empty= */ true>::Unchecked
       observers_;
 
+  std::unique_ptr<JSONParserDelegate> json_parser_;
   std::unique_ptr<ReportingDelegate> delegate_;
 
   std::unique_ptr<ReportingCache> cache_;
diff --git a/net/reporting/reporting_delegate.cc b/net/reporting/reporting_delegate.cc
index e066521..e89ccb0 100644
--- a/net/reporting/reporting_delegate.cc
+++ b/net/reporting/reporting_delegate.cc
@@ -4,7 +4,6 @@
 
 #include "net/reporting/reporting_delegate.h"
 
-#include "base/json/json_reader.h"
 #include "net/base/network_delegate.h"
 #include "net/url_request/url_request_context.h"
 
@@ -12,9 +11,6 @@
 
 namespace {
 
-const int kMaxJsonSize = 16 * 1024;
-const int kMaxJsonDepth = 5;
-
 class ReportingDelegateImpl : public ReportingDelegate {
  public:
   ReportingDelegateImpl(URLRequestContext* request_context)
@@ -53,22 +49,6 @@
            network_delegate()->CanUseReportingClient(origin, endpoint);
   }
 
-  void ParseJson(const std::string& unsafe_json,
-                 const JsonSuccessCallback& success_callback,
-                 const JsonFailureCallback& failure_callback) const override {
-    if (unsafe_json.size() > kMaxJsonSize) {
-      failure_callback.Run();
-      return;
-    }
-
-    std::unique_ptr<base::Value> value = base::JSONReader::Read(
-        unsafe_json, base::JSON_PARSE_RFC, kMaxJsonDepth);
-    if (value)
-      success_callback.Run(std::move(value));
-    else
-      failure_callback.Run();
-  }
-
  private:
   const NetworkDelegate* network_delegate() const {
     return request_context_->network_delegate();
diff --git a/net/reporting/reporting_delegate.h b/net/reporting/reporting_delegate.h
index 23808fa..183fd89 100644
--- a/net/reporting/reporting_delegate.h
+++ b/net/reporting/reporting_delegate.h
@@ -10,7 +10,6 @@
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/values.h"
 #include "net/base/net_export.h"
 
 class GURL;
@@ -45,22 +44,6 @@
   virtual bool CanUseClient(const url::Origin& origin,
                             const GURL& endpoint) const = 0;
 
-  // TODO(crbug.com/811485): Use OnceCallback/Closure.
-  using JsonSuccessCallback =
-      base::RepeatingCallback<void(std::unique_ptr<base::Value>)>;
-  using JsonFailureCallback = base::RepeatingClosure;
-
-  // Parses JSON. How safely, and using what mechanism, is up to the embedder,
-  // but //components/data_decoder is recommended if available.
-  //
-  // Exactly one callback should be made, either to |success_callback| (with the
-  // parsed value) if parsing succeeded or to |failure_callback| if parsing
-  // failed. The callbacks may be called either synchronously or
-  // asynchronously.
-  virtual void ParseJson(const std::string& unsafe_json,
-                         const JsonSuccessCallback& success_callback,
-                         const JsonFailureCallback& failure_callback) const = 0;
-
   static std::unique_ptr<ReportingDelegate> Create(
       URLRequestContext* request_context);
 };
diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc
index 58c48541..ec01c7b 100644
--- a/net/reporting/reporting_service.cc
+++ b/net/reporting/reporting_service.cc
@@ -12,6 +12,7 @@
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
+#include "net/reporting/json_parser_delegate.h"
 #include "net/reporting/reporting_browsing_data_remover.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_context.h"
@@ -51,11 +52,11 @@
 
   void ProcessHeader(const GURL& url,
                      const std::string& header_value) override {
-    context_->delegate()->ParseJson(
+    context_->json_parser()->ParseJson(
         "[" + header_value + "]",
-        base::BindRepeating(&ReportingServiceImpl::ProcessHeaderValue,
-                            weak_factory_.GetWeakPtr(), url),
-        base::BindRepeating(
+        base::BindOnce(&ReportingServiceImpl::ProcessHeaderValue,
+                       weak_factory_.GetWeakPtr(), url),
+        base::BindOnce(
             &ReportingHeaderParser::RecordHeaderDiscardedForJsonInvalid));
   }
 
@@ -105,9 +106,10 @@
 // static
 std::unique_ptr<ReportingService> ReportingService::Create(
     const ReportingPolicy& policy,
+    std::unique_ptr<JSONParserDelegate> json_parser,
     URLRequestContext* request_context) {
-  return std::make_unique<ReportingServiceImpl>(
-      ReportingContext::Create(policy, request_context));
+  return std::make_unique<ReportingServiceImpl>(ReportingContext::Create(
+      policy, std::move(json_parser), request_context));
 }
 
 // static
diff --git a/net/reporting/reporting_service.h b/net/reporting/reporting_service.h
index a852d0f..43e650f 100644
--- a/net/reporting/reporting_service.h
+++ b/net/reporting/reporting_service.h
@@ -20,6 +20,7 @@
 
 namespace net {
 
+class JSONParserDelegate;
 class ReportingContext;
 struct ReportingPolicy;
 class URLRequest;
@@ -35,6 +36,7 @@
   // outlive the ReportingService.
   static std::unique_ptr<ReportingService> Create(
       const ReportingPolicy& policy,
+      std::unique_ptr<JSONParserDelegate> json_parser,
       URLRequestContext* request_context);
 
   // Creates a ReportingService for testing purposes using an
diff --git a/net/reporting/reporting_test_util.cc b/net/reporting/reporting_test_util.cc
index d024440..0d22486 100644
--- a/net/reporting/reporting_test_util.cc
+++ b/net/reporting/reporting_test_util.cc
@@ -16,6 +16,7 @@
 #include "base/test/simple_test_tick_clock.h"
 #include "base/timer/mock_timer.h"
 #include "net/base/rand_callback.h"
+#include "net/reporting/json_parser_delegate.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
 #include "net/reporting/reporting_context.h"
@@ -118,8 +119,7 @@
 }
 
 TestReportingDelegate::TestReportingDelegate()
-    : test_request_context_(std::make_unique<TestURLRequestContext>()),
-      real_delegate_(ReportingDelegate::Create(test_request_context_.get())) {}
+    : test_request_context_(std::make_unique<TestURLRequestContext>()) {}
 
 TestReportingDelegate::~TestReportingDelegate() = default;
 
@@ -161,13 +161,6 @@
   return true;
 }
 
-void TestReportingDelegate::ParseJson(
-    const std::string& unsafe_json,
-    const JsonSuccessCallback& success_callback,
-    const JsonFailureCallback& failure_callback) const {
-  real_delegate_->ParseJson(unsafe_json, success_callback, failure_callback);
-}
-
 TestReportingContext::TestReportingContext(base::Clock* clock,
                                            const base::TickClock* tick_clock,
                                            const ReportingPolicy& policy)
@@ -178,6 +171,7 @@
           base::BindRepeating(&TestReportingContext::RandIntCallback,
                               base::Unretained(this)),
           std::make_unique<TestReportingUploader>(),
+          std::make_unique<InProcessJSONParser>(),
           std::make_unique<TestReportingDelegate>()),
       rand_counter_(0),
       delivery_timer_(new base::MockOneShotTimer()),
diff --git a/net/reporting/reporting_test_util.h b/net/reporting/reporting_test_util.h
index 415b1df..09b1f015 100644
--- a/net/reporting/reporting_test_util.h
+++ b/net/reporting/reporting_test_util.h
@@ -121,13 +121,8 @@
   bool CanUseClient(const url::Origin& origin,
                     const GURL& endpoint) const override;
 
-  void ParseJson(const std::string& unsafe_json,
-                 const JsonSuccessCallback& success_callback,
-                 const JsonFailureCallback& failure_callback) const override;
-
  private:
   std::unique_ptr<TestURLRequestContext> test_request_context_;
-  std::unique_ptr<ReportingDelegate> real_delegate_;
   bool disallow_report_uploads_ = false;
   bool pause_permissions_check_ = false;
 
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index e16b034d..b81bcfe 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -60,6 +60,7 @@
 #if BUILDFLAG(ENABLE_REPORTING)
 #include "net/network_error_logging/network_error_logging_delegate.h"
 #include "net/network_error_logging/network_error_logging_service.h"
+#include "net/reporting/json_parser_delegate.h"
 #include "net/reporting/reporting_policy.h"
 #include "net/reporting/reporting_service.h"
 #endif  // BUILDFLAG(ENABLE_REPORTING)
@@ -306,9 +307,17 @@
 }
 
 #if BUILDFLAG(ENABLE_REPORTING)
+void URLRequestContextBuilder::enable_reporting(
+    std::unique_ptr<ReportingPolicy> reporting_policy,
+    std::unique_ptr<JSONParserDelegate> json_parser) {
+  reporting_policy_ = std::move(reporting_policy);
+  json_parser_ = std::move(json_parser);
+}
+
 void URLRequestContextBuilder::set_reporting_policy(
     std::unique_ptr<ReportingPolicy> reporting_policy) {
-  reporting_policy_ = std::move(reporting_policy);
+  enable_reporting(std::move(reporting_policy),
+                   std::make_unique<InProcessJSONParser>());
 }
 #endif  // BUILDFLAG(ENABLE_REPORTING)
 
@@ -663,8 +672,8 @@
   // both return nullptr if the corresponding base::Feature is disabled.
 
   if (reporting_policy_) {
-    storage->set_reporting_service(
-        ReportingService::Create(*reporting_policy_, context.get()));
+    storage->set_reporting_service(ReportingService::Create(
+        *reporting_policy_, std::move(json_parser_), context.get()));
   }
 
   if (network_error_logging_enabled_) {
diff --git a/net/url_request/url_request_context_builder.h b/net/url_request/url_request_context_builder.h
index 3acd9e9..de55af7 100644
--- a/net/url_request/url_request_context_builder.h
+++ b/net/url_request/url_request_context_builder.h
@@ -65,6 +65,7 @@
 class URLRequestInterceptor;
 
 #if BUILDFLAG(ENABLE_REPORTING)
+class JSONParserDelegate;
 struct ReportingPolicy;
 #endif  // BUILDFLAG(ENABLE_REPORTING)
 
@@ -320,6 +321,17 @@
   void SetSharedCertVerifier(CertVerifier* shared_cert_verifier);
 
 #if BUILDFLAG(ENABLE_REPORTING)
+  // Enable the Reporting API for the created URLRequestContext.  |policy|
+  // configures various timeout and cache size parameters.  |json_parser| will
+  // be used to parse the JSON configuration headers received in HTTPS
+  // responses.
+  void enable_reporting(std::unique_ptr<ReportingPolicy> policy,
+                        std::unique_ptr<JSONParserDelegate> json_parser);
+
+  // Deprecated: Use enable_reporting() instead, and provide a specific (and
+  // ideally safe) JSON parser.
+  // TODO(crbug.com/892148): Remove once all callers have been migrated to
+  // enable_reporting().
   void set_reporting_policy(std::unique_ptr<ReportingPolicy> reporting_policy);
 
   void set_network_error_logging_enabled(bool network_error_logging_enabled) {
@@ -428,6 +440,7 @@
   std::unique_ptr<CTVerifier> ct_verifier_;
   std::unique_ptr<CTPolicyEnforcer> ct_policy_enforcer_;
 #if BUILDFLAG(ENABLE_REPORTING)
+  std::unique_ptr<JSONParserDelegate> json_parser_;
   std::unique_ptr<ReportingPolicy> reporting_policy_;
   bool network_error_logging_enabled_;
 #endif  // BUILDFLAG(ENABLE_REPORTING)
diff --git a/services/audio/loopback_stream.cc b/services/audio/loopback_stream.cc
index 866ca18..d33ea67 100644
--- a/services/audio/loopback_stream.cc
+++ b/services/audio/loopback_stream.cc
@@ -108,9 +108,8 @@
   if (network_) {
     if (network_->is_started()) {
       coordinator_->RemoveObserver(group_id_, this);
-      for (LoopbackGroupMember* member :
-           coordinator_->GetCurrentMembers(group_id_)) {
-        OnMemberLeftGroup(member);
+      while (!snoopers_.empty()) {
+        OnMemberLeftGroup(snoopers_.begin()->first);
       }
     }
     DCHECK(snoopers_.empty());
diff --git a/services/identity/identity_manager_impl_unittest.cc b/services/identity/identity_manager_impl_unittest.cc
index 0e9bb8923..5f14f53 100644
--- a/services/identity/identity_manager_impl_unittest.cc
+++ b/services/identity/identity_manager_impl_unittest.cc
@@ -101,6 +101,7 @@
                         nullptr) {
 #endif
     AccountTrackerService::RegisterPrefs(pref_service_.registry());
+    ProfileOAuth2TokenService::RegisterProfilePrefs(pref_service_.registry());
     SigninManagerBase::RegisterProfilePrefs(pref_service_.registry());
     SigninManagerBase::RegisterPrefs(pref_service_.registry());
 
diff --git a/services/identity/public/cpp/identity_manager.cc b/services/identity/public/cpp/identity_manager.cc
index 07939c61..ce70d35 100644
--- a/services/identity/public/cpp/identity_manager.cc
+++ b/services/identity/public/cpp/identity_manager.cc
@@ -68,6 +68,10 @@
   return signin_manager_->GetAuthenticatedAccountInfo();
 }
 
+const std::string& IdentityManager::GetPrimaryAccountId() const {
+  return signin_manager_->GetAuthenticatedAccountId();
+}
+
 bool IdentityManager::HasPrimaryAccount() const {
   return signin_manager_->IsAuthenticated();
 }
@@ -128,8 +132,18 @@
   return token_service_->RefreshTokenIsAvailable(account_id);
 }
 
+bool IdentityManager::HasAccountWithRefreshTokenInPersistentErrorState(
+    const std::string& account_id) const {
+  return GetErrorStateOfRefreshTokenForAccount(account_id).IsPersistentError();
+}
+
+GoogleServiceAuthError IdentityManager::GetErrorStateOfRefreshTokenForAccount(
+    const std::string& account_id) const {
+  return token_service_->GetAuthError(account_id);
+}
+
 bool IdentityManager::HasPrimaryAccountWithRefreshToken() const {
-  return HasAccountWithRefreshToken(GetPrimaryAccountInfo().account_id);
+  return HasAccountWithRefreshToken(GetPrimaryAccountId());
 }
 
 std::unique_ptr<AccessTokenFetcher>
@@ -188,8 +202,7 @@
   signin_manager_->SetAuthenticatedAccountInfo(gaia_id, email_address);
 
   if (!refresh_token.empty()) {
-    token_service_->UpdateCredentials(GetPrimaryAccountInfo().account_id,
-                                      refresh_token);
+    token_service_->UpdateCredentials(GetPrimaryAccountId(), refresh_token);
   }
 }
 
@@ -266,6 +279,11 @@
   }
 }
 
+void IdentityManager::OnRefreshTokensLoaded() {
+  for (auto& observer : observer_list_)
+    observer.OnRefreshTokensLoaded();
+}
+
 void IdentityManager::OnGaiaAccountsInCookieUpdated(
     const std::vector<gaia::ListedAccount>& accounts,
     const std::vector<gaia::ListedAccount>& signed_out_accounts,
diff --git a/services/identity/public/cpp/identity_manager.h b/services/identity/public/cpp/identity_manager.h
index 2d8e39d..3d101dc6 100644
--- a/services/identity/public/cpp/identity_manager.h
+++ b/services/identity/public/cpp/identity_manager.h
@@ -94,6 +94,12 @@
     virtual void OnRefreshTokenRemovedForAccount(
         const std::string& account_id) {}
 
+    // Called after refresh tokens are loaded.
+    // CAVEAT: On ChromeOS, this callback is not invoked during
+    // startup in all cases. See https://crbug.com/749535, which
+    // details the cases where it's not invoked.
+    virtual void OnRefreshTokensLoaded() {}
+
     // Called whenever the list of Gaia accounts in the cookie jar has changed.
     // |accounts| is ordered by the order of the accounts in the cookie.
     virtual void OnAccountsInCookieUpdated(
@@ -123,13 +129,23 @@
                   GaiaCookieManagerService* gaia_cookie_manager_service);
   ~IdentityManager() override;
 
-  // Provides access to the latest cached information of the user's primary
-  // account.
+  // Provides access to the extended information of the user's primary account.
+  // Returns an empty struct if no such info is available, either because there
+  // is no primary account or because the extended information for the primary
+  // account has been removed (this happens when the refresh token is revoked,
+  // for example).
   AccountInfo GetPrimaryAccountInfo() const;
 
-  // Returns whether the primary account is available, according to the latest
-  // cached information. Simple convenience wrapper over checking whether the
-  // primary account info has a valid account ID.
+  // Provides access to the account ID of the user's primary account. Note that
+  // this may return a valid string even in cases where GetPrimaryAccountInfo()
+  // returns an empty struct, as the extended information for the primary
+  // account is removed on certain events (e.g., when its refresh token is
+  // revoked).
+  const std::string& GetPrimaryAccountId() const;
+
+  // Returns whether the primary account is available. Simple convenience
+  // wrapper over checking whether GetPrimaryAccountId() returns a non-empty
+  // string.
   bool HasPrimaryAccount() const;
 
 // For ChromeOS, mutation of primary account state is not managed externally.
@@ -181,6 +197,21 @@
   // Returns true if a refresh token exists for |account_id|.
   bool HasAccountWithRefreshToken(const std::string& account_id) const;
 
+  // Returns true if (a) a refresh token exists for |account_id|, and (b) the
+  // refresh token is in a persistent error state (defined as
+  // GoogleServiceAuthError::IsPersistentError() returning true for the error
+  // returned by GetErrorStateOfRefreshTokenForAccount(account_id)).
+  bool HasAccountWithRefreshTokenInPersistentErrorState(
+      const std::string& account_id) const;
+
+  // Returns the error state of the refresh token associated with |account_id|.
+  // In particular: Returns GoogleServiceAuthError::AuthErrorNone() if either
+  // (a) no refresh token exists for |account_id|, or (b) the refresh token is
+  // not in a persistent error state. Otherwise, returns the last persistent
+  // error that was detected when using the refresh token.
+  GoogleServiceAuthError GetErrorStateOfRefreshTokenForAccount(
+      const std::string& account_id) const;
+
   // Returns true if (a) the primary account exists, and (b) a refresh token
   // exists for the primary account.
   bool HasPrimaryAccountWithRefreshToken() const;
@@ -252,6 +283,7 @@
   // OAuth2TokenService::Observer:
   void OnRefreshTokenAvailable(const std::string& account_id) override;
   void OnRefreshTokenRevoked(const std::string& account_id) override;
+  void OnRefreshTokensLoaded() override;
 
   // GaiaCookieManagerService::Observer:
   void OnGaiaAccountsInCookieUpdated(
diff --git a/services/identity/public/cpp/identity_manager_unittest.cc b/services/identity/public/cpp/identity_manager_unittest.cc
index 88a1618..6746c4653 100644
--- a/services/identity/public/cpp/identity_manager_unittest.cc
+++ b/services/identity/public/cpp/identity_manager_unittest.cc
@@ -225,6 +225,10 @@
     on_refresh_token_removed_callback_ = std::move(callback);
   }
 
+  void set_on_refresh_tokens_loaded_callback(base::OnceClosure callback) {
+    on_refresh_tokens_loaded_callback_ = std::move(callback);
+  }
+
   const AccountInfo& account_from_refresh_token_updated_callback() {
     return account_from_refresh_token_updated_callback_;
   }
@@ -278,6 +282,10 @@
     if (on_refresh_token_removed_callback_)
       on_refresh_token_removed_callback_.Run(account_id);
   }
+  void OnRefreshTokensLoaded() override {
+    if (on_refresh_tokens_loaded_callback_)
+      std::move(on_refresh_tokens_loaded_callback_).Run();
+  }
   void OnAccountsInCookieUpdated(
       const std::vector<AccountInfo>& accounts) override {
     accounts_from_cookie_change_callback_ = accounts;
@@ -292,6 +300,7 @@
   base::OnceClosure on_refresh_token_updated_callback_;
   base::RepeatingCallback<void(const std::string&)>
       on_refresh_token_removed_callback_;
+  base::OnceClosure on_refresh_tokens_loaded_callback_;
   base::OnceClosure on_accounts_in_cookie_updated_callback_;
   AccountInfo primary_account_from_set_callback_;
   AccountInfo primary_account_from_cleared_callback_;
@@ -360,6 +369,7 @@
                                      "identity_manager_unittest",
                                      &signin_client_) {
     AccountTrackerService::RegisterPrefs(pref_service_.registry());
+    ProfileOAuth2TokenService::RegisterProfilePrefs(pref_service_.registry());
     SigninManagerBase::RegisterProfilePrefs(pref_service_.registry());
     SigninManagerBase::RegisterPrefs(pref_service_.registry());
 
@@ -408,6 +418,11 @@
     identity_manager_diagnostics_observer_.reset();
     identity_manager_.reset();
 
+    if (signin_manager_) {
+      signin_manager_->Shutdown();
+      signin_manager_.reset();
+    }
+
 #if defined(OS_CHROMEOS)
     DCHECK_EQ(account_consistency, signin::AccountConsistencyMethod::kDisabled)
         << "AccountConsistency is not used by SigninManagerBase";
@@ -585,6 +600,10 @@
       identity_manager()->GetPrimaryAccountInfo();
   EXPECT_EQ(kTestGaiaId, primary_account_info.gaia);
   EXPECT_EQ(kTestEmail, primary_account_info.email);
+
+  std::string primary_account_id = identity_manager()->GetPrimaryAccountId();
+  EXPECT_EQ(primary_account_id, kTestGaiaId);
+  EXPECT_EQ(primary_account_id, primary_account_info.account_id);
 }
 
 TEST_F(IdentityManagerTest, ClearPrimaryAccount_RemoveAll) {
@@ -651,7 +670,7 @@
   // Set primary account to have authentication error.
   SetRefreshTokenForPrimaryAccount(token_service(), identity_manager());
   token_service()->UpdateAuthErrorForTesting(
-      identity_manager()->GetPrimaryAccountInfo().account_id,
+      identity_manager()->GetPrimaryAccountId(),
       GoogleServiceAuthError(
           GoogleServiceAuthError::State::INVALID_GAIA_CREDENTIALS));
 
@@ -744,6 +763,36 @@
       identity_manager()->GetPrimaryAccountInfo();
   EXPECT_EQ("", primary_account_info.gaia);
   EXPECT_EQ("", primary_account_info.email);
+
+  std::string primary_account_id = identity_manager()->GetPrimaryAccountId();
+  EXPECT_EQ("", primary_account_id);
+  EXPECT_EQ(primary_account_id, primary_account_info.account_id);
+}
+
+// Test that the primary account's ID remains tracked by the IdentityManager
+// after signing in even after having removed the account without signing out.
+TEST_F(IdentityManagerTest, PrimaryAccountInfoAfterSigninAndAccountRemoval) {
+  // First ensure that the user is signed in from the POV of the
+  // IdentityManager.
+  base::RunLoop run_loop;
+  identity_manager_observer()->set_on_primary_account_set_callback(
+      run_loop.QuitClosure());
+  signin_manager()->SignIn(kTestGaiaId, kTestEmail, "password");
+  run_loop.Run();
+
+  // Remove the account from the AccountTrackerService and check that
+  // the returned AccountInfo won't have a valid ID anymore, even if
+  // the IdentityManager is still storing the primary account's ID.
+  account_tracker()->RemoveAccount(kTestGaiaId);
+
+  AccountInfo primary_account_info =
+      identity_manager()->GetPrimaryAccountInfo();
+  EXPECT_EQ("", primary_account_info.gaia);
+  EXPECT_EQ("", primary_account_info.email);
+  EXPECT_EQ("", primary_account_info.account_id);
+
+  std::string primary_account_id = identity_manager()->GetPrimaryAccountId();
+  EXPECT_EQ(primary_account_id, kTestGaiaId);
 }
 #endif  // !defined(OS_CHROMEOS)
 
@@ -752,8 +801,7 @@
 
   // Removing the account from the AccountTrackerService should not cause
   // IdentityManager to think that there is no longer a primary account.
-  account_tracker()->RemoveAccount(
-      identity_manager()->GetPrimaryAccountInfo().account_id);
+  account_tracker()->RemoveAccount(identity_manager()->GetPrimaryAccountId());
   EXPECT_TRUE(identity_manager()->HasPrimaryAccount());
 
 #if !defined(OS_CHROMEOS)
@@ -1158,6 +1206,117 @@
       identity_manager()->HasAccountWithRefreshToken(account_info2.account_id));
 }
 
+TEST_F(IdentityManagerTest, GetErrorStateOfRefreshTokenForAccount) {
+  AccountInfo primary_account_info =
+      identity_manager()->GetPrimaryAccountInfo();
+  std::string primary_account_id = primary_account_info.account_id;
+
+  // A primary account without a refresh token should not be in an error
+  // state, and setting a refresh token should not affect that.
+  EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
+            identity_manager()->GetErrorStateOfRefreshTokenForAccount(
+                primary_account_id));
+  EXPECT_FALSE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          primary_account_id));
+
+  SetRefreshTokenForPrimaryAccount(token_service(), identity_manager());
+  EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
+            identity_manager()->GetErrorStateOfRefreshTokenForAccount(
+                primary_account_id));
+  EXPECT_FALSE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          primary_account_id));
+
+  // A secondary account without a refresh token should not be in an error
+  // state, and setting a refresh token should not affect that.
+  account_tracker()->SeedAccountInfo(kTestGaiaId2, kTestEmail2);
+  AccountInfo account_info2 =
+      account_tracker()->FindAccountInfoByGaiaId(kTestGaiaId2);
+  std::string account_id2 = account_info2.account_id;
+  EXPECT_EQ(
+      GoogleServiceAuthError::AuthErrorNone(),
+      identity_manager()->GetErrorStateOfRefreshTokenForAccount(account_id2));
+  EXPECT_FALSE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          account_id2));
+
+  SetRefreshTokenForAccount(token_service(), identity_manager(), account_id2);
+  EXPECT_EQ(
+      GoogleServiceAuthError::AuthErrorNone(),
+      identity_manager()->GetErrorStateOfRefreshTokenForAccount(account_id2));
+  EXPECT_FALSE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          account_id2));
+
+  GoogleServiceAuthError account_deleted_error =
+      GoogleServiceAuthError(GoogleServiceAuthError::State::ACCOUNT_DELETED);
+  GoogleServiceAuthError account_disabled_error =
+      GoogleServiceAuthError(GoogleServiceAuthError::State::ACCOUNT_DISABLED);
+  GoogleServiceAuthError transient_error = GoogleServiceAuthError(
+      GoogleServiceAuthError::State::SERVICE_UNAVAILABLE);
+
+  // Set a persistent error for |account_id2| and check that it's reflected.
+  token_service()->UpdateAuthErrorForTesting(account_id2,
+                                             account_deleted_error);
+  EXPECT_EQ(
+      account_deleted_error,
+      identity_manager()->GetErrorStateOfRefreshTokenForAccount(account_id2));
+  EXPECT_TRUE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          account_id2));
+  EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
+            identity_manager()->GetErrorStateOfRefreshTokenForAccount(
+                primary_account_id));
+  EXPECT_FALSE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          primary_account_id));
+
+  // A transient error should cause no change in the error state.
+  token_service()->UpdateAuthErrorForTesting(primary_account_id,
+                                             transient_error);
+  EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
+            identity_manager()->GetErrorStateOfRefreshTokenForAccount(
+                primary_account_id));
+  EXPECT_FALSE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          primary_account_id));
+
+  // Set a different persistent error for the primary account and check that
+  // it's reflected.
+  token_service()->UpdateAuthErrorForTesting(primary_account_id,
+                                             account_disabled_error);
+  EXPECT_EQ(
+      account_deleted_error,
+      identity_manager()->GetErrorStateOfRefreshTokenForAccount(account_id2));
+  EXPECT_TRUE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          account_id2));
+  EXPECT_EQ(account_disabled_error,
+            identity_manager()->GetErrorStateOfRefreshTokenForAccount(
+                primary_account_id));
+  EXPECT_TRUE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          primary_account_id));
+
+  // Remove the token for account2 and check that it goes back to having no
+  // error.
+  RemoveRefreshTokenForAccount(token_service(), identity_manager(),
+                               account_id2);
+  EXPECT_EQ(
+      GoogleServiceAuthError::AuthErrorNone(),
+      identity_manager()->GetErrorStateOfRefreshTokenForAccount(account_id2));
+  EXPECT_FALSE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          account_id2));
+  EXPECT_EQ(account_disabled_error,
+            identity_manager()->GetErrorStateOfRefreshTokenForAccount(
+                primary_account_id));
+  EXPECT_TRUE(
+      identity_manager()->HasAccountWithRefreshTokenInPersistentErrorState(
+          primary_account_id));
+}
+
 TEST_F(IdentityManagerTest, RemoveAccessTokenFromCache) {
   std::set<std::string> scopes{"scope"};
   std::string access_token = "access_token";
@@ -1182,9 +1341,8 @@
       [](GoogleServiceAuthError error, AccessTokenInfo access_token_info) {});
   std::unique_ptr<AccessTokenFetcher> token_fetcher =
       identity_manager()->CreateAccessTokenFetcherForAccount(
-          identity_manager()->GetPrimaryAccountInfo().account_id,
-          "dummy_consumer", scopes, std::move(callback),
-          AccessTokenFetcher::Mode::kImmediate);
+          identity_manager()->GetPrimaryAccountId(), "dummy_consumer", scopes,
+          std::move(callback), AccessTokenFetcher::Mode::kImmediate);
   EXPECT_TRUE(token_fetcher);
 }
 
@@ -1202,9 +1360,8 @@
       [](GoogleServiceAuthError error, AccessTokenInfo access_token_info) {});
   std::unique_ptr<AccessTokenFetcher> token_fetcher =
       identity_manager()->CreateAccessTokenFetcherForAccount(
-          identity_manager()->GetPrimaryAccountInfo().account_id,
-          "dummy_consumer", scopes, std::move(callback),
-          AccessTokenFetcher::Mode::kImmediate);
+          identity_manager()->GetPrimaryAccountId(), "dummy_consumer", scopes,
+          std::move(callback), AccessTokenFetcher::Mode::kImmediate);
 
   run_loop.Run();
 
@@ -1546,6 +1703,22 @@
   run_loop2.Run();
 }
 
+TEST_F(IdentityManagerTest, IdentityManagerGetsTokensLoadedEvent) {
+  std::string account_id = signin_manager()->GetAuthenticatedAccountId();
+
+  base::RunLoop run_loop;
+  identity_manager_observer()->set_on_refresh_tokens_loaded_callback(
+      run_loop.QuitClosure());
+
+  // Credentials are already loaded in SigninManager::Initialize()
+  // which runs even before the IdentityManager is created. That's why
+  // we fake the credentials loaded state and force another load in
+  // order to be able to capture the TokensLoaded event.
+  token_service()->set_all_credentials_loaded_for_testing(false);
+  token_service()->LoadCredentials("");
+  run_loop.Run();
+}
+
 TEST_F(IdentityManagerTest,
        CallbackSentOnUpdateToAccountsInCookieWithNoAccounts) {
   base::RunLoop run_loop;
diff --git a/services/identity/public/cpp/identity_test_environment.cc b/services/identity/public/cpp/identity_test_environment.cc
index 634f0e3..686229f 100644
--- a/services/identity/public/cpp/identity_test_environment.cc
+++ b/services/identity/public/cpp/identity_test_environment.cc
@@ -80,6 +80,7 @@
           &signin_client_,
           use_fake_url_loader_for_gaia_cookie_manager) {
   AccountTrackerService::RegisterPrefs(pref_service_.registry());
+  ProfileOAuth2TokenService::RegisterProfilePrefs(pref_service_.registry());
   SigninManagerBase::RegisterProfilePrefs(pref_service_.registry());
   SigninManagerBase::RegisterPrefs(pref_service_.registry());
 
diff --git a/testing/buildbot/filters/mojo.fyi.chromeos.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.chromeos.network_browser_tests.filter
index c277714..852719c 100644
--- a/testing/buildbot/filters/mojo.fyi.chromeos.network_browser_tests.filter
+++ b/testing/buildbot/filters/mojo.fyi.chromeos.network_browser_tests.filter
@@ -19,7 +19,7 @@
 -DeviceIDTest.Migration
 -DeviceIDTest.NewUsers
 -LoginPolicyTestBase.AllowedInputMethods
--LoginPolicyTestBase.AllowedUILocales
+-LoginPolicyTestBase.AllowedLanguages
 -MergeSessionTest.PageThrottle
 -MergeSessionTest.XHRThrottle
 -OAuth2Test.SetInvalidTokenStatus
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
index 6f521ce1..1dfbf461 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
@@ -137,9 +137,6 @@
 # Reflection / mask ordering issue
 crbug.com/767318 compositing/reflections/nested-reflection-mask-change.html [ Failure ]
 
-# Single pixel snapping difference on scrolling content size.
-Bug(none) compositing/iframes/invisible-nested-iframe-show.html [ Failure ]
-
 # One line of pixels different when clipping the scrollbar.
 Bug(none) virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow.html [ Failure ]
 Bug(none) compositing/overflow/scaled-overflow.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 695ee01a..d8713be 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2849,7 +2849,6 @@
 crbug.com/875249 external/wpt/infrastructure/testdriver/bless.html [ Timeout Pass ]
 
 # ====== New tests from wpt-importer added here ======
-crbug.com/626703 external/wpt/css/css-multicol/multicol-span-all-margin-bottom-001.xht [ Failure ]
 crbug.com/626703 [ Win10 ] external/wpt/speech-api/idlharness.window.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/align_center_position_50.html [ Failure ]
 crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/align_center_wrapped.html [ Failure ]
@@ -3024,8 +3023,6 @@
 crbug.com/626703 external/wpt/svg/rendering/order/z-index.svg [ Failure ]
 crbug.com/626703 external/wpt/web-animations/timing-model/timelines/update-and-send-events.html [ Timeout ]
 crbug.com/626703 external/wpt/console/console-timing-logging-manual.html [ Skip ]
-crbug.com/626703 external/wpt/css/css-scoping/host-specificity-002.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-scoping/slotted-specificity.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/white-space/break-spaces-001.html [ Failure ]
 crbug.com/626703 [ Mac10.12 Mac10.13 ] external/wpt/compat/webkit-text-fill-color-property-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-column-row-gap-001.html [ Failure ]
@@ -3762,9 +3759,9 @@
 crbug.com/792435 external/wpt/css/css-multicol/multicol-rule-004.xht [ Failure ]
 crbug.com/792437 external/wpt/css/css-multicol/multicol-rule-inset-000.xht [ Failure ]
 crbug.com/792437 external/wpt/css/css-multicol/multicol-rule-outset-000.xht [ Failure ]
+crbug.com/892817 external/wpt/css/css-multicol/multicol-span-all-margin-bottom-001.xht [ Failure ]
 crbug.com/636055 external/wpt/css/css-multicol/multicol-span-all-margin-nested-002.xht [ Failure ]
 crbug.com/792446 external/wpt/css/css-multicol/multicol-span-float-001.xht [ Failure ]
-crbug.com/874124 external/wpt/css/css-multicol/multicol-span-none-001.xht [ Failure ]
 
 # Different results on try bots and CQ, skipped to unblock wpt import.
 crbug.com/888443 external/wpt/css/cssom-view/scroll-behavior-default-css.html [ Skip ]
@@ -5252,3 +5249,9 @@
 crbug.com/891530 [ Linux ] virtual/android/rootscroller/remove-rootscroller-crash.html [ Pass Timeout ]
 crbug.com/891510 [ Win7 ] fast/dom/inline-event-attributes-release.html [ Failure Pass ]
 crbug.com/892772 [ Mac ] editing/caret/caret-painting-low-dpi.html [ Failure Pass ]
+
+# Flakiness in DTMF
+crbug.com/893112 virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html [ Pass Failure ]
+
+# Sheriff 2018-10-08
+crbug.com/893015 virtual/outofblink-cors/http/tests/fetch/chromium/release-handle-crash.html [ Failure Pass ]
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json
index d76a085..a435700 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json
@@ -160135,16 +160135,6 @@
      {}
     ]
    ],
-   "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document-expected.txt": [
     [
      {}
@@ -182775,16 +182765,6 @@
      {}
     ]
    ],
-   "xhr/setrequestheader-allow-empty-value-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "xhr/setrequestheader-allow-whitespace-in-value-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "xhr/setrequestheader-content-type-expected.txt": [
     [
      {}
@@ -249892,6 +249872,12 @@
      {}
     ]
    ],
+   "permissions/test-background-fetch-permission.html": [
+    [
+     "/permissions/test-background-fetch-permission.html",
+     {}
+    ]
+   ],
    "picture-in-picture/disable-picture-in-picture.html": [
     [
      "/picture-in-picture/disable-picture-in-picture.html",
@@ -270722,9 +270708,9 @@
      {}
     ]
    ],
-   "webstorage/event_constructor_eventinit.html": [
+   "webstorage/event_initstorageevent.html": [
     [
-     "/webstorage/event_constructor_eventinit.html",
+     "/webstorage/event_initstorageevent.html",
      {}
     ]
    ],
@@ -270758,12 +270744,6 @@
      {}
     ]
    ],
-   "webstorage/event_local_storageeventinit.html": [
-    [
-     "/webstorage/event_local_storageeventinit.html",
-     {}
-    ]
-   ],
    "webstorage/event_local_url.html": [
     [
      "/webstorage/event_local_url.html",
@@ -270806,12 +270786,6 @@
      {}
     ]
    ],
-   "webstorage/event_session_storageeventinit.html": [
-    [
-     "/webstorage/event_session_storageeventinit.html",
-     {}
-    ]
-   ],
    "webstorage/event_session_url.html": [
     [
      "/webstorage/event_session_url.html",
@@ -386711,18 +386685,10 @@
    "77b4a288d899444b5152ce23c1022faa9483ce2f",
    "testharness"
   ],
-  "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document-expected.txt": [
-   "915f171015fa919783735b01d912b12149a36a99",
-   "support"
-  ],
   "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html": [
    "911aa7b5c96333f78da5ea315e1ca1b8381dcd74",
    "testharness"
   ],
-  "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-expected.txt": [
-   "946bc0587ca8ea3d9a6966b1ee32db494289e334",
-   "support"
-  ],
   "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html": [
    "c2180f5fba5beba6f4795bcaa3f88a865619c390",
    "testharness"
@@ -395900,7 +395866,7 @@
    "testharness"
   ],
   "infrastructure/testdriver/bless.html": [
-   "feb444f89d91088b51e04b610dd642c00814c3b4",
+   "b8a1c2e7d6000050351453a14a8bfb80d8af0c76",
    "testharness"
   ],
   "infrastructure/testdriver/click.html": [
@@ -396796,7 +396762,7 @@
    "support"
   ],
   "lint.whitelist": [
-   "9f5693fcc2b9ad790ca7d502d998a1b71701b717",
+   "1166d9f59ea8eb17684ff160b4da6dc1cfa0e359",
    "support"
   ],
   "longtask-timing/META.yml": [
@@ -397884,7 +397850,7 @@
    "support"
   ],
   "mediacapture-streams/MediaStream-MediaElement-srcObject.https.html": [
-   "2ed96ec386c23c019791c8306d7d81cd4b3af920",
+   "fc2e619a463c6e18433f395090fdb7a42d863cb6",
    "testharness"
   ],
   "mediacapture-streams/MediaStream-add-audio-track.https.html": [
@@ -398044,7 +398010,7 @@
    "support"
   ],
   "mimesniff/mime-types/charset-parameter.window-expected.txt": [
-   "c8b66feabf59cab8d7c69273c86701a9816b0738",
+   "2943090eb8eabaffedaee93e17455b7ec4968f51",
    "support"
   ],
   "mimesniff/mime-types/charset-parameter.window.js": [
@@ -408640,7 +408606,11 @@
    "support"
   ],
   "permissions/interfaces.any.js": [
-   "78f1fc65b790a2ed2f78f4185f864ead89b8cce1",
+   "77fa909a768fd89e2bb350ce9dc15849800a5bec",
+   "testharness"
+  ],
+  "permissions/test-background-fetch-permission.html": [
+   "c3da77d9f8cc76d0cb2523e5445d2aed7c1d97ac",
    "testharness"
   ],
   "picture-in-picture/META.yml": [
@@ -427928,11 +427898,11 @@
    "testharness"
   ],
   "webaudio/idlharness.https-expected.txt": [
-   "f3d1cd51a6cd0fb2677728a5889cbb2c19e0e49a",
+   "18291cff4510916cc7caaa6342306067bf499a5a",
    "support"
   ],
   "webaudio/idlharness.https.window-expected.txt": [
-   "c1e94f9344adda65b09912eb1fe20a9d26386edc",
+   "64ec9f4302453321fba932e2a2e8fd5f6fc48d7a",
    "support"
   ],
   "webaudio/idlharness.https.window.js": [
@@ -431364,11 +431334,11 @@
    "support"
   ],
   "webstorage/event_constructor.html": [
-   "c74f08aadabafa061634771621c6c41275d88cee",
+   "fe7fca77a93c7adec48dc31e7926331e427b969b",
    "testharness"
   ],
-  "webstorage/event_constructor_eventinit.html": [
-   "3b4a77cb2cb3199f0fab3efcb5a3ecdec447a5a7",
+  "webstorage/event_initstorageevent.html": [
+   "2fe893143614ca6d44becd027f6befba82e18ad1",
    "testharness"
   ],
   "webstorage/event_local_key.html": [
@@ -431391,10 +431361,6 @@
    "db4b114a951a43064577540c7f87c428a85d3372",
    "testharness"
   ],
-  "webstorage/event_local_storageeventinit.html": [
-   "3a7e5d18f4792620f41b5cc84c2a12bc481ef5c6",
-   "testharness"
-  ],
   "webstorage/event_local_url.html": [
    "7345ce3736bbb2fb1179fe99761627e0e4075113",
    "testharness"
@@ -431423,10 +431389,6 @@
    "d2c2ba437e8e8b67a33d13768a5b3699e0316311",
    "testharness"
   ],
-  "webstorage/event_session_storageeventinit.html": [
-   "69539df41a401d2eaccf7b15898f3d540bd117ca",
-   "testharness"
-  ],
   "webstorage/event_session_url.html": [
    "85250acc2b9d19633162c80bf0ded1a8e0314d09",
    "testharness"
@@ -431444,7 +431406,7 @@
    "testharness"
   ],
   "webstorage/missing_arguments.html": [
-   "34f54bc3566b03f0224a038a652c8f76178da12b",
+   "38c52cf62754d5ee4092356104daca544a9f5be7",
    "testharness"
   ],
   "webstorage/resources/event_body_handler.html": [
@@ -438087,18 +438049,10 @@
    "7ccdb3e4c3109091286c02bbea7a5892215714f0",
    "testharness"
   ],
-  "xhr/setrequestheader-allow-empty-value-expected.txt": [
-   "31a91114f861da693c643ac40d748b156e4cbb2b",
-   "support"
-  ],
   "xhr/setrequestheader-allow-empty-value.htm": [
    "4479504c2a62d7fa0ec9388252e38b50ae011131",
    "testharness"
   ],
-  "xhr/setrequestheader-allow-whitespace-in-value-expected.txt": [
-   "956c41a85038e5e8cf109dbea547b6fbebbb7b8a",
-   "support"
-  ],
   "xhr/setrequestheader-allow-whitespace-in-value.htm": [
    "f2e0a370e665639aed5a6d747e5567bb6e38d7cc",
    "testharness"
@@ -438120,7 +438074,7 @@
    "testharness"
   ],
   "xhr/setrequestheader-content-type-expected.txt": [
-   "e144dce94840a531ec5b59293041263096d627e1",
+   "65bfab876d25398d7331803d5a34793fde38061d",
    "support"
   ],
   "xhr/setrequestheader-content-type.htm": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-001.html
new file mode 100644
index 0000000..cb5e8ee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-001.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Grid items with relative offsets</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-item-sizing">
+<meta name="assert" content="Checks that relative offests work for grid items.">
+<link rel="stylesheet" href="support/grid.css">
+<style>
+.grid {
+  position: relative;
+  grid: 90px 60px 30px / 200px 150px 100px;
+  inline-size: 600px;
+  block-size: 300px;
+}
+
+.grid > div { position: relative; }
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<div id="log"></div>
+
+<h3>Direction LTR</h3>
+
+<div class="grid">
+  <div class="firstRowFirstColumn" style="left: 10px; top: 9px;"
+    data-offset-x="10" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+  <div class="secondRowSecondColumn" style="left: -15px; top: -12px;"
+    data-offset-x="185" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+  <div class="thirdRowThirdColumn" style="right: 30px; bottom: 21px;"
+    data-offset-x="320" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid directionRTL">
+  <div class="firstRowFirstColumn" style="left: 10px; top: 9px;"
+    data-offset-x="410" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+  <div class="secondRowSecondColumn" style="left: -15px; top: -12px;"
+    data-offset-x="235" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+  <div class="thirdRowThirdColumn" style="right: 30px; bottom: 21px;"
+    data-offset-x="120" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h2>Writing Mode vertical-lr</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalLR">
+  <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+    data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+    data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+    data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalLR directionRTL">
+  <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+    data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+    data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+    data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h2>Writing Mode vertical-rl</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalRL">
+  <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+    data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+    data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+    data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalRL directionRTL">
+  <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+    data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+    data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+    data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-002.html
new file mode 100644
index 0000000..d92fca3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-002.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Grid items with relative offsets</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-item-sizing">
+<meta name="assert" content="Checks that relative percentage offests work for grid items.">
+<link rel="stylesheet" href="support/grid.css">
+<style>
+.grid {
+  position: relative;
+  grid: 90px 60px 30px / 200px 150px 100px;
+  inline-size: 600px;
+  block-size: 300px;
+}
+
+.grid > div { position: relative; }
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<div id="log"></div>
+
+<h3>Direction LTR</h3>
+
+<div class="grid">
+  <div class="firstRowFirstColumn" style="left: 5%; top: 10%;"
+    data-offset-x="10" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+  <div class="secondRowSecondColumn" style="left: -10%; top: -20%;"
+    data-offset-x="185" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+  <div class="thirdRowThirdColumn" style="right: 30%; bottom: 70%;"
+    data-offset-x="320" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid directionRTL">
+  <div class="firstRowFirstColumn" style="left: 5%; top: 10%;"
+    data-offset-x="410" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+  <div class="secondRowSecondColumn" style="left: -10%; top: -20%;"
+    data-offset-x="235" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+  <div class="thirdRowThirdColumn" style="right: 30%; bottom: 70%;"
+    data-offset-x="120" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h2>Writing Mode vertical-lr</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalLR">
+  <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+    data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+    data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+    data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalLR directionRTL">
+  <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+    data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+    data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+    data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h2>Writing Mode vertical-rl</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalRL">
+  <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+    data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+    data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+    data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalRL directionRTL">
+  <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+    data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+  <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+    data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+  <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+    data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/support/grid.css b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/support/grid.css
index 602e114..78fdd5e9 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/support/grid.css
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid/grid-items/support/grid.css
@@ -68,6 +68,12 @@
   grid-row: 3;
 }
 
+.thirdRowThirdColumn {
+  background-color: salmon;
+  grid-column: 3;
+  grid-row: 3;
+}
+
 .firstRowThirdColumn {
   background-color: magenta;
   grid-column: 3;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-properties-values-api/typedom.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-properties-values-api/typedom.tentative.html
index 9815055..1d757df1 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-properties-values-api/typedom.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-properties-values-api/typedom.tentative.html
@@ -537,4 +537,61 @@
     assert_parsed_type(gen_prop('<length># | fail', 'fail'), '10px, 20px', CSSUnitValue);
 }, 'CSSStyleValue.parse[All] returns list of CSSUnitValues for <length>#');
 
+// Direct CSSStyleValue objects:
+
+function gen_all_props() {
+    return [
+        gen_prop('*', 'foo'),
+        gen_prop('foo', 'foo'),
+        gen_prop('<angle>', '0deg'),
+        gen_prop('<color>', 'rgb(1, 2, 3)'),
+        gen_prop('<custom-ident>', 'thing'),
+        gen_prop('<image>', 'url(a)'),
+        gen_prop('<integer>', '0'),
+        gen_prop('<length-percentage>', 'calc(10px + 10%)'),
+        gen_prop('<length>', '0px'),
+        gen_prop('<number>', '0.5'),
+        gen_prop('<percentage>', '0%'),
+        gen_prop('<resolution>', '0dpi'),
+        gen_prop('<time>', '0s'),
+        gen_prop('<transform-function>', 'rotateX(0deg)'),
+        gen_prop('<transform-list>', 'rotateX(0deg)'),
+        gen_prop('<url>', 'url(a)')
+    ];
+}
+
+test(function(){
+    let props0 = gen_all_props();
+    let props1 = gen_all_props();
+
+    for (let i = 0; i < props0.length; i++) {
+        let prop0 = props0[i];
+        let prop1 = props1[i];
+
+        // Abuse computedStyleMap to get the initialValue (just to get some
+        // value that will parse for prop0/1's syntax).
+        let initialValue = target.computedStyleMap().get(prop0);
+
+        // We only care about direct CSSStyleValue instances in this test.
+        // Ultimately, in some future version of CSS TypedOM, we may have no
+        // direct CSSStyleValue instances at all, which is fine.
+        if (initialValue.constructor !== CSSStyleValue) {
+            continue;
+        }
+
+        let value = CSSStyleValue.parse(prop0, initialValue.toString());
+
+        // A value parsed for prop0 must be assignable to prop0.
+        target.attributeStyleMap.clear();
+        target.attributeStyleMap.set(prop0, value); // Don't throw.
+
+        // A value parsed for prop0 must not be assignable to prop1, even if
+        // the properties have compatible syntaxes.
+        assert_throws(new TypeError(), () => {
+            target.attributeStyleMap.clear();
+            target.attributeStyleMap.set(prop1, value);
+        });
+    }
+}, 'Direct CSSStyleValue instances are tied to their associated property');
+
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-001.html
new file mode 100644
index 0000000..694087f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-001.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: the selector inside :host-context() affects specificity</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+  host.attachShadow({ mode: 'open' }).innerHTML = `
+    <style>
+      :host-context(#host) {
+        width: 100px;
+        height: 100px;
+        background: green;
+      }
+      :host {
+        background: red;
+      }
+    </style>
+  `;
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-002.html
new file mode 100644
index 0000000..3d4d3e5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-002.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: :host-context() is accounted for during specificity computation</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+  host.attachShadow({ mode: 'open' }).innerHTML = `
+    <style>
+      .foo span {
+        display: block;
+        width: 100px;
+        height: 100px;
+        background: red;
+      }
+      :host-context(*) span {
+        background: green;
+      }
+    </style>
+    <div class="foo"><span></span></div>
+  `;
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-003.html
new file mode 100644
index 0000000..7abf884
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-context-specificity-003.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: the :host-context() selector affects specificity</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+  host.attachShadow({ mode: 'open' }).innerHTML = `
+    <style>
+      :host-context(*) div {
+        width: 100px;
+        height: 100px;
+        background: green;
+      }
+      div {
+        background: red;
+      }
+    </style>
+    <div></div>
+  `;
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-specificity-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-specificity-003.html
new file mode 100644
index 0000000..54a22599
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-scoping/host-specificity-003.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: the :host() selector affects specificity</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/1915">
+<link rel="help" href="https://bugzil.la/1454165">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+  host.attachShadow({ mode: 'open' }).innerHTML = `
+    <style>
+      :host(*) div {
+        width: 100px;
+        height: 100px;
+        background: green;
+      }
+      div {
+        background: red;
+      }
+    </style>
+    <div></div>
+  `;
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html
new file mode 100644
index 0000000..2a56298
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/">
+
+<p>There should be no red below.</p>
+<div id="container" style="writing-mode:vertical-rl; overflow:auto; width:300px; height:300px;">
+  <div style="width:300px; background:red;"></div>
+  <div style="width:400px; font-size:16px; line-height:25px;">
+    <span id="displayMe" style="color:red; display:none;">
+      FAIL<br>FAIL<br>FAIL<br>FAIL<br>
+    </span>
+    line<br>
+  </div>
+  <div id="displayMeToo" style="display:none; width:300px; background:red;"></div>
+</div>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  test(()=> {
+      var container = document.getElementById("container");
+      var displayMe = document.getElementById("displayMe");
+      var displayMeToo = document.getElementById("displayMeToo");
+      // Scroll the text container into view.
+      container.scrollLeft = 100;
+      displayMe.style.display = "inline";
+      displayMeToo.style.display = "block";
+      assert_equals(container.scrollLeft, 300);
+  }, "Line at edge of scrollport shouldn't jump visually when content is inserted before");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/testdriver/bless.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/testdriver/bless.html
index feb444f..b8a1c2e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/testdriver/bless.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/testdriver/bless.html
@@ -18,16 +18,26 @@
 // activation concerns the interaction between iframe elements and their parent
 // browsing contexts [1]. Because testdriver.js currently cannot operate within
 // an iframe, the standard requirement cannot be used to verify the correctness
-// of the `bless` method. Instead, rely on the non-standard restriction on
-// unattended media playback. Browsers which do not implement such a
-// restriction will pass this test spuriously.
+// of the `bless` method. Instead, rely on the optional behavior of early exit
+// and rejecting in `video.play()` if the media is not "allowed to play". [2]
+// Browsers which don't implement this will pass this test spuriously.
 //
 // [1] https://html.spec.whatwg.org/multipage/origin.html#attr-iframe-sandbox-allow-top-navigation-by-user-activation
-promise_test(() => {
+// [2] https://html.spec.whatwg.org/multipage/media.html#allowed-to-play
+promise_test(t => {
   const video = document.createElement('video');
-  video.setAttribute('src', '/media/counting.ogv');
   document.body.appendChild(video);
-  return test_driver.bless('start video playback', () => video.play())
+  t.add_cleanup(() => video.remove());
+  return test_driver.bless('start video playback', () => {
+    // `paused` changes before `play()` returns when "allowed to play", so the
+    // promise, if any, is ignored.
+    assert_true(video.paused);
+    const playPromise = video.play();
+    assert_false(video.paused);
+    if (playPromise) {
+      playPromise.catch(() => {});
+    }
+  });
 }, 'user activation');
 
 promise_test(() => {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
index 9f5693fc..1166d9f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
+++ b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
@@ -794,3 +794,7 @@
 # Tests that use WebKit/Blink testing APIs
 LAYOUTTESTS APIS: css/css-regions/interactivity/*
 LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.js
+
+# Gecko additons to remove
+CSS-COLLIDING-REF-NAME: css/css-contain/reference/contain-size-fieldset-001-ref.html
+CSS-COLLIDING-REF-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html
index 2ed96ec..fc2e619 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html
@@ -18,36 +18,45 @@
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script>
-var vid = document.getElementById("vid");
-var t = async_test("Tests that a MediaStream can be assigned to a video element with srcObject", {timeout: 10000});
-t.step(function() {
-  navigator.mediaDevices.getUserMedia({video: true})
-    .then(t.step_func(function (stream) {
-      var testOncePlaying = function() {
-         assert_equals(vid.played.length, 1, "A MediaStream's timeline always consists of a single range");
-         assert_equals(vid.played.start(0), 0, "A MediaStream's timeline always consists of a single range");
-         assert_approx_equals(vid.played.end(0), vid.currentTime, 0.0001, "A MediaStream's timeline always consists of a single range");
-         assert_equals(vid.readyState, vid.HAVE_ENOUGH_DATA, "Upon selecting a media stream, the UA sets readyState to HAVE_ENOUGH_DATA");
-         assert_equals(vid.duration, Infinity, " A MediaStream does not have a pre-defined duration. ");
-         var time = vid.currentTime;
+'use strict';
+const vid = document.getElementById("vid");
 
-         assert_approx_equals(vid.currentTime, time, 0.0001, "The UA MUST ignore attempts to set the currentTime attribute");
-         // TODO add test that duration must be set to currentTime
-         // when mediastream is destroyed
-         vid.removeEventListener("timeupdate", testOncePlaying, false);
-         t.done();
-      }
-      vid.addEventListener("timeupdate", t.step_func(testOncePlaying), false);
-      vid.srcObject = stream;
-      vid.play();
-      assert_true(!vid.seeking, "A MediaStream is not seekable");
-      assert_equals(vid.seekable.length, 0, "A MediaStream is not seekable");
-      assert_equals(vid.defaultPlaybackRate, 1, "playback rate is always 1");
-      assert_equals(vid.playbackRate, 1, "playback rate is always 1");
-      assert_equals(vid.buffered.length, 0, "A MediaStream cannot be preloaded.  Therefore, there is no buffered timeranges");
-      assert_equals(vid.duration, vid.readyState == vid.HAVE_NOTHING ? NaN : Infinity, " A MediaStream does not have a pre-defined duration. ");
-    }), function(error) {});
-});
+promise_test(async t => {
+  const wait = ms => new Promise(r => t.step_timeout(r, ms));
+  const timeout = (promise, time, msg) =>
+    Promise.race([promise, wait(time).then(() => Promise.reject(new Error(msg)))]);
+
+  const stream = await timeout(navigator.mediaDevices.getUserMedia({video: true}), 10000, "getUserMedia timeout");
+  t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+  vid.srcObject = stream;
+  vid.play();
+  assert_true(!vid.seeking, "A MediaStream is not seekable");
+  assert_equals(vid.seekable.length, 0, "A MediaStream is not seekable");
+  assert_equals(vid.defaultPlaybackRate, 1, "playback rate is always 1");
+  assert_equals(vid.playbackRate, 1, "playback rate is always 1");
+  assert_equals(vid.buffered.length, 0, "A MediaStream cannot be preloaded.  Therefore, there is no buffered timeranges");
+  assert_equals(vid.readyState, vid.HAVE_NOTHING, "readyState is HAVE_NOTHING initially");
+  assert_equals(vid.duration, NaN, "A MediaStream does not have any duration initially.");
+
+  const haveLoadedData = new Promise(r => vid.addEventListener("loadeddata", r, {once: true}));
+
+  await new Promise(r => vid.addEventListener("timeupdate", r, {once: true}));
+  assert_equals(vid.played.length, 1, "A MediaStream's timeline always consists of a single range");
+  assert_equals(vid.played.start(0), 0, "A MediaStream's timeline always starts at zero");
+  assert_equals(vid.played.end(0), vid.currentTime, "A MediaStream's end MUST return the last known currentTime, says mediacapture-main");
+  assert_equals(vid.duration, Infinity, "A MediaStream does not have a pre-defined duration. ");
+
+  const time = vid.currentTime;
+  vid.currentTime = 0;
+  assert_equals(vid.currentTime, time, "The UA MUST ignore attempts to set the currentTime attribute");
+
+  await haveLoadedData;
+  assert_equals(vid.readyState, vid.HAVE_ENOUGH_DATA, "Upon having loaded a media stream, the UA sets readyState to HAVE_ENOUGH_DATA");
+  assert_equals(vid.duration, Infinity, "A MediaStream does not have a pre-defined duration.");
+
+  // TODO add test that duration must be set to currentTime
+  // when mediastream is destroyed
+}, "Tests that a MediaStream can be assigned to a video element with srcObject");
 </script>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_constructor.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_constructor.html
index c74f08a..fe7fca7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_constructor.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_constructor.html
@@ -1,32 +1,81 @@
 <!DOCTYPE HTML>
 <html>
  <head>
-  <title>WebStorage Test: StorageEvent - init value</title>
+  <title>WebStorage Test: StorageEvent - constructor</title>
   <script src="/resources/testharness.js"></script>
   <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
-    <h1>event_session_Constructor</h1>
-    <div id="log"></div>
     <script>
         test(function() {
-            var t = async_test("storageeventinit test");
-            function onStorageEvent(event) {
-                t.step(function() {
-                    assert_equals(event.type, 'storage');
-                    assert_equals(event.key, null);
-                    assert_equals(event.oldValue, null);
-                    assert_equals(event.newValue, null);
-                    assert_equals(event.url, '');
-                    assert_equals(event.storageArea, null);
-                });
-                t.done();
-            }
+            assert_throws(new TypeError, () => new StorageEvent());
+            // should be redundant, but .length can be wrong with custom bindings
+            assert_equals(StorageEvent.length, 1, 'StorageEvent.length');
+        }, 'constructor with no arguments');
 
-            window.addEventListener('storage', onStorageEvent, false);
-            var event = new StorageEvent('storage');
-            window.dispatchEvent(event);
-        }, "The initial values of storage event properties.");
+        test(function() {
+            var event = new StorageEvent('type');
+            assert_equals(event.type, 'type', 'type');
+            assert_equals(event.key, null, 'key');
+            assert_equals(event.oldValue, null, 'oldValue');
+            assert_equals(event.newValue, null, 'newValue');
+            assert_equals(event.url, '', 'url');
+            assert_equals(event.storageArea, null, 'storageArea');
+        }, 'constructor with just type argument');
+
+        test(function() {
+            assert_not_equals(localStorage, null, 'localStorage'); // precondition
+
+            var event = new StorageEvent('storage', {
+                bubbles: true,
+                cancelable: true,
+                key: 'key',
+                oldValue: 'oldValue',
+                newValue: 'newValue',
+                url: 'url', // not an absolute URL to ensure it isn't resolved
+                storageArea: localStorage
+            });
+            assert_equals(event.type, 'storage', 'type');
+            assert_equals(event.bubbles, true, 'bubbles');
+            assert_equals(event.cancelable, true, 'cancelable');
+            assert_equals(event.key, 'key', 'key');
+            assert_equals(event.oldValue, 'oldValue', 'oldValue');
+            assert_equals(event.newValue, 'newValue', 'newValue');
+            assert_equals(event.url, 'url', 'url');
+            assert_equals(event.storageArea, localStorage, 'storageArea');
+        }, 'constructor with sensible type argument and members');
+
+        test(function() {
+            var event = new StorageEvent(null, {
+                key: null,
+                oldValue: null,
+                newValue: null,
+                url: null,
+                storageArea: null
+            });
+            assert_equals(event.type, 'null', 'type');
+            assert_equals(event.key, null, 'key');
+            assert_equals(event.oldValue, null, 'oldValue');
+            assert_equals(event.newValue, null, 'newValue');
+            assert_equals(event.url, 'null', 'url');
+            assert_equals(event.storageArea, null, 'storageArea');
+        }, 'constructor with null type argument and members');
+
+        test(function() {
+            var event = new StorageEvent(undefined, {
+                key: undefined,
+                oldValue: undefined,
+                newValue: undefined,
+                url: undefined,
+                storageArea: undefined
+            });
+            assert_equals(event.type, 'undefined', 'type');
+            assert_equals(event.key, null, 'key');
+            assert_equals(event.oldValue, null, 'oldValue');
+            assert_equals(event.newValue, null, 'newValue');
+            assert_equals(event.url, '', 'url'); // not 'undefined'!
+            assert_equals(event.storageArea, null, 'storageArea');
+        }, 'constructor with undefined type argument and members');
     </script>
  </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_constructor_eventinit.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_constructor_eventinit.html
deleted file mode 100644
index 3b4a77c..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_constructor_eventinit.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML>
-<html>
- <head>
-  <title>WebStorage Test: StorageEvent - StorageEventInit with null value</title>
-  <script src="/resources/testharness.js"></script>
-  <script src="/resources/testharnessreport.js"></script>
- </head>
- <body>
-    <h1>event_Constructor</h1>
-    <div id="log"></div>
-    <script>
-        async_test(function(t) {
-            function onStorageEvent(event) {
-                assert_equals(event.type, 'storage', 'type');
-                assert_equals(event.key, null, 'key');
-                assert_equals(event.oldValue, null, 'oldValue');
-                assert_equals(event.newValue, null, 'newValue');
-                assert_equals(event.url, 'null', 'url');
-                assert_equals(event.storageArea, null, 'storageArea');
-                t.done();
-            }
-
-            window.addEventListener('storage', t.step_func(onStorageEvent), false);
-            var event = new StorageEvent('storage', {
-                key: null,
-                oldValue: null,
-                newValue: null,
-                url: null
-            });
-            window.dispatchEvent(event);
-        }, "StorageEvent constructor and nulls - Construct StorageEvent with StorageEventInit.");
-    </script>
- </body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_initstorageevent-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_initstorageevent-expected.txt
new file mode 100644
index 0000000..0650fd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_initstorageevent-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+FAIL initStorageEvent with 0 arguments assert_throws: function "() => event.initStorageEvent()" did not throw
+FAIL initStorageEvent with 1 argument assert_equals: event.key expected (object) null but got (string) "undefined"
+PASS initStorageEvent with 8 sensible arguments
+FAIL initStorageEvent with 8 null arguments assert_equals: event.key expected (object) null but got (string) "null"
+FAIL initStorageEvent with 8 undefined arguments assert_equals: event.key expected (object) null but got (string) "undefined"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_initstorageevent.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_initstorageevent.html
new file mode 100644
index 0000000..2fe8931
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_initstorageevent.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+  <title>WebStorage Test: StorageEvent - initStorageEvent</title>
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+    <script>
+        test(() => {
+            const event = new StorageEvent('storage');
+            assert_throws(new TypeError, () => event.initStorageEvent());
+            // should be redundant, but .length can be wrong with custom bindings
+            assert_equals(event.initStorageEvent.length, 1, 'event.initStorageEvent.length');
+        }, 'initStorageEvent with 0 arguments');
+
+        test(() => {
+            const event = new StorageEvent('storage');
+            event.initStorageEvent('type');
+            assert_equals(event.type, 'type', 'event.type');
+            assert_equals(event.bubbles, false, 'event.bubbles');
+            assert_equals(event.cancelable, false, 'event.cancelable');
+            assert_equals(event.key, null, 'event.key');
+            assert_equals(event.oldValue, null, 'event.oldValue');
+            assert_equals(event.newValue, null, 'event.newValue');
+            assert_equals(event.url, '', 'event.url');
+            assert_equals(event.storageArea, null, 'event.storageArea');
+        }, 'initStorageEvent with 1 argument');
+
+        test(() => {
+            assert_not_equals(localStorage, null, 'localStorage'); // precondition
+
+            const event = new StorageEvent('storage');
+            event.initStorageEvent('type', true, true, 'key', 'oldValue', 'newValue', 'url', localStorage);
+            assert_equals(event.type, 'type', 'event.type');
+            assert_equals(event.bubbles, true, 'event.bubbles');
+            assert_equals(event.cancelable, true, 'event.cancelable');
+            assert_equals(event.key, 'key', 'event.key');
+            assert_equals(event.oldValue, 'oldValue', 'event.oldValue');
+            assert_equals(event.newValue, 'newValue', 'event.newValue');
+            assert_equals(event.url, 'url', 'event.url');
+            assert_equals(event.storageArea, localStorage, 'event.storageArea');
+        }, 'initStorageEvent with 8 sensible arguments');
+
+        test(() => {
+            const event = new StorageEvent('storage');
+            event.initStorageEvent(null, null, null, null, null, null, null, null);
+            assert_equals(event.type, 'null', 'event.type');
+            assert_equals(event.bubbles, false, 'event.bubbles');
+            assert_equals(event.cancelable, false, 'event.cancelable');
+            assert_equals(event.key, null, 'event.key');
+            assert_equals(event.oldValue, null, 'event.oldValue');
+            assert_equals(event.newValue, null, 'event.newValue');
+            assert_equals(event.url, 'null', 'event.url');
+            assert_equals(event.storageArea, null, 'event.storageArea');
+        }, 'initStorageEvent with 8 null arguments');
+
+        test(() => {
+            const event = new StorageEvent('storage');
+            event.initStorageEvent(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
+            assert_equals(event.type, 'undefined', 'event.type');
+            assert_equals(event.bubbles, false, 'event.bubbles');
+            assert_equals(event.cancelable, false, 'event.cancelable');
+            assert_equals(event.key, null, 'event.key');
+            assert_equals(event.oldValue, null, 'event.oldValue');
+            assert_equals(event.newValue, null, 'event.newValue');
+            assert_equals(event.url, '', 'event.url');
+            assert_equals(event.storageArea, null, 'event.storageArea');
+        }, 'initStorageEvent with 8 undefined arguments');
+    </script>
+ </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_local_storageeventinit.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_local_storageeventinit.html
deleted file mode 100644
index 3a7e5d1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_local_storageeventinit.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML>
-<html>
- <head>
-  <title>WebStorage Test: localStorage event - StorageEventInit</title>
-  <script src="/resources/testharness.js"></script>
-  <script src="/resources/testharnessreport.js"></script>
- </head>
- <body>
-    <h1>event_local_StorageEventInit</h1>
-    <div id="log"></div>
-    <script>
-        async_test(function(t) {
-
-            function onStorageEvent(event) {
-                assert_equals(event.key, 'key');
-                assert_equals(event.oldValue, 'oldValue');
-                assert_equals(event.newValue, 'newValue');
-                assert_equals(event.url, window.location.href);
-                assert_equals(event.storageArea, window.localStorage);
-                t.done();
-            }
-
-            window.addEventListener('storage', t.step_func(onStorageEvent), false);
-
-            var event = new StorageEvent('storage', {
-                key: 'key',
-                oldValue: 'oldValue',
-                newValue: 'newValue',
-                url: window.location.href,
-                storageArea: window.localStorage
-            });
-
-            window.dispatchEvent(event);
-        }, "storageeventinit test - Storage event is fired due to set values for StorageEventInit.");
-    </script>
- </body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_session_storageeventinit.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_session_storageeventinit.html
deleted file mode 100644
index 69539df..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/webstorage/event_session_storageeventinit.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML>
-<html>
- <head>
-  <title>WebStorage Test: sessionStorage event - StorageEventInit</title>
-  <script src="/resources/testharness.js"></script>
-  <script src="/resources/testharnessreport.js"></script>
- </head>
- <body>
-    <h1>event_session_StorageEventInit</h1>
-    <div id="log"></div>
-    <script>
-        async_test(function(t) {
-            function onStorageEvent(event) {
-                assert_equals(event.key, 'key');
-                assert_equals(event.oldValue, 'oldValue');
-                assert_equals(event.newValue, 'newValue');
-                assert_equals(event.url, window.location.href);
-                assert_equals(event.storageArea, window.sessionStorage);
-                t.done();
-            }
-
-            window.addEventListener('storage', t.step_func(onStorageEvent), false);
-
-            var event = new StorageEvent('storage', {
-                key: 'key',
-                oldValue: 'oldValue',
-                newValue: 'newValue',
-                url: window.location.href,
-                storageArea: window.sessionStorage
-            });
-
-            window.dispatchEvent(event);
-        }, "storageeventinit test - Storage event is fired due to set values for StorageEventInit.");
-    </script>
- </body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/missing_arguments.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/missing_arguments.html
index 34f54bc35..38c52cf6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webstorage/missing_arguments.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webstorage/missing_arguments.html
@@ -6,8 +6,6 @@
   <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
-    <h1>missing_arguments</h1>
-    <div id="log"></div>
     <script>
         var tests = [
             function() { localStorage.key(); },
@@ -20,7 +18,6 @@
             function() { sessionStorage.setItem(); },
             function() { sessionStorage.setItem("a"); },
             function() { sessionStorage.removeItem(); },
-            function() { new StorageEvent(); }
         ];
         tests.forEach(function(fun) {
             test(function() {
diff --git a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-Id.html b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-Id.html
index 362bf10..96055f6 100644
--- a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-Id.html
+++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-Id.html
@@ -7,17 +7,17 @@
 </head>
 <body>
 <script>
-promise_test(function() {
-  var pc = new RTCPeerConnection();
+test(t => {
+  const pc = new RTCPeerConnection();
+  t.add_cleanup(() => { pc.close(); });
   assert_equals(typeof pc.id, 'string');
-  return function(){};
 }, 'RTCPeerConnection.id is a string.');
 
-promise_test(function() {
-  var pc1 = new RTCPeerConnection();
-  var pc2 = new RTCPeerConnection();
+test(t => {
+  const pc1 = new RTCPeerConnection();
+  const pc2 = new RTCPeerConnection();
+  t.add_cleanup(() => { pc1.close(); pc2.close() });
   assert_not_equals(pc1.id, pc2.id);
-  return function(){};
 }, 'RTCPeerConnection.id is unique between RTCPeerConnection objects.');
 </script>
 </body>
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/html/details_summary/details-marker-style-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/html/details_summary/details-marker-style-expected.txt
index 0ed1f5ad..3377e93 100644
--- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/html/details_summary/details-marker-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/html/details_summary/details-marker-style-expected.txt
@@ -13,7 +13,7 @@
         LayoutNGBlockFlow {DETAILS} at (0,0) size 118.83x183.42
           LayoutNGBlockFlow {SUMMARY} at (0,0) size 118.83x183.42
             LayoutDetailsMarker {DIV} at (0,0) size 111.83x79.83 [border: (8px solid #00FF00) (16px solid #00FF00) (24px solid #00FF00) (32px solid #00FF00)]: down
-            LayoutText {#text} at (90,89) size 27x95
+            LayoutText {#text} at (90,89) size 28x95
               text run at (90,89) width 95: "Summary"
       LayoutNGBlockFlow {DIV} at (0,270.25) size 784x47
         LayoutNGBlockFlow {DETAILS} at (0,0) size 784x47
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-gen-property-trees/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-gen-property-trees/compositing/iframes/invisible-nested-iframe-show-expected.txt
index 4493335..abdcdcbd 100644
--- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-gen-property-trees/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-gen-property-trees/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -38,7 +38,7 @@
     {
       "name": "Scrolling Contents Layer",
       "position": [23, 23],
-      "bounds": [285, 192]
+      "bounds": [285, 193]
     },
     {
       "name": "LayoutIFrame IFRAME",
@@ -94,7 +94,7 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [18, 202, 0, 1]
+        [18, 203, 0, 1]
       ]
     },
     {
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/layout-fonts/resources/layout-font-test.js b/third_party/WebKit/LayoutTests/inspector-protocol/layout-fonts/resources/layout-font-test.js
index 451ffd76..5575bc30 100644
--- a/third_party/WebKit/LayoutTests/inspector-protocol/layout-fonts/resources/layout-font-test.js
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/layout-fonts/resources/layout-font-test.js
@@ -1,4 +1,5 @@
 (async function layoutFontTest(testRunner, session) {
+  await session.evaluateAsync("document.fonts.ready");
   var documentNodeId = (await session.protocol.DOM.getDocument()).result.root.nodeId;
   await session.protocol.CSS.enable();
   var testNodes = await session.evaluate(`
@@ -13,12 +14,7 @@
 
     testRunner.log(testNode.textContent.trim());
     testRunner.log(testNode.selector + ':');
-    for (var i = 0; i < usedFonts.length; i++) {
-      var usedFont = usedFonts[i];
-      var isLast = i === usedFonts.length - 1;
-      testRunner.log(`"${usedFont.familyName}" : ${usedFont.glyphCount}${isLast ? '' : ','}`);
-    }
-    testRunner.log('');
+    testRunner.log(usedFonts.map(usedFont => `"${usedFont.familyName}" : ${usedFont.glyphCount}`).join(',\n') + '\n');
     testNode.usedFonts = usedFonts;
   }
   return testNodes;
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/doubletap-on-play-button.html b/third_party/WebKit/LayoutTests/media/controls/modern/doubletap-on-play-button.html
index b35fead..989517c 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/doubletap-on-play-button.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/doubletap-on-play-button.html
@@ -1,21 +1,13 @@
 <!DOCTYPE html>
 <html>
-<title>Test that player will play then pause if double tapped on the overlay play button.</title>
+<title>Test that player will play then pause if double tapped on the play button.</title>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script src="../../media-controls.js"></script>
-<script src="../overlay-play-button.js"></script>
-<body></body>
+<video controls width=400 src="../../content/60_sec_video.webm"></video>
 <script>
 async_test(t => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
-  const video = document.createElement('video');
-  video.controls = true;
-  video.width = 400;
-  video.src = '../../content/60_sec_video.webm';
-  document.body.appendChild(video);
+  const video = document.querySelector('video');
   let didPause = false;
 
   video.onplaying = t.step_func(() => {
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/immersive-mode-adds-css-class.html b/third_party/WebKit/LayoutTests/media/controls/modern/immersive-mode-adds-css-class.html
index 61a49242..b99fe52e 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/immersive-mode-adds-css-class.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/immersive-mode-adds-css-class.html
@@ -34,6 +34,7 @@
     const buttonPanelStyle = getComputedStyle(buttonPanelElement(video));
     const timelineStyle = getComputedStyle(timelineElement(video));
     const thumbStyle = getComputedStyle(timelineThumb(video));
+    const overlayPlayButtonStyle = getComputedStyle(mediaControlsOverlayPlayButtonInternal(video));
 
     assert_equals('43px', muteButtonStyle.height, 'Mute button height is respected');
     assert_equals('24px', fullscreenButtonStyle['background-size'], 'Fullscreen button background size is respected');
@@ -44,12 +45,7 @@
     assert_equals('5px', timelineStyle.height, 'Timeline height is respected');
     assert_equals('471px', timelineStyle['max-width'], 'Timeline max-width is respected');
     assert_equals('16px', thumbStyle.width, 'Thumb width is respected');
-
-    if (internals.runtimeFlags.mediaControlsOverlayPlayButtonEnabled) {
-      const overlayPlayButtonStyle = getComputedStyle(mediaControlsOverlayPlayButtonInternal(video));
-      assert_equals('64px', overlayPlayButtonStyle.height, 'Overlay play button height is respected');
-    }
-
+    assert_equals('64px', overlayPlayButtonStyle.height, 'Overlay play button height is respected');
   }
 });
 </script>
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/overlay-play-button-tap-to-hide.html b/third_party/WebKit/LayoutTests/media/controls/modern/overlay-play-button-tap-to-hide.html
index 729fcc0..f9191ad 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/overlay-play-button-tap-to-hide.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/overlay-play-button-tap-to-hide.html
@@ -3,18 +3,11 @@
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script src="../../media-controls.js"></script>
-<script src="../overlay-play-button.js"></script>
 <body>
+<video id=video width=400 controls preload=metadata></video>
 <script>
 async_test((t) => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
-  const video = document.createElement('video');
-  video.width = 400;
-  video.controls = true;
-  video.preload = 'metadata'
-  document.body.appendChild(video);
+  const video = document.getElementById('video');
   const button = mediaControlsOverlayPlayButtonInternal(video);
   const controls = mediaControls(video);
   const overlay = mediaControlsOverlayPlayButton(video);
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-outside.html b/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-outside.html
index f253040..ae07b7e 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-outside.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-outside.html
@@ -4,18 +4,10 @@
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script src="../../media-controls.js"></script>
-<script src="../overlay-play-button.js"></script>
-<body></body>
+<video controls width=400 src="../../content/60_sec_video.webm"></video>
 <script>
 async_test(t => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
-  const video = document.createElement('video');
-  video.controls = true;
-  video.width = 400;
-  video.src = '../../content/60_sec_video.webm';
-  document.body.appendChild(video);
+  const video = document.querySelector('video');
 
   video.addEventListener('playing', t.step_func(() => {
     // Single tap in the top right hand corner
@@ -24,10 +16,15 @@
     singleTapAtCoordinates(coordinates[0] + 1, coordinates[1] + 1);
   }), { once: true });
 
-  video.addEventListener('pause', t.done.bind(t));
+  video.addEventListener('pause', t.unreached_func());
 
   video.addEventListener('webkitfullscreenchange', t.unreached_func());
 
+  video.ontimeupdate = t.step_func(() => {
+    if (video.currentTime > 0)
+      t.done();
+  });
+
   video.play();
 });
 </script>
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-overlay-closes-overflow-menu.html b/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-overlay-closes-overflow-menu.html
index 0948e16..bfcb67d 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-overlay-closes-overflow-menu.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-overlay-closes-overflow-menu.html
@@ -4,19 +4,10 @@
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script src="../../media-controls.js"></script>
-<script src="../overlay-play-button.js"></script>
-<body></body>
+<video controls width=400 src="../../content/60_sec_video.webm"></video>
 <script>
 async_test(t => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
-  const video = document.createElement('video');
-  video.controls = true;
-  video.width = 400;
-  video.src='../../content/60_sec_video.webm';
-  document.body.appendChild(video);
-
+  const video = document.querySelector('video');
   var button = overflowButton(video);
   var menu = overflowMenu(video);
   // Need to add a text track for the overflow menu to appear.
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-play-button.html b/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-play-button.html
index b91556b..e746029 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-play-button.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/singletap-on-play-button.html
@@ -4,18 +4,10 @@
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script src="../../media-controls.js"></script>
-<script src="../overlay-play-button.js"></script>
-<body></body>
+<video controls width=400 src="../../content/60_sec_video.webm"></video>
 <script>
 async_test(t => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
-  const video = document.createElement('video');
-  video.controls = true;
-  video.width = 400;
-  video.src='../../content/60_sec_video.webm';
-  document.body.appendChild(video);
+  const video = document.querySelector('video');
 
   video.addEventListener('playing', t.step_func(() => {
     // Single tap in the middle of the button.
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/singletouch-on-play-button.html b/third_party/WebKit/LayoutTests/media/controls/modern/singletouch-on-play-button.html
index 860c963..fb1c5de 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/singletouch-on-play-button.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/singletouch-on-play-button.html
@@ -4,18 +4,10 @@
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script src="../../media-controls.js"></script>
-<script src="../overlay-play-button.js"></script>
-<body></body>
+<video controls width=400 src="../../content/60_sec_video.webm"></video>
 <script>
 async_test(t => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
-  const video = document.createElement('video');
-  video.controls = true;
-  video.width = 400;
-  video.src='../../content/60_sec_video.webm';
-  document.body.appendChild(video);
+  const video = document.querySelector('video');
 
   video.addEventListener('playing', t.step_func(() => {
     // Single tap in the middle of the button.
diff --git a/third_party/WebKit/LayoutTests/media/controls/modern/video-does-not-go-fullscreen-on-double-click-before-preload.html b/third_party/WebKit/LayoutTests/media/controls/modern/video-does-not-go-fullscreen-on-double-click-before-preload.html
index 34bb9fb..f8595bd1 100644
--- a/third_party/WebKit/LayoutTests/media/controls/modern/video-does-not-go-fullscreen-on-double-click-before-preload.html
+++ b/third_party/WebKit/LayoutTests/media/controls/modern/video-does-not-go-fullscreen-on-double-click-before-preload.html
@@ -4,18 +4,10 @@
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script src="../../media-controls.js"></script>
-<script src="../overlay-play-button.js"></script>
-<body></body>
+<video controls width=400 preload=none src="../../content/60_sec_video.webm"></video>
 <script>
 async_test(t => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
-  const video = document.createElement('video');
-  video.controls = true;
-  video.width = 400;
-  video.src='../../content/60_sec_video.webm';
-  document.body.appendChild(video);
+  const video = document.querySelector('video');
   video.addEventListener("webkitfullscreenchange", t.unreached_func());
 
   window.onload = t.step_func(() => {
diff --git a/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-resizes-with-video.html b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-resizes-with-video.html
index 2bcbd11..cfb8e57 100644
--- a/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-resizes-with-video.html
+++ b/third_party/WebKit/LayoutTests/media/controls/overlay-play-button-resizes-with-video.html
@@ -4,7 +4,6 @@
 <script src="../../resources/testharness.js"></script>
 <script src="../../resources/testharnessreport.js"></script>
 <script src="../media-controls.js"></script>
-<script src="overlay-play-button.js"></script>
 <body></body>
 <script>
 const testCases = [
@@ -24,9 +23,6 @@
 });
 
 function runTestCase(t) {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
   let test = t.properties;
   test.video = createVideo(test);
   setTimeout(t.step_func_done(() => {
diff --git a/third_party/WebKit/LayoutTests/media/controls/tap-on-overlay-play-button-cant-be-preempted.html b/third_party/WebKit/LayoutTests/media/controls/tap-on-overlay-play-button-cant-be-preempted.html
index a48b0a5..62da232 100644
--- a/third_party/WebKit/LayoutTests/media/controls/tap-on-overlay-play-button-cant-be-preempted.html
+++ b/third_party/WebKit/LayoutTests/media/controls/tap-on-overlay-play-button-cant-be-preempted.html
@@ -4,21 +4,13 @@
 <script src="../../resources/testharness.js"></script>
 <script src="../../resources/testharnessreport.js"></script>
 <script src="../media-controls.js"></script>
-<script src="overlay-play-button.js"></script>
 <div id="outer">
+<video controls width=500 preload=none src="../content/60_sec_video.webm"></video>
 </div>
 <script>
 async_test(t => {
-  // This test is only valid when the overlay play button is enabled.
-  enableOverlayPlayButtonForTest(t);
-
+  const video = document.querySelector('video');
   const outerDiv = document.getElementById('outer');
-  const video = document.createElement('video');
-  video.controls = true;
-  video.width = 500;
-  video.preload = 'none';
-  video.src = '../content/60_sec_video.webm';
-  outerDiv.appendChild(video);
 
   video.addEventListener('loadedmetadata', t.step_func(() => {
     singleTouchOnControl(mediaControlsOverlayPlayButton(video));
diff --git a/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html b/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html
index b1d82643..100f4af5 100644
--- a/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html
+++ b/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html
@@ -19,7 +19,7 @@
     var panel = mediaControlsButton(video, "panel");
 
     // Move mouse to the play button and start playing the video.
-    clickAtCoordinates(...elementCoordinates(enabledPlayButton(video)));
+    clickAtCoordinates(...mediaControlsButtonCoordinates(video, "overlay-play-button"));
 
     assert_equals(getComputedStyle(panel).opacity, "1",
                   "Inline controls should initially show since controls " +
diff --git a/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html b/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html
index 1c434cf..ed356bb 100644
--- a/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html
+++ b/third_party/WebKit/LayoutTests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html
@@ -20,7 +20,7 @@
     var panel = mediaControlsButton(video, "panel");
 
     // Move mouse to the play button and start playing the video.
-    clickAtCoordinates(...elementCoordinates(enabledPlayButton(video)));
+    clickAtCoordinates(...mediaControlsButtonCoordinates(video, "overlay-play-button"));
 
     assert_equals(getComputedStyle(panel).opacity, "1",
                   "Inline controls should initially show since controls " +
diff --git a/third_party/WebKit/LayoutTests/media/media-controls-tap-show-controls-without-activating.html b/third_party/WebKit/LayoutTests/media/media-controls-tap-show-controls-without-activating.html
index 3cb54aa..fd3bc4d 100644
--- a/third_party/WebKit/LayoutTests/media/media-controls-tap-show-controls-without-activating.html
+++ b/third_party/WebKit/LayoutTests/media/media-controls-tap-show-controls-without-activating.html
@@ -14,7 +14,7 @@
         runAfterHideMediaControlsTimerFired(t.step_func(function() {
           assert_false(isControlsPanelVisible(video));
 
-          var coords = elementCoordinates(enabledPlayButton(video));
+          var coords = mediaControlsButtonCoordinates(video, "overlay-play-button");
 
           eventSender.gestureTapDown(coords[0], coords[1]);
           assert_false(video.paused);
diff --git a/third_party/WebKit/LayoutTests/media/media-controls.js b/third_party/WebKit/LayoutTests/media/media-controls.js
index d0504e9..083af60 100644
--- a/third_party/WebKit/LayoutTests/media/media-controls.js
+++ b/third_party/WebKit/LayoutTests/media/media-controls.js
@@ -287,13 +287,6 @@
     return mediaControlsButton(videoElement, 'play-button');
 }
 
-function enabledPlayButton(videoElement) {
-  if (internals.runtimeFlags.mediaControlsOverlayPlayButtonEnabled) {
-    return mediaControlsOverlayPlayButton(videoElement);
-  }
-  return playButton(videoElement);
-}
-
 function muteButton(videoElement) {
     return mediaControlsButton(videoElement, 'mute-button');
 }
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-always-visible-when-control-hovered.html b/third_party/WebKit/LayoutTests/media/video-controls-always-visible-when-control-hovered.html
index 0eb24f7..dded11d1 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-always-visible-when-control-hovered.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-always-visible-when-control-hovered.html
@@ -13,7 +13,7 @@
         assert_true(video.paused);
 
         // Click the play button.
-        var playCoords = elementCoordinates(enabledPlayButton(video));
+        var playCoords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         eventSender.mouseMoveTo(playCoords[0], playCoords[1]);
         eventSender.mouseDown();
         eventSender.mouseUp();
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-auto-hide-after-play-by-touch.html b/third_party/WebKit/LayoutTests/media/video-controls-auto-hide-after-play-by-touch.html
index 4650405..9760781 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-auto-hide-after-play-by-touch.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-auto-hide-after-play-by-touch.html
@@ -14,7 +14,7 @@
         assert_true(video.paused);
 
         // Click the play button.
-        var playCoords = elementCoordinates(enabledPlayButton(video));
+        var playCoords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         var clickX = playCoords[0];
         var clickY = playCoords[1];
         eventSender.gestureTap(clickX, clickY);
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-hide-after-touch-on-control.html b/third_party/WebKit/LayoutTests/media/video-controls-hide-after-touch-on-control.html
index 5809fa9..a838e2e 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-hide-after-touch-on-control.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-hide-after-touch-on-control.html
@@ -12,7 +12,7 @@
         assert_true(video.paused);
 
         // Tap the play button
-        var coords = elementCoordinates(enabledPlayButton(video));
+        var coords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         eventSender.gestureTapDown(coords[0], coords[1]);
         eventSender.gestureShowPress(coords[0], coords[1]);
         eventSender.gestureTap(coords[0], coords[1]);
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-hide-on-move-outside-controls.html b/third_party/WebKit/LayoutTests/media/video-controls-hide-on-move-outside-controls.html
index 8e3c19c..fecb0dd 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-hide-on-move-outside-controls.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-hide-on-move-outside-controls.html
@@ -12,7 +12,7 @@
         assert_true(video.paused);
 
         // Click the play button.
-        var coords = elementCoordinates(enabledPlayButton(video));
+        var coords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         eventSender.mouseMoveTo(coords[0], coords[1]);
         eventSender.mouseDown();
         eventSender.mouseUp();
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-transformed.html b/third_party/WebKit/LayoutTests/media/video-controls-transformed.html
index 1ee7be9..4b4d86fa 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-transformed.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-transformed.html
@@ -17,7 +17,7 @@
 
     video.oncanplaythrough = t.step_func_done(function() {
         // Find the play button and click the middle of its bounding box.
-        var playCoords = elementCoordinates(enabledPlayButton(video));
+        var playCoords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         eventSender.mouseMoveTo(playCoords[0], playCoords[1]);
         eventSender.mouseDown();
         eventSender.mouseUp();
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-mouse-after-touch.html b/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-mouse-after-touch.html
index 55c83be..97ac8e4 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-mouse-after-touch.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-mouse-after-touch.html
@@ -12,7 +12,7 @@
         assert_true(video.paused);
 
         // Tap (touch input) the play button.
-        var coords = elementCoordinates(enabledPlayButton(video));
+        var coords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         eventSender.gestureTapDown(coords[0], coords[1]);
         eventSender.gestureShowPress(coords[0], coords[1]);
         eventSender.gestureTap(coords[0], coords[1]);
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-touch-after-mouse.html b/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-touch-after-mouse.html
index 5121a93..f389cd0 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-touch-after-mouse.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-visibility-multimodal-touch-after-mouse.html
@@ -12,7 +12,7 @@
         assert_true(video.paused);
 
         // Hover the control with the mouse.
-        var coords = elementCoordinates(enabledPlayButton(video));
+        var coords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         eventSender.mouseMoveTo(coords[0], coords[1]);
 
         // And then tap (touch input) the play button.
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-zoomed.html b/third_party/WebKit/LayoutTests/media/video-controls-zoomed.html
index 04b9cc1..07f985b 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-zoomed.html
+++ b/third_party/WebKit/LayoutTests/media/video-controls-zoomed.html
@@ -22,7 +22,7 @@
             });
 
             // Find the play button and click the middle of its bounding box.
-            var playCoords = elementCoordinates(enabledPlayButton(video));
+            var playCoords = mediaControlsButtonCoordinates(video, "overlay-play-button");
 
             eventSender.mouseMoveTo(playCoords[0] * 1.5, playCoords[1] * 1.5);
             eventSender.mouseDown();
diff --git a/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture.html b/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture.html
index 2667aef..136274c6 100644
--- a/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture.html
+++ b/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture.html
@@ -19,7 +19,7 @@
 
         // User gesture initiated.
         userGestureInitiated = true;
-        var playCoords = elementCoordinates(enabledPlayButton(video));
+        var playCoords = mediaControlsButtonCoordinates(video, "overlay-play-button");
         eventSender.mouseMoveTo(playCoords[0], playCoords[1]);
         eventSender.mouseDown();
         eventSender.mouseUp();
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt
index e2b1cf40..a0c1265 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt
@@ -36,6 +36,22 @@
       "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
       "position": [8, 8],
       "bounds": [320, 240]
+    },
+    {
+      "name": "LayoutFlexibleBox DIV",
+      "position": [8, 8],
+      "bounds": [320, 240]
+    },
+    {
+      "name": "Child Containment Layer",
+      "position": [8, 8],
+      "bounds": [320, 240],
+      "drawsContent": false
+    },
+    {
+      "name": "LayoutButton (positioned) INPUT",
+      "position": [118, 66],
+      "bounds": [100, 100]
     }
   ]
 }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-controls-layer-creation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-controls-layer-creation-expected.png
index 4f5be9b..b6aaaf4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-controls-layer-creation-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-controls-layer-creation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png
index 8d98b38..dd431b4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.png
index af2d071b..44d9038 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.txt
index 2195cd9..07d397e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-after-reload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,212) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-layout-direction-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls-layout-direction-expected.png
index 8307e65..3af4d8b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-layout-direction-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.png
index 58856e2..f4562b3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.txt
index 32e696c..14b3278f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-strict-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,220) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.png
index ae1db3b4..89a5a0e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.txt
index a46b3d6..5d39a85 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (18,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (128,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (18,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 66x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 66x16
-        text run at (0,16) width 66: "/ 0:06"
-    LayoutBlockFlow {DIV} at (146,48) size 78x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 66x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 66x16
+        text run at (0,14) width 66: "/ 0:06"
+    LayoutBlockFlow {DIV} at (114,48) size 110x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (242,212) size 0x48 transparent
@@ -65,16 +68,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,452) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.png
index 2948071..353a2ce8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.txt
index f039fd4..22b3e5e6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-styling-strict-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,220) size 0x48 transparent
@@ -65,16 +68,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (332,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (442,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (332,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (556,220) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.png
index 0f254c8..d8fd7cb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.txt
index 1ece823..119340a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls-without-preload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,212) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/lazy-loaded-style-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls/lazy-loaded-style-expected.txt
index a005ba0..9c7d82f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/lazy-loaded-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/lazy-loaded-style-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x300
 layer at (8,8) size 400x300
   LayoutFlexibleBox {DIV} at (0,0) size 400x300
+layer at (151,89) size 115x115
+  LayoutButton (positioned) {INPUT} at (142.50,80.50) size 115x115
+    LayoutBlockFlow (anonymous) at (20,20) size 75x75
+      LayoutBlockFlow {DIV} at (0,0) size 75x75 [bgcolor=#FFFFFFE6]
 layer at (8,236) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,228) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (304,0) size 48x48
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,236) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index 120b231..7744a07 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
index 5bac4a4..362a1479 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
index 4341c83..7744a07 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.txt
index 5bac4a4..362a1479 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
index 78014c8..3aaa55c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt
index c2c340d..a6e883e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -67,16 +70,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,297) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,355) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,465) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -114,16 +120,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,600) size 100x100 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,710) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.png
index 138bbbf50..1887e224 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.txt
index 0e9e2c0..3e0bffd1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-clone-expected.txt
@@ -42,12 +42,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,104) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#9D968E]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,129) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,129) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#9D968E]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,129) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,129) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,129) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,129) size 0x4
@@ -81,12 +82,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,259) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#9D968E]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,284) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,284) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#9D968E]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,284) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,284) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,284) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,284) size 0x4
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.png
index a9868aa..3b15efd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.txt
index 0f8ed2e3..250c2ab 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/media-controls-grey-scrubber-expected.txt
@@ -13,13 +13,16 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (8,8) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (114,27) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+      LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (8,86) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (76,48) size 128x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (44,48) size 160x0
 layer at (212,86) size 48x48 transparent
   LayoutButton {INPUT} at (204,0) size 48x48 [color=#808080]
 layer at (260,86) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.png
index 6f06198..d186f610 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt
index 49823c2..63195ebd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,212) size 0x48 transparent
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,452) size 0x48 transparent
@@ -112,16 +118,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,582) size 100x100 backgroundClip at (118,582) size 100x18 clip at (118,582) size 100x18
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,692) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,692) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.png
index 3368e343..32c2e15 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.txt
index fd4da0c..1e6ca8e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-display-toggle-expected.txt
@@ -16,16 +16,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,28) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,86) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,196) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,196) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.png
index 8e2e3c1..12d0f5f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.txt
index 1b9541c5..0da22bb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-empty-source-expected.txt
@@ -17,14 +17,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (9,45) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (115,64) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+layer at (135,84) size 48x48 transparent
+  LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (9,123) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (76,48) size 80x0
-layer at (9,123) size 48x48 transparent
-  LayoutButton {INPUT} at (0,0) size 48x48 [color=#808080]
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (44,48) size 112x0
 layer at (165,123) size 48x48 transparent
   LayoutButton {INPUT} at (156,0) size 48x48 [color=#808080]
 layer at (213,123) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.png
index 3072ab0b..1d95d1b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.txt
index 6601fee6..d067b18 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-no-audio-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (8,44) size 352x288
   LayoutFlexibleBox {DIV} at (0,0) size 352x288
+layer at (128,120) size 112x112
+  LayoutButton (positioned) {INPUT} at (120,76) size 112x112
+    LayoutBlockFlow (anonymous) at (20,20) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
 layer at (8,260) size 352x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,216) size 352x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 140x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 172x0
     LayoutButton {INPUT} at (304,0) size 48x48
 layer at (264,260) size 48x48 transparent
   LayoutButton {INPUT} at (256,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png
index 0d30c06..f4b0048 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt
index be34eb7f..b75f1d0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt
@@ -15,22 +15,33 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (57,85) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (57,157) size 240x72
+layer at (111,91) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (57,157) size 240x72 scrollWidth 258
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (225,157) size 0x72 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#9D968E]
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+layer at (171,157) size 0x72 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#9D968E]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (225,190) size 18x6
+layer at (171,190) size 18x6
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (225,190) size 18x6 scrollWidth 27
+layer at (171,190) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (225,190) size 0x6
+layer at (171,190) size 0x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (225,190) size 27x6 backgroundClip at (225,190) size 18x6 clip at (225,190) size 18x6
+layer at (171,190) size 27x6 backgroundClip at (171,190) size 18x6 clip at (171,190) size 18x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (57,229) size 240x36
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#9D968E]
@@ -54,22 +65,33 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (43,291) size 268x218 clip at (43,291) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (49,361) size 249x113 clip at (49,361) size 240x72
+layer at (104,306) size 153x153 clip at (104,306) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (49,361) size 249x113 clip at (49,361) size 240x72 scrollWidth 258
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (215,391) size 12x71 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#9D968E]
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+layer at (162,381) size 12x71 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#9D968E]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (221,423) size 18x9
+layer at (167,414) size 19x9
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (221,423) size 18x9 clip at (221,423) size 18x6 scrollWidth 27
+layer at (167,414) size 19x9 clip at (167,414) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (221,423) size 1x6
+layer at (167,414) size 2x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (221,423) size 27x11 backgroundClip at (221,423) size 18x9 clip at (221,423) size 18x9
+layer at (167,414) size 28x10 backgroundClip at (167,414) size 19x9 clip at (167,414) size 19x9
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (43,432) size 243x77
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#9D968E]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png
index 8aedabe..ca51ff90 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png
index ef81892..e16ffc5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-overlay-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-overlay-scroll-expected.txt
new file mode 100644
index 0000000..c018a97
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-overlay-scroll-expected.txt
@@ -0,0 +1,50 @@
+EVENT(fullscreenchange)
+END OF TEST
+{
+  "layers": [
+    {
+      "name": "LayoutVideo (positioned) VIDEO id='video'",
+      "bounds": [800, 600],
+      "drawsContent": false
+    },
+    {
+      "name": "LayoutFlexibleBox (relative positioned) DIV class='phase-pre-ready state-no-source use-default-poster sizing-medium'",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "backgroundColor": "#333333"
+    },
+    {
+      "name": "LayoutBlockFlow (positioned) DIV",
+      "bounds": [800, 600],
+      "drawsContent": false
+    },
+    {
+      "name": "LayoutFlexibleBox DIV",
+      "bounds": [800, 600]
+    },
+    {
+      "name": "Child Containment Layer",
+      "bounds": [800, 600],
+      "drawsContent": false
+    },
+    {
+      "name": "LayoutButton (positioned) INPUT",
+      "position": [335, 223],
+      "bounds": [130, 130]
+    },
+    {
+      "name": "Ancestor Clipping Layer",
+      "position": [335, 223],
+      "bounds": [130, 130],
+      "drawsContent": false
+    },
+    {
+      "name": "LayoutBlockFlow DIV",
+      "position": [336, 224],
+      "bounds": [128, 128],
+      "opacity": 0.300000011920929,
+      "backgroundColor": "#FFFFFFE6"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png
index 8aedabe..ca51ff90 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/lazy-loaded-style-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/lazy-loaded-style-expected.txt
index a005ba0..9c7d82f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/lazy-loaded-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/lazy-loaded-style-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x300
 layer at (8,8) size 400x300
   LayoutFlexibleBox {DIV} at (0,0) size 400x300
+layer at (151,89) size 115x115
+  LayoutButton (positioned) {INPUT} at (142.50,80.50) size 115x115
+    LayoutBlockFlow (anonymous) at (20,20) size 75x75
+      LayoutBlockFlow {DIV} at (0,0) size 75x75 [bgcolor=#FFFFFFE6]
 layer at (8,236) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,228) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (304,0) size 48x48
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,236) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index 120b231..7744a07 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
index 5bac4a4..362a1479 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
index 4341c83..7744a07 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.txt
index 5bac4a4..362a1479 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png
index 78014c8..3aaa55c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt
index c2c340d..a6e883e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -67,16 +70,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,297) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,355) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,465) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -114,16 +120,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,600) size 100x100 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,710) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.png
index 8c2df1c..4c6ac2f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.txt
index 5a9b399..b61bba8e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-after-reload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-layout-direction-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-layout-direction-expected.png
index 8307e65..3af4d8b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-layout-direction-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.png
index 45b8be89..4e3bc5b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.txt
index 8147bf17..71f1589 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-strict-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.png
index 744888a..05df64de 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.txt
index 54b6ba8..4006d6d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (18,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (128,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (18,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 66x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 66x16
-        text run at (0,16) width 66: "/ 0:06"
-    LayoutBlockFlow {DIV} at (146,48) size 30x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 66x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 66x16
+        text run at (0,14) width 66: "/ 0:06"
+    LayoutBlockFlow {DIV} at (114,48) size 62x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.png
index e4574ee..28f4432 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
index 2dbdf17..87f4643 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (332,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (442,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (332,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.png
index 43d1d77..d1b1798d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.txt
index fbe4340..73d2da6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls-without-preload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.png
index 78014c8..3aaa55c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt
index c2c340d..a6e883e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -67,16 +70,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,297) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,355) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,465) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -114,16 +120,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,600) size 100x100 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,710) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.png
index 138bbbf50..1887e224 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.txt
index 0e9e2c0..3e0bffd1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-clone-expected.txt
@@ -42,12 +42,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,104) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#9D968E]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,129) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,129) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#9D968E]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,129) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,129) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,129) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,129) size 0x4
@@ -81,12 +82,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,259) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#9D968E]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,284) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,284) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#9D968E]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,284) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,284) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,284) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,284) size 0x4
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png
index a9868aa..3b15efd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.txt
index 0f8ed2e3..250c2ab 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.txt
@@ -13,13 +13,16 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (8,8) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (114,27) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+      LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (8,86) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (76,48) size 128x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (44,48) size 160x0
 layer at (212,86) size 48x48 transparent
   LayoutButton {INPUT} at (204,0) size 48x48 [color=#808080]
 layer at (260,86) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.png
index 51f69271..ba6b2a0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
index 0b2b901..a9b0006 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -67,16 +70,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -114,16 +120,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,582) size 100x100 backgroundClip at (118,582) size 100x18 clip at (118,582) size 100x18
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,692) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.png
index d6e30d2..66c0d6f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.txt
index 42ebcb0..ec3ccd9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-display-toggle-expected.txt
@@ -16,16 +16,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,28) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,86) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,196) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.png
index 8e2e3c1..12d0f5f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.txt
index 1b9541c5..0da22bb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-empty-source-expected.txt
@@ -17,14 +17,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (9,45) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (115,64) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+layer at (135,84) size 48x48 transparent
+  LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (9,123) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (76,48) size 80x0
-layer at (9,123) size 48x48 transparent
-  LayoutButton {INPUT} at (0,0) size 48x48 [color=#808080]
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (44,48) size 112x0
 layer at (165,123) size 48x48 transparent
   LayoutButton {INPUT} at (156,0) size 48x48 [color=#808080]
 layer at (213,123) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.png
index bb9aa8b3..bc09186 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.txt
index ab203036..372a8d1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-no-audio-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (8,44) size 352x288
   LayoutFlexibleBox {DIV} at (0,0) size 352x288
+layer at (128,120) size 112x112
+  LayoutButton (positioned) {INPUT} at (120,76) size 112x112
+    LayoutBlockFlow (anonymous) at (20,20) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
 layer at (8,260) size 352x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,216) size 352x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 92x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 124x0
     LayoutButton {INPUT} at (256,0) size 48x48
     LayoutButton {INPUT} at (304,0) size 48x48
 layer at (216,260) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.png
index 6201165..1e845cb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
index be34eb7f..7bc22b6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
@@ -15,22 +15,34 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (57,85) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (57,157) size 240x72
+layer at (111,91) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (57,157) size 240x72 scrollWidth 330
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (225,157) size 0x72 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#9D968E]
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+    LayoutButton {INPUT} at (258,0) size 72x72
+layer at (171,157) size 0x72 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#9D968E]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (225,190) size 18x6
+layer at (171,190) size 18x6
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (225,190) size 18x6 scrollWidth 27
+layer at (171,190) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (225,190) size 0x6
+layer at (171,190) size 0x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (225,190) size 27x6 backgroundClip at (225,190) size 18x6 clip at (225,190) size 18x6
+layer at (171,190) size 27x6 backgroundClip at (171,190) size 18x6 clip at (171,190) size 18x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (57,229) size 240x36
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#9D968E]
@@ -54,22 +66,34 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (43,291) size 268x218 clip at (43,291) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (49,361) size 249x113 clip at (49,361) size 240x72
+layer at (104,306) size 153x153 clip at (104,306) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (49,361) size 249x113 clip at (49,361) size 240x72 scrollWidth 330
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (215,391) size 12x71 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#9D968E]
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+    LayoutButton {INPUT} at (258,0) size 72x72
+layer at (162,381) size 12x71 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#9D968E]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (221,423) size 18x9
+layer at (167,414) size 19x9
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (221,423) size 18x9 clip at (221,423) size 18x6 scrollWidth 27
+layer at (167,414) size 19x9 clip at (167,414) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (221,423) size 1x6
+layer at (167,414) size 2x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (221,423) size 27x11 backgroundClip at (221,423) size 18x9 clip at (221,423) size 18x9
+layer at (167,414) size 28x10 backgroundClip at (167,414) size 19x9 clip at (167,414) size 19x9
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (43,432) size 243x77
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#9D968E]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/media/video-zoom-controls-expected.png
new file mode 100644
index 0000000..f786942
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/video-surface-layer/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/video-surface-layer/media/video-zoom-controls-expected.png
new file mode 100644
index 0000000..a28f8fab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/video-surface-layer/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/compositing/video/video-controls-layer-creation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/compositing/video/video-controls-layer-creation-expected.png
index e7d3ff7..eeb3ddc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/compositing/video/video-controls-layer-creation-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/compositing/video/video-controls-layer-creation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/fast/overflow/overflow-of-video-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/fast/overflow/overflow-of-video-outline-expected.png
index c59ff35..1b24818 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-after-reload-expected.png
index 86276bb..9117e226 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-layout-direction-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-layout-direction-expected.png
index ee415f0..ae76971 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-layout-direction-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-strict-expected.png
index 83d0ebfa..58207902 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-expected.png
index df2a7f2a..60b94b8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-strict-expected.png
index ccf39e5..33690f9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-without-preload-expected.png
index 4a55d10..e73e31d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index f5398dc8..20644d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-expected.png
index c1a23f7d..20644d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-clone-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-clone-expected.png
index b907545..8cc5110 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-clone-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-grey-scrubber-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-grey-scrubber-expected.png
index 69170764..5dd371d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-controls-rendering-expected.png
index 7b7848d..004affd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-display-toggle-expected.png
index 897023e..05eac13e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-empty-source-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-empty-source-expected.png
index 2550ff8..62ae15e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-empty-source-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-no-audio-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-no-audio-expected.png
index 2557d3e..1bc397b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-no-audio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-zoom-controls-expected.png
index 0462bbf..336cd24 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index f5398dc8..20644d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
index c1a23f7d..20644d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-after-reload-expected.png
index f23c766..1eaa335 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-layout-direction-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-layout-direction-expected.png
index ee415f0..ae76971 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-layout-direction-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-strict-expected.png
index 918138b..08598ecd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-expected.png
index 2a62ad5..587cdf71 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-strict-expected.png
index 14c39a3..081f1fe0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-without-preload-expected.png
index e43fdb7..c62e66f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-clone-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-clone-expected.png
index b907545..8cc5110 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-clone-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png
index 69170764..5dd371d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-controls-rendering-expected.png
index ce354585f..8e42b2b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-display-toggle-expected.png
index bd14330..c9f86b4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-empty-source-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-empty-source-expected.png
index 2550ff8..62ae15e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-empty-source-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-zoom-controls-expected.png
index 947ca89..557f42884 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/virtual/video-surface-layer/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-controls-layer-creation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-controls-layer-creation-expected.png
index 6f1d074..f2001dc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-controls-layer-creation-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-controls-layer-creation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png
index 676354f2..c8631bd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.png
index e7bd7cc..05a9d16 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.txt
index ccc5608..234ca03 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-after-reload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,210) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-layout-direction-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls-layout-direction-expected.png
index 41f88b6e..0862e85 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-layout-direction-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.png
index b84d92af..2df02901 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.txt
index 84d2af2..dc9fd62 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-strict-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,50) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,108) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,218) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,218) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.png
index 7804a7c..8fd38ecad 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.txt
index 7608023..6cd702a6 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (18,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (128,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (18,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 65.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 66x16
-        text run at (0,16) width 66: "/ 0:06"
-    LayoutBlockFlow {DIV} at (144.28,48) size 79.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 65.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 66x16
+        text run at (0,14) width 66: "/ 0:06"
+    LayoutBlockFlow {DIV} at (112.28,48) size 111.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (242,210) size 0x48 transparent
@@ -65,16 +68,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,282) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,340) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,450) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,450) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.png
index 0d46dcb..0a2cbe62 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.txt
index 88e6c08..cc003e6 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-styling-strict-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,50) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,108) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,218) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,218) size 0x48 transparent
@@ -65,16 +68,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (332,50) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (442,108) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (332,218) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (556,218) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.png
index d32f00c..695be562 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.txt
index 5ee8ca90..c7910e7 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls-without-preload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,210) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/lazy-loaded-style-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls/lazy-loaded-style-expected.txt
index 7702252..0239b40 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/lazy-loaded-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/lazy-loaded-style-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x300
 layer at (8,8) size 400x300
   LayoutFlexibleBox {DIV} at (0,0) size 400x300
+layer at (151,89) size 115x115
+  LayoutButton (positioned) {INPUT} at (142.50,80.50) size 115x115
+    LayoutBlockFlow (anonymous) at (20,20) size 75x75
+      LayoutBlockFlow {DIV} at (0,0) size 75x75 [bgcolor=#FFFFFFE6]
 layer at (8,236) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,228) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 189.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 221.72x0
     LayoutButton {INPUT} at (304,0) size 48x48
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,236) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index d3de7e9..93e28e1 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
index 1459cbb4..df4fb91 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (114.28,48) size 189.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (82.28,48) size 221.72x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#7F7F7F]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png
index 7dc5dcb..93e28e1 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.txt
index 1459cbb4..df4fb91 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (114.28,48) size 189.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (82.28,48) size 221.72x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#7F7F7F]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.png
index 6fae837..e08b5ba 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.txt
index 9ba2571..5afb9bd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-clone-expected.txt
@@ -42,12 +42,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,104) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#909090]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,129) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,129) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#909090]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,129) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,129) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,129) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,129) size 0x4
@@ -81,12 +82,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,258) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#909090]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,283) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,283) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#909090]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,283) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,283) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,283) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,283) size 0x4
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.png
index 5cc4966..467fb97 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.txt
index e3ee427..4b6994a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/media-controls-grey-scrubber-expected.txt
@@ -13,13 +13,16 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (8,8) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (114,27) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+      LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (8,86) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (75.25,48) size 128.75x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (43.25,48) size 160.75x0
 layer at (212,86) size 48x48 transparent
   LayoutButton {INPUT} at (204,0) size 48x48 [color=#7F7F7F]
 layer at (260,86) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.png
index b9436e4..a96a444 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt
index 3330a368..9b2361e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,210) size 0x48 transparent
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,282) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,340) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,450) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,450) size 0x48 transparent
@@ -112,16 +118,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,580) size 100x100 backgroundClip at (118,580) size 100x20 clip at (118,580) size 100x20
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,690) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,690) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.png
index 3795abc..0eb1c2b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.txt
index 3bf0b40..31c9da1f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-display-toggle-expected.txt
@@ -16,16 +16,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,26) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,84) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,194) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 109.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 141.72x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,194) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.png
index 1d9f54a..302ad884 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.txt
index b474ca6e..b3469148 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-empty-source-expected.txt
@@ -17,14 +17,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (9,43) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (115,62) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+layer at (135,82) size 48x48 transparent
+  LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (9,121) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (75.25,48) size 80.75x0
-layer at (9,121) size 48x48 transparent
-  LayoutButton {INPUT} at (0,0) size 48x48 [color=#7F7F7F]
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (43.25,48) size 112.75x0
 layer at (165,121) size 48x48 transparent
   LayoutButton {INPUT} at (156,0) size 48x48 [color=#7F7F7F]
 layer at (213,121) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.png
index 2443723..56ec42d3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.txt
index 66636d6..bb05e7a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-no-audio-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (8,42) size 352x288
   LayoutFlexibleBox {DIV} at (0,0) size 352x288
+layer at (128,118) size 112x112
+  LayoutButton (positioned) {INPUT} at (120,76) size 112x112
+    LayoutBlockFlow (anonymous) at (20,20) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
 layer at (8,258) size 352x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,216) size 352x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (114.28,48) size 141.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (82.28,48) size 173.72x0
     LayoutButton {INPUT} at (304,0) size 48x48
 layer at (264,258) size 48x48 transparent
   LayoutButton {INPUT} at (256,0) size 48x48 [color=#7F7F7F]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.png
index 65ca7c7e..8ca4730 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt
index 51e8b9b..368eaff 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt
@@ -15,22 +15,33 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (57,85) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (57,157) size 240x72
+layer at (111,91) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (57,157) size 240x72 scrollWidth 256
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (225,157) size 0x72 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#909090]
+    LayoutBlockFlow {DIV} at (24,6) size 40.88x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x24
+        text run at (0,21) width 41: "0:00"
+    LayoutBlockFlow {DIV} at (70.88,-60) size 40.88x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 41: "0:06"
+    LayoutBlockFlow {DIV} at (111.75,72) size 0x0
+    LayoutButton {INPUT} at (111.75,0) size 72x72
+    LayoutButton {INPUT} at (183.75,0) size 72x72
+layer at (169,157) size 0x72 transparent
+  LayoutSlider {INPUT} at (111.75,0) size 0x72 [color=#909090]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (225,190) size 18x6
+layer at (169,190) size 18x6
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (225,190) size 18x6 scrollWidth 27
+layer at (169,190) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (225,190) size 0x6
+layer at (169,190) size 0x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (225,190) size 27x6 backgroundClip at (225,190) size 18x6 clip at (225,190) size 18x6
+layer at (169,190) size 27x6 backgroundClip at (169,190) size 18x6 clip at (169,190) size 18x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (57,229) size 240x36
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#909090]
@@ -54,22 +65,33 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (43,291) size 268x218 clip at (43,291) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (49,361) size 249x113 clip at (49,361) size 240x72
+layer at (104,306) size 153x153 clip at (104,306) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (49,361) size 249x113 clip at (49,361) size 240x72 scrollWidth 256
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (215,391) size 12x71 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#909090]
+    LayoutBlockFlow {DIV} at (24,6) size 40.88x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x24
+        text run at (0,21) width 41: "0:00"
+    LayoutBlockFlow {DIV} at (70.88,-60) size 40.88x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 41: "0:06"
+    LayoutBlockFlow {DIV} at (111.75,72) size 0x0
+    LayoutButton {INPUT} at (111.75,0) size 72x72
+    LayoutButton {INPUT} at (183.75,0) size 72x72
+layer at (159,381) size 13x71 transparent
+  LayoutSlider {INPUT} at (111.75,0) size 0x72 [color=#909090]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (221,423) size 18x9
+layer at (165,413) size 19x9
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (221,423) size 18x9 clip at (221,423) size 18x6 scrollWidth 27
+layer at (165,413) size 19x9 clip at (165,413) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (221,423) size 1x6
+layer at (165,413) size 1x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (221,423) size 27x11 backgroundClip at (221,423) size 18x9 clip at (221,423) size 18x9
+layer at (165,413) size 28x11 backgroundClip at (165,413) size 19x9 clip at (165,413) size 19x9
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (43,432) size 243x77
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#909090]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.png
index 3166d16..ff76c075 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.txt
index ec38389..7313fec 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-after-reload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.png
index 1232bba..6df2a7b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.txt
index a6b0496..ca359621 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-strict-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,50) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,108) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,218) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.png
index 7087027..a6f86d9b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.txt
index d23718f..c4383e6 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (18,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (128,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (18,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 65.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 66x16
-        text run at (0,16) width 66: "/ 0:06"
-    LayoutBlockFlow {DIV} at (144.28,48) size 31.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 65.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 66x16
+        text run at (0,14) width 66: "/ 0:06"
+    LayoutBlockFlow {DIV} at (112.28,48) size 63.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,282) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,340) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,450) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.png
index c74ab967..19624bc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
index 960af0f..12d4853 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,50) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,108) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,218) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (332,50) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (442,108) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (332,218) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.png
index 1d20bca..7ec320d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.txt
index ebebdde..3a95ed9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/controls-without-preload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.png
index 5c4be3a..04e720b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
index fe171ae..15b32fd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,42) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,100) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,210) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -67,16 +70,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,282) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,340) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,450) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -114,16 +120,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,580) size 100x100 backgroundClip at (118,580) size 100x20 clip at (118,580) size 100x20
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,690) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.png
index 61bab506..389d207 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.txt
index 0b7a2ad..9d4ff732 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-display-toggle-expected.txt
@@ -16,16 +16,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,26) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,84) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,194) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 27.25x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (79.25,0) size 35.03x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (114.28,48) size 61.72x0
+    LayoutBlockFlow {DIV} at (16,4) size 27.25x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (47.25,4) size 35.03x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (82.28,48) size 93.72x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.png
index 058e324..6494d7f8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
new file mode 100644
index 0000000..de9743c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
@@ -0,0 +1,110 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  LayoutBlockFlow {HTML} at (0,0) size 800x600
+    LayoutBlockFlow {BODY} at (12,12) size 776x543
+      LayoutBlockFlow {P} at (0,0) size 776x28
+        LayoutText {#text} at (0,0) size 278x28
+          text run at (0,0) width 278: "Zoomed video with controls."
+layer at (57,85) size 240x180
+  LayoutVideo {VIDEO} at (45,73) size 240x180
+layer at (57,85) size 240x180
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180
+    LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (57,85) size 240x180
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
+layer at (57,85) size 240x180
+  LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (111,91) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (57,157) size 240x72 scrollWidth 328
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
+    LayoutBlockFlow {DIV} at (24,6) size 40.88x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x24
+        text run at (0,21) width 41: "0:00"
+    LayoutBlockFlow {DIV} at (70.88,-60) size 40.88x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 41: "0:06"
+    LayoutBlockFlow {DIV} at (111.75,72) size 0x0
+    LayoutButton {INPUT} at (111.75,0) size 72x72
+    LayoutButton {INPUT} at (183.75,0) size 72x72
+    LayoutButton {INPUT} at (255.75,0) size 72x72
+layer at (169,157) size 0x72 transparent
+  LayoutSlider {INPUT} at (111.75,0) size 0x72 [color=#909090]
+    LayoutFlexibleBox {DIV} at (0,33) size 0x6
+layer at (169,190) size 18x6
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
+    LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (169,190) size 18x6 scrollWidth 27
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
+layer at (169,190) size 0x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (169,190) size 27x6 backgroundClip at (169,190) size 18x6 clip at (169,190) size 18x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
+layer at (57,229) size 240x36
+  LayoutSlider {INPUT} at (0,144) size 240x36 [color=#909090]
+    LayoutFlexibleBox {DIV} at (24,0) size 192x6
+layer at (81,229) size 192x6
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D]
+layer at (81,223) size 18x18
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (81,229) size 192x6 scrollWidth 288
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6
+layer at (81,229) size 0x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (81,229) size 288x6 backgroundClip at (81,229) size 192x6 clip at (81,229) size 192x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
+layer at (57,310) size 240x180
+  LayoutVideo {VIDEO} at (45,298) size 240x180
+layer at (43,291) size 268x218
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180
+    LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (43,291) size 268x218
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
+layer at (43,291) size 268x218 clip at (43,291) size 240x180
+  LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (104,306) size 153x153 clip at (104,306) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (49,361) size 249x113 clip at (49,361) size 240x72 scrollWidth 328
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
+    LayoutBlockFlow {DIV} at (24,6) size 40.88x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x24
+        text run at (0,21) width 41: "0:00"
+    LayoutBlockFlow {DIV} at (70.88,-60) size 40.88x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 41x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 41: "0:06"
+    LayoutBlockFlow {DIV} at (111.75,72) size 0x0
+    LayoutButton {INPUT} at (111.75,0) size 72x72
+    LayoutButton {INPUT} at (183.75,0) size 72x72
+    LayoutButton {INPUT} at (255.75,0) size 72x72
+layer at (159,381) size 13x71 transparent
+  LayoutSlider {INPUT} at (111.75,0) size 0x72 [color=#909090]
+    LayoutFlexibleBox {DIV} at (0,33) size 0x6
+layer at (165,413) size 19x9
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
+    LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (165,413) size 19x9 clip at (165,413) size 18x6 scrollWidth 27
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
+layer at (165,413) size 1x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (165,413) size 28x11 backgroundClip at (165,413) size 19x9 clip at (165,413) size 19x9
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
+layer at (43,432) size 243x77
+  LayoutSlider {INPUT} at (0,144) size 240x36 [color=#909090]
+    LayoutFlexibleBox {DIV} at (24,0) size 192x6
+layer at (72,437) size 190x39
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D]
+layer at (71,431) size 21x20
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (72,437) size 190x39 clip at (72,437) size 190x6 scrollWidth 288
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6
+layer at (72,437) size 1x5
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (72,437) size 285x55 backgroundClip at (72,437) size 190x39 clip at (72,437) size 190x39
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-of-video-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-of-video-outline-expected.png
index 641dbb8a..358a2398 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.png
index ec294b5..cfab8461 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.txt
index 5f6dcd6..4afee15 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-after-reload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,212) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-layout-direction-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls-layout-direction-expected.png
index e3be6c2..efe7248 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-layout-direction-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.png
index d5f2e89b..f516aa4 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.txt
index 9152fb7..b918b54 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-strict-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,220) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.png
index 539cbac1..dd1ef6a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.txt
index 6c6cb89..2ef96fe 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (18,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (128,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (18,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 66x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 66x16
-        text run at (0,16) width 66: "/ 0:06"
-    LayoutBlockFlow {DIV} at (146,48) size 78x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 66x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 66x16
+        text run at (0,14) width 66: "/ 0:06"
+    LayoutBlockFlow {DIV} at (114,48) size 110x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (242,212) size 0x48 transparent
@@ -65,16 +68,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,452) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.png
index 870b219..2dfdfb8d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.txt
index 31bff01..b0a7e915 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-styling-strict-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,220) size 0x48 transparent
@@ -65,16 +68,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (332,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (442,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (332,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (556,220) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.png
index 73a3fa9..3ff9433 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.txt
index 8c3c8a6..f7fa29b7 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls-without-preload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,212) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/lazy-loaded-style-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls/lazy-loaded-style-expected.txt
index 6943382..45b6a1a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/lazy-loaded-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/lazy-loaded-style-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x300
 layer at (8,8) size 400x300
   LayoutFlexibleBox {DIV} at (0,0) size 400x300
+layer at (151,89) size 115x115
+  LayoutButton (positioned) {INPUT} at (142.50,80.50) size 115x115
+    LayoutBlockFlow (anonymous) at (20,20) size 75x75
+      LayoutBlockFlow {DIV} at (0,0) size 75x75 [bgcolor=#FFFFFFE6]
 layer at (8,236) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,228) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (304,0) size 48x48
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,236) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index 5acc521..0a14ccf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
index 4451555..b5f82f0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png
index b34f451..0a14ccf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.txt
index 4451555..b5f82f0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.txt
@@ -13,16 +13,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x327.27
 layer at (8,8) size 400x327
   LayoutFlexibleBox {DIV} at (0,0) size 400x327.27
+layer at (147,99) size 122x122
+  LayoutButton (positioned) {INPUT} at (139.13,90.75) size 121.75x121.75
+    LayoutBlockFlow (anonymous) at (20,20) size 81.75x81.75
+      LayoutBlockFlow {DIV} at (0,0) size 81.75x81.75 [bgcolor=#FFFFFFE6]
 layer at (8,263) size 400x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,255.27) size 400x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 188x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 220x0
     LayoutButton {INPUT} at (352,0) size 48x48
 layer at (312,263) size 48x48 transparent
   LayoutButton {INPUT} at (304,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.png
index 7f91881a..81bcf379 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.txt
index cbe76da8..6e9089f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-clone-expected.txt
@@ -42,12 +42,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,104) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#C4C4C4]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,129) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,129) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#C4C4C4]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,129) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,129) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,129) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,129) size 0x4
@@ -81,12 +82,13 @@
   LayoutFlexibleBox {DIV} at (0,0) size 300x54 [bgcolor=#F1F3F4]
 layer at (308,259) size 300x54 scrollHeight 55
   LayoutFlexibleBox {DIV} at (0,0) size 300x54
-    LayoutSlider {INPUT} at (10,-1) size 280x56 [color=#C4C4C4]
-      LayoutFlexibleBox {DIV} at (16,26) size 248x4
-layer at (334,284) size 248x4
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 248x4 [bgcolor=#00000033]
-layer at (334,284) size 248x4
-  LayoutBlockFlow (positioned) {DIV} at (0,0) size 248x4
+    LayoutSlider {INPUT} at (10,-1) size 248x56 [color=#C4C4C4]
+      LayoutFlexibleBox {DIV} at (16,26) size 216x4
+    LayoutButton {INPUT} at (258,11) size 32x32
+layer at (334,284) size 216x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 216x4 [bgcolor=#00000033]
+layer at (334,284) size 216x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 216x4
 layer at (334,284) size 0x4
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#000000DE]
 layer at (334,284) size 0x4
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.png
index 1596127..47562f8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.txt
index e62d1399..b414d9d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/media-controls-grey-scrubber-expected.txt
@@ -13,13 +13,16 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (8,8) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (114,27) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+      LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (8,86) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (76,48) size 128x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (44,48) size 160x0
 layer at (212,86) size 48x48 transparent
   LayoutButton {INPUT} at (204,0) size 48x48 [color=#808080]
 layer at (260,86) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.png
index 9cd5b09..c7df7308 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt
index e5811c9..8c638bf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,212) size 0x48 transparent
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,452) size 0x48 transparent
@@ -112,16 +118,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,582) size 100x100 backgroundClip at (118,582) size 100x18 clip at (118,582) size 100x18
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,692) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,692) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.png
index fbb8785..5d0e38e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.txt
index dffd5692..2a7de13 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-display-toggle-expected.txt
@@ -16,16 +16,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,28) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,86) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,196) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 108x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 140x0
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
 layer at (232,196) size 0x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.png
index c5e9eec..dc20421 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.txt
index 93785723..c426dc3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-empty-source-expected.txt
@@ -17,14 +17,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
 layer at (9,45) size 300x150
   LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (115,64) size 88x88
+  LayoutButton (positioned) {INPUT} at (106,19) size 88x88
+    LayoutBlockFlow (anonymous) at (20,20) size 48x48
+layer at (135,84) size 48x48 transparent
+  LayoutBlockFlow {DIV} at (0,0) size 48x48 [bgcolor=#FFFFFFE6]
 layer at (9,123) size 300x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,78) size 300x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (76,48) size 80x0
-layer at (9,123) size 48x48 transparent
-  LayoutButton {INPUT} at (0,0) size 48x48 [color=#808080]
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (44,48) size 112x0
 layer at (165,123) size 48x48 transparent
   LayoutButton {INPUT} at (156,0) size 48x48 [color=#808080]
 layer at (213,123) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.png
index 64235ca..5fc61f3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.txt
index 89f06c9..ac6e20a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-no-audio-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (8,44) size 352x288
   LayoutFlexibleBox {DIV} at (0,0) size 352x288
+layer at (128,120) size 112x112
+  LayoutButton (positioned) {INPUT} at (120,76) size 112x112
+    LayoutBlockFlow (anonymous) at (20,20) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
 layer at (8,260) size 352x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,216) size 352x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 140x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 172x0
     LayoutButton {INPUT} at (304,0) size 48x48
 layer at (264,260) size 48x48 transparent
   LayoutButton {INPUT} at (256,0) size 48x48 [color=#808080]
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.png
index f1043561d0..291b643 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt
index dae47559..98970df 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt
@@ -15,22 +15,33 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (57,85) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (57,157) size 240x72
+layer at (111,91) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (57,157) size 240x72 scrollWidth 258
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (225,157) size 0x72 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#C4C4C4]
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+layer at (171,157) size 0x72 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#C4C4C4]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (225,190) size 18x6
+layer at (171,190) size 18x6
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (225,190) size 18x6 scrollWidth 27
+layer at (171,190) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (225,190) size 0x6
+layer at (171,190) size 0x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (225,190) size 27x6 backgroundClip at (225,190) size 18x6 clip at (225,190) size 18x6
+layer at (171,190) size 27x6 backgroundClip at (171,190) size 18x6 clip at (171,190) size 18x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (57,229) size 240x36
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#C4C4C4]
@@ -54,22 +65,33 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
 layer at (43,291) size 268x218 clip at (43,291) size 240x180
   LayoutFlexibleBox {DIV} at (0,0) size 240x180
-layer at (49,361) size 249x113 clip at (49,361) size 240x72
+layer at (104,306) size 153x153 clip at (104,306) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (49,361) size 249x113 clip at (49,361) size 240x72 scrollWidth 258
   LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
-    LayoutButton {INPUT} at (0,0) size 72x72
-    LayoutBlockFlow {DIV} at (72,72) size 96x0
-    LayoutButton {INPUT} at (168,0) size 72x72
-layer at (215,391) size 12x71 transparent
-  LayoutSlider {INPUT} at (168,0) size 0x72 [color=#C4C4C4]
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+layer at (162,381) size 12x71 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#C4C4C4]
     LayoutFlexibleBox {DIV} at (0,33) size 0x6
-layer at (221,423) size 18x9
+layer at (167,414) size 19x9
   LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
     LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
-layer at (221,423) size 18x9 clip at (221,423) size 18x6 scrollWidth 27
+layer at (167,414) size 19x9 clip at (167,414) size 18x6 scrollWidth 27
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
-layer at (221,423) size 1x6
+layer at (167,414) size 2x6
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
-layer at (221,423) size 27x11 backgroundClip at (221,423) size 18x9 clip at (221,423) size 18x9
+layer at (167,414) size 28x10 backgroundClip at (167,414) size 19x9 clip at (167,414) size 19x9
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
 layer at (43,432) size 243x77
   LayoutSlider {INPUT} at (0,144) size 240x36 [color=#C4C4C4]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.png
index 54b8c22..09e9939 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.txt
index aa176f35..54d48a6b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-after-reload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.png
index c18b578..af5565f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.txt
index 2e6dd43..1bf1fb5 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-strict-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.png
index bd7c6c4..a800a55 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.txt
index eda6d2c1..76ff76fe 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (18,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (128,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (18,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 66x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 66x16
-        text run at (0,16) width 66: "/ 0:06"
-    LayoutBlockFlow {DIV} at (146,48) size 30x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 66x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 66x16
+        text run at (0,14) width 66: "/ 0:06"
+    LayoutBlockFlow {DIV} at (114,48) size 62x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.png
index 79086fa..23d7e83 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
index 5db283d..45bacc33 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-styling-strict-expected.txt
@@ -21,16 +21,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -66,16 +69,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (332,52) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (442,110) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (332,220) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.png
index b99686f5..276c9d6 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.txt
index 97e58fb..a4e2426 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/controls-without-preload-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.png
index 2008981..a967d269 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
index 13e2174f13..4ce55d8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
@@ -22,16 +22,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,44) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,102) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,212) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -67,16 +70,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,284) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,342) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,452) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
@@ -114,16 +120,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,582) size 100x100 backgroundClip at (118,582) size 100x18 clip at (118,582) size 100x18
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,692) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.png
index e000e22..af8c0cf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.txt
index 63bc16b..1c3d168 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-display-toggle-expected.txt
@@ -16,16 +16,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,28) size 320x240
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (118,86) size 100x100
+  LayoutButton (positioned) {INPUT} at (110,58) size 100x100
+    LayoutBlockFlow (anonymous) at (20,20) size 60x60
+      LayoutBlockFlow {DIV} at (0,0) size 60x60 [bgcolor=#FFFFFFE6]
 layer at (8,196) size 320x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,168) size 320x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:06"
-    LayoutBlockFlow {DIV} at (116,48) size 60x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:06"
+    LayoutBlockFlow {DIV} at (84,48) size 92x0
     LayoutButton {INPUT} at (176,0) size 48x48
     LayoutButton {INPUT} at (224,0) size 48x48
     LayoutButton {INPUT} at (272,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.png
index ffbabb6..568b112 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.txt
index a6a3eae4..99dfb36 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-no-audio-expected.txt
@@ -17,16 +17,19 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (8,44) size 352x288
   LayoutFlexibleBox {DIV} at (0,0) size 352x288
+layer at (128,120) size 112x112
+  LayoutButton (positioned) {INPUT} at (120,76) size 112x112
+    LayoutBlockFlow (anonymous) at (20,20) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
 layer at (8,260) size 352x48
   LayoutFlexibleBox (relative positioned) {DIV} at (0,216) size 352x48
-    LayoutButton {INPUT} at (0,0) size 48x48
-    LayoutBlockFlow {DIV} at (48,0) size 28x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 28x16
-        text run at (0,16) width 28: "0:00"
-    LayoutBlockFlow {DIV} at (80,0) size 36x48 [color=#FFFFFF]
-      LayoutText {#text} at (0,16) size 36x16
-        text run at (0,16) width 36: "/ 0:09"
-    LayoutBlockFlow {DIV} at (116,48) size 92x0
+    LayoutBlockFlow {DIV} at (16,4) size 28x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 28x16
+        text run at (0,14) width 28: "0:00"
+    LayoutBlockFlow {DIV} at (48,4) size 36x44 [color=#FFFFFF]
+      LayoutText {#text} at (0,14) size 36x16
+        text run at (0,14) width 36: "/ 0:09"
+    LayoutBlockFlow {DIV} at (84,48) size 124x0
     LayoutButton {INPUT} at (256,0) size 48x48
     LayoutButton {INPUT} at (304,0) size 48x48
 layer at (216,260) size 48x48 transparent
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.png
index b6d0785..a92b7e0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
new file mode 100644
index 0000000..dd0be87
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
@@ -0,0 +1,110 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  LayoutBlockFlow {HTML} at (0,0) size 800x600
+    LayoutBlockFlow {BODY} at (12,12) size 776x543
+      LayoutBlockFlow {P} at (0,0) size 776x28
+        LayoutText {#text} at (0,0) size 275x27
+          text run at (0,0) width 275: "Zoomed video with controls."
+layer at (57,85) size 240x180
+  LayoutVideo {VIDEO} at (45,73) size 240x180
+layer at (57,85) size 240x180
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180
+    LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (57,85) size 240x180
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
+layer at (57,85) size 240x180
+  LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (111,91) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (57,157) size 240x72 scrollWidth 330
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+    LayoutButton {INPUT} at (258,0) size 72x72
+layer at (171,157) size 0x72 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#C4C4C4]
+    LayoutFlexibleBox {DIV} at (0,33) size 0x6
+layer at (171,190) size 18x6
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
+    LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (171,190) size 18x6 scrollWidth 27
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
+layer at (171,190) size 0x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (171,190) size 27x6 backgroundClip at (171,190) size 18x6 clip at (171,190) size 18x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
+layer at (57,229) size 240x36
+  LayoutSlider {INPUT} at (0,144) size 240x36 [color=#C4C4C4]
+    LayoutFlexibleBox {DIV} at (24,0) size 192x6
+layer at (81,229) size 192x6
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D]
+layer at (81,223) size 18x18
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (81,229) size 192x6 scrollWidth 288
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6
+layer at (81,229) size 0x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (81,229) size 288x6 backgroundClip at (81,229) size 192x6 clip at (81,229) size 192x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
+layer at (57,310) size 240x180
+  LayoutVideo {VIDEO} at (45,298) size 240x180
+layer at (43,291) size 268x218
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180
+    LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (43,291) size 268x218
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180
+layer at (43,291) size 268x218 clip at (43,291) size 240x180
+  LayoutFlexibleBox {DIV} at (0,0) size 240x180
+layer at (104,306) size 153x153 clip at (104,306) size 132x132
+  LayoutButton (positioned) {INPUT} at (54,6) size 132x132
+    LayoutBlockFlow (anonymous) at (30,30) size 72x72
+      LayoutBlockFlow {DIV} at (0,0) size 72x72 [bgcolor=#FFFFFFE6]
+layer at (49,361) size 249x113 clip at (49,361) size 240x72 scrollWidth 330
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,72) size 240x72
+    LayoutBlockFlow {DIV} at (24,6) size 42x66 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x24
+        text run at (0,21) width 42: "0:00"
+    LayoutBlockFlow {DIV} at (72,-60) size 42x132 [color=#FFFFFF]
+      LayoutText {#text} at (0,21) size 42x90
+        text run at (0,21) width 6: "/"
+        text run at (0,87) width 42: "0:06"
+    LayoutBlockFlow {DIV} at (114,72) size 0x0
+    LayoutButton {INPUT} at (114,0) size 72x72
+    LayoutButton {INPUT} at (186,0) size 72x72
+    LayoutButton {INPUT} at (258,0) size 72x72
+layer at (162,381) size 12x71 transparent
+  LayoutSlider {INPUT} at (114,0) size 0x72 [color=#C4C4C4]
+    LayoutFlexibleBox {DIV} at (0,33) size 0x6
+layer at (167,414) size 19x9
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 18x6 [bgcolor=#FFFFFF4D]
+    LayoutBlockFlow {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (167,414) size 19x9 clip at (167,414) size 18x6 scrollWidth 27
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 18x6
+layer at (167,414) size 2x6
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (167,414) size 28x10 backgroundClip at (167,414) size 19x9 clip at (167,414) size 19x9
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 27x6 [bgcolor=#FFFFFF8A]
+layer at (43,432) size 243x77
+  LayoutSlider {INPUT} at (0,144) size 240x36 [color=#C4C4C4]
+    LayoutFlexibleBox {DIV} at (24,0) size 192x6
+layer at (72,437) size 190x39
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D]
+layer at (71,431) size 21x20
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF]
+layer at (72,437) size 190x39 clip at (72,437) size 190x6 scrollWidth 288
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6
+layer at (72,437) size 1x5
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF]
+layer at (72,437) size 285x55 backgroundClip at (72,437) size 190x39 clip at (72,437) size 190x39
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 9dda67e..a5cf355e 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -106,5 +106,10 @@
 
 const char kAutofillPreviewStyleExperimentColorParameterName[] = "color";
 
+const char kMixedContentAutoupgradeModeParamName[] = "mode";
+const char kMixedContentAutoupgradeModeBlockable[] = "blockable";
+const char kMixedContentAutoupgradeModeOptionallyBlockable[] =
+    "optionally-blockable";
+
 }  // namespace features
 }  // namespace blink
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index df37470..f5712d6 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -38,6 +38,11 @@
 BLINK_COMMON_EXPORT extern const char
     kAutofillPreviewStyleExperimentColorParameterName[];
 
+BLINK_COMMON_EXPORT extern const char kMixedContentAutoupgradeModeParamName[];
+BLINK_COMMON_EXPORT extern const char kMixedContentAutoupgradeModeBlockable[];
+BLINK_COMMON_EXPORT extern const char
+    kMixedContentAutoupgradeModeOptionallyBlockable[];
+
 }  // namespace features
 }  // namespace blink
 
diff --git a/third_party/blink/renderer/build/scripts/core/css/templates/cssom_types.cc.tmpl b/third_party/blink/renderer/build/scripts/core/css/templates/cssom_types.cc.tmpl
index 79fea233..f479b87 100644
--- a/third_party/blink/renderer/build/scripts/core/css/templates/cssom_types.cc.tmpl
+++ b/third_party/blink/renderer/build/scripts/core/css/templates/cssom_types.cc.tmpl
@@ -91,10 +91,16 @@
 }
 
 bool CSSOMTypes::PropertyCanTake(CSSPropertyID id,
+                                 const AtomicString& custom_property_name,
                                  const PropertyRegistration* registration,
                                  const CSSStyleValue& value) {
+  DCHECK_EQ(id == CSSPropertyVariable, !custom_property_name.IsNull());
 
   if (id == CSSPropertyVariable && registration) {
+    if (value.GetType() == CSSStyleValue::kUnknownType) {
+      return ToCSSUnsupportedStyleValue(value).GetCustomPropertyName() ==
+          custom_property_name;
+    }
     return registration->Syntax().CanTake(value);
   }
 
diff --git a/third_party/blink/renderer/core/css/css_selector.cc b/third_party/blink/renderer/core/css/css_selector.cc
index bfb6bfd..58b9234b 100644
--- a/third_party/blink/renderer/core/css/css_selector.cc
+++ b/third_party/blink/renderer/core/css/css_selector.cc
@@ -104,7 +104,7 @@
     return 0;
   switch (match_) {
     case kId:
-      return 0x010000;
+      return kIdSpecificity;
     case kPseudoClass:
       switch (GetPseudoType()) {
         case kPseudoHost:
@@ -122,7 +122,7 @@
         default:
           break;
       }
-      return 0x000100;
+      return kClassLikeSpecificity;
     case kClass:
     case kPseudoElement:
     case kAttributeExact:
@@ -132,11 +132,11 @@
     case kAttributeContain:
     case kAttributeBegin:
     case kAttributeEnd:
-      return 0x000100;
+      return kClassLikeSpecificity;
     case kTag:
       if (TagQName().LocalName() == UniversalSelectorAtom())
         return 0;
-      return 0x000001;
+      return kTagSpecificity;
     case kUnknown:
       return 0;
   }
diff --git a/third_party/blink/renderer/core/css/css_selector.h b/third_party/blink/renderer/core/css/css_selector.h
index ff52599..b32eb9e 100644
--- a/third_party/blink/renderer/core/css/css_selector.h
+++ b/third_party/blink/renderer/core/css/css_selector.h
@@ -103,6 +103,10 @@
 
   bool operator==(const CSSSelector&) const;
 
+  static constexpr unsigned kIdSpecificity = 0x010000;
+  static constexpr unsigned kClassLikeSpecificity = 0x000100;
+  static constexpr unsigned kTagSpecificity = 0x000001;
+
   // http://www.w3.org/TR/css3-selectors/#specificity
   // We use 256 as the base of the specificity number system.
   unsigned Specificity() const;
diff --git a/third_party/blink/renderer/core/css/cssom/css_style_value.cc b/third_party/blink/renderer/core/css/cssom/css_style_value.cc
index df8cabe..68a7650 100644
--- a/third_party/blink/renderer/core/css/cssom/css_style_value.cc
+++ b/third_party/blink/renderer/core/css/cssom/css_style_value.cc
@@ -31,14 +31,17 @@
     return CSSStyleValueVector();
   }
 
+  AtomicString custom_property_name = property_id == CSSPropertyVariable
+                                          ? AtomicString(property_name)
+                                          : g_null_atom;
+
   const PropertyRegistration* registration =
       (property_id == CSSPropertyVariable)
-          ? PropertyRegistration::From(execution_context,
-                                       AtomicString(property_name))
+          ? PropertyRegistration::From(execution_context, custom_property_name)
           : nullptr;
 
   const auto style_values = StyleValueFactory::FromString(
-      property_id, registration, value,
+      property_id, custom_property_name, registration, value,
       CSSParserContext::Create(*execution_context));
   if (style_values.IsEmpty()) {
     exception_state.ThrowTypeError("The value provided ('" + value +
diff --git a/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h b/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h
index 47cfe25..5a384a1 100644
--- a/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h
@@ -16,19 +16,28 @@
 // considered valid for that property.
 class CORE_EXPORT CSSUnsupportedStyleValue final : public CSSStyleValue {
  public:
-  static CSSUnsupportedStyleValue* Create(CSSPropertyID property,
-                                          const String& css_text) {
-    return new CSSUnsupportedStyleValue(property, css_text);
+  static CSSUnsupportedStyleValue* Create(
+      CSSPropertyID property,
+      const AtomicString& custom_property_name,
+      const String& css_text) {
+    return new CSSUnsupportedStyleValue(property, custom_property_name,
+                                        css_text);
   }
-  static CSSUnsupportedStyleValue* Create(CSSPropertyID property,
-                                          const CSSValue& value) {
-    return new CSSUnsupportedStyleValue(property, value.CssText());
+  static CSSUnsupportedStyleValue* Create(
+      CSSPropertyID property,
+      const AtomicString& custom_property_name,
+      const CSSValue& value) {
+    return new CSSUnsupportedStyleValue(property, custom_property_name,
+                                        value.CssText());
   }
 
   StyleValueType GetType() const override {
     return StyleValueType::kUnknownType;
   }
   CSSPropertyID GetProperty() const { return property_; }
+  const AtomicString& GetCustomPropertyName() const {
+    return custom_property_name_;
+  }
   const CSSValue* ToCSSValue() const override {
     NOTREACHED();
     return nullptr;
@@ -37,12 +46,18 @@
   String toString() const final { return CSSText(); }
 
  private:
-  CSSUnsupportedStyleValue(CSSPropertyID property, const String& css_text)
-      : property_(property) {
+  CSSUnsupportedStyleValue(CSSPropertyID property,
+                           const AtomicString& custom_property_name,
+                           const String& css_text)
+      : property_(property), custom_property_name_(custom_property_name) {
     SetCSSText(css_text);
+    DCHECK_EQ(property == CSSPropertyVariable, !custom_property_name.IsNull());
   }
 
   const CSSPropertyID property_;
+  // Name is set when property_ is CSSPropertyVariable, otherwise it's
+  // g_null_atom.
+  AtomicString custom_property_name_;
   DISALLOW_COPY_AND_ASSIGN(CSSUnsupportedStyleValue);
 };
 
diff --git a/third_party/blink/renderer/core/css/cssom/cssom_types.h b/third_party/blink/renderer/core/css/cssom/cssom_types.h
index b4e65dc..e96cf7a 100644
--- a/third_party/blink/renderer/core/css/cssom/cssom_types.h
+++ b/third_party/blink/renderer/core/css/cssom/cssom_types.h
@@ -34,6 +34,7 @@
 
   static bool IsPropertySupported(CSSPropertyID);
   static bool PropertyCanTake(CSSPropertyID,
+                              const AtomicString& custom_property_name,
                               const PropertyRegistration*,
                               const CSSStyleValue&);
 };
diff --git a/third_party/blink/renderer/core/css/cssom/style_property_map.cc b/third_party/blink/renderer/core/css/cssom/style_property_map.cc
index 5e99ce3..3ed017c 100644
--- a/third_party/blink/renderer/core/css/cssom/style_property_map.cc
+++ b/third_party/blink/renderer/core/css/cssom/style_property_map.cc
@@ -40,14 +40,23 @@
 
 const CSSValue* StyleValueToCSSValue(
     const CSSProperty& property,
+    const AtomicString& custom_property_name,
     const PropertyRegistration* registration,
     const CSSStyleValue& style_value,
     const ExecutionContext& execution_context) {
-  const CSSPropertyID property_id = property.PropertyID();
-  if (!CSSOMTypes::PropertyCanTake(property_id, registration, style_value))
-    return nullptr;
+  DCHECK_EQ(property.IDEquals(CSSPropertyVariable),
+            !custom_property_name.IsNull());
 
-  if (style_value.GetType() == CSSStyleValue::kUnknownType) {
+  const CSSPropertyID property_id = property.PropertyID();
+  if (!CSSOMTypes::PropertyCanTake(property_id, custom_property_name,
+                                   registration, style_value)) {
+    return nullptr;
+  }
+
+  if (style_value.GetType() == CSSStyleValue::kUnknownType &&
+      // Registered custom properties must enter the CSSPropertyVariable
+      // switch-case below, for proper parsing according to registered syntax.
+      !(property_id == CSSPropertyVariable && registration)) {
     return CSSParser::ParseSingleValue(
         property.PropertyID(), style_value.toString(),
         CSSParserContext::Create(execution_context));
@@ -194,35 +203,41 @@
 
 const CSSValue* CoerceStyleValueOrString(
     const CSSProperty& property,
+    const AtomicString& custom_property_name,
     const PropertyRegistration* registration,
     const CSSStyleValueOrString& value,
     const ExecutionContext& execution_context) {
   DCHECK(!property.IsRepeated());
+  DCHECK_EQ(property.IDEquals(CSSPropertyVariable),
+            !custom_property_name.IsNull());
 
   if (value.IsCSSStyleValue()) {
     if (!value.GetAsCSSStyleValue())
       return nullptr;
 
-    return StyleValueToCSSValue(property, registration,
+    return StyleValueToCSSValue(property, custom_property_name, registration,
                                 *value.GetAsCSSStyleValue(), execution_context);
   } else {
     DCHECK(value.IsString());
     const auto values = StyleValueFactory::FromString(
-        property.PropertyID(), registration, value.GetAsString(),
-        CSSParserContext::Create(execution_context));
+        property.PropertyID(), custom_property_name, registration,
+        value.GetAsString(), CSSParserContext::Create(execution_context));
     if (values.size() != 1U)
       return nullptr;
 
-    return StyleValueToCSSValue(property, registration, *values[0],
-                                execution_context);
+    return StyleValueToCSSValue(property, custom_property_name, registration,
+                                *values[0], execution_context);
   }
 }
 
 const CSSValue* CoerceStyleValuesOrStrings(
     const CSSProperty& property,
+    const AtomicString& custom_property_name,
     const HeapVector<CSSStyleValueOrString>& values,
     const ExecutionContext& execution_context) {
   DCHECK(property.IsRepeated());
+  DCHECK_EQ(property.IDEquals(CSSPropertyVariable),
+            !custom_property_name.IsNull());
   if (values.IsEmpty())
     return nullptr;
 
@@ -234,22 +249,25 @@
       if (!value.GetAsCSSStyleValue())
         return nullptr;
 
-      css_values.push_back(StyleValueToCSSValue(
-          property, nullptr, *value.GetAsCSSStyleValue(), execution_context));
+      css_values.push_back(
+          StyleValueToCSSValue(property, custom_property_name, nullptr,
+                               *value.GetAsCSSStyleValue(), execution_context));
     } else {
       DCHECK(value.IsString());
       if (!parser_context)
         parser_context = CSSParserContext::Create(execution_context);
 
       const auto subvalues = StyleValueFactory::FromString(
-          property.PropertyID(), nullptr, value.GetAsString(), parser_context);
+          property.PropertyID(), custom_property_name, nullptr,
+          value.GetAsString(), parser_context);
       if (subvalues.IsEmpty())
         return nullptr;
 
       for (const auto& subvalue : subvalues) {
         DCHECK(subvalue);
-        css_values.push_back(StyleValueToCSSValue(property, nullptr, *subvalue,
-                                                  execution_context));
+        css_values.push_back(
+            StyleValueToCSSValue(property, custom_property_name, nullptr,
+                                 *subvalue, execution_context));
       }
     }
   }
@@ -290,8 +308,8 @@
     String css_text;
     if (values[0].IsCSSStyleValue()) {
       CSSStyleValue* style_value = values[0].GetAsCSSStyleValue();
-      if (style_value &&
-          CSSOMTypes::PropertyCanTake(property_id, nullptr, *style_value)) {
+      if (style_value && CSSOMTypes::PropertyCanTake(property_id, g_null_atom,
+                                                     nullptr, *style_value)) {
         css_text = style_value->toString();
       }
     } else {
@@ -306,22 +324,28 @@
     return;
   }
 
+  AtomicString custom_property_name = (property_id == CSSPropertyVariable)
+                                          ? AtomicString(property_name)
+                                          : g_null_atom;
+
   const PropertyRegistration* registration = nullptr;
 
   if (property_id == CSSPropertyVariable && IsA<Document>(execution_context)) {
     const PropertyRegistry* registry =
         To<Document>(*execution_context).GetPropertyRegistry();
     if (registry) {
-      registration = registry->Registration(AtomicString(property_name));
+      registration = registry->Registration(custom_property_name);
     }
   }
 
   const CSSValue* result = nullptr;
   if (property.IsRepeated()) {
-    result = CoerceStyleValuesOrStrings(property, values, *execution_context);
+    result = CoerceStyleValuesOrStrings(property, custom_property_name, values,
+                                        *execution_context);
   } else if (values.size() == 1U) {
-    result = CoerceStyleValueOrString(property, registration, values[0],
-                                      *execution_context);
+    result =
+        CoerceStyleValueOrString(property, custom_property_name, registration,
+                                 values[0], *execution_context);
   }
 
   if (!result) {
@@ -330,7 +354,7 @@
   }
 
   if (property_id == CSSPropertyVariable)
-    SetCustomProperty(AtomicString(property_name), *result);
+    SetCustomProperty(custom_property_name, *result);
   else
     SetProperty(property_id, *result);
 }
@@ -369,8 +393,10 @@
     current_value = CssValueListForPropertyID(property_id);
   }
 
-  const CSSValue* result =
-      CoerceStyleValuesOrStrings(property, values, *execution_context);
+  // TODO(andruud): Don't pass g_null_atom as custom property name
+  // once appending to custom properties is supported.
+  const CSSValue* result = CoerceStyleValuesOrStrings(
+      property, g_null_atom, values, *execution_context);
   if (!result || !result->IsValueList()) {
     exception_state.ThrowTypeError("Invalid type for property");
     return;
diff --git a/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.cc b/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.cc
index 793ac5a..7141586 100644
--- a/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.cc
+++ b/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.cc
@@ -70,9 +70,13 @@
   if (property.IsShorthand())
     return GetShorthandProperty(property);
 
+  AtomicString custom_property_name = property_id == CSSPropertyVariable
+                                          ? AtomicString(property_name)
+                                          : g_null_atom;
+
   const CSSValue* value =
       (property_id == CSSPropertyVariable)
-          ? GetCustomProperty(*execution_context, AtomicString(property_name))
+          ? GetCustomProperty(*execution_context, custom_property_name)
           : GetProperty(property_id);
   if (!value)
     return nullptr;
@@ -80,12 +84,13 @@
   // Custom properties count as repeated whenever we have a CSSValueList.
   if (property.IsRepeated() ||
       (property_id == CSSPropertyVariable && value->IsValueList())) {
-    CSSStyleValueVector values =
-        StyleValueFactory::CssValueToStyleValueVector(property_id, *value);
+    CSSStyleValueVector values = StyleValueFactory::CssValueToStyleValueVector(
+        property_id, custom_property_name, *value);
     return values.IsEmpty() ? nullptr : values[0];
   }
 
-  return StyleValueFactory::CssValueToStyleValue(property_id, *value);
+  return StyleValueFactory::CssValueToStyleValue(property_id,
+                                                 custom_property_name, *value);
 }
 
 CSSStyleValueVector StylePropertyMapReadOnly::getAll(
@@ -107,14 +112,19 @@
     return values;
   }
 
+  AtomicString custom_property_name = property_id == CSSPropertyVariable
+                                          ? AtomicString(property_name)
+                                          : g_null_atom;
+
   const CSSValue* value =
       (property_id == CSSPropertyVariable)
-          ? GetCustomProperty(*execution_context, AtomicString(property_name))
+          ? GetCustomProperty(*execution_context, custom_property_name)
           : GetProperty(property_id);
   if (!value)
     return CSSStyleValueVector();
 
-  return StyleValueFactory::CssValueToStyleValueVector(property_id, *value);
+  return StyleValueFactory::CssValueToStyleValueVector(
+      property_id, custom_property_name, *value);
 }
 
 bool StylePropertyMapReadOnly::has(const ExecutionContext* execution_context,
@@ -131,8 +141,12 @@
                             const CSSValue& css_value) {
     const auto property_id = cssPropertyID(property_name);
 
-    auto values =
-        StyleValueFactory::CssValueToStyleValueVector(property_id, css_value);
+    AtomicString custom_property_name = property_id == CSSPropertyVariable
+                                            ? AtomicString(property_name)
+                                            : g_null_atom;
+
+    auto values = StyleValueFactory::CssValueToStyleValueVector(
+        property_id, custom_property_name, css_value);
     result.emplace_back(property_name, std::move(values));
   });
 
@@ -145,7 +159,8 @@
   const auto serialization = SerializationForShorthand(property);
   if (serialization.IsEmpty())
     return nullptr;
-  return CSSUnsupportedStyleValue::Create(property.PropertyID(), serialization);
+  return CSSUnsupportedStyleValue::Create(property.PropertyID(), g_null_atom,
+                                          serialization);
 }
 
 const CSSValue* StylePropertyMapReadOnly::GetCustomProperty(
diff --git a/third_party/blink/renderer/core/css/cssom/style_value_factory.cc b/third_party/blink/renderer/core/css/cssom/style_value_factory.cc
index 4efd6e7..551d565 100644
--- a/third_party/blink/renderer/core/css/cssom/style_value_factory.cc
+++ b/third_party/blink/renderer/core/css/cssom/style_value_factory.cc
@@ -85,7 +85,7 @@
           ToCSSIdentifierValue(value).GetValueID() == CSSValueCurrentcolor) {
         return CSSKeywordValue::Create("currentcolor");
       }
-      return CSSUnsupportedStyleValue::Create(property_id, value);
+      return CSSUnsupportedStyleValue::Create(property_id, g_null_atom, value);
     case CSSPropertyContain: {
       if (value.IsIdentifierValue())
         return CreateStyleValue(value);
@@ -205,8 +205,10 @@
         ToCSSCustomPropertyDeclaration(value));
   }
 
-  if (!CSSOMTypes::IsPropertySupported(property_id))
-    return CSSUnsupportedStyleValue::Create(property_id, value);
+  if (!CSSOMTypes::IsPropertySupported(property_id)) {
+    DCHECK_NE(property_id, CSSPropertyVariable);
+    return CSSUnsupportedStyleValue::Create(property_id, g_null_atom, value);
+  }
 
   CSSStyleValue* style_value =
       CreateStyleValueWithPropertyInternal(property_id, value);
@@ -215,11 +217,14 @@
   return CreateStyleValue(value);
 }
 
-CSSStyleValueVector UnsupportedCSSValue(CSSPropertyID property_id,
-                                        const CSSValue& value) {
+CSSStyleValueVector UnsupportedCSSValue(
+    CSSPropertyID property_id,
+    const AtomicString& custom_property_name,
+    const CSSValue& value) {
+  DCHECK_EQ(property_id == CSSPropertyVariable, !custom_property_name.IsNull());
   CSSStyleValueVector style_value_vector;
-  style_value_vector.push_back(
-      CSSUnsupportedStyleValue::Create(property_id, value));
+  style_value_vector.push_back(CSSUnsupportedStyleValue::Create(
+      property_id, custom_property_name, value));
   return style_value_vector;
 }
 
@@ -227,10 +232,12 @@
 
 CSSStyleValueVector StyleValueFactory::FromString(
     CSSPropertyID property_id,
+    const AtomicString& custom_property_name,
     const PropertyRegistration* registration,
     const String& css_text,
     const CSSParserContext* parser_context) {
   DCHECK_NE(property_id, CSSPropertyInvalid);
+  DCHECK_EQ(property_id == CSSPropertyVariable, !custom_property_name.IsNull());
   CSSTokenizer tokenizer(css_text);
   const auto tokens = tokenizer.TokenizeToEOF();
   const CSSParserTokenRange range(tokens);
@@ -242,16 +249,19 @@
                                     StyleRule::RuleType::kStyle)) {
     if (parsed_properties.size() == 1) {
       const auto result = StyleValueFactory::CssValueToStyleValueVector(
-          parsed_properties[0].Id(), *parsed_properties[0].Value());
+          parsed_properties[0].Id(), g_null_atom,
+          *parsed_properties[0].Value());
       // TODO(801935): Handle list-valued properties.
       if (result.size() == 1U)
         result[0]->SetCSSText(css_text);
+
       return result;
     }
 
     // Shorthands are not yet supported.
     CSSStyleValueVector result;
-    result.push_back(CSSUnsupportedStyleValue::Create(property_id, css_text));
+    result.push_back(
+        CSSUnsupportedStyleValue::Create(property_id, g_null_atom, css_text));
     return result;
   }
 
@@ -262,7 +272,8 @@
     if (!value)
       return CSSStyleValueVector();
 
-    return StyleValueFactory::CssValueToStyleValueVector(property_id, *value);
+    return StyleValueFactory::CssValueToStyleValueVector(
+        property_id, custom_property_name, *value);
   }
 
   if ((property_id == CSSPropertyVariable && !tokens.IsEmpty()) ||
@@ -281,18 +292,24 @@
 
 CSSStyleValue* StyleValueFactory::CssValueToStyleValue(
     CSSPropertyID property_id,
+    const AtomicString& custom_property_name,
     const CSSValue& css_value) {
   DCHECK(!CSSProperty::Get(property_id).IsRepeated());
+  DCHECK_EQ(property_id == CSSPropertyVariable, !custom_property_name.IsNull());
   CSSStyleValue* style_value =
       CreateStyleValueWithProperty(property_id, css_value);
-  if (!style_value)
-    return CSSUnsupportedStyleValue::Create(property_id, css_value);
+  if (!style_value) {
+    return CSSUnsupportedStyleValue::Create(property_id, custom_property_name,
+                                            css_value);
+  }
   return style_value;
 }
 
 CSSStyleValueVector StyleValueFactory::CssValueToStyleValueVector(
     CSSPropertyID property_id,
+    const AtomicString& custom_property_name,
     const CSSValue& css_value) {
+  DCHECK_EQ(property_id == CSSPropertyVariable, !custom_property_name.IsNull());
   CSSStyleValueVector style_value_vector;
 
   CSSStyleValue* style_value =
@@ -315,7 +332,7 @@
       // https://github.com/w3c/css-houdini-drafts/issues/290
       (property_id == CSSPropertyVariable &&
        CSSTransformComponent::FromCSSValue(css_value))) {
-    return UnsupportedCSSValue(property_id, css_value);
+    return UnsupportedCSSValue(property_id, custom_property_name, css_value);
   }
 
   // We assume list-valued properties are always stored as a list.
@@ -323,7 +340,7 @@
   for (const CSSValue* inner_value : css_value_list) {
     style_value = CreateStyleValueWithProperty(property_id, *inner_value);
     if (!style_value)
-      return UnsupportedCSSValue(property_id, css_value);
+      return UnsupportedCSSValue(property_id, custom_property_name, css_value);
     style_value_vector.push_back(style_value);
   }
   return style_value_vector;
@@ -331,7 +348,7 @@
 
 CSSStyleValueVector StyleValueFactory::CssValueToStyleValueVector(
     const CSSValue& css_value) {
-  return CssValueToStyleValueVector(CSSPropertyInvalid, css_value);
+  return CssValueToStyleValueVector(CSSPropertyInvalid, g_null_atom, css_value);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/cssom/style_value_factory.h b/third_party/blink/renderer/core/css/cssom/style_value_factory.h
index a39f0ec..858fc72 100644
--- a/third_party/blink/renderer/core/css/cssom/style_value_factory.h
+++ b/third_party/blink/renderer/core/css/cssom/style_value_factory.h
@@ -19,13 +19,20 @@
   STATIC_ONLY(StyleValueFactory);
 
  public:
-  static CSSStyleValueVector FromString(CSSPropertyID,
-                                        const PropertyRegistration*,
-                                        const String&,
-                                        const CSSParserContext*);
-  static CSSStyleValue* CssValueToStyleValue(CSSPropertyID, const CSSValue&);
-  static CSSStyleValueVector CssValueToStyleValueVector(CSSPropertyID,
-                                                        const CSSValue&);
+  static CSSStyleValueVector FromString(
+      CSSPropertyID,
+      const AtomicString& custom_property_name,
+      const PropertyRegistration*,
+      const String&,
+      const CSSParserContext*);
+  static CSSStyleValue* CssValueToStyleValue(
+      CSSPropertyID,
+      const AtomicString& custom_property_name,
+      const CSSValue&);
+  static CSSStyleValueVector CssValueToStyleValueVector(
+      CSSPropertyID,
+      const AtomicString& custom_property_name,
+      const CSSValue&);
   // If you don't have complex CSS properties, use this one.
   static CSSStyleValueVector CssValueToStyleValueVector(const CSSValue&);
 };
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc
index a214de2f..5e0b242 100644
--- a/third_party/blink/renderer/core/css/selector_checker.cc
+++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -1161,7 +1161,13 @@
       DCHECK(selector.SelectorList()->First());
       DCHECK(!CSSSelectorList::Next(*selector.SelectorList()->First()));
       sub_context.selector = selector.SelectorList()->First();
-      return Match(sub_context);
+      MatchResult sub_result;
+      if (!Match(sub_context, sub_result))
+        return false;
+      result.specificity += sub_context.selector->Specificity() +
+                            sub_result.specificity +
+                            CSSSelector::kTagSpecificity;
+      return true;
     }
     case CSSSelector::kPseudoContent:
       return element.IsInShadowTree() && element.IsV0InsertionPoint();
@@ -1189,10 +1195,15 @@
   if (!shadow_host || shadow_host != element)
     return false;
   DCHECK(IsShadowHost(element));
+  DCHECK(element.GetShadowRoot());
+  bool is_v1_shadow = element.GetShadowRoot()->IsV1();
 
   // For the case with no parameters, i.e. just :host.
-  if (!selector.SelectorList())
+  if (!selector.SelectorList()) {
+    if (is_v1_shadow)
+      result.specificity += CSSSelector::kClassLikeSpecificity;
     return true;
+  }
 
   SelectorCheckingContext sub_context(context);
   sub_context.is_sub_selector = true;
@@ -1234,6 +1245,8 @@
   }
   if (matched) {
     result.specificity += max_specificity;
+    if (is_v1_shadow)
+      result.specificity += CSSSelector::kClassLikeSpecificity;
     return true;
   }
 
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index f9bda29..cdcaa07 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -1412,6 +1412,39 @@
       .ClampNegativeToZero();
 }
 
+LayoutUnit LayoutBox::OverrideContainingBlockContentWidth() const {
+  DCHECK(HasOverrideContainingBlockContentWidth());
+  return ContainingBlock()->StyleRef().IsHorizontalWritingMode()
+             ? rare_data_->override_containing_block_content_logical_width_
+             : rare_data_->override_containing_block_content_logical_height_;
+}
+
+LayoutUnit LayoutBox::OverrideContainingBlockContentHeight() const {
+  DCHECK(HasOverrideContainingBlockContentHeight());
+  return ContainingBlock()->StyleRef().IsHorizontalWritingMode()
+             ? rare_data_->override_containing_block_content_logical_height_
+             : rare_data_->override_containing_block_content_logical_width_;
+}
+
+bool LayoutBox::HasOverrideContainingBlockContentWidth() const {
+  if (!rare_data_ || !ContainingBlock())
+    return false;
+
+  return ContainingBlock()->StyleRef().IsHorizontalWritingMode()
+             ? rare_data_->has_override_containing_block_content_logical_width_
+             : rare_data_
+                   ->has_override_containing_block_content_logical_height_;
+}
+
+bool LayoutBox::HasOverrideContainingBlockContentHeight() const {
+  if (!rare_data_ || !ContainingBlock())
+    return false;
+
+  return ContainingBlock()->StyleRef().IsHorizontalWritingMode()
+             ? rare_data_->has_override_containing_block_content_logical_height_
+             : rare_data_->has_override_containing_block_content_logical_width_;
+}
+
 // TODO (lajava) Shouldn't we implement these functions based on physical
 // direction ?.
 LayoutUnit LayoutBox::OverrideContainingBlockContentLogicalWidth() const {
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h
index cd9c20ab..17800725d 100644
--- a/third_party/blink/renderer/core/layout/layout_box.h
+++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -68,6 +68,7 @@
       : spanner_placeholder_(nullptr),
         override_logical_width_(-1),
         override_logical_height_(-1),
+        // TODO(rego): We should store these based on physical direction.
         has_override_containing_block_content_logical_width_(false),
         has_override_containing_block_content_logical_height_(false),
         has_override_containing_block_percentage_resolution_logical_height_(
@@ -754,6 +755,10 @@
   LayoutUnit OverrideContentLogicalWidth() const;
   LayoutUnit OverrideContentLogicalHeight() const;
 
+  LayoutUnit OverrideContainingBlockContentWidth() const override;
+  LayoutUnit OverrideContainingBlockContentHeight() const override;
+  bool HasOverrideContainingBlockContentWidth() const override;
+  bool HasOverrideContainingBlockContentHeight() const override;
   LayoutUnit OverrideContainingBlockContentLogicalWidth() const;
   LayoutUnit OverrideContainingBlockContentLogicalHeight() const;
   bool HasOverrideContainingBlockContentLogicalWidth() const;
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
index 49992cf..4b36b3b 100644
--- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -727,16 +727,24 @@
   // don't use containingBlockLogicalWidthForContent() here, but instead
   // explicitly call availableWidth on our containing block.
   // https://drafts.csswg.org/css-position-3/#rel-pos
+  // However for grid items the containing block is the grid area, so offsets
+  // should be resolved against that:
+  // https://drafts.csswg.org/css-grid/#grid-item-sizing
   base::Optional<LayoutUnit> left;
   base::Optional<LayoutUnit> right;
-  if (!StyleRef().Left().IsAuto()) {
-    left =
-        ValueForLength(StyleRef().Left(), containing_block->AvailableWidth());
+  LayoutUnit available_width = containing_block->AvailableWidth();
+  LayoutUnit available_height = containing_block->AvailableHeight();
+  bool has_override_containing_block_content = false;
+  if (HasOverrideContainingBlockContentWidth()) {
+    DCHECK(HasOverrideContainingBlockContentHeight());
+    has_override_containing_block_content = true;
+    available_width = OverrideContainingBlockContentWidth();
+    available_height = OverrideContainingBlockContentHeight();
   }
-  if (!StyleRef().Right().IsAuto()) {
-    right =
-        ValueForLength(StyleRef().Right(), containing_block->AvailableWidth());
-  }
+  if (!StyleRef().Left().IsAuto())
+    left = ValueForLength(StyleRef().Left(), available_width);
+  if (!StyleRef().Right().IsAuto())
+    right = ValueForLength(StyleRef().Right(), available_width);
   if (!left && !right) {
     left = LayoutUnit();
     right = LayoutUnit();
@@ -771,21 +779,24 @@
   // <html> and <body> assume the size of the viewport. In this case, calculate
   // the percent offset based on this height.
   // See <https://bugs.webkit.org/show_bug.cgi?id=26396>.
+  // Another exception is a grid item, as the containing block is the grid area:
+  // https://drafts.csswg.org/css-grid/#grid-item-sizing
 
   base::Optional<LayoutUnit> top;
   base::Optional<LayoutUnit> bottom;
   if (!StyleRef().Top().IsAuto() &&
       (!containing_block->HasAutoHeightOrContainingBlockWithAutoHeight() ||
        !StyleRef().Top().IsPercentOrCalc() ||
-       containing_block->StretchesToViewport())) {
-    top = ValueForLength(StyleRef().Top(), containing_block->AvailableHeight());
+       containing_block->StretchesToViewport() ||
+       has_override_containing_block_content)) {
+    top = ValueForLength(StyleRef().Top(), available_height);
   }
   if (!StyleRef().Bottom().IsAuto() &&
       (!containing_block->HasAutoHeightOrContainingBlockWithAutoHeight() ||
        !StyleRef().Bottom().IsPercentOrCalc() ||
-       containing_block->StretchesToViewport())) {
-    bottom = ValueForLength(StyleRef().Bottom(),
-                            containing_block->AvailableHeight());
+       containing_block->StretchesToViewport() ||
+       has_override_containing_block_content)) {
+    bottom = ValueForLength(StyleRef().Bottom(), available_height);
   }
   if (!top && !bottom) {
     top = LayoutUnit();
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.h b/third_party/blink/renderer/core/layout/layout_box_model_object.h
index c12b0b7..f28bfbc9 100644
--- a/third_party/blink/renderer/core/layout/layout_box_model_object.h
+++ b/third_party/blink/renderer/core/layout/layout_box_model_object.h
@@ -435,6 +435,17 @@
   void AbsoluteQuads(Vector<FloatQuad>& quads,
                      MapCoordinatesFlags mode = 0) const override;
 
+  virtual LayoutUnit OverrideContainingBlockContentWidth() const {
+    NOTREACHED();
+    return LayoutUnit(-1);
+  }
+  virtual LayoutUnit OverrideContainingBlockContentHeight() const {
+    NOTREACHED();
+    return LayoutUnit(-1);
+  }
+  virtual bool HasOverrideContainingBlockContentWidth() const { return false; }
+  virtual bool HasOverrideContainingBlockContentHeight() const { return false; }
+
  protected:
   // Compute absolute quads for |this|, but not any continuations. May only be
   // called for objects which can be or have continuations, i.e. LayoutInline or
diff --git a/third_party/blink/renderer/core/layout/layout_grid.cc b/third_party/blink/renderer/core/layout/layout_grid.cc
index 34066a6..d5e2450 100644
--- a/third_party/blink/renderer/core/layout/layout_grid.cc
+++ b/third_party/blink/renderer/core/layout/layout_grid.cc
@@ -1298,13 +1298,9 @@
     // paint them even if the grid-area is not visible. Using physical
     // dimensions for simplicity, so we can forget about orthogonalty.
     LayoutUnit child_grid_area_height =
-        IsHorizontalWritingMode()
-            ? child->OverrideContainingBlockContentLogicalHeight()
-            : child->OverrideContainingBlockContentLogicalWidth();
+        child->OverrideContainingBlockContentHeight();
     LayoutUnit child_grid_area_width =
-        IsHorizontalWritingMode()
-            ? child->OverrideContainingBlockContentLogicalWidth()
-            : child->OverrideContainingBlockContentLogicalHeight();
+        child->OverrideContainingBlockContentWidth();
     LayoutRect grid_area_rect(
         GridAreaLogicalPosition(area),
         LayoutSize(child_grid_area_width, child_grid_area_height));
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc
index 834727d..9ae5521 100644
--- a/third_party/blink/renderer/core/layout/layout_text.cc
+++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -1955,7 +1955,10 @@
         NGInlineFragmentTraversal::SelfFragmentsOf(*box_fragment, this);
     for (const auto& child : children)
       bounding_box.UniteIfNonZero(child.RectInContainerBox());
-    return bounding_box.ToLayoutRect();
+    LayoutRect rect = bounding_box.ToLayoutRect();
+    if (HasFlippedBlocksWritingMode())
+      ContainingBlock()->FlipForWritingMode(rect);
+    return rect;
   }
 
   LayoutRect result;
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index 2caf90e..c51ca2e 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -39,6 +39,7 @@
 #include <memory>
 #include "base/auto_reset.h"
 #include "base/feature_list.h"
+#include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/unguessable_token.h"
 #include "services/network/public/mojom/request_context_frame_type.mojom-blink.h"
@@ -46,6 +47,8 @@
 #include "third_party/blink/public/platform/modules/fetch/fetch_api_request.mojom-shared.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h"
 #include "third_party/blink/public/platform/task_type.h"
+#include "third_party/blink/public/platform/web_mixed_content.h"
+#include "third_party/blink/public/platform/web_mixed_content_context_type.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/public/web/commit_result.mojom-shared.h"
 #include "third_party/blink/public/web/web_frame_load_type.h"
@@ -111,6 +114,35 @@
 
 using blink::WebURLRequest;
 
+namespace {
+
+bool ShouldAutoupgrade(blink::WebMixedContentContextType type) {
+  if (!base::FeatureList::IsEnabled(
+          blink::features::kMixedContentAutoupgrade) ||
+      type == blink::WebMixedContentContextType::kNotMixedContent) {
+    return false;
+  }
+
+  std::string autoupgrade_mode = base::GetFieldTrialParamValueByFeature(
+      blink::features::kMixedContentAutoupgrade,
+      blink::features::kMixedContentAutoupgradeModeParamName);
+
+  if (autoupgrade_mode ==
+      blink::features::kMixedContentAutoupgradeModeBlockable) {
+    return type == blink::WebMixedContentContextType::kBlockable ||
+           type == blink::WebMixedContentContextType::kShouldBeBlockable;
+  }
+  if (autoupgrade_mode ==
+      blink::features::kMixedContentAutoupgradeModeOptionallyBlockable) {
+    return type == blink::WebMixedContentContextType::kOptionallyBlockable;
+  }
+
+  // Otherwise we default to autoupgrading all mixed content.
+  return true;
+}
+
+}  // namespace
+
 namespace blink {
 
 using namespace HTMLNames;
@@ -1673,9 +1705,16 @@
     return;
 
   if (!(origin_context->GetSecurityContext().GetInsecureRequestPolicy() &
-        kUpgradeInsecureRequests) &&
-      !base::FeatureList::IsEnabled(features::kMixedContentAutoupgrade)) {
-    return;
+        kUpgradeInsecureRequests)) {
+    mojom::RequestContextType context = resource_request.GetRequestContext();
+    // TODO(carlosil): Handle strict_mixed_content_checking_for_plugin
+    // correctly.
+    if (context == mojom::RequestContextType::UNSPECIFIED ||
+        !origin_context->Url().ProtocolIs("https") ||
+        !ShouldAutoupgrade(
+            WebMixedContent::ContextTypeFromRequestContext(context, false))) {
+      return;
+    }
   }
 
   // Nested frames are always upgraded on the browser process.
diff --git a/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc
index 79aab46..1ad9a8fe 100644
--- a/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc
@@ -22,19 +22,19 @@
 // capped. Exceeding such limit will deactivate the algorithm.
 constexpr size_t kNodeNumberLimit = 5000;
 
-static bool LargeOnTop(const std::shared_ptr<ImageRecord>& a,
-                       const std::shared_ptr<ImageRecord>& b) {
+static bool LargeImageOnTop(const std::shared_ptr<ImageRecord>& a,
+                            const std::shared_ptr<ImageRecord>& b) {
   return a->first_size < b->first_size;
 }
 
-static bool LateOnTop(const std::shared_ptr<ImageRecord>& a,
-                      const std::shared_ptr<ImageRecord>& b) {
+static bool LateImageOnTop(const std::shared_ptr<ImageRecord>& a,
+                           const std::shared_ptr<ImageRecord>& b) {
   return a->first_paint_index < b->first_paint_index;
 }
 
 ImagePaintTimingDetector::ImagePaintTimingDetector(LocalFrameView* frame_view)
-    : largest_image_heap_(LargeOnTop),
-      latest_image_heap_(LateOnTop),
+    : largest_image_heap_(LargeImageOnTop),
+      latest_image_heap_(LateImageOnTop),
       frame_view_(frame_view) {}
 
 void ImagePaintTimingDetector::PopulateTraceValue(
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc b/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc
index c2d5fa0..0690655 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc
@@ -77,6 +77,7 @@
       const ObjectPaintProperties& properties,
       PropertyTreePrinter<TransformPaintPropertyNode>& printer) {
     printer.AddNode(properties.PaintOffsetTranslation());
+    printer.AddNode(properties.StickyTranslation());
     printer.AddNode(properties.Transform());
     printer.AddNode(properties.Perspective());
     printer.AddNode(properties.ReplacedContentTransform());
@@ -118,8 +119,11 @@
       PropertyTreePrinter<EffectPaintPropertyNode>& printer) {
     printer.AddNode(properties.Effect());
     printer.AddNode(properties.Filter());
+    printer.AddNode(properties.VerticalScrollbarEffect());
+    printer.AddNode(properties.HorizontalScrollbarEffect());
     printer.AddNode(properties.Mask());
     printer.AddNode(properties.ClipPath());
+    printer.AddNode(properties.LinkHighlightEffect());
   }
 };
 
@@ -169,6 +173,7 @@
                       ObjectPaintProperties& properties) {
   SetDebugName(properties.PaintOffsetTranslation(), "PaintOffsetTranslation",
                object);
+  SetDebugName(properties.StickyTranslation(), "StickyTranslation", object);
   SetDebugName(properties.Transform(), "Transform", object);
   SetDebugName(properties.Perspective(), "Perspective", object);
   SetDebugName(properties.ReplacedContentTransform(),
@@ -189,8 +194,13 @@
 
   SetDebugName(properties.Effect(), "Effect", object);
   SetDebugName(properties.Filter(), "Filter", object);
+  SetDebugName(properties.VerticalScrollbarEffect(), "VerticalScrollbarEffect",
+               object);
+  SetDebugName(properties.HorizontalScrollbarEffect(),
+               "HorizontalScrollbarEffect", object);
   SetDebugName(properties.Mask(), "Mask", object);
   SetDebugName(properties.ClipPath(), "ClipPath", object);
+  SetDebugName(properties.LinkHighlightEffect(), "LinkHighlightEffect", object);
   SetDebugName(properties.Scroll(), "Scroll", object);
 }
 
diff --git a/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc
index 32f12199..3278a88 100644
--- a/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc
@@ -21,19 +21,19 @@
 // Calculate metrics candidate every 1 second after the first text pre-paint.
 static constexpr TimeDelta kTimerDelay = TimeDelta::FromSeconds(1);
 
-static bool LargeOnTop(std::unique_ptr<TextRecord>& a,
-                       std::unique_ptr<TextRecord>& b) {
+static bool LargeTextOnTop(std::unique_ptr<TextRecord>& a,
+                           std::unique_ptr<TextRecord>& b) {
   return a->first_size < b->first_size;
 }
 
-static bool LateOnTop(std::unique_ptr<TextRecord>& a,
-                      std::unique_ptr<TextRecord>& b) {
+static bool LateTextOnTop(std::unique_ptr<TextRecord>& a,
+                          std::unique_ptr<TextRecord>& b) {
   return a->first_paint_time < b->first_paint_time;
 }
 
 TextPaintTimingDetector::TextPaintTimingDetector(LocalFrameView* frame_view)
-    : largest_text_heap_(LargeOnTop),
-      latest_text_heap_(LateOnTop),
+    : largest_text_heap_(LargeTextOnTop),
+      latest_text_heap_(LateTextOnTop),
       timer_(frame_view->GetFrame().GetTaskRunner(TaskType::kInternalDefault),
              this,
              &TextPaintTimingDetector::TimerFired),
diff --git a/third_party/blink/renderer/core/scroll/scrollbar_theme_mac.mm b/third_party/blink/renderer/core/scroll/scrollbar_theme_mac.mm
index 5cf9015..7ec35a7 100644
--- a/third_party/blink/renderer/core/scroll/scrollbar_theme_mac.mm
+++ b/third_party/blink/renderer/core/scroll/scrollbar_theme_mac.mm
@@ -54,6 +54,7 @@
 @interface BlinkScrollbarObserver : NSObject {
   blink::Scrollbar* _scrollbar;
   RetainPtr<ScrollbarPainter> _scrollbarPainter;
+  BOOL _suppressSetScrollbarsHidden;
 }
 - (id)initWithScrollbar:(blink::Scrollbar*)scrollbar
                 painter:(const RetainPtr<ScrollbarPainter>&)painter;
@@ -78,6 +79,10 @@
   return _scrollbarPainter.Get();
 }
 
+- (void)setSuppressSetScrollbarsHidden:(BOOL)value {
+  _suppressSetScrollbarsHidden = value;
+}
+
 - (void)dealloc {
   [_scrollbarPainter.Get() removeObserver:self forKeyPath:@"knobAlpha"];
   [super dealloc];
@@ -88,8 +93,10 @@
                         change:(NSDictionary*)change
                        context:(void*)context {
   if ([keyPath isEqualToString:@"knobAlpha"]) {
-    BOOL visible = [_scrollbarPainter.Get() knobAlpha] > 0;
-    _scrollbar->SetScrollbarsHiddenIfOverlay(!visible);
+    if (!_suppressSetScrollbarsHidden) {
+      BOOL visible = [_scrollbarPainter.Get() knobAlpha] > 0;
+      _scrollbar->SetScrollbarsHiddenIfOverlay(!visible);
+    }
   }
 }
 
@@ -283,7 +290,9 @@
 
   {
     LocalCurrentGraphicsContext local_context(context, local_rect);
-    ScrollbarPainter scrollbar_painter = PainterForScrollbar(scrollbar);
+    RetainPtr<BlinkScrollbarObserver> observer =
+        GetScrollbarPainterMap().at(const_cast<Scrollbar*>(&scrollbar));
+    ScrollbarPainter scrollbar_painter = [observer.Get() painter];
     [scrollbar_painter setEnabled:scrollbar.Enabled()];
     // drawKnob aligns the thumb to right side of the draw rect.
     // If the vertical overlay scrollbar is on the left, use trackWidth instead
@@ -299,6 +308,7 @@
     [scrollbar_painter setDoubleValue:0];
     [scrollbar_painter setKnobProportion:1];
 
+    [observer.Get() setSuppressSetScrollbarsHidden:YES];
     CGFloat old_knob_alpha = [scrollbar_painter knobAlpha];
     [scrollbar_painter setKnobAlpha:1];
 
@@ -311,6 +321,7 @@
     [scrollbar_painter
         setBoundsSize:NSSizeFromCGSize(CGSize(scrollbar.FrameRect().Size()))];
     [scrollbar_painter setKnobAlpha:old_knob_alpha];
+    [observer.Get() setSuppressSetScrollbarsHidden:NO];
   }
 
   if (opacity != 1.0f)
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
index 9e05d3b..cc6c9ea 100644
--- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
+++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
@@ -538,7 +538,8 @@
 
   overlay_enclosure_ = new MediaControlOverlayEnclosureElement(*this);
 
-  if (RuntimeEnabledFeatures::MediaControlsOverlayPlayButtonEnabled()) {
+  if (RuntimeEnabledFeatures::MediaControlsOverlayPlayButtonEnabled() ||
+      IsModern()) {
     overlay_play_button_ = new MediaControlOverlayPlayButtonElement(*this);
 
     if (!IsModern())
@@ -649,7 +650,7 @@
     if (display_cutout_fullscreen_button_)
       panel_->ParserAppendChild(display_cutout_fullscreen_button_);
 
-    MaybeParserAppendChild(panel_, overlay_play_button_);
+    panel_->ParserAppendChild(overlay_play_button_);
     panel_->ParserAppendChild(media_button_panel_);
     button_panel = media_button_panel_;
   }
@@ -769,35 +770,18 @@
   // If we are in the "no-source" state we should show the overflow menu on a
   // video element.
   if (IsModern()) {
-    bool updated = false;
-
     if (state == kNoSource) {
-      // Check if the play button or overflow menu has the "disabled" attribute
-      // set so we avoid unnecessarily resetting it.
-      if (!play_button_->hasAttribute(HTMLNames::disabledAttr)) {
-        play_button_->setAttribute(HTMLNames::disabledAttr, "");
-        updated = true;
-      }
-
+      // Check if the overflow menu has the "disabled" attribute set so we avoid
+      // unnecessarily resetting it.
       if (ShouldShowVideoControls() &&
           !overflow_menu_->hasAttribute(HTMLNames::disabledAttr)) {
         overflow_menu_->setAttribute(HTMLNames::disabledAttr, "");
-        updated = true;
+        UpdateOverflowMenuWanted();
       }
-    } else {
-      if (play_button_->hasAttribute(HTMLNames::disabledAttr)) {
-        play_button_->removeAttribute(HTMLNames::disabledAttr);
-        updated = true;
-      }
-
-      if (overflow_menu_->hasAttribute(HTMLNames::disabledAttr)) {
-        overflow_menu_->removeAttribute(HTMLNames::disabledAttr);
-        updated = true;
-      }
-    }
-
-    if (updated)
+    } else if (overflow_menu_->hasAttribute(HTMLNames::disabledAttr)) {
+      overflow_menu_->removeAttribute(HTMLNames::disabledAttr);
       UpdateOverflowMenuWanted();
+    }
   }
 }
 
@@ -1281,16 +1265,13 @@
   // room and hide the overlay play button if there is not enough room.
   if (ShouldShowVideoControls()) {
     // Allocate vertical room for overlay play button if necessary.
-    if (overlay_play_button_) {
-      WebSize overlay_play_button_size =
-          overlay_play_button_->GetSizeOrDefault();
-      if (controls_size.height >= overlay_play_button_size.height &&
-          controls_size.width >= kModernMinWidthForOverlayPlayButton) {
-        overlay_play_button_->SetDoesFit(true);
-        controls_size.height -= overlay_play_button_size.height;
-      } else {
-        overlay_play_button_->SetDoesFit(false);
-      }
+    WebSize overlay_play_button_size = overlay_play_button_->GetSizeOrDefault();
+    if (controls_size.height >= overlay_play_button_size.height &&
+        controls_size.width >= kModernMinWidthForOverlayPlayButton) {
+      overlay_play_button_->SetDoesFit(true);
+      controls_size.height -= overlay_play_button_size.height;
+    } else {
+      overlay_play_button_->SetDoesFit(false);
     }
 
     controls_size.width -= kModernControlsVideoButtonPadding;
@@ -1307,8 +1288,7 @@
     }
 
     // If we cannot show the overlay play button, show the normal one.
-    play_button_->SetIsWanted(!overlay_play_button_ ||
-                              !overlay_play_button_->DoesFit());
+    play_button_->SetIsWanted(!overlay_play_button_->DoesFit());
   } else {
     controls_size.width -= kModernControlsAudioButtonPadding;
 
@@ -1529,7 +1509,7 @@
       !IsSpatialNavigationEnabled(GetDocument().GetFrame())) {
     const String& key = ToKeyboardEvent(event).key();
     if (key == "Enter" || ToKeyboardEvent(event).keyCode() == ' ') {
-      if (IsModern() && overlay_play_button_) {
+      if (IsModern()) {
         overlay_play_button_->OnMediaKeyboardEvent(&event);
       } else {
         play_button_->OnMediaKeyboardEvent(&event);
diff --git a/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css b/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css
index 7f114af..0008b69 100644
--- a/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css
+++ b/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css
@@ -243,20 +243,20 @@
 
 video::-webkit-media-controls.sizing-small div[pseudo="-internal-media-controls-button-panel" i] {
   height: 48px;
-  line-height: 48px;
+  line-height: 44px;
   padding: 0 0 0 16px;
 }
 
 video::-webkit-media-controls.sizing-medium div[pseudo="-internal-media-controls-button-panel" i] {
   height: 64px;
-  line-height: 64px;
+  line-height: 60px;
   padding: 0 16px 0 32px;
 }
 
 /* TODO(https://crbug.com/857120): remove these rules and the sizing-large CSS class. */
 video::-webkit-media-controls.sizing-large div[pseudo="-internal-media-controls-button-panel" i] {
   height: 64px;
-  line-height: 64px;
+  line-height: 60px;
   padding: 0 16px 0 32px;
 }
 
@@ -309,10 +309,8 @@
 }
 
 audio::-webkit-media-controls-mute-button:disabled,
-audio::-webkit-media-controls-play-button:disabled,
 video::-internal-media-controls-overflow-button:disabled,
 video::-webkit-media-controls-mute-button:disabled,
-video::-webkit-media-controls-play-button:disabled,
 video::-webkit-media-controls-fullscreen-button:disabled {
   background-color: initial;
   opacity: 0.3;
@@ -426,13 +424,6 @@
   background-image: -webkit-image-set(url(ic_pause_white.svg) 1x);
 }
 
-video::-webkit-media-controls:not(.audio-only) input[pseudo="-webkit-media-controls-play-button"] {
-  /* Undo the extra 16px of left padding on the button panel. We only want that
-   * extra padding when the current time is the leftmost item, and not when the
-   * play button is leftmost. */
-  margin-left: -16px;
-}
-
 /**
  * Timeline
  */
diff --git a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc
index 324f545..3aa32a0 100644
--- a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc
+++ b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc
@@ -313,6 +313,13 @@
       return;
     }
 
+    // If we failed to create the WebServiceWorkerStreamHandle then we must
+    // have failed to allocate the mojo::DataPipe.
+    if (!fetch_loader_client->Handle()) {
+      OnResponseRejected(ServiceWorkerResponseError::kDataPipeCreationFailed);
+      return;
+    }
+
     ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
         ->RespondToFetchEventWithResponseStream(
             event_id_, web_response, fetch_loader_client->Handle(),
diff --git a/third_party/blink/renderer/platform/bindings/wrapper_type_info.cc b/third_party/blink/renderer/platform/bindings/wrapper_type_info.cc
index 45c8cc6..f4f4d7d 100644
--- a/third_party/blink/renderer/platform/bindings/wrapper_type_info.cc
+++ b/third_party/blink/renderer/platform/bindings/wrapper_type_info.cc
@@ -21,8 +21,14 @@
 }
 
 void WrapperTypeInfo::WrapperDestroyed() {
+  ThreadState* const thread_state = ThreadState::Current();
+  // WrapperDestroyed may be called during thread teardown as part of invoking
+  // V8 callbacks in which case ThreadState has already been destroyed.
+  if (!thread_state)
+    return;
+
   ThreadHeapStatsCollector* stats_collector =
-      ThreadState::Current()->Heap().stats_collector();
+      thread_state->Heap().stats_collector();
   stats_collector->DecreaseWrapperCount(1);
   stats_collector->IncreaseCollectedWrapperCount(1);
 }
diff --git a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
index 835e1ce..9fce21a 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
@@ -268,6 +268,7 @@
     compositor_node.scroll_offset = scroll_offset;
     compositor_node.local.MakeIdentity();
     compositor_node.scrolls = true;
+    compositor_node.should_be_snapped = true;
 
     CreateCompositorScrollNode(scroll_node, compositor_node);
   }
diff --git a/third_party/closure_compiler/externs/language_settings_private.js b/third_party/closure_compiler/externs/language_settings_private.js
index f82fa01..a656d42 100644
--- a/third_party/closure_compiler/externs/language_settings_private.js
+++ b/third_party/closure_compiler/externs/language_settings_private.js
@@ -34,7 +34,7 @@
  *   supportsUI: (boolean|undefined),
  *   supportsSpellcheck: (boolean|undefined),
  *   supportsTranslate: (boolean|undefined),
- *   isProhibitedUILocale: (boolean|undefined)
+ *   isProhibitedLanguage: (boolean|undefined)
  * }}
  */
 chrome.languageSettingsPrivate.Language;
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 7fce58e..faa2bb4c 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -456,7 +456,6 @@
 
     # TODO(crbug.com/818301): This master is going away.
     'chromium.webkit': {
-      'Android Builder': 'android_release_bot_minimal_symbols',
       'WebKit Linux Trusty ASAN': 'asan_lsan_release_bot',
       'WebKit Linux Trusty Leak': 'release_bot',
       'WebKit Linux Trusty MSAN': 'msan_release_bot',
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index e1f51365..a9119d595 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -14613,7 +14613,7 @@
   <int value="441" label="ChromeCleanupEnabled"/>
   <int value="442" label="ChromeCleanupReportingEnabled"/>
   <int value="443" label="DeveloperToolsAvailability"/>
-  <int value="444" label="AllowedUILocales"/>
+  <int value="444" label="AllowedLanguages"/>
   <int value="445" label="IsolateOriginsAndroid"/>
   <int value="446" label="SitePerProcessAndroid"/>
   <int value="447" label="ArcAppInstallEventLoggingEnabled"/>
@@ -29376,6 +29376,7 @@
   <int value="-596337171" label="disable-ash-sidebar"/>
   <int value="-593536514" label="ExperimentalTabController:enabled"/>
   <int value="-589096918" label="ash-enable-fullscreen-app-list"/>
+  <int value="-584624723" label="AndroidSiteSettingsUI:enabled"/>
   <int value="-579192400" label="disable-input-view"/>
   <int value="-572112724" label="DialogTouchBar:disabled"/>
   <int value="-567920515" label="disable-experimental-hotwording"/>
@@ -30085,6 +30086,7 @@
   <int value="857445869" label="enable-captive-portal-bypass-proxy"/>
   <int value="860336036" label="ChromeModernDesign:enabled"/>
   <int value="862453793" label="TranslateUI2016Q2:enabled"/>
+  <int value="863770274" label="AndroidSiteSettingsUI:disabled"/>
   <int value="867512869" label="mark-non-secure-as"/>
   <int value="868009556" label="AutofillUpstream:enabled"/>
   <int value="869531646" label="enable-session-crashed-bubble"/>
@@ -34021,8 +34023,8 @@
 </enum>
 
 <enum name="NetErrorOfflineSuggestionType">
-  <int value="0" label="Prefetched Unopened Page">
-    A Prefetched article that has not yet been opened by the user.
+  <int value="0" label="Prefetched Page">
+    A Prefetched article that has been offlined.
   </int>
   <int value="1" label="Video">
     A video file previously downloaded by the user.
@@ -34132,6 +34134,9 @@
   <int value="26" label="Downloads Page Button Clicked">
     The user pressed a button to open the downloads page.
   </int>
+  <int value="27" label="Offline Content Summary Shown">
+    A summary of available offline content was presented.
+  </int>
 </enum>
 
 <enum name="NetFilterType">
@@ -38916,7 +38921,7 @@
   <int value="8" label="Clicked on a credential (obsolete)"/>
   <int value="9" label="Auto-signin toast timeout"/>
   <int value="10" label="Auto-signin toast clicked (obsolete)"/>
-  <int value="11" label="Clicked 'Google Smart Lock'"/>
+  <int value="11" label="Clicked 'Google Smart Lock' (obsolete)"/>
   <int value="12" label="Clicked the link passwords.google.com"/>
 </enum>
 
@@ -46189,6 +46194,15 @@
   <int value="3" label="Small custom icon"/>
 </enum>
 
+<enum name="SplitApkWorkaroundResult">
+  <int value="0" label="Not run"/>
+  <int value="1" label="No entries"/>
+  <int value="2" label="One entry"/>
+  <int value="3" label="Multiple entries"/>
+  <int value="4" label="Toplevel exception"/>
+  <int value="5" label="Loop exception"/>
+</enum>
+
 <enum name="SqliteErrorCode">
   <summary>Error codes returned by SQLite - see sqlite3.h</summary>
   <int value="0" label="SQLITE_OK">Successful result</int>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index b2f18b4..54daefa 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -2564,6 +2564,16 @@
   </summary>
 </histogram>
 
+<histogram name="Android.WebView.SplitApkWorkaroundResult"
+    enum="SplitApkWorkaroundResult" expires_after="M72">
+  <owner>tiborg@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Result of applying a workaround to fix a crash on Android O if the WebView
+    provider is a split APK (see crbug.com/889954 for more details).
+  </summary>
+</histogram>
+
 <histogram name="Android.WebView.Startup.CreationTime.Stage1.FactoryInit"
     units="ms">
   <owner>changwan@chromium.org</owner>
@@ -92879,7 +92889,7 @@
   <owner>twellington@chromium.org</owner>
   <summary>
     The protocol of the base page, logged at the time that any Search Term
-    Resolution Response is recieved.
+    Resolution Response is received.
   </summary>
 </histogram>
 
@@ -93504,7 +93514,7 @@
   <owner>twellington@chromium.org</owner>
   <summary>
     Whether the search term was single or multi-word, logged at the time that
-    any Search Term Resolution Response is recieved.
+    any Search Term Resolution Response is received.
   </summary>
 </histogram>
 
@@ -119212,7 +119222,7 @@
 <histogram name="WebRTC.Video.MeanFreezeDurationMs" units="ms">
   <owner>ilnik@chromium.org</owner>
   <summary>
-    The average duration of a freeze in video playback. Recorded then a recieve
+    The average duration of a freeze in video playback. Recorded when a received
     stream is removed or content type changes.
   </summary>
 </histogram>
@@ -119220,7 +119230,7 @@
 <histogram name="WebRTC.Video.MeanTimeBetweenFreezesMs" units="ms">
   <owner>ilnik@chromium.org</owner>
   <summary>
-    The average duration of a smooth video playback. Recorded then a recieve
+    The average duration of a smooth video playback. Recorded when a received
     stream is removed or content type changes.
   </summary>
 </histogram>
@@ -119262,6 +119272,14 @@
   </summary>
 </histogram>
 
+<histogram name="WebRTC.Video.NumberFreezesPerMinute" units="freezes/minute">
+  <owner>ssilkin@chromium.org</owner>
+  <summary>
+    The number of video freezes per minute for a received video stream. Recorded
+    when a stream is removed or content type changes.
+  </summary>
+</histogram>
+
 <histogram name="WebRTC.Video.NumberOfPauseEvents" units="pause events">
   <owner>asapersson@chromium.org</owner>
   <summary>
@@ -119274,8 +119292,8 @@
     units="switches/minute">
   <owner>ilnik@chromium.org</owner>
   <summary>
-    The average number of resolution down-switches per minute for a receive
-    video stream. Recorded then a stream is removed or content type changes.
+    The average number of resolution down-switches per minute for a received
+    video stream. Recorded when a stream is removed or content type changes.
   </summary>
 </histogram>
 
@@ -119683,7 +119701,7 @@
   <owner>ilnik@chromium.org</owner>
   <summary>
     The average duration of a freeze in screenshare playback. Recorded then a
-    recieve stream is removed or content type changes.
+    received stream is removed or content type changes.
   </summary>
 </histogram>
 
@@ -119691,7 +119709,7 @@
   <owner>ilnik@chromium.org</owner>
   <summary>
     The average duration of a smooth video playback for screenshare stream.
-    Recorded then a recieve stream is removed or content type changes.
+    Recorded when a received stream is removed or content type changes.
   </summary>
 </histogram>
 
@@ -119730,7 +119748,7 @@
   <owner>ilnik@chromium.org</owner>
   <summary>
     The average number of resolution down-switches per minute for a receive
-    screenshare stream. Recorded then a stream is removed or content type
+    screenshare stream. Recorded when a stream is removed or content type
     changes.
   </summary>
 </histogram>
@@ -119899,16 +119917,16 @@
     units="%">
   <owner>ilnik@chromium.org</owner>
   <summary>
-    Percentage of time the recieve screenshare stream playbacks low quality
-    blocky video. Recorded then a stream is removed or content type changes.
+    Percentage of time the received screenshare stream playbacks low quality
+    blocky video. Recorded when a stream is removed or content type changes.
   </summary>
 </histogram>
 
 <histogram name="WebRTC.Video.Screenshare.TimeInHdPercentage" units="%">
   <owner>ilnik@chromium.org</owner>
   <summary>
-    Percentage of time the recieve screenshare stream playbacks HD resolution.
-    Recorded then a stream is removed or content type changes.
+    Percentage of time the received screenshare stream playbacks HD resolution.
+    Recorded when a stream is removed or content type changes.
   </summary>
 </histogram>
 
@@ -120013,16 +120031,16 @@
 <histogram name="WebRTC.Video.TimeInBlockyVideoPercentage" units="%">
   <owner>ilnik@chromium.org</owner>
   <summary>
-    Percentage of time the recieve video stream playbacks low quality blocky
-    video. Recorded then a stream is removed or content type changes.
+    Percentage of time the receive video stream playbacks low quality blocky
+    video. Recorded when a stream is removed or content type changes.
   </summary>
 </histogram>
 
 <histogram name="WebRTC.Video.TimeInHdPercentage" units="%">
   <owner>ilnik@chromium.org</owner>
   <summary>
-    Percentage of time the recieve video stream playbacks HD resolution.
-    Recorded then a stream is removed or content type changes.
+    Percentage of time the receive video stream playbacks HD resolution.
+    Recorded when a stream is removed or content type changes.
   </summary>
 </histogram>
 
@@ -121075,7 +121093,7 @@
   <owner>hfung@chromium.org</owner>
   <summary>
     The number of results (either query or URL) from ZeroSuggest. This is set
-    every time a successful response from ZeroSuggest is recieved, which can be
+    every time a successful response from ZeroSuggest is received, which can be
     every time the user focuses on the omnibox.
   </summary>
 </histogram>
@@ -121084,7 +121102,7 @@
   <owner>hfung@chromium.org</owner>
   <summary>
     The number of query results returned from ZeroSuggest. This is set every
-    time a successful response from ZeroSuggest is recieved, which can be every
+    time a successful response from ZeroSuggest is received, which can be every
     time the user focuses on the omnibox.
   </summary>
 </histogram>
@@ -121093,7 +121111,7 @@
   <owner>hfung@chromium.org</owner>
   <summary>
     The number of URL results returned from ZeroSuggest. This is set every time
-    a successful response from ZeroSuggest is recieved, which can be every time
+    a successful response from ZeroSuggest is received, which can be every time
     the user focuses on the omnibox.
   </summary>
 </histogram>
@@ -126295,11 +126313,11 @@
       label="Only packets that were received by Chrome as well being part of
              connections via"/>
   <suffix name="IsAnAck"
-      label="Only packets that were probably solo ACK packets when recieved
+      label="Only packets that were probably solo ACK packets when received
              by Chrome as well being part of connections via"/>
   <suffix name="IsNotAck"
       label="Only packets that were probably NOT solo ACK packets when
-             recieved by Chrome as well being part of connections via"/>
+             received by Chrome as well being part of connections via"/>
   <suffix name="Nack"
       label="Only packets that were missed by Chrome as well being part of
              connections via"/>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 9e19611c..220b11f 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -3153,6 +3153,22 @@
       bitmask can be combined.
     </summary>
   </metric>
+  <metric name="ReadonlyWhenFilling">
+    <summary>
+      Records the readonly status encoded with parsing success after parsing for
+      filling. The |value| is constructed as follows: The least significant bit
+      says whether parsing succeeded (1) or not (0). The rest, shifted by one
+      bit to the right is the FormDataParser::ReadonlyPasswordFields
+      representation of the readonly status.
+    </summary>
+  </metric>
+  <metric name="ReadonlyWhenSaving">
+    <summary>
+      Records the readonly status encoded with parsing success after parsing for
+      creating pending credentials. The |value| is constructed the same way as
+      for ReadonlyWhenFilling.
+    </summary>
+  </metric>
   <metric name="Saving.Prompt.Interaction">
     <summary>
       Records how the user interacted with a saving prompt. Recorded values
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index f449ea74..6df3e546 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -12,6 +12,7 @@
 crbug.com/882881 [ Nexus_5 ] blink_perf.bindings/structured-clone-json-deserialize.html [ Skip ]
 crbug.com/882881 [ Nexus_5 ] blink_perf.bindings/structured-clone-json-serialize.html [ Skip ]
 crbug.com/882882 [ Nexus_5 ] blink_perf.bindings/structured-clone-long-string-deserialize.html [ Skip ]
+crbug.com/893209 [ Nexus5X_Webview ] blink_perf.bindings/structured-clone-long-string-deserialize.html [ Skip ]
 crbug.com/882882 [ Nexus_5 ] blink_perf.bindings/structured-clone-long-string-serialize.html [ Skip ]
 crbug.com/882883 [ Nexus_5 ] blink_perf.bindings/worker-structured-clone-json-roundtrip.html [ Skip ]
 crbug.com/882883 [ Nexus_5 ] blink_perf.bindings/worker-structured-clone-json-serialize.html [ Skip ]
@@ -187,8 +188,9 @@
 crbug.com/338838 [ All ] rendering.mobile/basic_stream [ Skip ]
 crbug.com/338838 [ All ] rendering.mobile/basic_stream [ Skip ]
 crbug.com/873013 [ Android_Webview ] rendering.mobile/yahoo_answers_mobile_2018 [ Skip ]
-crbug.com/874935 [ Nexus_5X ] rendering.mobile/yahoo_answers_mobile_2018 [ Skip ]
+crbug.com/893197 [ Nexus_5X ] rendering.mobile/yahoo_answers_mobile_2018 [ Skip ]
 crbug.com/865400 [ Pixel_2 ] rendering.mobile/yahoo_answers_mobile_2018 [ Skip ]
+crbug.com/874935 [ Nexus_5 ] rendering.mobile/yahoo_news_2018 [ Skip ]
 
 # Benchmark: rasterize_and_record_micro.top_25
 crbug.com/764543 [ All ] rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html [ Skip ]
diff --git a/tools/perf/page_sets/data/system_health_desktop.json b/tools/perf/page_sets/data/system_health_desktop.json
index 6945580..0c94873 100644
--- a/tools/perf/page_sets/data/system_health_desktop.json
+++ b/tools/perf/page_sets/data/system_health_desktop.json
@@ -138,6 +138,9 @@
         "load:news:bbc": {
             "DEFAULT": "system_health_desktop_002.wprgo"
         },
+        "load:news:bbc:2018": {
+            "DEFAULT": "system_health_desktop_72c5149b77.wprgo"
+        },
         "load:news:cnn": {
             "DEFAULT": "system_health_desktop_006.wprgo"
         },
@@ -147,12 +150,21 @@
         "load:news:hackernews": {
             "DEFAULT": "system_health_desktop_008.wprgo"
         },
+        "load:news:hackernews:2018": {
+            "DEFAULT": "system_health_desktop_fd099ca6a6.wprgo"
+        },
         "load:news:nytimes": {
             "DEFAULT": "system_health_desktop_009.wprgo"
         },
+        "load:news:nytimes:2018": {
+            "DEFAULT": "system_health_desktop_6d7605317e.wprgo"
+        },
         "load:news:qq": {
             "DEFAULT": "system_health_desktop_010.wprgo"
         },
+        "load:news:qq:2018": {
+            "DEFAULT": "system_health_desktop_413e958e1c.wprgo"
+        },
         "load:news:reddit": {
             "DEFAULT": "system_health_desktop_011.wprgo"
         },
diff --git a/tools/perf/page_sets/data/system_health_desktop_413e958e1c.wprgo.sha1 b/tools/perf/page_sets/data/system_health_desktop_413e958e1c.wprgo.sha1
new file mode 100644
index 0000000..54119021
--- /dev/null
+++ b/tools/perf/page_sets/data/system_health_desktop_413e958e1c.wprgo.sha1
@@ -0,0 +1 @@
+413e958e1c59040ad708139260da49435a633925
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/system_health_desktop_6d7605317e.wprgo.sha1 b/tools/perf/page_sets/data/system_health_desktop_6d7605317e.wprgo.sha1
new file mode 100644
index 0000000..66051a6
--- /dev/null
+++ b/tools/perf/page_sets/data/system_health_desktop_6d7605317e.wprgo.sha1
@@ -0,0 +1 @@
+6d7605317ea18a366c29a0bfb9d7ce525852f03d
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/system_health_desktop_72c5149b77.wprgo.sha1 b/tools/perf/page_sets/data/system_health_desktop_72c5149b77.wprgo.sha1
new file mode 100644
index 0000000..94d7c1c5
--- /dev/null
+++ b/tools/perf/page_sets/data/system_health_desktop_72c5149b77.wprgo.sha1
@@ -0,0 +1 @@
+72c5149b77ad01311daaab155c7d5795626caf00
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/system_health_desktop_fd099ca6a6.wprgo.sha1 b/tools/perf/page_sets/data/system_health_desktop_fd099ca6a6.wprgo.sha1
new file mode 100644
index 0000000..65536d96
--- /dev/null
+++ b/tools/perf/page_sets/data/system_health_desktop_fd099ca6a6.wprgo.sha1
@@ -0,0 +1 @@
+fd099ca6a617e7257a045c64acafec5f74dc778b
\ No newline at end of file
diff --git a/tools/perf/page_sets/system_health/loading_stories.py b/tools/perf/page_sets/system_health/loading_stories.py
index 752d3ae..3b7748f 100644
--- a/tools/perf/page_sets/system_health/loading_stories.py
+++ b/tools/perf/page_sets/system_health/loading_stories.py
@@ -142,6 +142,13 @@
   SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
 
 
+class LoadBbcDesktopStory2018(_LoadingStory):
+  NAME = 'load:news:bbc:2018'
+  URL = 'https://www.bbc.co.uk/news'
+  TAGS = [story_tags.YEAR_2018]
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+
 class LoadCnnStory(_LoadingStory):
   NAME = 'load:news:cnn'
   # Using "https://" shows "Your connection is not private".
@@ -163,6 +170,13 @@
   SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
 
 
+class LoadHackerNewsDesktopStory2018(_LoadingStory):
+  NAME = 'load:news:hackernews:2018'
+  URL = 'https://news.ycombinator.com'
+  TAGS = [story_tags.YEAR_2018]
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+
 class LoadNytimesDesktopStory(_LoadingStory):
   NAME = 'load:news:nytimes'
   URL = 'http://www.nytimes.com'
@@ -170,6 +184,13 @@
   SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
 
 
+class LoadNytimesDesktopStory2018(_LoadingStory):
+  NAME = 'load:news:nytimes:2018'
+  URL = 'http://www.nytimes.com'
+  TAGS = [story_tags.YEAR_2018]
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+
 class LoadNytimesMobileStory(_LoadingStory):
   NAME = 'load:news:nytimes'
   URL = 'http://mobile.nytimes.com'
@@ -184,6 +205,13 @@
   TAGS = [story_tags.INTERNATIONAL, story_tags.YEAR_2016]
 
 
+class LoadQqDesktopStory2018(_LoadingStory):
+  NAME = 'load:news:qq:2018'
+  URL = 'https://news.qq.com'
+  TAGS = [story_tags.INTERNATIONAL, story_tags.YEAR_2018]
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+
 class LoadRedditDesktopStory(_LoadingStory):
   NAME = 'load:news:reddit'
   URL = 'https://www.reddit.com/r/news/top/?sort=top&t=week'
diff --git a/ui/android/java/src/org/chromium/ui/KeyboardVisibilityDelegate.java b/ui/android/java/src/org/chromium/ui/KeyboardVisibilityDelegate.java
index 4f65b3f..689aa4e 100644
--- a/ui/android/java/src/org/chromium/ui/KeyboardVisibilityDelegate.java
+++ b/ui/android/java/src/org/chromium/ui/KeyboardVisibilityDelegate.java
@@ -160,7 +160,7 @@
         return bottomMargin; // This might include a bottom navigation.
     }
 
-    private int calculateKeyboardDetectionThreshold(Context context, View rootView) {
+    protected int calculateKeyboardDetectionThreshold(Context context, View rootView) {
         Rect appRect = new Rect();
         rootView.getWindowVisibleDisplayFrame(appRect);
 
diff --git a/ui/file_manager/integration_tests/file_manager/quick_view.js b/ui/file_manager/integration_tests/file_manager/quick_view.js
index 24ca503..140855b 100644
--- a/ui/file_manager/integration_tests/file_manager/quick_view.js
+++ b/ui/file_manager/integration_tests/file_manager/quick_view.js
@@ -407,6 +407,75 @@
 };
 
 /**
+ * Tests opening Quick View containing a PDF document.
+ */
+testcase.openQuickViewPdf = function() {
+  const caller = getCaller();
+  let appId;
+
+  /**
+   * The PDF <webview> resides in the #quick-view shadow DOM, as a child of
+   * the #dialog element.
+   */
+  const webView = ['#quick-view', '#dialog[open] webview.content'];
+
+  StepsRunner.run([
+    // Open Files app on Downloads containing ENTRIES.tallText.
+    function() {
+      setupAndWaitUntilReady(
+          null, RootPath.DOWNLOADS, this.next, [ENTRIES.tallPdf], []);
+    },
+    // Open the file in Quick View.
+    function(results) {
+      appId = results.windowId;
+      const openSteps = openQuickViewSteps(appId, ENTRIES.tallPdf.nameText);
+      StepsRunner.run(openSteps).then(this.next);
+    },
+    // Wait for the Quick View <webview> to load and display its content.
+    function() {
+      function checkWebViewPdfLoaded(elements) {
+        let haveElements = Array.isArray(elements) && elements.length === 1;
+        if (haveElements)
+          haveElements = elements[0].styles.display.includes('block');
+        if (!haveElements || !elements[0].attributes.src)
+          return pending(caller, 'Waiting for <webview> to load.');
+        return;
+      }
+      repeatUntil(function() {
+        return remoteCall
+            .callRemoteTestUtil(
+                'deepQueryAllElements', appId, [webView, ['display']])
+            .then(checkWebViewPdfLoaded);
+      }).then(this.next);
+    },
+    // Get the <webview> embed type attribute.
+    function() {
+      function checkPdfEmbedType(type) {
+        let haveElements = Array.isArray(type) && type.length === 1;
+        if (!haveElements || !type[0].toString().includes('pdf'))
+          return pending(caller, 'Waiting for plugin <embed> type.');
+        return type[0];
+      }
+      repeatUntil(function() {
+        const getType = 'window.document.querySelector("embed").type';
+        return remoteCall
+            .callRemoteTestUtil(
+                'deepExecuteScriptInWebView', appId, [webView, getType])
+            .then(checkPdfEmbedType);
+      }).then(this.next);
+    },
+    // Check: the <webview> embed type should be PDF mime type.
+    function(type) {
+      chrome.test.assertEq('application/pdf', type);
+      checkIfNoErrorsOccured(this.next);
+    },
+    function() {
+      checkIfNoErrorsOccured(this.next);
+    },
+  ]);
+};
+
+/**
  * Tests opening Quick View and scrolling its <webview> which contains a tall
  * html document.
  */