diff --git a/DEPS b/DEPS
index 780b27f..ae2abcb 100644
--- a/DEPS
+++ b/DEPS
@@ -181,11 +181,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '504032e57526923e9deda5cca6ae5380772195cc',
+  'skia_revision': 'fb28c6fb7fe3f069eb5dca7a5ef2bbd8c87a7cd3',
   # 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': 'd2cad7137654e04a5328728551c51a1b79145a5d',
+  'v8_revision': '7006065f20dd6ee20961e5b7b72be70e431a8b83',
   # 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.
@@ -197,7 +197,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'f6d3cbb2830306f3ef51a72cd3f798684d107c14',
+  'swiftshader_revision': 'c236b576c88966c720eed4effa5ef5da352da217',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -244,7 +244,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': 'f6f813d450e5e09c1e5f3c0f0afa00c5892864f4',
+  'catapult_revision': '32c9791b8a182069f8dacc7dfbab1762c11e77b4',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -252,7 +252,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '2ef3661d276c4d31381479c25e0f2cd4153fe6eb',
+  'devtools_frontend_revision': '9417f6065f0dbdef68a6334d2f05caed6f220c39',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -308,11 +308,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'shaderc_revision': '3f24b6829b3e7da9c97b779402311ece81264ca8',
+  'shaderc_revision': 'dc2172c083f6ac0ba8c1c609d64a2edd0fa8b81b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '5fc2c82c11e078928e6a0f9c447b69fe208815f8',
+  'dawn_revision': '69c68d01b2420e77283166ffcc7ddb4b0fbc2505',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -904,7 +904,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '13928b7e7f1a37e5e70cae53aba089f88bbbccfc',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'fc132e61dbe484619d780ce9dedb08986a090706',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -963,7 +963,7 @@
   },
 
   'src/third_party/glslang/src':
-    Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '51813670627c976a93f4cfbea6fa89fdb4d35cad',
+    Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + 'd203754bc1160cbb14e80de238042a2b9b439917',
 
   'src/third_party/google_toolbox_for_mac/src': {
       'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'),
@@ -1297,7 +1297,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '920683437e19b65d3a6a23a0c539cf9106f1a5cb',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'a2970bdcff5328a92aebf5acba269f3b66eaac1a',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1498,7 +1498,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '88d715c9115a5ce65c0bf660209dfeee9131ccd0',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '4b07059139178636809b3d9eee961da0b9c92437',
+    Var('webrtc_git') + '/src.git' + '@' + 'b42aeaa3fb21d78e59c47d2a9916acb380494496',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1568,7 +1568,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@3f1bd1b88a315c2ff9cca3c5efde1be681128bba',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a6d4c99b62d854ed2b87adc41d8d8dec00554189',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwVariationsSeedFetcherTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwVariationsSeedFetcherTest.java
index 5eac4676..e6e3930 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwVariationsSeedFetcherTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwVariationsSeedFetcherTest.java
@@ -26,13 +26,13 @@
 import org.chromium.android_webview.test.util.VariationsTestUtils;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.components.background_task_scheduler.TaskIds;
 import org.chromium.components.variations.firstrun.VariationsSeedFetcher;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 /**
@@ -41,8 +41,7 @@
 @RunWith(AwJUnit4ClassRunner.class)
 @OnlyRunIn(SINGLE_PROCESS)
 public class AwVariationsSeedFetcherTest {
-    // Jan 1, 2019 12:00AM GMT
-    private static final long FAKE_NOW_MS = 1546300800000L;
+    private static final int JOB_ID = TaskIds.WEBVIEW_VARIATIONS_SEED_FETCH_JOB_ID;
 
     // A mock JobScheduler which only holds one job, and never does anything with it.
     private class MockJobScheduler extends JobScheduler {
@@ -52,10 +51,12 @@
             mJob = null;
         }
 
-        public void assertScheduledWithDelayEqualTo(long delay) {
+        public void assertScheduled() {
             Assert.assertNotNull("No job scheduled", mJob);
-            Assert.assertEquals(
-                    "Job scheduled with wrong delay", delay, mJob.getMinLatencyMillis());
+        }
+
+        public void assertNotScheduled() {
+            Assert.assertNull("Job should not have been scheduled", mJob);
         }
 
         @Override
@@ -88,8 +89,7 @@
 
         @Override
         public int schedule(JobInfo job) {
-            Assert.assertEquals(
-                    "Job scheduled with wrong ID", AwVariationsSeedFetcher.JOB_ID, job.getId());
+            Assert.assertEquals("Job scheduled with wrong ID", JOB_ID, job.getId());
             Assert.assertEquals("Job scheduled with wrong network type",
                     JobInfo.NETWORK_TYPE_ANY, job.getNetworkType());
             Assert.assertTrue("Job scheduled without charging requirement",
@@ -120,7 +120,6 @@
     @Before
     public void setUp() throws IOException {
         AwVariationsSeedFetcher.setMocks(mScheduler, mDownloader);
-        AwVariationsSeedFetcher.setMinJobPeriodMillisForTesting(TimeUnit.DAYS.toMillis(1));
         VariationsTestUtils.deleteSeeds();
     }
 
@@ -135,8 +134,8 @@
     @SmallTest
     public void testScheduleWithNoStamp() {
         try {
-            AwVariationsSeedFetcher.scheduleIfNeeded(FAKE_NOW_MS);
-            mScheduler.assertScheduledWithDelayEqualTo(0);
+            AwVariationsSeedFetcher.scheduleIfNeeded();
+            mScheduler.assertScheduled();
         } finally {
             mScheduler.clear();
         }
@@ -152,30 +151,25 @@
             Assert.assertFalse("Stamp file already exists", stamp.exists());
             Assert.assertTrue("Failed to create stamp file", stamp.createNewFile());
             Assert.assertTrue("Failed to set stamp time", stamp.setLastModified(0));
-            AwVariationsSeedFetcher.scheduleIfNeeded(FAKE_NOW_MS);
-            mScheduler.assertScheduledWithDelayEqualTo(0);
+            AwVariationsSeedFetcher.scheduleIfNeeded();
+            mScheduler.assertScheduled();
         } finally {
             mScheduler.clear();
             VariationsTestUtils.deleteSeeds(); // Remove the stamp file.
         }
     }
 
-    // Create a stamp file with time = 7 hours ago, indicating the download job ran recently. Then
-    // test scheduleIfNeeded(), which should schedule the job 17 hours in the future.
+    // Create a stamp file with time = now, indicating the download job ran recently. Then test
+    // scheduleIfNeeded(), which should not schedule a job.
     @Test
     @MediumTest
     public void testScheduleWithFreshStamp() throws IOException {
-        long seedAge = TimeUnit.HOURS.toMillis(7);
         File stamp = VariationsUtils.getStampFile();
         try {
-            long stampLastModified = FAKE_NOW_MS - seedAge;
             Assert.assertFalse("Stamp file already exists", stamp.exists());
             Assert.assertTrue("Failed to create stamp file", stamp.createNewFile());
-            Assert.assertTrue("Failed to set stamp time", stamp.setLastModified(stampLastModified));
-
-            AwVariationsSeedFetcher.scheduleIfNeeded(FAKE_NOW_MS);
-
-            mScheduler.assertScheduledWithDelayEqualTo(TimeUnit.HOURS.toMillis(17));
+            AwVariationsSeedFetcher.scheduleIfNeeded();
+            mScheduler.assertNotScheduled();
         } finally {
             mScheduler.clear();
             VariationsTestUtils.deleteSeeds(); // Remove the stamp file.
@@ -192,15 +186,15 @@
             @SuppressLint("JobSchedulerService")
             ComponentName component = new ComponentName(
                     ContextUtils.getApplicationContext(), AwVariationsSeedFetcher.class);
-            JobInfo job = new JobInfo.Builder(AwVariationsSeedFetcher.JOB_ID, component)
-                                  .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
-                                  .setRequiresCharging(true)
-                                  .build();
+            JobInfo job = new JobInfo.Builder(JOB_ID, component)
+                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+                    .setRequiresCharging(true)
+                    .build();
             mScheduler.schedule(job);
-            AwVariationsSeedFetcher.scheduleIfNeeded(FAKE_NOW_MS);
+            AwVariationsSeedFetcher.scheduleIfNeeded();
             // Check that our job object hasn't been replaced (meaning that scheduleIfNeeded didn't
             // schedule a job).
-            Assert.assertSame(job, mScheduler.getPendingJob(AwVariationsSeedFetcher.JOB_ID));
+            Assert.assertSame(job, mScheduler.getPendingJob(JOB_ID));
         } finally {
             mScheduler.clear();
         }
diff --git a/android_webview/junit/src/org/chromium/android_webview/robolectric/services/AwVariationsSeedFetcherTest.java b/android_webview/junit/src/org/chromium/android_webview/robolectric/services/AwVariationsSeedFetcherTest.java
deleted file mode 100644
index f2e9261..0000000
--- a/android_webview/junit/src/org/chromium/android_webview/robolectric/services/AwVariationsSeedFetcherTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.android_webview.robolectric.services;
-
-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.robolectric.annotation.Config;
-
-import org.chromium.android_webview.services.AwVariationsSeedFetcher;
-import org.chromium.testing.local.LocalRobolectricTestRunner;
-
-import java.util.concurrent.TimeUnit;
-
-@RunWith(LocalRobolectricTestRunner.class)
-@Config(manifest = Config.NONE)
-public class AwVariationsSeedFetcherTest {
-    // Jan 1, 2019 12:00AM GMT
-    private static final long FAKE_NOW_MS = 1546300800000L;
-
-    @Before
-    public void setUp() {
-        AwVariationsSeedFetcher.setMinJobPeriodMillisForTesting(TimeUnit.DAYS.toMillis(1));
-    }
-
-    @Test
-    @SmallTest
-    public void testJobNotDelayedIfNotPreviouslyRun() {
-        long delayMs = AwVariationsSeedFetcher.computeJobDelay(FAKE_NOW_MS, 0);
-        Assert.assertEquals("Job should have no delay on first run", 0, delayMs);
-    }
-
-    @Test
-    @SmallTest
-    public void testJobNotDelayedOutwideThrottleWindow() {
-        long oldRequestTimeMs = FAKE_NOW_MS - TimeUnit.DAYS.toMillis(4);
-        long delayMs = AwVariationsSeedFetcher.computeJobDelay(FAKE_NOW_MS, oldRequestTimeMs);
-        Assert.assertEquals("Job should have no delay when run after throttle window", 0, delayMs);
-    }
-
-    @Test
-    @SmallTest
-    public void testJobDelayedIfRunWithinThrottleWindow() {
-        long recentRequestTimeMs = FAKE_NOW_MS - TimeUnit.HOURS.toMillis(8);
-        long delayMs = AwVariationsSeedFetcher.computeJobDelay(FAKE_NOW_MS, recentRequestTimeMs);
-        Assert.assertEquals("Job should be delayed if run within throttle window",
-                TimeUnit.HOURS.toMillis(16), delayMs);
-    }
-}
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwVariationsSeedFetcher.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwVariationsSeedFetcher.java
index 9590edc..2e4d31c 100644
--- a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwVariationsSeedFetcher.java
+++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwVariationsSeedFetcher.java
@@ -26,6 +26,7 @@
 import org.chromium.components.version_info.VersionConstants;
 
 import java.io.IOException;
+import java.util.Date;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -41,14 +42,12 @@
  */
 @TargetApi(Build.VERSION_CODES.LOLLIPOP) // for JobService
 public class AwVariationsSeedFetcher extends JobService {
-    public static final int JOB_ID = TaskIds.WEBVIEW_VARIATIONS_SEED_FETCH_JOB_ID;
-    private static final long MIN_JOB_PERIOD_MILLIS = TimeUnit.DAYS.toMillis(1);
-
     private static final String TAG = "AwVariationsSeedFet-";
+    private static final int JOB_ID = TaskIds.WEBVIEW_VARIATIONS_SEED_FETCH_JOB_ID;
+    private static final long MIN_JOB_PERIOD_MILLIS = TimeUnit.DAYS.toMillis(1);
 
     private static JobScheduler sMockJobScheduler;
     private static VariationsSeedFetcher sMockDownloader;
-    private static long sMinJobPeriodMillis = MIN_JOB_PERIOD_MILLIS;
 
     private FetchTask mFetchTask;
 
@@ -82,7 +81,7 @@
                 Context.JOB_SCHEDULER_SERVICE);
     }
 
-    public static void scheduleIfNeeded(long nowMs) {
+    public static void scheduleIfNeeded() {
         JobScheduler scheduler = getScheduler();
         if (scheduler == null) return;
 
@@ -91,30 +90,26 @@
             return;
         }
 
-        long lastRequestTimeMs = VariationsUtils.getStampTime();
+        // Check how long it's been since FetchTask last ran.
+        long lastRequestTime = VariationsUtils.getStampTime();
+        if (lastRequestTime != 0) {
+            long now = (new Date()).getTime();
+            if (now < lastRequestTime + MIN_JOB_PERIOD_MILLIS) {
+                return;
+            }
+        }
+
         ComponentName thisComponent = new ComponentName(
                 ContextUtils.getApplicationContext(), AwVariationsSeedFetcher.class);
         JobInfo job = new JobInfo.Builder(JOB_ID, thisComponent)
-                              .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
-                              .setRequiresCharging(true)
-                              .setMinimumLatency(computeJobDelay(nowMs, lastRequestTimeMs))
-                              .build();
+                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+                .setRequiresCharging(true)
+                .build();
         if (scheduler.schedule(job) != JobScheduler.RESULT_SUCCESS) {
             Log.e(TAG, "Failed to schedule job");
         }
     }
 
-    // Calculates the minimum amount of time to delay the job so we wait at least
-    // sMinJobPeriodMillis between requests. There should be no delay if the previous request
-    // occurred more than sMinJobPeriodMillis ago.
-    public static long computeJobDelay(long nowMs, long lastRequestTimeMs) {
-        if (lastRequestTimeMs == 0) {
-            return 0;
-        }
-        long timeSinceLastRequestMs = nowMs - lastRequestTimeMs;
-        return Math.max(0, sMinJobPeriodMillis - timeSinceLastRequestMs);
-    }
-
     private class FetchTask extends BackgroundOnlyAsyncTask<Void> {
         private JobParameters mParams;
 
@@ -185,8 +180,4 @@
         sMockJobScheduler = scheduler;
         sMockDownloader = fetcher;
     }
-
-    public static void setMinJobPeriodMillisForTesting(long minJobPeriodMillis) {
-        sMinJobPeriodMillis = minJobPeriodMillis;
-    }
 }
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/VariationsSeedHolder.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/VariationsSeedHolder.java
index 12cce3a..c7d9b1f 100644
--- a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/VariationsSeedHolder.java
+++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/VariationsSeedHolder.java
@@ -17,7 +17,6 @@
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.util.Date;
 
 /**
  * VariationsSeedHolder is a singleton which manages the local copy of the variations seed - both
@@ -148,7 +147,7 @@
 
     @VisibleForTesting
     public void scheduleFetchIfNeeded() {
-        AwVariationsSeedFetcher.scheduleIfNeeded(new Date().getTime());
+        AwVariationsSeedFetcher.scheduleIfNeeded();
     }
 
     // overridden by tests
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn
index d076864..33ea364f 100644
--- a/android_webview/test/BUILD.gn
+++ b/android_webview/test/BUILD.gn
@@ -190,7 +190,6 @@
     "//services/device/public/java:geolocation_java_test_support",
     "//third_party/android_support_test_runner:rules_java",
     "//third_party/android_support_test_runner:runner_java",
-    "//third_party/hamcrest:hamcrest_java",
     "//third_party/junit",
     "//third_party/metrics_proto:metrics_proto_java",
     "//ui/android:ui_java",
@@ -457,7 +456,6 @@
     "../junit/src/org/chromium/android_webview/robolectric/FindAddressTest.java",
     "../junit/src/org/chromium/android_webview/robolectric/common/FlagOverrideHelperTest.java",
     "../junit/src/org/chromium/android_webview/robolectric/common/services/ServiceNamesTest.java",
-    "../junit/src/org/chromium/android_webview/robolectric/services/AwVariationsSeedFetcherTest.java",
   ]
 
   deps = [
diff --git a/ash/accelerators/accelerator_commands_unittest.cc b/ash/accelerators/accelerator_commands_unittest.cc
index 4620d9cd..1bf90d0 100644
--- a/ash/accelerators/accelerator_commands_unittest.cc
+++ b/ash/accelerators/accelerator_commands_unittest.cc
@@ -52,19 +52,19 @@
 
   // When not in fullscreen, accelerators::ToggleMaximized toggles Maximized.
   EXPECT_FALSE(window_state->IsMaximized());
-  accelerators::ToggleMaximized();
+  ToggleMaximized();
   EXPECT_TRUE(window_state->IsMaximized());
-  accelerators::ToggleMaximized();
+  ToggleMaximized();
   EXPECT_FALSE(window_state->IsMaximized());
 
   // When in fullscreen accelerators::ToggleMaximized gets out of fullscreen.
   EXPECT_FALSE(window_state->IsFullscreen());
-  accelerators::ToggleFullscreen();
+  ToggleFullscreen();
   EXPECT_TRUE(window_state->IsFullscreen());
-  accelerators::ToggleMaximized();
+  ToggleMaximized();
   EXPECT_FALSE(window_state->IsFullscreen());
   EXPECT_FALSE(window_state->IsMaximized());
-  accelerators::ToggleMaximized();
+  ToggleMaximized();
   EXPECT_FALSE(window_state->IsFullscreen());
   EXPECT_TRUE(window_state->IsMaximized());
 }
diff --git a/ash/accelerators/accelerator_confirmation_dialog.cc b/ash/accelerators/accelerator_confirmation_dialog.cc
index 1899c456..5cd6253 100644
--- a/ash/accelerators/accelerator_confirmation_dialog.cc
+++ b/ash/accelerators/accelerator_confirmation_dialog.cc
@@ -53,7 +53,7 @@
 
   views::Widget* widget = CreateDialogWidget(
       this, nullptr,
-      Shell::GetContainer(ash::Shell::GetPrimaryRootWindow(), container_id));
+      Shell::GetContainer(Shell::GetPrimaryRootWindow(), container_id));
   widget->Show();
 }
 
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc
index c36336a7..41e58832 100644
--- a/ash/accelerators/accelerator_controller_unittest.cc
+++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -614,7 +614,7 @@
 TEST_F(AcceleratorControllerTest, RotateScreenInPhysicalTabletState) {
   display::test::DisplayManagerTestApi(display_manager())
       .SetFirstDisplayAsInternalDisplay();
-  ash::ShellTestApi().SetTabletModeEnabledForTest(true);
+  ShellTestApi().SetTabletModeEnabledForTest(true);
   auto* tablet_mode_controller = Shell::Get()->tablet_mode_controller();
   auto* screen_orientation_controller =
       Shell::Get()->screen_orientation_controller();
@@ -633,7 +633,7 @@
 
   // When the device is no longer used as a tablet, the original rotation will
   // be restored.
-  ash::ShellTestApi().SetTabletModeEnabledForTest(false);
+  ShellTestApi().SetTabletModeEnabledForTest(false);
   EXPECT_FALSE(tablet_mode_controller->is_in_tablet_physical_state());
   EXPECT_EQ(OrientationLockType::kLandscapePrimary,
             screen_orientation_controller->GetCurrentOrientation());
@@ -648,7 +648,7 @@
 TEST_F(AcceleratorControllerTest, RotateScreenWithWindowLockingOrientation) {
   display::test::DisplayManagerTestApi(display_manager())
       .SetFirstDisplayAsInternalDisplay();
-  ash::ShellTestApi().SetTabletModeEnabledForTest(true);
+  ShellTestApi().SetTabletModeEnabledForTest(true);
   auto* tablet_mode_controller = Shell::Get()->tablet_mode_controller();
   auto* screen_orientation_controller =
       Shell::Get()->screen_orientation_controller();
@@ -1063,7 +1063,7 @@
       ui::Accelerator(ui::VKEY_BROWSER_SEARCH, ui::EF_SHIFT_DOWN)));
   base::RunLoop().RunUntilIdle();
   GetAppListTestHelper()->CheckVisibility(true);
-  GetAppListTestHelper()->CheckState(ash::AppListViewState::kFullscreenAllApps);
+  GetAppListTestHelper()->CheckState(AppListViewState::kFullscreenAllApps);
   histogram_tester.ExpectTotalCount(kAppListToggleMethodHistogram,
                                     ++toggle_count_total);
   histogram_tester.ExpectBucketCount(kAppListToggleMethodHistogram,
@@ -1081,7 +1081,7 @@
       ui::Accelerator(ui::VKEY_BROWSER_SEARCH, ui::EF_NONE)));
   base::RunLoop().RunUntilIdle();
   GetAppListTestHelper()->CheckVisibility(true);
-  GetAppListTestHelper()->CheckState(ash::AppListViewState::kPeeking);
+  GetAppListTestHelper()->CheckState(AppListViewState::kPeeking);
   histogram_tester.ExpectTotalCount(kAppListToggleMethodHistogram,
                                     ++toggle_count_total);
   histogram_tester.ExpectBucketCount(kAppListToggleMethodHistogram, kSearchKey,
@@ -1091,7 +1091,7 @@
       ui::Accelerator(ui::VKEY_BROWSER_SEARCH, ui::EF_SHIFT_DOWN)));
   base::RunLoop().RunUntilIdle();
   GetAppListTestHelper()->CheckVisibility(true);
-  GetAppListTestHelper()->CheckState(ash::AppListViewState::kFullscreenAllApps);
+  GetAppListTestHelper()->CheckState(AppListViewState::kFullscreenAllApps);
   histogram_tester.ExpectTotalCount(kAppListToggleMethodHistogram,
                                     ++toggle_count_total);
   histogram_tester.ExpectBucketCount(kAppListToggleMethodHistogram,
@@ -1109,7 +1109,7 @@
       ui::Accelerator(ui::VKEY_BROWSER_SEARCH, ui::EF_NONE)));
   base::RunLoop().RunUntilIdle();
   GetAppListTestHelper()->CheckVisibility(true);
-  GetAppListTestHelper()->CheckState(ash::AppListViewState::kPeeking);
+  GetAppListTestHelper()->CheckState(AppListViewState::kPeeking);
   histogram_tester.ExpectTotalCount(kAppListToggleMethodHistogram,
                                     ++toggle_count_total);
   histogram_tester.ExpectBucketCount(kAppListToggleMethodHistogram, kSearchKey,
@@ -1119,13 +1119,13 @@
   generator->ReleaseKey(ui::VKEY_0, ui::EF_NONE);
   base::RunLoop().RunUntilIdle();
   GetAppListTestHelper()->CheckVisibility(true);
-  GetAppListTestHelper()->CheckState(ash::AppListViewState::kHalf);
+  GetAppListTestHelper()->CheckState(AppListViewState::kHalf);
   // Shift+VKEY_BROWSER_SEARCH transitions to FULLSCREEN_SEARCH.
   EXPECT_TRUE(ProcessInController(
       ui::Accelerator(ui::VKEY_BROWSER_SEARCH, ui::EF_SHIFT_DOWN)));
   base::RunLoop().RunUntilIdle();
   GetAppListTestHelper()->CheckVisibility(true);
-  GetAppListTestHelper()->CheckState(ash::AppListViewState::kFullscreenSearch);
+  GetAppListTestHelper()->CheckState(AppListViewState::kFullscreenSearch);
   histogram_tester.ExpectTotalCount(kAppListToggleMethodHistogram,
                                     ++toggle_count_total);
   histogram_tester.ExpectBucketCount(kAppListToggleMethodHistogram,
diff --git a/ash/accelerators/magnifier_key_scroller.cc b/ash/accelerators/magnifier_key_scroller.cc
index 7f01563..8c4dab4 100644
--- a/ash/accelerators/magnifier_key_scroller.cc
+++ b/ash/accelerators/magnifier_key_scroller.cc
@@ -25,7 +25,7 @@
       switches::kAshEnableMagnifierKeyScroller);
 
   return (magnifier_key_scroller_enabled || has_switch) &&
-         ash::Shell::Get()->magnification_controller()->IsEnabled();
+         Shell::Get()->magnification_controller()->IsEnabled();
 }
 
 // static
@@ -42,7 +42,7 @@
 }
 
 bool MagnifierKeyScroller::ShouldProcessEvent(const ui::KeyEvent* event) const {
-  return IsEnabled() && ash::keyboard_util::IsArrowKeyCode(event->key_code());
+  return IsEnabled() && keyboard_util::IsArrowKeyCode(event->key_code());
 }
 
 bool MagnifierKeyScroller::IsStartEvent(const ui::KeyEvent* event) const {
diff --git a/ash/accelerometer/accelerometer_reader.cc b/ash/accelerometer/accelerometer_reader.cc
index 00c5acd..b784ea33 100644
--- a/ash/accelerometer/accelerometer_reader.cc
+++ b/ash/accelerometer/accelerometer_reader.cc
@@ -153,7 +153,7 @@
 // configuration, and reads the data. Upon a successful read it will notify
 // all observers.
 class AccelerometerFileReader
-    : public ash::TabletModeObserver,
+    : public TabletModeObserver,
       public base::RefCountedThreadSafe<AccelerometerFileReader> {
  public:
   AccelerometerFileReader();
diff --git a/ash/accessibility/accessibility_controller_unittest.cc b/ash/accessibility/accessibility_controller_unittest.cc
index 9c4551b2..fcab59d 100644
--- a/ash/accessibility/accessibility_controller_unittest.cc
+++ b/ash/accessibility/accessibility_controller_unittest.cc
@@ -989,15 +989,15 @@
   controller->AddObserver(&observer);
 
   controller->SetSelectToSpeakState(
-      ash::SelectToSpeakState::kSelectToSpeakStateSelecting);
+      SelectToSpeakState::kSelectToSpeakStateSelecting);
   EXPECT_EQ(controller->GetSelectToSpeakState(),
-            ash::SelectToSpeakState::kSelectToSpeakStateSelecting);
+            SelectToSpeakState::kSelectToSpeakStateSelecting);
   EXPECT_EQ(observer.status_changed_count_, 1);
 
   controller->SetSelectToSpeakState(
-      ash::SelectToSpeakState::kSelectToSpeakStateSpeaking);
+      SelectToSpeakState::kSelectToSpeakStateSpeaking);
   EXPECT_EQ(controller->GetSelectToSpeakState(),
-            ash::SelectToSpeakState::kSelectToSpeakStateSpeaking);
+            SelectToSpeakState::kSelectToSpeakStateSpeaking);
   EXPECT_EQ(observer.status_changed_count_, 2);
 
   controller->RemoveObserver(&observer);
diff --git a/ash/accessibility/accessibility_highlight_controller_unittest.cc b/ash/accessibility/accessibility_highlight_controller_unittest.cc
index b38b8706..4bf3a19 100644
--- a/ash/accessibility/accessibility_highlight_controller_unittest.cc
+++ b/ash/accessibility/accessibility_highlight_controller_unittest.cc
@@ -105,7 +105,7 @@
     // Keep trying until we get the correct size butmap and
     // the first pixel is not transparent.
     while (true) {
-      aura::Window* window = ash::Shell::GetPrimaryRootWindow();
+      aura::Window* window = Shell::GetPrimaryRootWindow();
       base::RunLoop run_loop;
       ui::GrabWindowSnapshotAndScaleAsync(
           window, bounds, bounds.size(),
@@ -197,7 +197,7 @@
 // and AccessibilityFocusRingController.
 TEST_F(AccessibilityHighlightControllerTest, CursorWorksOnMultipleDisplays) {
   UpdateDisplay("400x400,500x500");
-  aura::Window::Windows root_windows = ash::Shell::Get()->GetAllRootWindows();
+  aura::Window::Windows root_windows = Shell::Get()->GetAllRootWindows();
   ASSERT_EQ(2u, root_windows.size());
 
   AccessibilityHighlightController highlight_controller;
diff --git a/ash/accessibility/accessibility_panel_layout_manager.h b/ash/accessibility/accessibility_panel_layout_manager.h
index c2281297..dc72ebcdf 100644
--- a/ash/accessibility/accessibility_panel_layout_manager.h
+++ b/ash/accessibility/accessibility_panel_layout_manager.h
@@ -29,7 +29,7 @@
     : public aura::LayoutManager,
       public display::DisplayObserver,
       public ::wm::ActivationChangeObserver,
-      public ash::ShellObserver {
+      public ShellObserver {
  public:
   // Height of the panel in DIPs. Public for test.
   static constexpr int kDefaultPanelHeight = 35;
diff --git a/ash/ambient/model/photo_model.h b/ash/ambient/model/photo_model.h
index 54b3aca..7a8d5b8f 100644
--- a/ash/ambient/model/photo_model.h
+++ b/ash/ambient/model/photo_model.h
@@ -56,7 +56,7 @@
 
   int buffer_length_for_testing_ = -1;
 
-  base::ObserverList<ash::PhotoModelObserver> observers_;
+  base::ObserverList<PhotoModelObserver> observers_;
 
   DISALLOW_COPY_AND_ASSIGN(PhotoModel);
 };
diff --git a/ash/ambient/ui/ambient_assistant_container_view.cc b/ash/ambient/ui/ambient_assistant_container_view.cc
index cba7a89..a2d6904 100644
--- a/ash/ambient/ui/ambient_assistant_container_view.cc
+++ b/ash/ambient/ui/ambient_assistant_container_view.cc
@@ -98,7 +98,7 @@
       std::make_unique<views::Label>(GetGreetingMessage(active_user_session)));
   greeting_label_->SetEnabledColor(kTextColorSecondary);
   greeting_label_->SetFontList(
-      ash::assistant::ui::GetDefaultFontList()
+      assistant::ui::GetDefaultFontList()
           .DeriveWithSizeDelta(8)
           .DeriveWithWeight(gfx::Font::Weight::NORMAL));
   greeting_label_->SetHorizontalAlignment(
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 3fd093a..d7ddeda 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -516,12 +516,10 @@
 
   // Hide app list UI initially to prevent app list from flashing in background
   // while the initial app window is being shown.
-  if (!last_target_visible_) {
-    presenter_.GetView()->SetVisible(false);
-    presenter_.GetView()->search_box_view()->SetVisible(false);
-  } else {
+  if (!last_target_visible_)
+    presenter_.SetViewVisibility(false);
+  else
     OnVisibilityChanged(true, last_visible_display_id_);
-  }
 }
 
 void AppListControllerImpl::OnAppListItemWillBeDeleted(AppListItem* item) {
@@ -784,6 +782,11 @@
 
       if (!IsShowingEmbeddedAssistantUI())
         presenter_.ShowEmbeddedAssistantUI(true);
+
+      // Make sure that app list views are visible - they might get hidden
+      // during session startup, and the app list visibility might not have yet
+      // changed to visible by this point.
+      presenter_.SetViewVisibility(true);
       break;
     case AssistantVisibility::kHidden:
       NOTREACHED();
@@ -1494,10 +1497,8 @@
         presenter_.GetView()->SelectInitialAppsPage();
     }
 
-    if (real_target_visibility && presenter_.GetView()) {
-      presenter_.GetView()->SetVisible(true);
-      presenter_.GetView()->search_box_view()->SetVisible(true);
-    }
+    if (real_target_visibility && presenter_.GetView())
+      presenter_.SetViewVisibility(true);
 
     if (client_)
       client_->OnAppListVisibilityWillChange(real_target_visibility);
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc
index 368f24f..deac30b 100644
--- a/ash/app_list/app_list_controller_impl_unittest.cc
+++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -481,9 +481,9 @@
   void SetUp() override {
     // The feature verified by this test is only enabled if drag from shelf to
     // home or overview is disabled.
-    scoped_features_.InitWithFeatures(
-        {}, {ash::features::kDragFromShelfToHomeOrOverview,
-             chromeos::features::kShelfHotseat});
+    scoped_features_.InitWithFeatures({},
+                                      {features::kDragFromShelfToHomeOrOverview,
+                                       chromeos::features::kShelfHotseat});
     AppListControllerImplTest::SetUp();
   }
 
@@ -1040,9 +1040,9 @@
   void SetUp() override {
     // The feature verified by this test is only enabled if drag from shelf to
     // home or overview is disabled.
-    scoped_features_.InitWithFeatures(
-        {}, {ash::features::kDragFromShelfToHomeOrOverview,
-             chromeos::features::kShelfHotseat});
+    scoped_features_.InitWithFeatures({},
+                                      {features::kDragFromShelfToHomeOrOverview,
+                                       chromeos::features::kShelfHotseat});
     AppListControllerImplMetricsTest::SetUp();
   }
 
diff --git a/ash/app_list/app_list_presenter_delegate_impl.cc b/ash/app_list/app_list_presenter_delegate_impl.cc
index 61f7438a..43b3ec74 100644
--- a/ash/app_list/app_list_presenter_delegate_impl.cc
+++ b/ash/app_list/app_list_presenter_delegate_impl.cc
@@ -225,13 +225,14 @@
       return;
   }
 
-  // If the event happened on the home button, it'll get handled by the
+  // If the event happened on the home button's widget, it'll get handled by the
   // button.
   Shelf* shelf = Shelf::ForWindow(target);
   HomeButton* home_button = shelf->shelf_widget()->GetHomeButton();
   if (home_button && home_button->GetWidget() &&
       target == home_button->GetWidget()->GetNativeWindow() &&
-      home_button->bounds().Contains(event->location())) {
+      home_button->GetWidget()->GetWindowBoundsInScreen().Contains(
+          event->root_location())) {
     return;
   }
 
diff --git a/ash/app_list/app_list_presenter_impl.cc b/ash/app_list/app_list_presenter_impl.cc
index 4593ba9..9899b412 100644
--- a/ash/app_list/app_list_presenter_impl.cc
+++ b/ash/app_list/app_list_presenter_impl.cc
@@ -11,6 +11,7 @@
 #include "ash/app_list/views/app_list_main_view.h"
 #include "ash/app_list/views/apps_container_view.h"
 #include "ash/app_list/views/contents_view.h"
+#include "ash/app_list/views/search_box_view.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/app_list_switches.h"
 #include "ash/public/cpp/app_list/app_list_types.h"
@@ -190,6 +191,13 @@
   base::RecordAction(base::UserMetricsAction("Launcher_Dismiss"));
 }
 
+void AppListPresenterImpl::SetViewVisibility(bool visible) {
+  if (!view_)
+    return;
+  view_->SetVisible(visible);
+  view_->search_box_view()->SetVisible(visible);
+}
+
 bool AppListPresenterImpl::HandleCloseOpenFolder() {
   return is_target_visibility_show_ && view_ && view_->HandleCloseOpenFolder();
 }
diff --git a/ash/app_list/app_list_presenter_impl.h b/ash/app_list/app_list_presenter_impl.h
index 62c00d0..9fd560c9 100644
--- a/ash/app_list/app_list_presenter_impl.h
+++ b/ash/app_list/app_list_presenter_impl.h
@@ -65,6 +65,10 @@
   // one AppListShowSource or focusing out side of the launcher.
   void Dismiss(base::TimeTicks event_time_stamp);
 
+  // Sets the app list view visibility (without updating the app list window
+  // visibility). No-op if the app list view does not exist.
+  void SetViewVisibility(bool visible);
+
   // If app list has an opened folder, close it. Returns whether an opened
   // folder was closed.
   bool HandleCloseOpenFolder();
diff --git a/ash/assistant/assistant_screen_context_controller.h b/ash/assistant/assistant_screen_context_controller.h
index 5b36c21..74d85f7 100644
--- a/ash/assistant/assistant_screen_context_controller.h
+++ b/ash/assistant/assistant_screen_context_controller.h
@@ -28,7 +28,7 @@
 class AssistantScreenContextModelObserver;
 
 class ASH_EXPORT AssistantScreenContextController
-    : public ash::mojom::AssistantScreenContextController,
+    : public mojom::AssistantScreenContextController,
       public AssistantControllerObserver,
       public AssistantUiModelObserver {
  public:
diff --git a/ash/assistant/assistant_screen_context_controller_unittest.cc b/ash/assistant/assistant_screen_context_controller_unittest.cc
index 2223c092..e9653642 100644
--- a/ash/assistant/assistant_screen_context_controller_unittest.cc
+++ b/ash/assistant/assistant_screen_context_controller_unittest.cc
@@ -52,7 +52,7 @@
     DCHECK(controller_);
   }
 
-  ash::AssistantScreenContextController* controller() { return controller_; }
+  AssistantScreenContextController* controller() { return controller_; }
 
  private:
   AssistantScreenContextController* controller_ = nullptr;
diff --git a/ash/assistant/test/assistant_ash_test_base.cc b/ash/assistant/test/assistant_ash_test_base.cc
index 3cdd5b1..a62871e 100644
--- a/ash/assistant/test/assistant_ash_test_base.cc
+++ b/ash/assistant/test/assistant_ash_test_base.cc
@@ -116,7 +116,7 @@
 }
 
 void AssistantAshTestBase::CloseLauncher() {
-  ash::Shell::Get()->app_list_controller()->ViewClosing();
+  Shell::Get()->app_list_controller()->ViewClosing();
 }
 
 void AssistantAshTestBase::SetTabletMode(bool enable) {
diff --git a/ash/assistant/ui/main_stage/animated_container_view.cc b/ash/assistant/ui/main_stage/animated_container_view.cc
index 034e2c3..37f1e92 100644
--- a/ash/assistant/ui/main_stage/animated_container_view.cc
+++ b/ash/assistant/ui/main_stage/animated_container_view.cc
@@ -58,6 +58,7 @@
 
 void AnimatedContainerView::OnResponseCleared() {
   RemoveAllViews();
+  queued_response_ = nullptr;
 }
 
 void AnimatedContainerView::RemoveAllViews() {
@@ -137,13 +138,13 @@
 
 void AnimatedContainerView::ChangeResponse(
     const scoped_refptr<const AssistantResponse>& response) {
-  // We may have to pend the response while we animate the previous response off
-  // stage. We use a shared pointer to ensure that any views we add to the view
-  // hierarchy can be removed before the underlying views are destroyed.
-  pending_response_ = response;
+  // We may have to postpone the response while we animate the previous response
+  // off stage. We use a shared pointer to ensure that any views we add to the
+  // view hierarchy can be removed before the underlying views are destroyed.
+  queued_response_ = response;
 
   // If we are currently fading out the old content, don't interrupt it.
-  // When the fading out is completed, it will detect we've got a pending
+  // When the fading out is completed, it will detect we've got a queued
   // response and animate it in.
   if (fade_out_in_progress_)
     return;
@@ -151,7 +152,7 @@
   // If we don't have any pre-existing content, there is nothing to animate off
   // stage so we can proceed to add the new response.
   if (content_view()->children().empty()) {
-    AddResponse(std::move(pending_response_));
+    AddResponse(std::move(queued_response_));
     return;
   }
 
@@ -242,10 +243,10 @@
   // clearing of their views and managed resources.
   weak_ptr->RemoveAllViews();
 
-  // It is safe to add our pending response, if one exists, to the view
+  // It is safe to add our queued response, if one exists, to the view
   // hierarchy now that we've cleared the previous response from the stage.
-  if (weak_ptr->pending_response_)
-    weak_ptr->AddResponse(std::move(weak_ptr->pending_response_));
+  if (weak_ptr->queued_response_)
+    weak_ptr->AddResponse(std::move(weak_ptr->queued_response_));
 
   // We return true to delete our observer.
   return true;
@@ -268,8 +269,8 @@
 
   // If the new response arrived while the fade-out was in progress, we will
   // start handling it now.
-  if (weak_ptr->pending_response_)
-    weak_ptr->ChangeResponse(std::move(weak_ptr->pending_response_));
+  if (weak_ptr->queued_response_)
+    weak_ptr->ChangeResponse(std::move(weak_ptr->queued_response_));
 
   // We return true to delete our observer.
   return true;
diff --git a/ash/assistant/ui/main_stage/animated_container_view.h b/ash/assistant/ui/main_stage/animated_container_view.h
index 4156a96..e7f628c4 100644
--- a/ash/assistant/ui/main_stage/animated_container_view.h
+++ b/ash/assistant/ui/main_stage/animated_container_view.h
@@ -130,11 +130,11 @@
   bool fade_out_in_progress_ = false;
 
   // Shared pointers to the response that is currently on stage as well as the
-  // pending response to be presented following the former's animated exit. We
+  // queued response to be presented following the former's animated exit. We
   // use shared pointers to ensure that underlying views are not destroyed
   // before we have an opportunity to remove their associated views.
   scoped_refptr<const AssistantResponse> response_;
-  scoped_refptr<const AssistantResponse> pending_response_;
+  scoped_refptr<const AssistantResponse> queued_response_;
 
   base::WeakPtrFactory<AnimatedContainerView> weak_factory_{this};
 
diff --git a/ash/assistant/ui/main_stage/assistant_card_element_view.cc b/ash/assistant/ui/main_stage/assistant_card_element_view.cc
index b1305bfd..e0e64da 100644
--- a/ash/assistant/ui/main_stage/assistant_card_element_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_card_element_view.cc
@@ -95,7 +95,7 @@
   // vertically. As such, we need to prevent the Assistant card window from
   // receiving events it doesn't need. It needs mouse click events for
   // handling links.
-  window->SetProperty(ash::assistant::ui::kOnlyAllowMouseClickEvents, true);
+  window->SetProperty(assistant::ui::kOnlyAllowMouseClickEvents, true);
 }
 
 void AssistantCardElementView::ChildPreferredSizeChanged(views::View* child) {
diff --git a/ash/assistant/ui/main_stage/assistant_query_view.cc b/ash/assistant/ui/main_stage/assistant_query_view.cc
index ce5e8d4..be4b7732 100644
--- a/ash/assistant/ui/main_stage/assistant_query_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_query_view.cc
@@ -77,7 +77,7 @@
       views::BoxLayout::MainAxisAlignment::kCenter);
 
   layout_manager->set_cross_axis_alignment(
-      views::BoxLayout::CrossAxisAlignment::kCenter);
+      views::BoxLayout::CrossAxisAlignment::kStretch);
 
   // Label.
   label_ = new views::StyledLabel(base::string16(), /*listener=*/nullptr);
@@ -139,8 +139,6 @@
                             CreateStyleInfo(kTextColorSecondary));
     }
   }
-  label_->SizeToFit(width());
-  PreferredSizeChanged();
 }
 
 }  // namespace ash
diff --git a/ash/assistant/ui/main_stage/suggestion_chip_view.cc b/ash/assistant/ui/main_stage/suggestion_chip_view.cc
index 8783197..ed5a85d 100644
--- a/ash/assistant/ui/main_stage/suggestion_chip_view.cc
+++ b/ash/assistant/ui/main_stage/suggestion_chip_view.cc
@@ -106,7 +106,7 @@
   text_view_->SetEnabledColor(kTextColor);
   text_view_->SetSubpixelRenderingEnabled(false);
   text_view_->SetFontList(
-      ash::assistant::ui::GetDefaultFontList().DeriveWithSizeDelta(1));
+      assistant::ui::GetDefaultFontList().DeriveWithSizeDelta(1));
   SetText(params.text);
   AddChildView(text_view_);
 }
diff --git a/ash/assistant/ui/main_stage/ui_element_container_view.cc b/ash/assistant/ui/main_stage/ui_element_container_view.cc
index db2686a..a0b206e 100644
--- a/ash/assistant/ui/main_stage/ui_element_container_view.cc
+++ b/ash/assistant/ui/main_stage/ui_element_container_view.cc
@@ -183,6 +183,7 @@
   // We don't read when there is TTS to avoid speaking over the server response.
   const AssistantResponse* response =
       delegate()->GetInteractionModel()->response();
+  DCHECK(response);
   if (!response->has_tts())
     NotifyAccessibilityEvent(ax::mojom::Event::kAlert, true);
 }
diff --git a/ash/assistant/ui/proactive_suggestions_simple_view.cc b/ash/assistant/ui/proactive_suggestions_simple_view.cc
index fd51ca0..2ee03f0 100644
--- a/ash/assistant/ui/proactive_suggestions_simple_view.cc
+++ b/ash/assistant/ui/proactive_suggestions_simple_view.cc
@@ -94,7 +94,7 @@
   // Assistant icon.
   views::ImageView* assistant_icon = new views::ImageView();
   assistant_icon->SetImage(gfx::CreateVectorIcon(
-      ash::kAssistantIcon, kAssistantIconSizeDip, gfx::kPlaceholderColor));
+      kAssistantIcon, kAssistantIconSizeDip, gfx::kPlaceholderColor));
   assistant_icon->SetPreferredSize(
       gfx::Size(kAssistantIconSizeDip, kAssistantIconSizeDip));
   AddChildView(assistant_icon);
diff --git a/ash/autoclick/autoclick_controller.cc b/ash/autoclick/autoclick_controller.cc
index 34e2a34..88defea 100644
--- a/ash/autoclick/autoclick_controller.cc
+++ b/ash/autoclick/autoclick_controller.cc
@@ -514,10 +514,8 @@
 
 void AutoclickController::InitializeScrollLocation() {
   // Sets the scroll location to the center of the root window.
-  scroll_location_ = ash::Shell::Get()
-                         ->GetPrimaryRootWindow()
-                         ->GetBoundsInScreen()
-                         .CenterPoint();
+  scroll_location_ =
+      Shell::Get()->GetPrimaryRootWindow()->GetBoundsInScreen().CenterPoint();
   is_initial_scroll_location_ = true;
   Shell::Get()
       ->accessibility_controller()
diff --git a/ash/autotest_private_api_utils.cc b/ash/autotest_private_api_utils.cc
index 0ae0ece..141b681 100644
--- a/ash/autotest_private_api_utils.cc
+++ b/ash/autotest_private_api_utils.cc
@@ -82,7 +82,7 @@
 std::vector<aura::Window*> GetAppWindowList() {
   ScopedSkipUserSessionBlockedCheck skip_session_blocked;
   return Shell::Get()->mru_window_tracker()->BuildWindowForCycleWithPipList(
-      ash::kAllDesks);
+      kAllDesks);
 }
 
 bool WaitForLauncherState(AppListViewState target_state,
@@ -110,7 +110,7 @@
     // because a) home launcher behavior is deterministic, b) correctly
     // deteching if the home launcher is animating to visibile/invisible require
     // some refactoring.
-    bool target_visible = target_state != ash::AppListViewState::kClosed;
+    bool target_visible = target_state != AppListViewState::kClosed;
     new HomeLauncherStateWaiter(target_visible, std::move(closure));
   } else {
     // Don't wait if the launcher is already in the target state and not
@@ -121,7 +121,7 @@
         app_list_view &&
         app_list_view->GetWidget()->GetLayer()->GetAnimator()->is_animating();
     bool at_target_state =
-        (!app_list_view && target_state == ash::AppListViewState::kClosed) ||
+        (!app_list_view && target_state == AppListViewState::kClosed) ||
         (app_list_view && app_list_view->app_list_state() == target_state);
     if (at_target_state && !animating) {
       std::move(closure).Run();
diff --git a/ash/detachable_base/detachable_base_notification_controller.cc b/ash/detachable_base/detachable_base_notification_controller.cc
index 994eaae..58acbca 100644
--- a/ash/detachable_base/detachable_base_notification_controller.cc
+++ b/ash/detachable_base/detachable_base_notification_controller.cc
@@ -63,7 +63,7 @@
       IDS_ASH_DETACHABLE_BASE_NOTIFICATION_UPDATE_NEEDED_MESSAGE);
 
   std::unique_ptr<message_center::Notification> notification =
-      ash::CreateSystemNotification(
+      CreateSystemNotification(
           message_center::NOTIFICATION_TYPE_SIMPLE,
           kBaseRequiresUpdateNotificationId, title, message, base::string16(),
           GURL(),
@@ -139,7 +139,7 @@
       IDS_ASH_DETACHABLE_BASE_NOTIFICATION_DEVICE_CHANGED_MESSAGE);
 
   std::unique_ptr<message_center::Notification> notification =
-      ash::CreateSystemNotification(
+      CreateSystemNotification(
           message_center::NOTIFICATION_TYPE_SIMPLE, kBaseChangedNotificationId,
           title, message, base::string16(), GURL(),
           message_center::NotifierId(
diff --git a/ash/display/cros_display_config.cc b/ash/display/cros_display_config.cc
index 349f84a..9e5bb2b 100644
--- a/ash/display/cros_display_config.cc
+++ b/ash/display/cros_display_config.cc
@@ -903,7 +903,7 @@
       return;
     }
     if (!touch_calibrator_)
-      touch_calibrator_ = std::make_unique<ash::TouchCalibratorController>();
+      touch_calibrator_ = std::make_unique<TouchCalibratorController>();
     if (op == mojom::DisplayConfigOperation::kShowNative) {
       // For native calibration, |callback| is not run until calibration
       // completes.
@@ -927,8 +927,8 @@
   }
 
   if (op == mojom::DisplayConfigOperation::kReset) {
-    ash::Shell::Get()->display_manager()->ClearTouchCalibrationData(
-        display.id(), base::nullopt);
+    Shell::Get()->display_manager()->ClearTouchCalibrationData(display.id(),
+                                                               base::nullopt);
     std::move(callback).Run(mojom::DisplayConfigResult::kSuccess);
     return;
   }
@@ -954,7 +954,7 @@
     return;
   }
 
-  ash::Shell::Get()->touch_transformer_controller()->SetForCalibration(false);
+  Shell::Get()->touch_transformer_controller()->SetForCalibration(false);
 
   display::TouchCalibrationData::CalibrationPointPairQuad calibration_points;
   calibration_points[0] = GetCalibrationPair(*calibration->pairs[0]);
diff --git a/ash/display/cursor_window_controller.h b/ash/display/cursor_window_controller.h
index 9b1c6ce..ddfaac8 100644
--- a/ash/display/cursor_window_controller.h
+++ b/ash/display/cursor_window_controller.h
@@ -102,7 +102,7 @@
   ui::CursorSize cursor_size_ = ui::CursorSize::kNormal;
   gfx::Point hot_point_;
 
-  int large_cursor_size_in_dip_ = ash::kDefaultLargeCursorSize;
+  int large_cursor_size_in_dip_ = kDefaultLargeCursorSize;
 
   // The display on which the cursor is drawn.
   // For mirroring mode, the display is always the primary display.
diff --git a/ash/display/display_animator.cc b/ash/display/display_animator.cc
index 229cc141..91a06cb8 100644
--- a/ash/display/display_animator.cc
+++ b/ash/display/display_animator.cc
@@ -120,9 +120,9 @@
         std::make_unique<ui::Layer>(ui::LAYER_SOLID_COLOR);
     hiding_layer->SetColor(SK_ColorBLACK);
     hiding_layer->SetBounds(root_window->bounds());
-    ui::Layer* parent = ash::Shell::GetContainer(
-                            root_window, ash::kShellWindowId_OverlayContainer)
-                            ->layer();
+    ui::Layer* parent =
+        Shell::GetContainer(root_window, kShellWindowId_OverlayContainer)
+            ->layer();
     parent->Add(hiding_layer.get());
 
     hiding_layer->SetOpacity(0.0);
@@ -173,9 +173,9 @@
       hiding_layer = new ui::Layer(ui::LAYER_SOLID_COLOR);
       hiding_layer->SetColor(SK_ColorBLACK);
       hiding_layer->SetBounds(root_window->bounds());
-      ui::Layer* parent = ash::Shell::GetContainer(
-                              root_window, ash::kShellWindowId_OverlayContainer)
-                              ->layer();
+      ui::Layer* parent =
+          Shell::GetContainer(root_window, kShellWindowId_OverlayContainer)
+              ->layer();
       parent->Add(hiding_layer);
       hiding_layer->SetOpacity(1.0f);
       hiding_layer->SetVisible(true);
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc
index 7e89e708..c016d3d 100644
--- a/ash/display/display_manager_unittest.cc
+++ b/ash/display/display_manager_unittest.cc
@@ -1097,7 +1097,7 @@
             updated_display_info2.GetOverscanInsetsInPixel().ToString());
 
   // Make sure switching primary display applies the overscan offset only once.
-  ash::Shell::Get()->window_tree_host_manager()->SetPrimaryDisplayId(
+  Shell::Get()->window_tree_host_manager()->SetPrimaryDisplayId(
       display_manager()->GetSecondaryDisplay().id());
   EXPECT_EQ("-500,0 500x500",
             display_manager()->GetSecondaryDisplay().bounds().ToString());
@@ -1699,7 +1699,7 @@
   EXPECT_EQ(1U, display_manager()->GetNumDisplays());
   EXPECT_EQ("1,1 100x100",
             GetDisplayInfoForId(10).bounds_in_native().ToString());
-  EXPECT_EQ("100x100", ash::Shell::GetPrimaryRootWindow()
+  EXPECT_EQ("100x100", Shell::GetPrimaryRootWindow()
                            ->GetHost()
                            ->GetBoundsInPixels()
                            .size()
@@ -1725,7 +1725,7 @@
             GetDisplayForId(internal_display_id).bounds().ToString());
   EXPECT_EQ("500,0 100x100", GetDisplayForId(10).bounds().ToString());
 
-  ash::Shell::Get()->window_tree_host_manager()->SetPrimaryDisplayId(
+  Shell::Get()->window_tree_host_manager()->SetPrimaryDisplayId(
       secondary_display_info.id());
   EXPECT_EQ("-500,0 500x500",
             GetDisplayForId(internal_display_id).bounds().ToString());
diff --git a/ash/display/display_prefs_unittest.cc b/ash/display/display_prefs_unittest.cc
index 5d8a90f..c0f417a 100644
--- a/ash/display/display_prefs_unittest.cc
+++ b/ash/display/display_prefs_unittest.cc
@@ -210,7 +210,7 @@
   }
 
   display::Display::Rotation GetRotation() {
-    return ash::Shell::Get()
+    return Shell::Get()
         ->display_manager()
         ->GetDisplayInfo(display::Display::InternalDisplayId())
         .GetRotation(display::Display::RotationSource::ACCELEROMETER);
@@ -227,7 +227,7 @@
 
   std::string GetRegisteredDisplayPlacementStr(
       const display::DisplayIdList& list) {
-    return ash::Shell::Get()
+    return Shell::Get()
         ->display_manager()
         ->layout_store()
         ->GetRegisteredDisplayLayout(list)
@@ -236,10 +236,10 @@
   }
 
   chromeos::DisplayPowerState GetRequestedPowerState() const {
-    return ash::Shell::Get()->display_configurator()->GetRequestedPowerState();
+    return Shell::Get()->display_configurator()->GetRequestedPowerState();
   }
   PrefService* local_state() { return &local_state_; }
-  DisplayPrefs* display_prefs() { return ash::Shell::Get()->display_prefs(); }
+  DisplayPrefs* display_prefs() { return Shell::Get()->display_prefs(); }
 
  private:
   std::unique_ptr<WindowTreeHostManager::Observer> observer_;
@@ -277,9 +277,7 @@
 
   // requested_power_state_ should be chromeos::DISPLAY_POWER_ALL_ON at boot
   const base::Optional<chromeos::DisplayPowerState> requested_power_state =
-      ash::Shell::Get()
-          ->display_configurator()
-          ->GetRequestedPowerStateForTest();
+      Shell::Get()->display_configurator()->GetRequestedPowerStateForTest();
   ASSERT_NE(base::nullopt, requested_power_state);
   EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, *requested_power_state);
   // DisplayPowerState should be ignored at boot.
@@ -303,8 +301,8 @@
 }
 
 TEST_F(DisplayPrefsTest, BasicStores) {
-  ash::WindowTreeHostManager* window_tree_host_manager =
-      ash::Shell::Get()->window_tree_host_manager();
+  WindowTreeHostManager* window_tree_host_manager =
+      Shell::Get()->window_tree_host_manager();
   int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id();
 
   // For each configuration change, we store mirror info only for external
@@ -523,7 +521,7 @@
   EXPECT_EQ(base::NumberToString(id2), primary_id_str);
 
   display_manager()->SetLayoutForCurrentDisplays(
-      display::test::CreateDisplayLayout(ash::Shell::Get()->display_manager(),
+      display::test::CreateDisplayLayout(Shell::Get()->display_manager(),
                                          display::DisplayPlacement::BOTTOM,
                                          20));
 
@@ -619,14 +617,13 @@
   int64_t id = display::Screen::GetScreen()->GetPrimaryDisplay().id();
   // Set display's resolution in single display. It creates the notification and
   // display preferences should not stored meanwhile.
-  ash::Shell* shell = ash::Shell::Get();
+  Shell* shell = Shell::Get();
 
   display::ManagedDisplayMode old_mode(gfx::Size(400, 300));
   display::ManagedDisplayMode new_mode(gfx::Size(500, 400));
   EXPECT_TRUE(shell->resolution_notification_controller()
                   ->PrepareNotificationAndSetDisplayMode(
-                      id, old_mode, new_mode,
-                      ash::mojom::DisplayConfigSource::kUser,
+                      id, old_mode, new_mode, mojom::DisplayConfigSource::kUser,
                       base::OnceClosure()));
   UpdateDisplay("500x400#500x400|400x300|300x200");
 
@@ -643,7 +640,7 @@
   base::RunLoop().RunUntilIdle();
 
   // The specified resolution will be stored by SetDisplayMode.
-  ash::Shell::Get()->display_manager()->SetDisplayMode(
+  Shell::Get()->display_manager()->SetDisplayMode(
       id, display::ManagedDisplayMode(gfx::Size(300, 200), 60.0f, false, true));
   UpdateDisplay("300x200#500x400|400x300|300x200");
 
@@ -724,15 +721,15 @@
 }
 
 TEST_F(DisplayPrefsTestGuest, DisplayPrefsTestGuest) {
-  ash::WindowTreeHostManager* window_tree_host_manager =
-      ash::Shell::Get()->window_tree_host_manager();
+  WindowTreeHostManager* window_tree_host_manager =
+      Shell::Get()->window_tree_host_manager();
 
   UpdateDisplay("200x200*2,200x200");
 
   LoggedInAsGuest();
   int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id();
   display::test::ScopedSetInternalDisplayId set_internal(
-      ash::Shell::Get()->display_manager(), id1);
+      Shell::Get()->display_manager(), id1);
   int64_t id2 = display_manager()->GetSecondaryDisplay().id();
   display_manager()->SetLayoutForCurrentDisplays(
       display::test::CreateDisplayLayout(display_manager(),
@@ -833,7 +830,7 @@
 // Tests that display configuration changes caused by TabletModeController
 // are not saved.
 TEST_F(DisplayPrefsTest, DontSaveTabletModeControllerRotations) {
-  ash::Shell* shell = ash::Shell::Get();
+  Shell* shell = Shell::Get();
   display::Display::SetInternalDisplayId(
       display::Screen::GetScreen()->GetPrimaryDisplay().id());
   LoggedInAsUser();
@@ -852,8 +849,7 @@
               -base::kMeanGravityFloat);
   update->Set(ACCELEROMETER_SOURCE_SCREEN, false, 0.0f, base::kMeanGravityFloat,
               0.0f);
-  ash::TabletModeController* controller =
-      ash::Shell::Get()->tablet_mode_controller();
+  TabletModeController* controller = Shell::Get()->tablet_mode_controller();
   controller->OnAccelerometerUpdated(update);
   EXPECT_TRUE(controller->InTabletMode());
 
@@ -1003,8 +999,8 @@
               -base::kMeanGravityFloat);
   update->Set(ACCELEROMETER_SOURCE_SCREEN, false, 0.0f, base::kMeanGravityFloat,
               0.0f);
-  ash::TabletModeController* tablet_mode_controller =
-      ash::Shell::Get()->tablet_mode_controller();
+  TabletModeController* tablet_mode_controller =
+      Shell::Get()->tablet_mode_controller();
   tablet_mode_controller->OnAccelerometerUpdated(update);
   EXPECT_TRUE(tablet_mode_controller->InTabletMode());
   bool screen_orientation_rotation_lock = IsRotationLocked();
@@ -1020,7 +1016,7 @@
       display::Screen::GetScreen()->GetPrimaryDisplay().id());
   ASSERT_FALSE(local_state()->HasPrefPath(prefs::kDisplayRotationLock));
 
-  ash::Shell::Get()->screen_orientation_controller()->ToggleUserRotationLock();
+  Shell::Get()->screen_orientation_controller()->ToggleUserRotationLock();
 
   EXPECT_TRUE(local_state()->HasPrefPath(prefs::kDisplayRotationLock));
 
@@ -1096,7 +1092,7 @@
   std::vector<display::ManagedDisplayInfo> display_info_list;
   display_info_list.emplace_back(first_display_info);
   display_manager()->OnNativeDisplaysChanged(display_info_list);
-  ash::Shell::Get()->window_tree_host_manager()->SetPrimaryDisplayId(
+  Shell::Get()->window_tree_host_manager()->SetPrimaryDisplayId(
       first_display_id);
   EXPECT_FALSE(display_manager()->IsInUnifiedMode());
   EXPECT_FALSE(display_manager()->IsInMirrorMode());
diff --git a/ash/display/display_util.cc b/ash/display/display_util.cc
index c7038acd..a8dcad0 100644
--- a/ash/display/display_util.cc
+++ b/ash/display/display_util.cc
@@ -154,7 +154,7 @@
   }
 
   std::unique_ptr<message_center::Notification> notification =
-      ash::CreateSystemNotification(
+      CreateSystemNotification(
           message_center::NOTIFICATION_TYPE_SIMPLE, kDisplayErrorNotificationId,
           base::string16(),  // title
           message,
diff --git a/ash/display/mouse_cursor_event_filter.cc b/ash/display/mouse_cursor_event_filter.cc
index 8cea699d..d7ec342 100644
--- a/ash/display/mouse_cursor_event_filter.cc
+++ b/ash/display/mouse_cursor_event_filter.cc
@@ -25,7 +25,7 @@
 
 void MouseCursorEventFilter::ShowSharedEdgeIndicator(aura::Window* from) {
   mouse_warp_controller_ =
-      ash::CreateMouseWarpController(Shell::Get()->display_manager(), from);
+      CreateMouseWarpController(Shell::Get()->display_manager(), from);
 }
 
 void MouseCursorEventFilter::HideSharedEdgeIndicator() {
@@ -38,7 +38,7 @@
 
 void MouseCursorEventFilter::OnDisplayConfigurationChanged() {
   mouse_warp_controller_ =
-      ash::CreateMouseWarpController(Shell::Get()->display_manager(), nullptr);
+      CreateMouseWarpController(Shell::Get()->display_manager(), nullptr);
 }
 
 void MouseCursorEventFilter::OnMouseEvent(ui::MouseEvent* event) {
diff --git a/ash/display/overscan_calibrator.cc b/ash/display/overscan_calibrator.cc
index db97ee5..8213055 100644
--- a/ash/display/overscan_calibrator.cc
+++ b/ash/display/overscan_calibrator.cc
@@ -119,8 +119,8 @@
       committed_(false) {
   // Undo the overscan calibration temporarily so that the user can see
   // dark boundary and current overscan region.
-  ash::Shell::Get()->window_tree_host_manager()->SetOverscanInsets(
-      display_.id(), gfx::Insets());
+  Shell::Get()->window_tree_host_manager()->SetOverscanInsets(display_.id(),
+                                                              gfx::Insets());
   UpdateUILayer();
   display::Screen::GetScreen()->AddObserver(this);
 }
@@ -130,13 +130,13 @@
   // Overscan calibration has finished without commit, so the display has to
   // be the original offset.
   if (!committed_) {
-    ash::Shell::Get()->window_tree_host_manager()->SetOverscanInsets(
+    Shell::Get()->window_tree_host_manager()->SetOverscanInsets(
         display_.id(), initial_insets_);
   }
 }
 
 void OverscanCalibrator::Commit() {
-  ash::Shell::Get()->window_tree_host_manager()->SetOverscanInsets(
+  Shell::Get()->window_tree_host_manager()->SetOverscanInsets(
       display_.id(), ConvertToHost(display_, insets_));
   committed_ = true;
 }
@@ -188,12 +188,11 @@
 
 void OverscanCalibrator::UpdateUILayer() {
   display::ManagedDisplayInfo info =
-      ash::Shell::Get()->display_manager()->GetDisplayInfo(display_.id());
+      Shell::Get()->display_manager()->GetDisplayInfo(display_.id());
 
-  aura::Window* root = ash::Shell::GetRootWindowForDisplayId(display_.id());
+  aura::Window* root = Shell::GetRootWindowForDisplayId(display_.id());
   ui::Layer* parent_layer =
-      ash::Shell::GetContainer(root, ash::kShellWindowId_OverlayContainer)
-          ->layer();
+      Shell::GetContainer(root, kShellWindowId_OverlayContainer)->layer();
   calibration_layer_.reset(new ui::Layer());
   calibration_layer_->SetOpacity(0.5f);
   calibration_layer_->SetBounds(parent_layer->bounds());
diff --git a/ash/display/resolution_notification_controller.cc b/ash/display/resolution_notification_controller.cc
index 6273a42..57829fc4 100644
--- a/ash/display/resolution_notification_controller.cc
+++ b/ash/display/resolution_notification_controller.cc
@@ -114,13 +114,13 @@
     int64_t display_id,
     const display::ManagedDisplayMode& old_resolution,
     const display::ManagedDisplayMode& new_resolution,
-    ash::mojom::DisplayConfigSource source,
+    mojom::DisplayConfigSource source,
     base::OnceClosure accept_callback) {
   Shell::Get()->screen_layout_observer()->SetDisplayChangedFromSettingsUI(
       display_id);
   display::DisplayManager* const display_manager =
       Shell::Get()->display_manager();
-  if (source == ash::mojom::DisplayConfigSource::kPolicy ||
+  if (source == mojom::DisplayConfigSource::kPolicy ||
       display::Display::IsInternalDisplayId(display_id)) {
     // We don't show notifications to confirm/revert the resolution change in
     // the case of an internal display or policy-forced changes.
@@ -222,7 +222,7 @@
                 base::UTF8ToUTF16(
                     change_info_->current_resolution.size().ToString()));
 
-  std::unique_ptr<Notification> notification = ash::CreateSystemNotification(
+  std::unique_ptr<Notification> notification = CreateSystemNotification(
       message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId, message,
       timeout_message,
       base::string16(),  // display_source
diff --git a/ash/display/resolution_notification_controller.h b/ash/display/resolution_notification_controller.h
index f32ca31..755eb8f 100644
--- a/ash/display/resolution_notification_controller.h
+++ b/ash/display/resolution_notification_controller.h
@@ -62,7 +62,7 @@
       int64_t display_id,
       const display::ManagedDisplayMode& old_resolution,
       const display::ManagedDisplayMode& new_resolution,
-      ash::mojom::DisplayConfigSource source,
+      mojom::DisplayConfigSource source,
       base::OnceClosure accept_callback) WARN_UNUSED_RESULT;
 
   // Returns true if the notification is visible or scheduled to be visible and
diff --git a/ash/drag_drop/drag_drop_controller.cc b/ash/drag_drop/drag_drop_controller.cc
index 2ac03ef..367a7f2a 100644
--- a/ash/drag_drop/drag_drop_controller.cc
+++ b/ash/drag_drop/drag_drop_controller.cc
@@ -465,7 +465,7 @@
         cursor = ui::CursorType::kAlias;
       else if (op & ui::DragDropTypes::DRAG_MOVE)
         cursor = ui::CursorType::kGrabbing;
-      ash::Shell::Get()->cursor_manager()->SetCursor(cursor);
+      Shell::Get()->cursor_manager()->SetCursor(cursor);
     }
   }
 
@@ -490,7 +490,7 @@
 
 void DragDropController::Drop(aura::Window* target,
                               const ui::LocatedEvent& event) {
-  ash::Shell::Get()->cursor_manager()->SetCursor(ui::CursorType::kPointer);
+  Shell::Get()->cursor_manager()->SetCursor(ui::CursorType::kPointer);
 
   // We must guarantee that a target gets a OnDragEntered before Drop. WebKit
   // depends on not getting a Drop without DragEnter. This behavior is
@@ -546,7 +546,7 @@
 
 void DragDropController::DoDragCancel(
     base::TimeDelta drag_cancel_animation_duration) {
-  ash::Shell::Get()->cursor_manager()->SetCursor(ui::CursorType::kPointer);
+  Shell::Get()->cursor_manager()->SetCursor(ui::CursorType::kPointer);
 
   // |drag_window_| can be NULL if we have just started the drag and have not
   // received any DragUpdates, or, if the |drag_window_| gets destroyed during
@@ -616,7 +616,7 @@
   drag_data_.reset();
   // Cleanup can be called again while deleting DragDropTracker, so delete
   // the pointer with a local variable to avoid double free.
-  std::unique_ptr<ash::DragDropTracker> holder = std::move(drag_drop_tracker_);
+  std::unique_ptr<DragDropTracker> holder = std::move(drag_drop_tracker_);
 }
 
 }  // namespace ash
diff --git a/ash/drag_drop/drag_drop_controller.h b/ash/drag_drop/drag_drop_controller.h
index bce9249..6fc034ea 100644
--- a/ash/drag_drop/drag_drop_controller.h
+++ b/ash/drag_drop/drag_drop_controller.h
@@ -138,7 +138,7 @@
   // Closure for quitting nested run loop.
   base::OnceClosure quit_closure_;
 
-  std::unique_ptr<ash::DragDropTracker> drag_drop_tracker_;
+  std::unique_ptr<DragDropTracker> drag_drop_tracker_;
   std::unique_ptr<DragDropTrackerDelegate> drag_drop_window_delegate_;
 
   ui::DragDropTypes::DragEventSource current_drag_event_source_;
diff --git a/ash/events/event_rewriter_controller_impl.cc b/ash/events/event_rewriter_controller_impl.cc
index 6b44d04..76736178 100644
--- a/ash/events/event_rewriter_controller_impl.cc
+++ b/ash/events/event_rewriter_controller_impl.cc
@@ -43,7 +43,7 @@
 
 void EventRewriterControllerImpl::Initialize(
     ui::EventRewriterChromeOS::Delegate* event_rewriter_delegate,
-    ash::SpokenFeedbackEventRewriterDelegate*
+    SpokenFeedbackEventRewriterDelegate*
         spoken_feedback_event_rewriter_delegate) {
   std::unique_ptr<KeyboardDrivenEventRewriter> keyboard_driven_event_rewriter =
       std::make_unique<KeyboardDrivenEventRewriter>();
@@ -51,7 +51,7 @@
 
   std::unique_ptr<ui::EventRewriterChromeOS> event_rewriter_chromeos =
       std::make_unique<ui::EventRewriterChromeOS>(
-          event_rewriter_delegate, ash::Shell::Get()->sticky_keys_controller());
+          event_rewriter_delegate, Shell::Get()->sticky_keys_controller());
 
   std::unique_ptr<SpokenFeedbackEventRewriter> spoken_feedback_event_rewriter =
       std::make_unique<SpokenFeedbackEventRewriter>(
diff --git a/ash/events/event_rewriter_controller_impl.h b/ash/events/event_rewriter_controller_impl.h
index 2632029..6c614b0 100644
--- a/ash/events/event_rewriter_controller_impl.h
+++ b/ash/events/event_rewriter_controller_impl.h
@@ -32,7 +32,7 @@
 
   // EventRewriterController:
   void Initialize(ui::EventRewriterChromeOS::Delegate* event_rewriter_delegate,
-                  ash::SpokenFeedbackEventRewriterDelegate*
+                  SpokenFeedbackEventRewriterDelegate*
                       spoken_feedback_event_rewriter_delegate) override;
   void AddEventRewriter(std::unique_ptr<ui::EventRewriter> rewriter) override;
   void SetKeyboardDrivenEventRewriterEnabled(bool enabled) override;
diff --git a/ash/events/keyboard_driven_event_rewriter.cc b/ash/events/keyboard_driven_event_rewriter.cc
index c9000c4b8..aa85857b 100644
--- a/ash/events/keyboard_driven_event_rewriter.cc
+++ b/ash/events/keyboard_driven_event_rewriter.cc
@@ -55,8 +55,8 @@
   const ui::KeyEvent& key_event = static_cast<const ui::KeyEvent&>(event);
   ui::KeyboardCode key_code = key_event.key_code();
 
-  if (!ash::keyboard_util::IsArrowKeyCode(key_code) &&
-      key_code != ui::VKEY_RETURN && key_code != ui::VKEY_F6) {
+  if (!keyboard_util::IsArrowKeyCode(key_code) && key_code != ui::VKEY_RETURN &&
+      key_code != ui::VKEY_F6) {
     return ui::EVENT_REWRITE_CONTINUE;
   }
 
@@ -65,7 +65,7 @@
       key_event.code(), key_event.GetDomKey(), key_event.key_code()};
 
   if (arrow_to_tab_rewriting_enabled_) {
-    if (ash::keyboard_util::IsArrowKeyCode(key_code)) {
+    if (keyboard_util::IsArrowKeyCode(key_code)) {
       const ui::KeyEvent tab_event(ui::ET_KEY_PRESSED, ui::VKEY_TAB,
                                    ui::EF_NONE);
       state.code = tab_event.code();
diff --git a/ash/extended_desktop_unittest.cc b/ash/extended_desktop_unittest.cc
index e367b9b..11439d7 100644
--- a/ash/extended_desktop_unittest.cc
+++ b/ash/extended_desktop_unittest.cc
@@ -833,8 +833,8 @@
   views::Textfield* textfield = new views::Textfield;
   lock_widget->client_view()->AddChildView(textfield);
 
-  ash::Shell::GetContainer(Shell::GetPrimaryRootWindow(),
-                           ash::kShellWindowId_LockScreenContainer)
+  Shell::GetContainer(Shell::GetPrimaryRootWindow(),
+                      kShellWindowId_LockScreenContainer)
       ->AddChild(lock_widget->GetNativeView());
   lock_widget->Show();
   textfield->RequestFocus();
diff --git a/ash/highlighter/highlighter_controller.cc b/ash/highlighter/highlighter_controller.cc
index 0bf378d..175cc173 100644
--- a/ash/highlighter/highlighter_controller.cc
+++ b/ash/highlighter/highlighter_controller.cc
@@ -237,7 +237,7 @@
 
 bool HighlighterController::CanStartNewGesture(ui::TouchEvent* event) {
   // Ignore events over the palette.
-  if (ash::palette_utils::PaletteContainsPointInScreen(event->root_location()))
+  if (palette_utils::PaletteContainsPointInScreen(event->root_location()))
     return false;
   return !interrupted_stroke_timer_ &&
          FastInkPointerController::CanStartNewGesture(event);
diff --git a/ash/highlighter/highlighter_controller_test_api.h b/ash/highlighter/highlighter_controller_test_api.h
index b5fbedd..a5e0560 100644
--- a/ash/highlighter/highlighter_controller_test_api.h
+++ b/ash/highlighter/highlighter_controller_test_api.h
@@ -19,8 +19,7 @@
 // An api for testing the HighlighterController class.
 // Implements ash::mojom::HighlighterControllerClient and binds itself as the
 // client to provide the tests with access to gesture recognition results.
-class HighlighterControllerTestApi
-    : public ash::HighlighterController::Observer {
+class HighlighterControllerTestApi : public HighlighterController::Observer {
  public:
   explicit HighlighterControllerTestApi(HighlighterController* instance);
   ~HighlighterControllerTestApi() override;
diff --git a/ash/keyboard/ui/keyboard_ui.h b/ash/keyboard/ui/keyboard_ui.h
index 7c2874c9..0b9902ae 100644
--- a/ash/keyboard/ui/keyboard_ui.h
+++ b/ash/keyboard/ui/keyboard_ui.h
@@ -74,7 +74,7 @@
   KeyboardUIController* keyboard_controller() { return keyboard_controller_; }
 
  private:
-  keyboard::KeyboardUIController* keyboard_controller_ = nullptr;
+  KeyboardUIController* keyboard_controller_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(KeyboardUI);
 };
diff --git a/ash/keyboard/ui/keyboard_ui_controller_unittest.cc b/ash/keyboard/ui/keyboard_ui_controller_unittest.cc
index 3707931..ffe16fe 100644
--- a/ash/keyboard/ui/keyboard_ui_controller_unittest.cc
+++ b/ash/keyboard/ui/keyboard_ui_controller_unittest.cc
@@ -159,12 +159,12 @@
     controller_.Initialize(
         std::make_unique<TestKeyboardUIFactory>(host()->GetInputMethod()),
         layout_delegate_.get());
-    keyboard::SetTouchKeyboardEnabled(true);
+    SetTouchKeyboardEnabled(true);
     controller_.AddObserver(this);
   }
 
   void TearDown() override {
-    keyboard::SetTouchKeyboardEnabled(false);
+    SetTouchKeyboardEnabled(false);
     controller_.RemoveObserver(this);
     focus_controller_.reset();
     aura::test::AuraTestBase::TearDown();
@@ -233,7 +233,7 @@
     if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE &&
         client->GetTextInputMode() != ui::TEXT_INPUT_MODE_NONE) {
       input_method->ShowVirtualKeyboardIfEnabled();
-      ASSERT_TRUE(keyboard::WaitUntilShown());
+      ASSERT_TRUE(WaitUntilShown());
     }
   }
 
@@ -494,7 +494,7 @@
   EXPECT_TRUE(keyboard_window->IsVisible());
   EXPECT_FALSE(IsKeyboardDisabled());
 
-  keyboard::SetTouchKeyboardEnabled(false);
+  SetTouchKeyboardEnabled(false);
   EXPECT_TRUE(IsKeyboardDisabled());
 }
 
@@ -533,7 +533,7 @@
   EXPECT_TRUE(keyboard_window()->IsVisible());
   float show_start_opacity = layer->opacity();
   gfx::Transform transform;
-  transform.Translate(0, keyboard::kFullWidthKeyboardAnimationDistance);
+  transform.Translate(0, kFullWidthKeyboardAnimationDistance);
   EXPECT_EQ(transform, layer->transform());
   // Actual final bounds should be notified after animation finishes to avoid
   // flash of background being seen.
@@ -729,14 +729,14 @@
   EXPECT_TRUE(keyboard_window->IsVisible());
   EXPECT_FALSE(IsKeyboardDisabled());
 
-  keyboard::SetTouchKeyboardEnabled(false);
+  SetTouchKeyboardEnabled(false);
   EXPECT_TRUE(IsKeyboardDisabled());
 
-  keyboard::SetTouchKeyboardEnabled(true);
+  SetTouchKeyboardEnabled(true);
   ClearKeyboardDisabled();
   EXPECT_FALSE(IsKeyboardDisabled());
 
-  keyboard::SetTouchKeyboardEnabled(false);
+  SetTouchKeyboardEnabled(false);
   EXPECT_TRUE(IsKeyboardDisabled());
 }
 
@@ -768,21 +768,21 @@
 
 TEST_F(KeyboardUIControllerTest, OnKeyboardEnabledChangedToEnabled) {
   // Start with the keyboard disabled.
-  keyboard::SetTouchKeyboardEnabled(false);
+  SetTouchKeyboardEnabled(false);
 
   MockKeyboardControllerObserver mock_observer;
   controller().AddObserver(&mock_observer);
 
   EXPECT_CALL(mock_observer, OnKeyboardEnabledChanged(true))
       .WillOnce(testing::InvokeWithoutArgs([]() {
-        auto* controller = keyboard::KeyboardUIController::Get();
+        auto* controller = KeyboardUIController::Get();
         ASSERT_TRUE(controller);
         EXPECT_TRUE(controller->IsEnabled());
         EXPECT_TRUE(controller->GetKeyboardWindow());
         EXPECT_TRUE(controller->GetRootWindow());
       }));
 
-  keyboard::SetTouchKeyboardEnabled(true);
+  SetTouchKeyboardEnabled(true);
 
   controller().RemoveObserver(&mock_observer);
 }
@@ -793,14 +793,14 @@
 
   EXPECT_CALL(mock_observer, OnKeyboardEnabledChanged(false))
       .WillOnce(testing::InvokeWithoutArgs([]() {
-        auto* controller = keyboard::KeyboardUIController::Get();
+        auto* controller = KeyboardUIController::Get();
         ASSERT_TRUE(controller);
         EXPECT_FALSE(controller->IsEnabled());
         EXPECT_FALSE(controller->GetKeyboardWindow());
         EXPECT_FALSE(controller->GetRootWindow());
       }));
 
-  keyboard::SetTouchKeyboardEnabled(false);
+  SetTouchKeyboardEnabled(false);
 
   controller().RemoveObserver(&mock_observer);
 }
diff --git a/ash/keyboard/ui/keyboard_util_unittest.cc b/ash/keyboard/ui/keyboard_util_unittest.cc
index fc4bd9864..2bbe76ef 100644
--- a/ash/keyboard/ui/keyboard_util_unittest.cc
+++ b/ash/keyboard/ui/keyboard_util_unittest.cc
@@ -96,32 +96,32 @@
 // Tests that we respect the accessibility setting.
 TEST_F(KeyboardUtilTest, AlwaysShowIfA11yEnabled) {
   // Disabled by default.
-  EXPECT_FALSE(keyboard::IsKeyboardEnabled());
+  EXPECT_FALSE(IsKeyboardEnabled());
   // If enabled by accessibility, should ignore other flag values.
   DisableAllFlags();
-  keyboard::SetAccessibilityKeyboardEnabled(true);
-  EXPECT_TRUE(keyboard::IsKeyboardEnabled());
+  SetAccessibilityKeyboardEnabled(true);
+  EXPECT_TRUE(IsKeyboardEnabled());
 }
 
 // Tests that we respect the policy setting.
 TEST_F(KeyboardUtilTest, AlwaysShowIfPolicyEnabled) {
-  EXPECT_FALSE(keyboard::IsKeyboardEnabled());
+  EXPECT_FALSE(IsKeyboardEnabled());
   // If policy is enabled, should ignore other flag values.
   DisableAllFlags();
   SetEnableFlag(KeyboardEnableFlag::kPolicyEnabled);
-  EXPECT_TRUE(keyboard::IsKeyboardEnabled());
+  EXPECT_TRUE(IsKeyboardEnabled());
 }
 
 // Tests that we respect the policy setting.
 TEST_F(KeyboardUtilTest, HidesIfPolicyDisabled) {
-  EXPECT_FALSE(keyboard::IsKeyboardEnabled());
+  EXPECT_FALSE(IsKeyboardEnabled());
   EnableAllFlags();
   // Set accessibility to neutral since accessibility has higher precedence.
-  keyboard::SetAccessibilityKeyboardEnabled(false);
-  EXPECT_TRUE(keyboard::IsKeyboardEnabled());
+  SetAccessibilityKeyboardEnabled(false);
+  EXPECT_TRUE(IsKeyboardEnabled());
   // Disable policy. Keyboard should be disabled.
   SetEnableFlag(KeyboardEnableFlag::kPolicyDisabled);
-  EXPECT_FALSE(keyboard::IsKeyboardEnabled());
+  EXPECT_FALSE(IsKeyboardEnabled());
 }
 
 // Tests that the keyboard shows when requested flag provided higher priority
@@ -130,10 +130,10 @@
   DisableAllFlags();
   // Remove device policy, which has higher precedence than us.
   ClearEnableFlag(KeyboardEnableFlag::kPolicyDisabled);
-  EXPECT_FALSE(keyboard::IsKeyboardEnabled());
+  EXPECT_FALSE(IsKeyboardEnabled());
   // Requested should have higher precedence than all the remaining flags.
   SetEnableFlag(KeyboardEnableFlag::kExtensionEnabled);
-  EXPECT_TRUE(keyboard::IsKeyboardEnabled());
+  EXPECT_TRUE(IsKeyboardEnabled());
 }
 
 // Tests that the touch keyboard is hidden when requested flag is disabled and
@@ -142,20 +142,20 @@
   EnableAllFlags();
   // Remove higher precedence flags.
   ClearEnableFlag(KeyboardEnableFlag::kPolicyEnabled);
-  keyboard::SetAccessibilityKeyboardEnabled(false);
-  EXPECT_TRUE(keyboard::IsKeyboardEnabled());
+  SetAccessibilityKeyboardEnabled(false);
+  EXPECT_TRUE(IsKeyboardEnabled());
   // Set requested flag to disable. Keyboard should disable.
   SetEnableFlag(KeyboardEnableFlag::kExtensionDisabled);
-  EXPECT_FALSE(keyboard::IsKeyboardEnabled());
+  EXPECT_FALSE(IsKeyboardEnabled());
 }
 
 // SetTouchKeyboardEnabled has the lowest priority, but should still work when
 // none of the other flags are enabled.
 TEST_F(KeyboardUtilTest, HideKeyboardWhenTouchEnabled) {
   ResetAllFlags();
-  EXPECT_FALSE(keyboard::IsKeyboardEnabled());
-  keyboard::SetTouchKeyboardEnabled(true);
-  EXPECT_TRUE(keyboard::IsKeyboardEnabled());
+  EXPECT_FALSE(IsKeyboardEnabled());
+  SetTouchKeyboardEnabled(true);
+  EXPECT_TRUE(IsKeyboardEnabled());
 }
 
 TEST_F(KeyboardUtilTest, UpdateKeyboardConfig) {
@@ -178,17 +178,17 @@
   EXPECT_FALSE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
   // Enable the virtual keyboard.
-  keyboard::SetTouchKeyboardEnabled(true);
+  SetTouchKeyboardEnabled(true);
   EXPECT_TRUE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
   // Set overscroll enabled flag.
   KeyboardConfig config = keyboard_ui_controller_.keyboard_config();
-  config.overscroll_behavior = keyboard::KeyboardOverscrollBehavior::kDisabled;
+  config.overscroll_behavior = KeyboardOverscrollBehavior::kDisabled;
   keyboard_ui_controller_.UpdateKeyboardConfig(config);
   EXPECT_FALSE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
   // Set default overscroll flag.
-  config.overscroll_behavior = keyboard::KeyboardOverscrollBehavior::kDefault;
+  config.overscroll_behavior = KeyboardOverscrollBehavior::kDefault;
   keyboard_ui_controller_.UpdateKeyboardConfig(config);
   EXPECT_TRUE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
@@ -201,18 +201,18 @@
 // See https://crbug.com/946358.
 TEST_F(KeyboardUtilTest, RebuildsWhenChangingAccessibilityFlag) {
   // Virtual keyboard enabled with compact layout.
-  keyboard::SetTouchKeyboardEnabled(true);
+  SetTouchKeyboardEnabled(true);
 
-  keyboard::TestKeyboardControllerObserver observer;
+  TestKeyboardControllerObserver observer;
   keyboard_ui_controller_.AddObserver(&observer);
 
   // Virtual keyboard should rebuild to switch to a11y layout.
-  keyboard::SetAccessibilityKeyboardEnabled(true);
+  SetAccessibilityKeyboardEnabled(true);
   EXPECT_EQ(1, observer.disabled_count);
   EXPECT_EQ(1, observer.enabled_count);
 
   // Virtual keyboard should rebuild to switch back to compact layout.
-  keyboard::SetAccessibilityKeyboardEnabled(false);
+  SetAccessibilityKeyboardEnabled(false);
   EXPECT_EQ(2, observer.disabled_count);
   EXPECT_EQ(2, observer.enabled_count);
 
diff --git a/ash/laser/laser_pointer_controller.cc b/ash/laser/laser_pointer_controller.cc
index b5b9896..e708d60 100644
--- a/ash/laser/laser_pointer_controller.cc
+++ b/ash/laser/laser_pointer_controller.cc
@@ -76,7 +76,7 @@
 
 bool LaserPointerController::CanStartNewGesture(ui::TouchEvent* event) {
   // Ignore events over the palette.
-  if (ash::palette_utils::PaletteContainsPointInScreen(event->root_location()))
+  if (palette_utils::PaletteContainsPointInScreen(event->root_location()))
     return false;
   return FastInkPointerController::CanStartNewGesture(event);
 }
diff --git a/ash/login/login_screen_test_api.cc b/ash/login/login_screen_test_api.cc
index 618a38b..b8e789c 100644
--- a/ash/login/login_screen_test_api.cc
+++ b/ash/login/login_screen_test_api.cc
@@ -136,8 +136,8 @@
 
 // static
 bool LoginScreenTestApi::IsAuthErrorBubbleShown() {
-  ash::LockScreen::TestApi lock_screen_test(ash::LockScreen::Get());
-  ash::LockContentsView::TestApi lock_contents_test(
+  LockScreen::TestApi lock_screen_test(LockScreen::Get());
+  LockContentsView::TestApi lock_contents_test(
       lock_screen_test.contents_view());
   return lock_contents_test.auth_error_bubble()->GetVisible();
 }
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc
index 2d340b29..68a1568 100644
--- a/ash/login/ui/lock_contents_view.cc
+++ b/ash/login/ui/lock_contents_view.cc
@@ -1831,7 +1831,7 @@
   }
 
   // http://crbug/866790: After Supervised Users are deprecated, remove this.
-  if (ash::features::IsSupervisedUserDeprecationNoticeEnabled() &&
+  if (features::IsSupervisedUserDeprecationNoticeEnabled() &&
       big_user.basic_user_info.type == user_manager::USER_TYPE_SUPERVISED) {
     base::string16 message = l10n_util::GetStringUTF16(
         IDS_ASH_LOGIN_POD_LEGACY_SUPERVISED_EXPIRATION_WARNING);
diff --git a/ash/login/ui/lock_contents_view_unittest.cc b/ash/login/ui/lock_contents_view_unittest.cc
index 2b657b0..a5119ae 100644
--- a/ash/login/ui/lock_contents_view_unittest.cc
+++ b/ash/login/ui/lock_contents_view_unittest.cc
@@ -2047,7 +2047,7 @@
   // Disable auth and media.
   DataDispatcher()->DisableAuthForUser(
       kFirstUserAccountId,
-      AuthDisabledData(ash::AuthDisabledReason::kTimeWindowLimit,
+      AuthDisabledData(AuthDisabledReason::kTimeWindowLimit,
                        base::Time::Now() + base::TimeDelta::FromHours(8),
                        base::TimeDelta::FromHours(1),
                        true /*disable_lock_screen_media*/));
@@ -2073,7 +2073,7 @@
   // Disable auth and media.
   DataDispatcher()->DisableAuthForUser(
       kFirstUserAccountId,
-      AuthDisabledData(ash::AuthDisabledReason::kTimeWindowLimit,
+      AuthDisabledData(AuthDisabledReason::kTimeWindowLimit,
                        base::Time::Now() + base::TimeDelta::FromHours(8),
                        base::TimeDelta::FromHours(1),
                        true /*disable_lock_screen_media*/));
@@ -2109,7 +2109,7 @@
   // Disable auth, but allow media.
   DataDispatcher()->DisableAuthForUser(
       kFirstUserAccountId,
-      AuthDisabledData(ash::AuthDisabledReason::kTimeWindowLimit,
+      AuthDisabledData(AuthDisabledReason::kTimeWindowLimit,
                        base::Time::Now() + base::TimeDelta::FromHours(8),
                        base::TimeDelta::FromHours(1),
                        false /*disable_lock_screen_media*/));
@@ -2175,30 +2175,30 @@
   // Simulate initial state - user auth disabled and button shown.
   DataDispatcher()->DisableAuthForUser(child_id, GetTestDisabledAuthData());
   Shell::Get()->login_screen_controller()->ShowParentAccessButton(true);
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsParentAccessButtonShown());
+  EXPECT_TRUE(LoginScreenTestApi::IsParentAccessButtonShown());
 
   // Validation failed - show the button.
   contents->ShowParentAccessDialog();
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsParentAccessButtonShown());
+  EXPECT_FALSE(LoginScreenTestApi::IsParentAccessButtonShown());
   ParentAccessWidget::TestApi(ParentAccessWidget::Get())
       .SimulateValidationFinished(false);
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsParentAccessButtonShown());
+  EXPECT_TRUE(LoginScreenTestApi::IsParentAccessButtonShown());
 
   // Validation succeeded - hide the button.
   contents->ShowParentAccessDialog();
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsParentAccessButtonShown());
+  EXPECT_FALSE(LoginScreenTestApi::IsParentAccessButtonShown());
   ParentAccessWidget::TestApi(ParentAccessWidget::Get())
       .SimulateValidationFinished(true);
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsParentAccessButtonShown());
+  EXPECT_FALSE(LoginScreenTestApi::IsParentAccessButtonShown());
 
   // Validation failed but user auth got enabled - hide button.
   // (Device got unlocked when parent access dialog was shown)
   contents->ShowParentAccessDialog();
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsParentAccessButtonShown());
+  EXPECT_FALSE(LoginScreenTestApi::IsParentAccessButtonShown());
   DataDispatcher()->EnableAuthForUser(child_id);
   ParentAccessWidget::TestApi(ParentAccessWidget::Get())
       .SimulateValidationFinished(false);
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsParentAccessButtonShown());
+  EXPECT_FALSE(LoginScreenTestApi::IsParentAccessButtonShown());
 }
 
 using LockContentsViewPowerManagerUnitTest = LockContentsViewUnitTest;
diff --git a/ash/login/ui/lock_screen.cc b/ash/login/ui/lock_screen.cc
index c8b142674..c767562 100644
--- a/ash/login/ui/lock_screen.cc
+++ b/ash/login/ui/lock_screen.cc
@@ -46,7 +46,7 @@
 }
 
 LockScreen::LockScreen(ScreenType type) : type_(type) {
-  tray_action_observer_.Add(ash::Shell::Get()->tray_action());
+  tray_action_observer_.Add(Shell::Get()->tray_action());
   saved_clipboard_ = ui::Clipboard::TakeForCurrentThread();
 }
 
@@ -119,9 +119,9 @@
 
 void LockScreen::Destroy() {
   LoginScreenController::AuthenticationStage authentication_stage =
-      ash::Shell::Get()->login_screen_controller()->authentication_stage();
+      Shell::Get()->login_screen_controller()->authentication_stage();
   base::debug::Alias(&authentication_stage);
-  if (ash::Shell::Get()->login_screen_controller()->authentication_stage() !=
+  if (Shell::Get()->login_screen_controller()->authentication_stage() !=
       authentication_stage) {
     LOG(FATAL) << "Unexpected authentication stage "
                << static_cast<int>(authentication_stage);
diff --git a/ash/login/ui/parent_access_widget.cc b/ash/login/ui/parent_access_widget.cc
index 0f2a2d6b..f879282 100644
--- a/ash/login/ui/parent_access_widget.cc
+++ b/ash/login/ui/parent_access_widget.cc
@@ -93,10 +93,10 @@
   ShellWindowId parent_window_id =
       Shell::Get()->session_controller()->GetSessionState() ==
               session_manager::SessionState::ACTIVE
-          ? ash::kShellWindowId_SystemModalContainer
-          : ash::kShellWindowId_LockSystemModalContainer;
+          ? kShellWindowId_SystemModalContainer
+          : kShellWindowId_LockSystemModalContainer;
   widget_params.parent =
-      ash::Shell::GetPrimaryRootWindow()->GetChildById(parent_window_id);
+      Shell::GetPrimaryRootWindow()->GetChildById(parent_window_id);
 
   ParentAccessView::Callbacks callbacks;
   callbacks.on_finished = base::BindRepeating(&ParentAccessWidget::OnExit,
diff --git a/ash/magnifier/magnification_controller_unittest.cc b/ash/magnifier/magnification_controller_unittest.cc
index dfeb863c..ab43046 100644
--- a/ash/magnifier/magnification_controller_unittest.cc
+++ b/ash/magnifier/magnification_controller_unittest.cc
@@ -85,8 +85,8 @@
     return location.ToString();
   }
 
-  ash::MagnificationController* GetMagnificationController() const {
-    return ash::Shell::Get()->magnification_controller();
+  MagnificationController* GetMagnificationController() const {
+    return Shell::Get()->magnification_controller();
   }
 
   gfx::Rect GetViewport() const {
diff --git a/ash/media/media_notification_controller_impl.cc b/ash/media/media_notification_controller_impl.cc
index 01cfb69..ba22074 100644
--- a/ash/media/media_notification_controller_impl.cc
+++ b/ash/media/media_notification_controller_impl.cc
@@ -173,7 +173,7 @@
     return;
 
   std::unique_ptr<message_center::Notification> notification =
-      ash::CreateSystemNotification(
+      CreateSystemNotification(
           message_center::NotificationType::NOTIFICATION_TYPE_CUSTOM, id,
           base::string16(), base::string16(), base::string16(), GURL(),
           message_center::NotifierId(
diff --git a/ash/media/media_notification_controller_impl_unittest.cc b/ash/media/media_notification_controller_impl_unittest.cc
index ae6632d..32615784 100644
--- a/ash/media/media_notification_controller_impl_unittest.cc
+++ b/ash/media/media_notification_controller_impl_unittest.cc
@@ -453,8 +453,8 @@
 
   // Show a non-media notification that should still be displayed.
   message_center->AddNotification(
-      ash::CreateSystemNotification("test", base::string16(), base::string16(),
-                                    "test", base::BindRepeating([]() {})));
+      CreateSystemNotification("test", base::string16(), base::string16(),
+                               "test", base::BindRepeating([]() {})));
 
   EXPECT_EQ(2u, message_center->GetVisibleNotifications().size());
 
diff --git a/ash/metrics/user_metrics_recorder_unittest.cc b/ash/metrics/user_metrics_recorder_unittest.cc
index 62c4687..12f4a2a4 100644
--- a/ash/metrics/user_metrics_recorder_unittest.cc
+++ b/ash/metrics/user_metrics_recorder_unittest.cc
@@ -137,13 +137,13 @@
   ASSERT_EQ(0u, shelf_model->items().size());
 
   ShelfItem shelf_item;
-  shelf_item.type = ash::TYPE_PINNED_APP;
+  shelf_item.type = TYPE_PINNED_APP;
   shelf_item.id = ShelfID("app_id_1");
   shelf_model->Add(shelf_item);
   shelf_item.id = ShelfID("app_id_2");
   shelf_model->Add(shelf_item);
 
-  shelf_item.type = ash::TYPE_APP;
+  shelf_item.type = TYPE_APP;
   shelf_item.id = ShelfID("app_id_3");
   shelf_model->Add(shelf_item);
   shelf_item.id = ShelfID("app_id_4");
diff --git a/ash/multi_user/multi_user_window_manager_impl.h b/ash/multi_user/multi_user_window_manager_impl.h
index 312c919a..7c3c0dd7 100644
--- a/ash/multi_user/multi_user_window_manager_impl.h
+++ b/ash/multi_user/multi_user_window_manager_impl.h
@@ -228,7 +228,7 @@
   // The animation between users.
   std::unique_ptr<UserSwitchAnimator> animation_;
 
-  base::ObserverList<ash::MultiUserWindowManagerObserver>::Unchecked observers_;
+  base::ObserverList<MultiUserWindowManagerObserver>::Unchecked observers_;
 
   DISALLOW_COPY_AND_ASSIGN(MultiUserWindowManagerImpl);
 };
diff --git a/ash/public/cpp/app_list/app_list_client.h b/ash/public/cpp/app_list/app_list_client.h
index b2af2563..26f248f 100644
--- a/ash/public/cpp/app_list/app_list_client.h
+++ b/ash/public/cpp/app_list/app_list_client.h
@@ -55,8 +55,8 @@
   // by user pressing ENTER key.
   virtual void OpenSearchResult(const std::string& result_id,
                                 int event_flags,
-                                ash::AppListLaunchedFrom launched_from,
-                                ash::AppListLaunchType launch_type,
+                                AppListLaunchedFrom launched_from,
+                                AppListLaunchType launch_type,
                                 int suggestion_index,
                                 bool launch_as_default) = 0;
   // Invokes a custom action on a result with |result_id|.
@@ -100,17 +100,14 @@
                                    const std::string& id,
                                    GetContextMenuModelCallback callback) = 0;
   // Invoked when a folder is created in Ash (e.g. merge items into a folder).
-  virtual void OnFolderCreated(
-      int profile_id,
-      std::unique_ptr<ash::AppListItemMetadata> folder) = 0;
+  virtual void OnFolderCreated(int profile_id,
+                               std::unique_ptr<AppListItemMetadata> folder) = 0;
   // Invoked when a folder has only one item left and so gets removed.
-  virtual void OnFolderDeleted(
-      int profile_id,
-      std::unique_ptr<ash::AppListItemMetadata> folder) = 0;
+  virtual void OnFolderDeleted(int profile_id,
+                               std::unique_ptr<AppListItemMetadata> folder) = 0;
   // Invoked when user changes a folder's name or an item's position.
-  virtual void OnItemUpdated(
-      int profile_id,
-      std::unique_ptr<ash::AppListItemMetadata> folder) = 0;
+  virtual void OnItemUpdated(int profile_id,
+                             std::unique_ptr<AppListItemMetadata> folder) = 0;
   // Invoked when a "page break" item is added with |id| and |position|.
   virtual void OnPageBreakItemAdded(int profile_id,
                                     const std::string& id,
@@ -133,7 +130,7 @@
 
   virtual void NotifySearchResultsForLogging(
       const base::string16& trimmed_query,
-      const ash::SearchResultIdWithPositionIndices& results,
+      const SearchResultIdWithPositionIndices& results,
       int position_index) = 0;
 
  protected:
diff --git a/ash/public/cpp/app_list/app_list_config.cc b/ash/public/cpp/app_list/app_list_config.cc
index 0a9a6d1..50171ca 100644
--- a/ash/public/cpp/app_list/app_list_config.cc
+++ b/ash/public/cpp/app_list/app_list_config.cc
@@ -255,7 +255,7 @@
 
 }  // namespace
 
-AppListConfig::AppListConfig(ash::AppListConfigType type)
+AppListConfig::AppListConfig(AppListConfigType type)
     : type_(type),
       scale_x_(1),
       scale_y_(1),
@@ -482,22 +482,22 @@
 // static
 AppListConfig& AppListConfig::instance() {
   return *AppListConfigProvider::Get().GetConfigForType(
-      ash::AppListConfigType::kShared, true /*can_create*/);
+      AppListConfigType::kShared, true /*can_create*/);
 }
 
 int AppListConfig::GetPreferredIconDimension(
-    ash::SearchResultDisplayType display_type) const {
+    SearchResultDisplayType display_type) const {
   switch (display_type) {
-    case ash::SearchResultDisplayType::kRecommendation:
+    case SearchResultDisplayType::kRecommendation:
       FALLTHROUGH;
-    case ash::SearchResultDisplayType::kTile:
+    case SearchResultDisplayType::kTile:
       return search_tile_icon_dimension_;
-    case ash::SearchResultDisplayType::kList:
+    case SearchResultDisplayType::kList:
       return search_list_icon_dimension_;
-    case ash::SearchResultDisplayType::kNone:  // Falls through.
-    case ash::SearchResultDisplayType::kCard:
+    case SearchResultDisplayType::kNone:  // Falls through.
+    case SearchResultDisplayType::kCard:
       return 0;
-    case ash::SearchResultDisplayType::kLast:
+    case SearchResultDisplayType::kLast:
       return 0;
   }
 }
diff --git a/ash/public/cpp/app_list/app_list_config.h b/ash/public/cpp/app_list/app_list_config.h
index ca421202..43a9d23 100644
--- a/ash/public/cpp/app_list/app_list_config.h
+++ b/ash/public/cpp/app_list/app_list_config.h
@@ -22,7 +22,7 @@
 class ASH_PUBLIC_EXPORT AppListConfig {
  public:
   // Constructor for unscaled configurations of the provided type.
-  explicit AppListConfig(ash::AppListConfigType type);
+  explicit AppListConfig(AppListConfigType type);
 
   // Constructor for scaled app list configuration.
   // Used only if kScalableAppList feature is not enabled, in which case the
@@ -47,7 +47,7 @@
   // Gets default app list configuration.
   static AppListConfig& instance();
 
-  ash::AppListConfigType type() const { return type_; }
+  AppListConfigType type() const { return type_; }
   float scale_x() const { return scale_x_; }
   float scale_y() const { return scale_y_; }
   int grid_tile_width() const { return grid_tile_width_; }
@@ -226,8 +226,7 @@
   }
 
   // Returns the dimension at which a result's icon should be displayed.
-  int GetPreferredIconDimension(
-      ash::SearchResultDisplayType display_type) const;
+  int GetPreferredIconDimension(SearchResultDisplayType display_type) const;
 
   // Returns the maximum number of items allowed in specified page in apps grid.
   int GetMaxNumOfItemsPerPage(int page) const;
@@ -241,7 +240,7 @@
   int GetIdealVerticalMargin(const gfx::Rect& abailable_bounds) const;
 
  private:
-  const ash::AppListConfigType type_;
+  const AppListConfigType type_;
 
   // Current config scale values - should be different from 1 for
   // AppListConfigType::kShared only.
diff --git a/ash/public/cpp/app_list/app_list_config_provider.cc b/ash/public/cpp/app_list/app_list_config_provider.cc
index dc11978..f91d9b8f 100644
--- a/ash/public/cpp/app_list/app_list_config_provider.cc
+++ b/ash/public/cpp/app_list/app_list_config_provider.cc
@@ -62,25 +62,24 @@
   observers_.RemoveObserver(observer);
 }
 
-AppListConfig* AppListConfigProvider::GetConfigForType(
-    ash::AppListConfigType type,
-    bool can_create) {
+AppListConfig* AppListConfigProvider::GetConfigForType(AppListConfigType type,
+                                                       bool can_create) {
   const auto config_it = configs_.find(type);
   if (config_it != configs_.end())
     return config_it->second.get();
 
   // Assume the shared config always exists.
-  if (type != ash::AppListConfigType::kShared && !can_create)
+  if (type != AppListConfigType::kShared && !can_create)
     return nullptr;
 
-  DCHECK(type == ash::AppListConfigType::kShared ||
+  DCHECK(type == AppListConfigType::kShared ||
          app_list_features::IsScalableAppListEnabled());
 
   auto config = std::make_unique<AppListConfig>(type);
   auto* result = config.get();
   configs_.emplace(type, std::move(config));
 
-  if (type != ash::AppListConfigType::kShared) {
+  if (type != AppListConfigType::kShared) {
     for (auto& observer : observers_)
       observer.OnAppListConfigCreated(type);
   }
@@ -182,8 +181,7 @@
   if (!app_list_features::IsScalableAppListEnabled())
     return AppListConfig::instance();
 
-  ash::AppListConfigType type =
-      GetConfigTypeForDisplaySize(display_work_area_size);
+  AppListConfigType type = GetConfigTypeForDisplaySize(display_work_area_size);
   // Ensures that the app list config provider has a config with the same
   // type as the created config - the app list model will use the config owned
   // by the AppListConfigProvider instance to generate folder icons needed by
diff --git a/ash/public/cpp/app_list/app_list_config_provider.h b/ash/public/cpp/app_list/app_list_config_provider.h
index 272000c..a0bce7d 100644
--- a/ash/public/cpp/app_list/app_list_config_provider.h
+++ b/ash/public/cpp/app_list/app_list_config_provider.h
@@ -32,7 +32,7 @@
     // for AppListConfigType::kShared configs, as they're assumed to always
     // exist.
     // |config_type| - The created config's type.
-    virtual void OnAppListConfigCreated(ash::AppListConfigType config_type) = 0;
+    virtual void OnAppListConfigCreated(AppListConfigType config_type) = 0;
   };
 
   static AppListConfigProvider& Get();
@@ -48,7 +48,7 @@
   // is set. Returns nullptr if the config does not exist and cannot be created.
   // NOTE: |can_create| has effect only on config types different than kShared.
   //     A new kShared config will always be created if it does not yet exist.
-  AppListConfig* GetConfigForType(ash::AppListConfigType type, bool can_create);
+  AppListConfig* GetConfigForType(AppListConfigType type, bool can_create);
 
   // Returns the app list config that should be used by an app list instance
   // based on the app list display, and available size for the apps grid.
@@ -74,7 +74,7 @@
   const AppListConfig& GetBaseConfigForDisplaySize(
       const gfx::Size& display_work_area_size);
 
-  std::map<ash::AppListConfigType, std::unique_ptr<AppListConfig>> configs_;
+  std::map<AppListConfigType, std::unique_ptr<AppListConfig>> configs_;
 
   base::ObserverList<Observer>::Unchecked observers_;
 
diff --git a/ash/public/cpp/app_list/app_list_config_provider_unittest.cc b/ash/public/cpp/app_list/app_list_config_provider_unittest.cc
index d3901c7..9ba2ab5 100644
--- a/ash/public/cpp/app_list/app_list_config_provider_unittest.cc
+++ b/ash/public/cpp/app_list/app_list_config_provider_unittest.cc
@@ -154,15 +154,15 @@
 // ash::AppListConfigType::kShared app list config.
 TEST_F(SharedConfigAppListConfigProviderTest, SharedInstance) {
   AppListConfig* shared_config = AppListConfigProvider::Get().GetConfigForType(
-      ash::AppListConfigType::kShared, false);
+      AppListConfigType::kShared, false);
   ASSERT_TRUE(shared_config);
   EXPECT_EQ(&AppListConfig::instance(), shared_config);
   // Observer not expected to trigger, as the shared config is considered
   // created by default (even though it's created lazily on first access).
-  EXPECT_EQ(std::vector<ash::AppListConfigType>(),
+  EXPECT_EQ(std::vector<AppListConfigType>(),
             registry_observer_.created_types());
 
-  EXPECT_EQ(ash::AppListConfigType::kShared, shared_config->type());
+  EXPECT_EQ(AppListConfigType::kShared, shared_config->type());
   EXPECT_EQ(1., shared_config->scale_x());
   EXPECT_EQ(1., shared_config->scale_y());
 }
@@ -170,9 +170,9 @@
 // Tests GetConfigForType behavior for app list configs associated with
 // kScalableAppList feature.
 TEST_F(AppListConfigProviderTest, NonSharedConfigGetters) {
-  std::vector<ash::AppListConfigType> test_cases = {
-      ash::AppListConfigType::kSmall, ash::AppListConfigType::kMedium,
-      ash::AppListConfigType::kLarge};
+  std::vector<AppListConfigType> test_cases = {AppListConfigType::kSmall,
+                                               AppListConfigType::kMedium,
+                                               AppListConfigType::kLarge};
   for (const auto& config_type : test_cases) {
     SCOPED_TRACE(static_cast<int>(config_type));
 
@@ -180,7 +180,7 @@
     // config.
     EXPECT_FALSE(AppListConfigProvider::Get().GetConfigForType(
         config_type, false /*can_create*/));
-    EXPECT_EQ(std::vector<ash::AppListConfigType>(),
+    EXPECT_EQ(std::vector<AppListConfigType>(),
               registry_observer_.created_types());
 
     // Calling GetConfigForType with true |can_create| will create a new config
@@ -190,8 +190,7 @@
         config_type, true /*can_create*/);
     ASSERT_TRUE(config);
     EXPECT_EQ(config_type, config->type());
-    const std::vector<ash::AppListConfigType> expected_created_types = {
-        config_type};
+    const std::vector<AppListConfigType> expected_created_types = {config_type};
     EXPECT_EQ(expected_created_types, registry_observer_.created_types());
     EXPECT_NE(&AppListConfig::instance(), config);
 
@@ -212,15 +211,15 @@
 TEST_F(AppListConfigProviderTest, CreateConfigByDisplayWorkArea) {
   const struct TestCase {
     gfx::Size work_area_size;
-    ash::AppListConfigType config_type;
-  } test_cases[] = {{gfx::Size(900, 500), ash::AppListConfigType::kSmall},
-                    {gfx::Size(500, 900), ash::AppListConfigType::kSmall},
-                    {gfx::Size(960, 600), ash::AppListConfigType::kMedium},
-                    {gfx::Size(1100, 700), ash::AppListConfigType::kMedium},
-                    {gfx::Size(600, 960), ash::AppListConfigType::kMedium},
-                    {gfx::Size(700, 1100), ash::AppListConfigType::kMedium},
-                    {gfx::Size(1200, 768), ash::AppListConfigType::kLarge},
-                    {gfx::Size(768, 1200), ash::AppListConfigType::kLarge}};
+    AppListConfigType config_type;
+  } test_cases[] = {{gfx::Size(900, 500), AppListConfigType::kSmall},
+                    {gfx::Size(500, 900), AppListConfigType::kSmall},
+                    {gfx::Size(960, 600), AppListConfigType::kMedium},
+                    {gfx::Size(1100, 700), AppListConfigType::kMedium},
+                    {gfx::Size(600, 960), AppListConfigType::kMedium},
+                    {gfx::Size(700, 1100), AppListConfigType::kMedium},
+                    {gfx::Size(1200, 768), AppListConfigType::kLarge},
+                    {gfx::Size(768, 1200), AppListConfigType::kLarge}};
 
   for (const auto& test_case : test_cases) {
     SCOPED_TRACE(::testing::Message()
@@ -269,7 +268,7 @@
           gfx::Size(1200, 768), gfx::Insets(0, 0, 56, 0) /*shelf_insets*/,
           nullptr);
   ASSERT_TRUE(config);
-  EXPECT_EQ(ash::AppListConfigType::kLarge, config->type());
+  EXPECT_EQ(AppListConfigType::kLarge, config->type());
 
   // Verify CreateForAppListWidget returns nullptr if the created config would
   // be the same as |config|.
@@ -283,7 +282,7 @@
           gfx::Size(960, 600), gfx::Insets(0, 0, 56, 0) /*shelf_insets*/,
           config.get());
   ASSERT_TRUE(updated_config);
-  EXPECT_EQ(ash::AppListConfigType::kMedium, updated_config->type());
+  EXPECT_EQ(AppListConfigType::kMedium, updated_config->type());
 }
 
 TEST_F(SharedConfigAppListConfigProviderTest,
@@ -297,7 +296,7 @@
           gfx::Size(1200, 768) /*display_work_area_size*/,
           gfx::Insets(0, 0, 56, 0) /*shelf_insets*/, nullptr);
   ASSERT_TRUE(config.get());
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(1, config->scale_x());
   EXPECT_EQ(1, config->scale_y());
   EXPECT_EQ(112, config->grid_tile_width());
@@ -321,7 +320,7 @@
       gfx::Size(800, 700) /*display_work_area_size*/,
       gfx::Insets(0, 102, 56, 102) /*shelf_insets*/, config.get());
   ASSERT_TRUE(config);
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(500.f / kMinGridWidth, config->scale_x());
   EXPECT_EQ(1, config->scale_y());
   // 100 == std::round(scale_x * 112)
@@ -336,7 +335,7 @@
       gfx::Size(800, 624) /*display_work_area_size*/,
       gfx::Insets(0, 0, 56, 0) /*shelf_insets*/, config.get());
   ASSERT_TRUE(config);
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(1, config->scale_x());
   // Available height includes fadeout zones, which should not be included in
   // scale calculation.
@@ -353,7 +352,7 @@
       gfx::Size(800, 624) /*display_work_area_size*/,
       gfx::Insets(0, 102, 56, 102) /*shelf_insets*/, config.get());
   ASSERT_TRUE(config);
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(500.f / kMinGridWidth, config->scale_x());
   // Available height includes fadeout zones, which should not be included in
   // scale calculation.
@@ -379,7 +378,7 @@
           gfx::Size(768, 1200) /*display_work_area_size*/,
           gfx::Insets(0, 0, 56, 0) /*shelf_insets*/, nullptr);
   ASSERT_TRUE(config.get());
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(1, config->scale_x());
   EXPECT_EQ(1, config->scale_y());
   EXPECT_EQ(112, config->grid_tile_width());
@@ -403,7 +402,7 @@
       gfx::Size(600, 800) /*display_work_area_size*/,
       gfx::Insets(0, 52, 56, 52) /*shelf_insets*/, config.get());
   ASSERT_TRUE(config);
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(400.f / kMinGridWidth, config->scale_x());
   EXPECT_EQ(1, config->scale_y());
   // 100 == std::round(scale_x * 112)
@@ -418,7 +417,7 @@
       gfx::Size(600, 624) /*display_work_area_size*/,
       gfx::Insets(0, 0, 56, 0) /*shelf_insets*/, config.get());
   ASSERT_TRUE(config);
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(1, config->scale_x());
   // Available height includes fadeout zones, which should not be included in
   // scale calculation.
@@ -435,7 +434,7 @@
       gfx::Size(600, 732) /*display_work_area_size*/,
       gfx::Insets(0, 102, 56, 102) /*shelf_insets*/, config.get());
   ASSERT_TRUE(config);
-  EXPECT_EQ(ash::AppListConfigType::kShared, config->type());
+  EXPECT_EQ(AppListConfigType::kShared, config->type());
   EXPECT_EQ(300.f / kMinGridWidth, config->scale_x());
   // Available height includes fadeout zones, which should not be included in
   // scale calculation.
diff --git a/ash/public/cpp/app_list/app_list_controller.h b/ash/public/cpp/app_list/app_list_controller.h
index 51a13f9..00f550c 100644
--- a/ash/public/cpp/app_list/app_list_controller.h
+++ b/ash/public/cpp/app_list/app_list_controller.h
@@ -38,12 +38,11 @@
   virtual AppListClient* GetClient() = 0;
 
   // Adds an item to AppListModel.
-  virtual void AddItem(std::unique_ptr<ash::AppListItemMetadata> app_item) = 0;
+  virtual void AddItem(std::unique_ptr<AppListItemMetadata> app_item) = 0;
 
   // Adds an item into a certain folder in AppListModel.
-  virtual void AddItemToFolder(
-      std::unique_ptr<ash::AppListItemMetadata> app_item,
-      const std::string& folder_id) = 0;
+  virtual void AddItemToFolder(std::unique_ptr<AppListItemMetadata> app_item,
+                               const std::string& folder_id) = 0;
 
   // Removes an item by its id from AppListModel.
   virtual void RemoveItem(const std::string& id) = 0;
@@ -58,11 +57,11 @@
 
   // Tells Ash what the current status of AppListModel should be,
   // e.g. the model is under synchronization or in normal status.
-  virtual void SetStatus(ash::AppListModelStatus status) = 0;
+  virtual void SetStatus(AppListModelStatus status) = 0;
 
   // Tells Ash what the current state of the app list should be,
   // e.g. the user is searching for something, or showing apps, etc.
-  virtual void SetState(ash::AppListState state) = 0;
+  virtual void SetState(AppListState state) = 0;
 
   // Highlights the given item in the app list. If not present and it is later
   // added, the item will be highlighted after being added.
@@ -86,12 +85,11 @@
 
   // Publishes search results to Ash to render them.
   virtual void PublishSearchResults(
-      std::vector<std::unique_ptr<ash::SearchResultMetadata>> results) = 0;
+      std::vector<std::unique_ptr<SearchResultMetadata>> results) = 0;
 
   // Updates an item's metadata (e.g. name, position, etc).
-  virtual void SetItemMetadata(
-      const std::string& id,
-      std::unique_ptr<ash::AppListItemMetadata> data) = 0;
+  virtual void SetItemMetadata(const std::string& id,
+                               std::unique_ptr<AppListItemMetadata> data) = 0;
 
   // Updates an item's icon.
   virtual void SetItemIcon(const std::string& id,
@@ -108,12 +106,12 @@
   // Update the whole model, usually when profile changes happen in Chrome.
   virtual void SetModelData(
       int profile_id,
-      std::vector<std::unique_ptr<ash::AppListItemMetadata>> apps,
+      std::vector<std::unique_ptr<AppListItemMetadata>> apps,
       bool is_search_engine_google) = 0;
 
   // Updates a search rresult's metadata.
   virtual void SetSearchResultMetadata(
-      std::unique_ptr<ash::SearchResultMetadata> metadata) = 0;
+      std::unique_ptr<SearchResultMetadata> metadata) = 0;
 
   // Updates whether a search result is being installed.
   virtual void SetSearchResultIsInstalling(const std::string& id,
@@ -150,7 +148,7 @@
   //                           Ash.
   // |oem_folder|: the meta data of the OEM folder, or null if it doesn't exist.
   using ResolveOemFolderPositionCallback =
-      base::OnceCallback<void(std::unique_ptr<ash::AppListItemMetadata>)>;
+      base::OnceCallback<void(std::unique_ptr<AppListItemMetadata>)>;
   virtual void ResolveOemFolderPosition(
       const syncer::StringOrdinal& preferred_oem_position,
       ResolveOemFolderPositionCallback callback) = 0;
diff --git a/ash/public/cpp/app_list/app_list_metrics.cc b/ash/public/cpp/app_list/app_list_metrics.cc
index 50d0c3b..7b6ba70d1 100644
--- a/ash/public/cpp/app_list/app_list_metrics.cc
+++ b/ash/public/cpp/app_list/app_list_metrics.cc
@@ -45,17 +45,16 @@
 
 namespace ash {
 
-void RecordSearchResultOpenTypeHistogram(
-    ash::AppListLaunchedFrom launch_location,
-    SearchResultType type,
-    bool is_tablet_mode) {
+void RecordSearchResultOpenTypeHistogram(AppListLaunchedFrom launch_location,
+                                         SearchResultType type,
+                                         bool is_tablet_mode) {
   if (type == SEARCH_RESULT_TYPE_BOUNDARY) {
     NOTREACHED();
     return;
   }
 
   switch (launch_location) {
-    case ash::AppListLaunchedFrom::kLaunchedFromSearchBox:
+    case AppListLaunchedFrom::kLaunchedFromSearchBox:
       UMA_HISTOGRAM_ENUMERATION(kAppListSearchResultOpenTypeHistogram, type,
                                 SEARCH_RESULT_TYPE_BOUNDARY);
       if (is_tablet_mode) {
@@ -67,7 +66,7 @@
             SEARCH_RESULT_TYPE_BOUNDARY);
       }
       break;
-    case ash::AppListLaunchedFrom::kLaunchedFromSuggestionChip:
+    case AppListLaunchedFrom::kLaunchedFromSuggestionChip:
       if (is_tablet_mode) {
         UMA_HISTOGRAM_ENUMERATION(
             kAppListSuggestionChipOpenTypeHistogramInTablet, type,
@@ -78,8 +77,8 @@
             SEARCH_RESULT_TYPE_BOUNDARY);
       }
       break;
-    case ash::AppListLaunchedFrom::kLaunchedFromShelf:
-    case ash::AppListLaunchedFrom::kLaunchedFromGrid:
+    case AppListLaunchedFrom::kLaunchedFromShelf:
+    case AppListLaunchedFrom::kLaunchedFromGrid:
       // Search results don't live in the shelf or the app grid.
       NOTREACHED();
       break;
@@ -109,9 +108,8 @@
   }
 }
 
-void RecordSuccessfulAppLaunchUsingSearch(
-    ash::AppListLaunchedFrom launched_from,
-    int query_length) {
+void RecordSuccessfulAppLaunchUsingSearch(AppListLaunchedFrom launched_from,
+                                          int query_length) {
   if (query_length > 0) {
     UMA_HISTOGRAM_ENUMERATION(kSearchSuccessAppLaunch, launched_from);
     UMA_HISTOGRAM_COUNTS_100(kSearchQueryLengthAppLaunch, query_length);
diff --git a/ash/public/cpp/app_list/app_list_metrics.h b/ash/public/cpp/app_list/app_list_metrics.h
index 4518121..4017ff7d 100644
--- a/ash/public/cpp/app_list/app_list_metrics.h
+++ b/ash/public/cpp/app_list/app_list_metrics.h
@@ -85,7 +85,7 @@
 };
 
 ASH_PUBLIC_EXPORT void RecordSearchResultOpenTypeHistogram(
-    ash::AppListLaunchedFrom launch_location,
+    AppListLaunchedFrom launch_location,
     SearchResultType type,
     bool is_tablet_mode);
 
@@ -98,7 +98,7 @@
 ASH_PUBLIC_EXPORT void RecordLauncherIssuedSearchQueryLength(int query_length);
 
 ASH_PUBLIC_EXPORT void RecordSuccessfulAppLaunchUsingSearch(
-    ash::AppListLaunchedFrom launched_from,
+    AppListLaunchedFrom launched_from,
     int query_length);
 
 }  // namespace ash
diff --git a/ash/public/cpp/app_list/app_list_types.cc b/ash/public/cpp/app_list/app_list_types.cc
index 0403449..a694e725f 100644
--- a/ash/public/cpp/app_list/app_list_types.cc
+++ b/ash/public/cpp/app_list/app_list_types.cc
@@ -19,11 +19,11 @@
 OmniBoxZeroStateAction GetOmniBoxZeroStateAction(int button_index) {
   if (button_index < 0 ||
       button_index >=
-          static_cast<int>(ash::OmniBoxZeroStateAction::kZeroStateActionMax)) {
-    return ash::OmniBoxZeroStateAction::kZeroStateActionMax;
+          static_cast<int>(OmniBoxZeroStateAction::kZeroStateActionMax)) {
+    return OmniBoxZeroStateAction::kZeroStateActionMax;
   }
 
-  return static_cast<ash::OmniBoxZeroStateAction>(button_index);
+  return static_cast<OmniBoxZeroStateAction>(button_index);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc
index e4ae16a..c7e979a3 100644
--- a/ash/public/cpp/ash_features.cc
+++ b/ash/public/cpp/ash_features.cc
@@ -13,7 +13,7 @@
 namespace features {
 
 const base::Feature kAllowAmbientEQ{"AllowAmbientEQ",
-                                    base::FEATURE_ENABLED_BY_DEFAULT};
+                                    base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kAutoNightLight{"AutoNightLight",
                                     base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ash/public/cpp/assistant/assistant_state_base.h b/ash/public/cpp/assistant/assistant_state_base.h
index 8b43e55..ebbfb14 100644
--- a/ash/public/cpp/assistant/assistant_state_base.h
+++ b/ash/public/cpp/assistant/assistant_state_base.h
@@ -37,9 +37,9 @@
   virtual void OnAssistantNotificationEnabled(bool notification_enabled) {}
 
   // mojom::AssistantStateObserver:
-  void OnAssistantStatusChanged(ash::mojom::AssistantState state) override {}
+  void OnAssistantStatusChanged(mojom::AssistantState state) override {}
   void OnAssistantFeatureAllowedChanged(
-      ash::mojom::AssistantAllowedState state) override {}
+      mojom::AssistantAllowedState state) override {}
   void OnArcPlayStoreEnabledChanged(bool enabled) override {}
   void OnLocaleChanged(const std::string& locale) override {}
   void OnLockedFullScreenStateChanged(bool enabled) override {}
diff --git a/ash/public/cpp/cast_config_controller.h b/ash/public/cpp/cast_config_controller.h
index 132c9d43..102fa22 100644
--- a/ash/public/cpp/cast_config_controller.h
+++ b/ash/public/cpp/cast_config_controller.h
@@ -97,7 +97,7 @@
   // registered observers will get called.
   virtual void RequestDeviceRefresh() = 0;
 
-  virtual const std::vector<ash::SinkAndRoute>& GetSinksAndRoutes() = 0;
+  virtual const std::vector<SinkAndRoute>& GetSinksAndRoutes() = 0;
 
   // Initiate a casting session to the sink identified by |sink_id|.
   virtual void CastToSink(const std::string& sink_id) = 0;
diff --git a/ash/public/cpp/default_scale_factor_retriever.cc b/ash/public/cpp/default_scale_factor_retriever.cc
index 07ba5d0..02462ac 100644
--- a/ash/public/cpp/default_scale_factor_retriever.cc
+++ b/ash/public/cpp/default_scale_factor_retriever.cc
@@ -13,7 +13,7 @@
 DefaultScaleFactorRetriever::DefaultScaleFactorRetriever() {}
 
 void DefaultScaleFactorRetriever::Start(
-    mojo::PendingRemote<ash::mojom::CrosDisplayConfigController>
+    mojo::PendingRemote<mojom::CrosDisplayConfigController>
         cros_display_config) {
   cros_display_config_.Bind(std::move(cros_display_config));
   auto callback = base::BindOnce(
@@ -23,10 +23,10 @@
       /*single_unified=*/false,
       base::BindOnce(
           [](GetDefaultScaleFactorCallback callback,
-             std::vector<ash::mojom::DisplayUnitInfoPtr> info_list) {
+             std::vector<mojom::DisplayUnitInfoPtr> info_list) {
             // TODO(oshima): This does not return correct value in docked
             // mode.
-            for (const ash::mojom::DisplayUnitInfoPtr& info : info_list) {
+            for (const mojom::DisplayUnitInfoPtr& info : info_list) {
               if (info->is_internal) {
                 DCHECK(info->available_display_modes.size());
                 std::move(callback).Run(
diff --git a/ash/public/cpp/default_scale_factor_retriever_unittest.cc b/ash/public/cpp/default_scale_factor_retriever_unittest.cc
index 7a383b0..1e075c90 100644
--- a/ash/public/cpp/default_scale_factor_retriever_unittest.cc
+++ b/ash/public/cpp/default_scale_factor_retriever_unittest.cc
@@ -84,7 +84,7 @@
 TEST_F(DefaultScaleFactorRetrieverTest, Basic) {
   display::Display::SetInternalDisplayId(TestCrosDisplayConfig::kFakeDisplayId);
   auto display_config = std::make_unique<TestCrosDisplayConfig>();
-  auto retriever = std::make_unique<ash::DefaultScaleFactorRetriever>();
+  auto retriever = std::make_unique<DefaultScaleFactorRetriever>();
 
   auto callback = [](float* result, float default_scale_factor) {
     result[0] = default_scale_factor;
@@ -118,7 +118,7 @@
 TEST_F(DefaultScaleFactorRetrieverTest, Cancel) {
   display::Display::SetInternalDisplayId(TestCrosDisplayConfig::kFakeDisplayId);
   auto display_config = std::make_unique<TestCrosDisplayConfig>();
-  auto retriever = std::make_unique<ash::DefaultScaleFactorRetriever>();
+  auto retriever = std::make_unique<DefaultScaleFactorRetriever>();
 
   auto callback = [](float* result, float default_scale_factor) {
     result[0] = default_scale_factor;
diff --git a/ash/public/cpp/event_rewriter_controller.h b/ash/public/cpp/event_rewriter_controller.h
index 48b10ed..41be3da 100644
--- a/ash/public/cpp/event_rewriter_controller.h
+++ b/ash/public/cpp/event_rewriter_controller.h
@@ -28,7 +28,7 @@
   // Initializes this controller after ash::Shell finishes initialization.
   virtual void Initialize(
       ui::EventRewriterChromeOS::Delegate* event_rewriter_delegate,
-      ash::SpokenFeedbackEventRewriterDelegate*
+      SpokenFeedbackEventRewriterDelegate*
           spoken_feedback_event_rewriter_delegate) = 0;
 
   // Takes ownership of |rewriter| and adds it to the current event sources.
diff --git a/ash/public/cpp/rounded_corner_decorator_unittest.cc b/ash/public/cpp/rounded_corner_decorator_unittest.cc
index 2d75f6a..5681b23c 100644
--- a/ash/public/cpp/rounded_corner_decorator_unittest.cc
+++ b/ash/public/cpp/rounded_corner_decorator_unittest.cc
@@ -21,7 +21,7 @@
   constexpr gfx::RoundedCornersF kRadii(kCornerRadius);
   std::unique_ptr<aura::Window> window(aura::test::CreateTestWindowWithBounds(
       gfx::Rect(100, 100, 100, 100), root_window()));
-  auto decorator = std::make_unique<ash::RoundedCornerDecorator>(
+  auto decorator = std::make_unique<RoundedCornerDecorator>(
       window.get(), window.get(), window->layer(), kCornerRadius);
 
   // Confirm a mask layer exists and the decorator is valid.
@@ -44,7 +44,7 @@
   constexpr gfx::RoundedCornersF kRadii(kCornerRadius);
   std::unique_ptr<aura::Window> window(aura::test::CreateTestWindowWithBounds(
       gfx::Rect(100, 100, 100, 100), root_window()));
-  auto decorator = std::make_unique<ash::RoundedCornerDecorator>(
+  auto decorator = std::make_unique<RoundedCornerDecorator>(
       window.get(), window.get(), window->layer(), kCornerRadius);
 
   ASSERT_FALSE(window->layer()->layer_mask_layer());
diff --git a/ash/public/cpp/shelf_config.h b/ash/public/cpp/shelf_config.h
index 232f5766..8bb2efe 100644
--- a/ash/public/cpp/shelf_config.h
+++ b/ash/public/cpp/shelf_config.h
@@ -175,8 +175,8 @@
   // all observers.
   void OnShelfConfigUpdated();
 
-  // Updates |is_dense_| and notifies all observers of the update.
-  void UpdateIsDense();
+  // Updates |is_dense_| and returns whether |is_dense_| was changed.
+  bool UpdateIsDense();
 
   // Gets the current shelf size.
   // |ignore_in_app_state| - Whether the returned shelf size should be
diff --git a/ash/public/cpp/shelf_model.cc b/ash/public/cpp/shelf_model.cc
index be3e1c1..9d7daad 100644
--- a/ash/public/cpp/shelf_model.cc
+++ b/ash/public/cpp/shelf_model.cc
@@ -144,6 +144,19 @@
   return item;
 }
 
+bool ShelfModel::Swap(int index, bool with_next) {
+  const int target_index = with_next ? index + 1 : index - 1;
+
+  if (index < 0 || target_index >= item_count() || target_index < 0)
+    return false;
+
+  // Only allow swapping two pinned apps or two unpinned apps.
+  if (!SamePinState(items()[index].type, items()[target_index].type))
+    return false;
+  Move(index, target_index);
+  return true;
+}
+
 void ShelfModel::Move(int index, int target_index) {
   if (index == target_index)
     return;
diff --git a/ash/public/cpp/shelf_model.h b/ash/public/cpp/shelf_model.h
index 1dce285a..a7201db 100644
--- a/ash/public/cpp/shelf_model.h
+++ b/ash/public/cpp/shelf_model.h
@@ -84,6 +84,11 @@
   std::unique_ptr<ShelfItemDelegate> RemoveItemAndTakeShelfItemDelegate(
       const ShelfID& shelf_id);
 
+  // Swaps the item at the given index with the next one if |with_next| is
+  // true, or with the previous one if |with_next| is false. Returns true
+  // if the requested swap has happened, and false otherwise.
+  bool Swap(int index, bool with_next);
+
   // Moves the item at |index| to |target_index|. |target_index| is in terms
   // of the model *after* the item at |index| is removed.
   void Move(int index, int target_index);
diff --git a/ash/session/session_controller_impl.cc b/ash/session/session_controller_impl.cc
index 54ddd1e..111ca8e 100644
--- a/ash/session/session_controller_impl.cc
+++ b/ash/session/session_controller_impl.cc
@@ -422,9 +422,8 @@
 
 void SessionControllerImpl::CanSwitchActiveUser(
     CanSwitchActiveUserCallback callback) {
-  ash::Shell::Get()
-      ->screen_switch_check_controller()
-      ->CanSwitchAwayFromActiveUser(std::move(callback));
+  Shell::Get()->screen_switch_check_controller()->CanSwitchAwayFromActiveUser(
+      std::move(callback));
 }
 
 void SessionControllerImpl::ShowMultiprofilesIntroDialog(
diff --git a/ash/session/test_session_controller_client.h b/ash/session/test_session_controller_client.h
index e2accf3..88e4a242 100644
--- a/ash/session/test_session_controller_client.h
+++ b/ash/session/test_session_controller_client.h
@@ -38,7 +38,7 @@
 // SessionControllerClient created, e.g. InProcessBrowserTest based tests. On
 // the other hand, tests code in chrome can use this class as long as it does
 // not run BrowserMain, e.g. testing::Test based test.
-class TestSessionControllerClient : public ash::SessionControllerClient {
+class TestSessionControllerClient : public SessionControllerClient {
  public:
   TestSessionControllerClient(SessionControllerImpl* controller,
                               TestPrefServiceProvider* prefs_provider);
diff --git a/ash/shelf/home_button.cc b/ash/shelf/home_button.cc
index ee49ea4..4d1a736 100644
--- a/ash/shelf/home_button.cc
+++ b/ash/shelf/home_button.cc
@@ -173,13 +173,10 @@
                                    const gfx::Rect& rect) const {
   DCHECK_EQ(target, this);
   gfx::Rect button_bounds = target->GetLocalBounds();
-  // Increase clickable area for the button from
-  // (kShelfControlSize x kShelfButtonSize) to
-  // (kShelfButtonSize x kShelfButtonSize).
-  int left_offset = button_bounds.width() - ShelfConfig::Get()->button_size();
-  int bottom_offset =
-      button_bounds.height() - ShelfConfig::Get()->button_size();
-  button_bounds.Inset(gfx::Insets(0, left_offset, bottom_offset, 0));
+  // Increase clickable area for the button to account for clicks around the
+  // spacing. This will not intercept events outside of the parent widget.
+  button_bounds.Inset(
+      gfx::Insets(-ShelfConfig::Get()->home_button_edge_spacing()));
   return button_bounds.Intersects(rect);
 }
 
diff --git a/ash/shelf/home_button_unittest.cc b/ash/shelf/home_button_unittest.cc
index 333b94d..1851eab 100644
--- a/ash/shelf/home_button_unittest.cc
+++ b/ash/shelf/home_button_unittest.cc
@@ -178,7 +178,8 @@
             ->shelf_widget()
             ->navigation_widget()
             ->get_bounds_animator_for_testing());
-    EXPECT_EQ(home_button()->bounds().x(), 0);
+    EXPECT_EQ(home_button()->bounds().x(),
+              ShelfConfig::Get()->home_button_edge_spacing());
 
     // Switch to in-app shelf.
     std::unique_ptr<views::Widget> widget = CreateTestWidget();
@@ -199,8 +200,9 @@
           ->navigation_widget()
           ->get_bounds_animator_for_testing());
 
-  // Visual space around the home button is set at the widget level.
-  EXPECT_EQ(0, home_button()->bounds().x());
+  // Home button spacing is within the widget.
+  EXPECT_EQ(ShelfConfig::Get()->home_button_edge_spacing(),
+            home_button()->bounds().x());
 }
 
 TEST_P(HomeButtonTest, LongPressGesture) {
@@ -290,4 +292,75 @@
                                                ->visibility());
 }
 
+// Tests that tapping in the bottom left corner in tablet mode results in the
+// home button activating.
+TEST_P(HomeButtonTest, InteractOutsideHomeButtonBounds) {
+  EXPECT_EQ(ShelfAlignment::kBottom, GetPrimaryShelf()->alignment());
+
+  // Tap the bottom left of the shelf. The button should work.
+  gfx::Point bottom_left = GetPrimaryShelf()
+                               ->shelf_widget()
+                               ->GetWindowBoundsInScreen()
+                               .bottom_left();
+  GetEventGenerator()->GestureTapAt(bottom_left);
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckVisibility(true);
+
+  // Tap the top left of the shelf, the button should work.
+  gfx::Point bottom_right = GetPrimaryShelf()
+                                ->shelf_widget()
+                                ->GetWindowBoundsInScreen()
+                                .bottom_right();
+  GetEventGenerator()->GestureTapAt(bottom_right);
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckVisibility(false);
+
+  // Test left shelf.
+  GetPrimaryShelf()->SetAlignment(ShelfAlignment::kLeft);
+  gfx::Point top_left =
+      GetPrimaryShelf()->shelf_widget()->GetWindowBoundsInScreen().origin();
+  GetEventGenerator()->GestureTapAt(top_left);
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckVisibility(true);
+
+  bottom_left = GetPrimaryShelf()
+                    ->shelf_widget()
+                    ->GetWindowBoundsInScreen()
+                    .bottom_left();
+  GetEventGenerator()->GestureTapAt(bottom_left);
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckVisibility(false);
+
+  // Test right shelf.
+  GetPrimaryShelf()->SetAlignment(ShelfAlignment::kRight);
+  gfx::Point top_right =
+      GetPrimaryShelf()->shelf_widget()->GetWindowBoundsInScreen().top_right();
+  GetEventGenerator()->GestureTapAt(top_right);
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckVisibility(true);
+
+  bottom_right = GetPrimaryShelf()
+                     ->shelf_widget()
+                     ->GetWindowBoundsInScreen()
+                     .bottom_right();
+  GetEventGenerator()->GestureTapAt(bottom_right);
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckVisibility(false);
+}
+
+// Tests that clicking the corner of the display opens the AppList.
+TEST_P(HomeButtonTest, ClickOnCornerPixel) {
+  // Screen corners are extremely easy to reach with a mouse. Let's make sure
+  // that a click on the bottom-left corner (or bottom-right corner in RTL)
+  // can trigger the home button.
+  gfx::Point corner(
+      0, display::Screen::GetScreen()->GetPrimaryDisplay().bounds().height());
+
+  GetAppListTestHelper()->CheckVisibility(false);
+  GetEventGenerator()->MoveMouseTo(corner);
+  GetEventGenerator()->ClickLeftButton();
+  GetAppListTestHelper()->WaitUntilIdle();
+  GetAppListTestHelper()->CheckVisibility(true);
+}
+
 }  // namespace ash
diff --git a/ash/shelf/shelf_button.h b/ash/shelf/shelf_button.h
index 76a82891..6edb344d 100644
--- a/ash/shelf/shelf_button.h
+++ b/ash/shelf/shelf_button.h
@@ -26,6 +26,7 @@
   std::unique_ptr<views::InkDrop> CreateInkDrop() override;
 
   Shelf* shelf() { return shelf_; }
+  const Shelf* shelf() const { return shelf_; }
 
  protected:
   ShelfButtonDelegate* shelf_button_delegate() {
diff --git a/ash/shelf/shelf_config.cc b/ash/shelf/shelf_config.cc
index dd1033b..495df8b 100644
--- a/ash/shelf/shelf_config.cc
+++ b/ash/shelf/shelf_config.cc
@@ -61,7 +61,9 @@
       shelf_blur_radius_(30),
       mousewheel_scroll_offset_threshold_(20),
       in_app_control_button_height_inset_(4) {
-  UpdateIsDense();
+  // Ensure ShelfConfig observers are notified if |is_dense_| is updated.
+  if (UpdateIsDense())
+    OnShelfConfigUpdated();
 }
 
 ShelfConfig::~ShelfConfig() = default;
@@ -100,16 +102,22 @@
 }
 
 void ShelfConfig::OnTabletModeStarted() {
-  UpdateIsDense();
+  // Ensure ShelfConfig observers are notified if |is_dense_| is updated.
+  if (UpdateIsDense())
+    OnShelfConfigUpdated();
 }
 
 void ShelfConfig::OnTabletModeEnded() {
-  UpdateIsDense();
+  // Ensure ShelfConfig observers are notified if |is_dense_| is updated.
+  if (UpdateIsDense())
+    OnShelfConfigUpdated();
 }
 
 void ShelfConfig::OnDisplayMetricsChanged(const display::Display& display,
                                           uint32_t changed_metrics) {
-  UpdateIsDense();
+  // Ensure ShelfConfig observers are notified if |is_dense_| is updated.
+  if (UpdateIsDense())
+    OnShelfConfigUpdated();
 }
 
 void ShelfConfig::OnAppListVisibilityWillChange(bool shown,
@@ -119,6 +127,13 @@
   DCHECK_NE(is_app_list_visible_, shown);
 
   is_app_list_visible_ = shown;
+
+  // Ensure |is_dense_| is updated since this code path can be triggered
+  // by a tablet mode change before the tablet mode change has propagated to
+  // ShelfConfig. Updating |is_dense_| here will minimize the number of times
+  // OnShelfConfigUpdated() is called during a tablet mode change.
+  UpdateIsDense();
+
   OnShelfConfigUpdated();
 }
 
@@ -208,7 +223,7 @@
          !is_app_list_visible_;
 }
 
-void ShelfConfig::UpdateIsDense() {
+bool ShelfConfig::UpdateIsDense() {
   const gfx::Rect screen_size =
       display::Screen::GetScreen()->GetPrimaryDisplay().bounds();
 
@@ -218,10 +233,10 @@
        (screen_size.width() <= kDenseShelfScreenSizeThreshold ||
         screen_size.height() <= kDenseShelfScreenSizeThreshold));
   if (new_is_dense == is_dense_)
-    return;
+    return false;
 
   is_dense_ = new_is_dense;
-  OnShelfConfigUpdated();
+  return true;
 }
 
 int ShelfConfig::GetShelfSize(bool ignore_in_app_state) const {
diff --git a/ash/shelf/shelf_control_button.cc b/ash/shelf/shelf_control_button.cc
index 181fcca..7b28f0ab 100644
--- a/ash/shelf/shelf_control_button.cc
+++ b/ash/shelf/shelf_control_button.cc
@@ -89,6 +89,7 @@
   if (chromeos::switches::ShouldShowShelfHotseat() &&
       Shell::Get()->tablet_mode_controller()->InTabletMode() &&
       ShelfConfig::Get()->is_in_app()) {
+    // Control button highlights are oval in in-app, so adjust the insets.
     return std::make_unique<views::RoundRectInkDropMask>(
         size(),
         gfx::Insets(ShelfConfig::Get()->in_app_control_button_height_inset(),
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index e2130bf..fce0b11 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -684,7 +684,7 @@
   }
 
   // Unexpected event. Reset the state and let the event fall through.
-  CancelDrag();
+  CancelDrag(base::nullopt);
   return false;
 }
 
@@ -856,7 +856,7 @@
   if (drag_status_ == kDragInProgress ||
       drag_status_ == kDragAppListInProgress ||
       drag_status_ == kDragHomeToOverviewInProgress) {
-    CancelDrag();
+    CancelDrag(base::nullopt);
   }
 }
 
@@ -1622,11 +1622,15 @@
     status_origin.set_x(shelf_width - status_size.width());
   target_bounds_.status_bounds_in_shelf = gfx::Rect(status_origin, status_size);
 
-  gfx::Point nav_origin =
-      gfx::Point(home_button_edge_spacing, home_button_edge_spacing);
-  const gfx::Size nav_size = shelf_widget_->navigation_widget()->GetIdealSize();
+  gfx::Point nav_origin = gfx::Point();
+  gfx::Size nav_size = shelf_widget_->navigation_widget()->GetIdealSize();
+
+  // Enlarge the widget to take up available space, this ensures events which
+  // are outside of the HomeButton bounds can be received.
+  nav_size.Enlarge(home_button_edge_spacing, home_button_edge_spacing);
+
   if (shelf_->IsHorizontalAlignment() && base::i18n::IsRTL())
-    nav_origin.set_x(shelf_width - nav_size.width() - nav_origin.x());
+    nav_origin.set_x(shelf_width - nav_size.width());
   target_bounds_.nav_bounds_in_shelf = gfx::Rect(nav_origin, nav_size);
 
   gfx::Point hotseat_origin;
@@ -2405,8 +2409,8 @@
 
 void ShelfLayoutManager::CompleteDrag(const ui::LocatedEvent& event_in_screen) {
   // End the possible window drag before checking the shelf visibility.
-  base::Optional<ShelfWindowDragResult> window_drag_result =
-      MaybeEndWindowDrag(event_in_screen);
+  base::Optional<DragWindowFromShelfController::ShelfWindowDragResult>
+      window_drag_result = MaybeEndWindowDrag(event_in_screen);
   HotseatState old_hotseat_state = hotseat_state();
 
   const bool transitioned_from_overview_to_home =
@@ -2421,7 +2425,7 @@
   if (ShouldChangeVisibilityAfterDrag(event_in_screen))
     CompleteDragWithChangedVisibility();
   else
-    CancelDrag();
+    CancelDrag(window_drag_result);
 
   // Hotseat gestures are meaningful only in tablet mode with hotseat enabled.
   if (chromeos::switches::ShouldShowShelfHotseat() && IsTabletModeEnabled()) {
@@ -2470,7 +2474,9 @@
   drag_status_ = kDragNone;
 }
 
-void ShelfLayoutManager::CancelDrag() {
+void ShelfLayoutManager::CancelDrag(
+    base::Optional<DragWindowFromShelfController::ShelfWindowDragResult>
+        window_drag_result) {
   if (drag_status_ == kDragAppListInProgress ||
       drag_status_ == kDragHomeToOverviewInProgress) {
     HomeLauncherGestureHandler* home_launcher_handler =
@@ -2494,7 +2500,12 @@
     // extending the hotseat was not the primary goal of the gesture.
     shelf_widget_->hotseat_widget()->set_manually_extended(
         hotseat_state() == HotseatState::kExtended &&
-        !Shell::Get()->overview_controller()->InOverviewSession());
+        (!Shell::Get()->overview_controller()->InOverviewSession() ||
+         (window_drag_result.has_value() &&
+          window_drag_result.value() ==
+              DragWindowFromShelfController::ShelfWindowDragResult::
+                  kRestoreToOriginalBounds)));
+
     hotseat_presentation_time_recorder_.reset();
   }
   hotseat_is_in_drag_ = false;
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h
index 49b3e7f..96370f77 100644
--- a/ash/shelf/shelf_layout_manager.h
+++ b/ash/shelf/shelf_layout_manager.h
@@ -510,7 +510,9 @@
                   float scroll_y);
   void CompleteDrag(const ui::LocatedEvent& event_in_screen);
   void CompleteAppListDrag(const ui::LocatedEvent& event_in_screen);
-  void CancelDrag();
+  void CancelDrag(
+      base::Optional<DragWindowFromShelfController::ShelfWindowDragResult>
+          window_drag_result);
   void CompleteDragWithChangedVisibility();
 
   float GetAppListBackgroundOpacityOnShelfOpacity();
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc
index aed7e0ad..27b3aa1 100644
--- a/ash/shelf/shelf_layout_manager_unittest.cc
+++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -3983,6 +3983,47 @@
   EXPECT_EQ(HotseatState::kHidden, GetShelfLayoutManager()->hotseat_state());
 }
 
+// Tests that failing to drag the maximized window to overview mode results in
+// an extended hotseat.
+TEST_P(HotseatShelfLayoutManagerTest,
+       FailingOverviewDragResultsInExtendedHotseat) {
+  base::test::ScopedFeatureList scoped_features;
+  scoped_features.InitAndEnableFeature(
+      features::kDragFromShelfToHomeOrOverview);
+
+  const ShelfAutoHideBehavior auto_hide_behavior = GetParam();
+  GetPrimaryShelf()->SetAutoHideBehavior(auto_hide_behavior);
+  TabletModeControllerTestApi().EnterTabletMode();
+
+  std::unique_ptr<aura::Window> window =
+      AshTestBase::CreateTestWindow(gfx::Rect(0, 0, 400, 400));
+  wm::ActivateWindow(window.get());
+
+  // If the shelf is auto-hidden, swipe up to bring up shelf and hotseat first
+  // (otherwise, the window drag to overview will not be handled).
+  if (auto_hide_behavior == ShelfAutoHideBehavior::kAlways) {
+    SwipeUpOnShelf();
+    ASSERT_EQ(HotseatState::kExtended,
+              GetShelfLayoutManager()->hotseat_state());
+  }
+
+  // Swipe up to start dragging the active window.
+  const gfx::Rect bottom_shelf_bounds =
+      GetShelfWidget()->GetWindowBoundsInScreen();
+  StartScroll(bottom_shelf_bounds.top_center());
+
+  // Drag upward, a bit past the hotseat extended height but not enough to go to
+  // overview.
+  const int extended_hotseat_distance_from_top_of_shelf =
+      ShelfConfig::Get()->hotseat_bottom_padding() +
+      ShelfConfig::Get()->hotseat_size();
+  UpdateScroll(-extended_hotseat_distance_from_top_of_shelf - 30);
+  EndScroll(/*is_fling=*/false, 0.f);
+
+  ASSERT_FALSE(Shell::Get()->overview_controller()->InOverviewSession());
+  EXPECT_EQ(HotseatState::kExtended, GetShelfLayoutManager()->hotseat_state());
+}
+
 // Tests that hotseat remains in extended state while in overview mode when
 // flinging the shelf up or down.
 TEST_P(HotseatShelfLayoutManagerTest, SwipeOnHotseatInOverview) {
@@ -4862,8 +4903,7 @@
   EXPECT_FALSE(GetShelfWidget()->GetOpaqueBackground()->visible());
 }
 
-// Tests that closing a window which was opened prior to entering tablet mode
-// results in a kShown hotseat.
+// Tests that the hotseat is extended if focused with a keyboard.
 TEST_F(HotseatShelfLayoutManagerTest, ExtendHotseatIfFocusedWithKeyboard) {
   TabletModeControllerTestApi().EnterTabletMode();
   std::unique_ptr<aura::Window> window =
@@ -4894,7 +4934,7 @@
   EXPECT_EQ(HotseatState::kExtended, GetShelfLayoutManager()->hotseat_state());
 }
 
-// Tests that if the hotseat was hidden while being focused, doing a trasversal
+// Tests that if the hotseat was hidden while being focused, doing a traversal
 // focus on the next element brings it up again.
 TEST_F(HotseatShelfLayoutManagerTest, SwipeDownOnFocusedHotseat) {
   TabletModeControllerTestApi().EnterTabletMode();
diff --git a/ash/shelf/shelf_navigation_widget.cc b/ash/shelf/shelf_navigation_widget.cc
index fd4ed79..312b2d05 100644
--- a/ash/shelf/shelf_navigation_widget.cc
+++ b/ash/shelf/shelf_navigation_widget.cc
@@ -38,7 +38,12 @@
 // Returns the bounds for the first button shown in this view (the back
 // button in tablet mode, the home button otherwise).
 gfx::Rect GetFirstButtonBounds() {
-  return gfx::Rect(0, 0, ShelfConfig::Get()->control_size(),
+  // ShelfNavigationWidget is larger than the buttons in order to enable child
+  // views to capture events nearby.
+  const int home_button_edge_spacing =
+      ShelfConfig::Get()->home_button_edge_spacing();
+  return gfx::Rect(home_button_edge_spacing, home_button_edge_spacing,
+                   ShelfConfig::Get()->control_size(),
                    ShelfConfig::Get()->control_size());
 }
 
@@ -46,10 +51,13 @@
 // always the home button and only in tablet mode, which implies a horizontal
 // shelf).
 gfx::Rect GetSecondButtonBounds() {
-  return gfx::Rect(
-      ShelfConfig::Get()->control_size() + ShelfConfig::Get()->button_spacing(),
-      0, ShelfConfig::Get()->control_size(),
-      ShelfConfig::Get()->control_size());
+  const int home_button_edge_spacing =
+      ShelfConfig::Get()->home_button_edge_spacing();
+  return gfx::Rect(home_button_edge_spacing +
+                       ShelfConfig::Get()->control_size() +
+                       ShelfConfig::Get()->button_spacing(),
+                   home_button_edge_spacing, ShelfConfig::Get()->control_size(),
+                   ShelfConfig::Get()->control_size());
 }
 
 bool IsBackButtonShown() {
@@ -151,7 +159,13 @@
   if (opaque_background_.rounded_corner_radii() != rounded_corners)
     opaque_background_.SetRoundedCornerRadius(rounded_corners);
 
-  opaque_background_.SetBounds(GetLocalBounds());
+  // The opaque background does not show up when there are two buttons.
+  gfx::Rect opaque_background_bounds = GetFirstButtonBounds();
+  if (base::i18n::IsRTL()) {
+    opaque_background_bounds.set_x(
+        2 * ShelfConfig::Get()->home_button_edge_spacing());
+  }
+  opaque_background_.SetBounds(opaque_background_bounds);
   opaque_background_.SetBackgroundBlur(
       ShelfConfig::Get()->GetShelfControlButtonBlurRadius());
 }
@@ -240,13 +254,19 @@
 
 gfx::Size ShelfNavigationWidget::GetIdealSize() const {
   const int control_size = ShelfConfig::Get()->control_size();
-  if (!shelf_->IsHorizontalAlignment())
-    return gfx::Size(control_size, control_size);
+  const int home_button_edge_spacing =
+      ShelfConfig::Get()->home_button_edge_spacing();
 
-  return gfx::Size(IsBackButtonShown() ? (2 * control_size +
-                                          ShelfConfig::Get()->button_spacing())
-                                       : control_size,
-                   control_size);
+  if (!shelf_->IsHorizontalAlignment())
+    return gfx::Size(home_button_edge_spacing + control_size,
+                     home_button_edge_spacing + control_size);
+
+  return gfx::Size(
+      2 * home_button_edge_spacing +
+          (IsBackButtonShown()
+               ? (2 * control_size + ShelfConfig::Get()->button_spacing())
+               : control_size),
+      2 * home_button_edge_spacing + control_size);
 }
 
 void ShelfNavigationWidget::OnMouseEvent(ui::MouseEvent* event) {
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 47b39f4..85c2a20 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -1395,9 +1395,6 @@
 void ShelfView::SwapButtons(views::View* button_to_swap, bool with_next) {
   if (!button_to_swap)
     return;
-  // We don't allow reordering of buttons that aren't app buttons.
-  if (button_to_swap->GetClassName() != ShelfAppButton::kViewClassName)
-    return;
 
   // Find the index of the button to swap in the view model.
   int src_index = -1;
@@ -1410,23 +1407,19 @@
   }
 
   const int target_index = with_next ? src_index + 1 : src_index - 1;
+  // TODO(manucornet): Remove this restriction once we get rid of overflow
+  // bubbles in favor of a scrollable shelf.
   const int first_swappable_index = std::max(first_visible_index_, 0);
   const int last_swappable_index = last_visible_index_;
-  if (src_index == -1 || (target_index > last_swappable_index) ||
-      (target_index < first_swappable_index)) {
-    return;
-  }
-
-  // Only allow swapping two pinned apps or two unpinned apps.
-  if (!SamePinState(model_->items()[src_index].type,
-                    model_->items()[target_index].type)) {
+  if (target_index > last_swappable_index ||
+      target_index < first_swappable_index) {
     return;
   }
 
   // Swapping items in the model is sufficient, everything will then be
   // reflected in the views.
-  model_->Move(src_index, target_index);
-  AnimateToIdealBounds();
+  if (model_->Swap(src_index, with_next))
+    AnimateToIdealBounds();
   // TODO(manucornet): Announce the swap to screen readers.
 }
 
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc
index c0282f8..4647227 100644
--- a/ash/shelf/shelf_view_unittest.cc
+++ b/ash/shelf/shelf_view_unittest.cc
@@ -2062,22 +2062,6 @@
   test_api_->HideOverflowBubble();
 }
 
-// Checks how the overflow button and menu get laid out when the display is
-// very narrow.
-TEST_F(ShelfViewTestNotScrollable, TestOverflowWithNarrowDisplay) {
-  UpdateDisplay("200x600");
-
-  AddAppShortcutsUntilOverflow();
-  OverflowButton* overflow_button = shelf_view_->GetOverflowButton();
-  EXPECT_TRUE(overflow_button->GetVisible());
-
-  ui::test::EventGenerator* generator = GetEventGenerator();
-  generator->set_current_screen_location(
-      overflow_button->GetBoundsInScreen().CenterPoint());
-  generator->ClickLeftButton();
-  ASSERT_TRUE(shelf_view_->IsShowingOverflowBubble());
-}
-
 // Checks creating app shortcut for an opened platform app in overflow bubble
 // should be invisible to the shelf. See crbug.com/605793.
 TEST_F(ShelfViewTestNotScrollable, CheckOverflowStatusPinOpenedAppToShelf) {
diff --git a/ash/shell/content/client/shell_browser_main_parts.cc b/ash/shell/content/client/shell_browser_main_parts.cc
index d6f04dc1..6231708 100644
--- a/ash/shell/content/client/shell_browser_main_parts.cc
+++ b/ash/shell/content/client/shell_browser_main_parts.cc
@@ -97,7 +97,7 @@
   }
 
   ShellInitParams shell_init_params;
-  shell_init_params.delegate = std::make_unique<shell::ShellDelegateImpl>();
+  shell_init_params.delegate = std::make_unique<ShellDelegateImpl>();
   shell_init_params.context_factory = content::GetContextFactory();
   shell_init_params.context_factory_private =
       content::GetContextFactoryPrivate();
@@ -130,7 +130,7 @@
     example_app_list_client_ = std::make_unique<ExampleAppListClient>(
         Shell::Get()->app_list_controller());
 
-    shell::InitWindowTypeLauncher(
+    InitWindowTypeLauncher(
         base::BindRepeating(views::examples::ShowExamplesWindowWithContent,
                             base::Passed(base::OnceClosure()),
                             base::Unretained(browser_context_.get()), nullptr),
diff --git a/ash/shell/example_session_controller_client.cc b/ash/shell/example_session_controller_client.cc
index 9a01626..46d4c06 100644
--- a/ash/shell/example_session_controller_client.cc
+++ b/ash/shell/example_session_controller_client.cc
@@ -46,7 +46,7 @@
 
 void ExampleSessionControllerClient::RequestLockScreen() {
   TestSessionControllerClient::RequestLockScreen();
-  shell::CreateLockScreen();
+  CreateLockScreen();
   Shell::Get()->UpdateShelfVisibility();
 }
 
diff --git a/ash/shell_test_api.cc b/ash/shell_test_api.cc
index 2bbb57c..c615fde 100644
--- a/ash/shell_test_api.cc
+++ b/ash/shell_test_api.cc
@@ -178,7 +178,7 @@
 }
 
 void ShellTestApi::ToggleFullscreen() {
-  ash::accelerators::ToggleFullscreen();
+  accelerators::ToggleFullscreen();
 }
 
 bool ShellTestApi::IsOverviewSelecting() {
@@ -231,7 +231,7 @@
 }
 
 void ShellTestApi::WaitForLauncherAnimationState(
-    ash::AppListViewState target_state) {
+    AppListViewState target_state) {
   base::RunLoop run_loop;
   WaitForLauncherState(target_state, run_loop.QuitWhenIdleClosure());
   run_loop.Run();
@@ -251,7 +251,7 @@
 }
 
 std::vector<aura::Window*> ShellTestApi::GetItemWindowListInOverviewGrids() {
-  return ash::Shell::Get()
+  return Shell::Get()
       ->overview_controller()
       ->GetItemWindowListInOverviewGridsForTest();
 }
diff --git a/ash/system/night_light/night_light_controller_impl.cc b/ash/system/night_light/night_light_controller_impl.cc
index 06a84fe..8477cc1f 100644
--- a/ash/system/night_light/night_light_controller_impl.cc
+++ b/ash/system/night_light/night_light_controller_impl.cc
@@ -534,6 +534,12 @@
   return kDefaultColorTemperature;
 }
 
+void NightLightControllerImpl::UpdateAmbientRgbScalingFactors() {
+  ambient_rgb_scaling_factors_ =
+      NightLightControllerImpl::ColorScalesFromRemappedTemperatureInKevin(
+          ambient_temperature_);
+}
+
 NightLightController::ScheduleType NightLightControllerImpl::GetScheduleType()
     const {
   if (active_user_pref_service_) {
@@ -568,10 +574,7 @@
 }
 
 bool NightLightControllerImpl::GetAmbientColorEnabled() const {
-  const bool ambient_eq_supported =
-      features::IsAllowAmbientEQEnabled() &&
-      chromeos::PowerManagerClient::Get()->SupportsAmbientColor();
-  return ambient_eq_supported && active_user_pref_service_ &&
+  return features::IsAllowAmbientEQEnabled() && active_user_pref_service_ &&
          active_user_pref_service_->GetBoolean(prefs::kAmbientColorEnabled);
 }
 
@@ -735,10 +738,9 @@
   ambient_temperature_ +=
       (temperature_difference / abs_temperature_difference) *
       kAmbientColorChangeThreshold;
+
   if (GetAmbientColorEnabled()) {
-    ambient_rgb_scaling_factors_ =
-        NightLightControllerImpl::ColorScalesFromRemappedTemperatureInKevin(
-            ambient_temperature_);
+    UpdateAmbientRgbScalingFactors();
     RefreshDisplaysColorTemperatures();
   }
 }
@@ -912,6 +914,8 @@
 void NightLightControllerImpl::InitFromUserPrefs() {
   StartWatchingPrefsChanges();
   LoadCachedGeopositionIfNeeded();
+  if (GetAmbientColorEnabled())
+    UpdateAmbientRgbScalingFactors();
   Refresh(true /* did_schedule_change */);
   NotifyStatusChanged();
   NotifyClientWithScheduleChange();
@@ -950,9 +954,7 @@
 void NightLightControllerImpl::OnAmbientColorEnabledPrefChanged() {
   DCHECK(active_user_pref_service_);
   if (GetAmbientColorEnabled()) {
-    ambient_rgb_scaling_factors_ =
-        NightLightControllerImpl::ColorScalesFromRemappedTemperatureInKevin(
-            ambient_temperature_);
+    UpdateAmbientRgbScalingFactors();
     VerifyAmbientColorCtmSupport();
   }
   RefreshDisplaysColorTemperatures();
diff --git a/ash/system/night_light/night_light_controller_impl.h b/ash/system/night_light/night_light_controller_impl.h
index 5bdd5e4..adff379 100644
--- a/ash/system/night_light/night_light_controller_impl.h
+++ b/ash/system/night_light/night_light_controller_impl.h
@@ -146,6 +146,10 @@
   TimeOfDay GetCustomEndTime() const;
   bool GetAmbientColorEnabled() const;
 
+  // Update |ambient_rgb_scaling_factors_| from the current
+  // |ambient_temperature_|.
+  void UpdateAmbientRgbScalingFactors();
+
   // Set the desired NightLight settings in the current active user prefs.
   void SetEnabled(bool enabled, AnimationDuration animation_type);
   void SetColorTemperature(float temperature);
@@ -309,7 +313,7 @@
 
   // The ambient color R, G, and B scaling factors.
   // Valid only if ambient color is enabled.
-  gfx::Vector3dF ambient_rgb_scaling_factors_;
+  gfx::Vector3dF ambient_rgb_scaling_factors_ = {1.f, 1.f, 1.f};
 
   base::WeakPtrFactory<NightLightControllerImpl> weak_ptr_factory_;
 
diff --git a/ash/system/night_light/night_light_controller_unittest.cc b/ash/system/night_light/night_light_controller_unittest.cc
index bbab856..aa45ed72 100644
--- a/ash/system/night_light/night_light_controller_unittest.cc
+++ b/ash/system/night_light/night_light_controller_unittest.cc
@@ -28,7 +28,6 @@
 #include "base/optional.h"
 #include "base/strings/pattern.h"
 #include "base/test/scoped_feature_list.h"
-#include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "components/prefs/pref_service.h"
 #include "ui/compositor/layer.h"
 #include "ui/display/fake/fake_display_snapshot.h"
@@ -196,7 +195,6 @@
 
     // Start with ambient color pref disabled.
     SetAmbientColorPrefEnabled(false);
-    SetAmbientColorSupported(false);
   }
 
   void CreateTestUserSessions() {
@@ -219,12 +217,6 @@
     GetController()->SetAmbientColorEnabled(enabled);
   }
 
-  void SetAmbientColorSupported(bool supported) {
-    static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::PowerManagerClient::Get())
-        ->set_supports_ambient_color(supported);
-  }
-
   // Simulate powerd sending multiple times an ambient temperature of
   // |powerd_temperature|. The remapped ambient temperature should eventually
   // reach |target_remapped_temperature|.
@@ -999,52 +991,31 @@
             controller->timer()->GetCurrentDelay());
 }
 
-TEST_F(NightLightTest, TestAmbientLightEnabledSetting) {
-  // Feature enabled, Device not supported, Pref disabled -> disabled
+TEST_F(NightLightTest, TestAmbientLightEnabledSetting_FeatureOn) {
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeature(features::kAllowAmbientEQ);
+
+  // Feature enabled, Pref disabled -> disabled
   SetAmbientColorPrefEnabled(false);
-  SetAmbientColorSupported(false);
   EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
 
-  // Feature enabled, Device not supported, Pref enabled -> disabled
+  // Feature enabled, Pref enabled -> enabled
   SetAmbientColorPrefEnabled(true);
-  SetAmbientColorSupported(false);
-  EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
-
-  // Feature enabled, Device not supported, Pref enabled -> disabled
-  SetAmbientColorPrefEnabled(false);
-  SetAmbientColorSupported(true);
-  EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
-
-  // Feature enabled, Device supported, Pref enabled -> enabled
-  SetAmbientColorPrefEnabled(true);
-  SetAmbientColorSupported(true);
   EXPECT_TRUE(GetController()->GetAmbientColorEnabled());
+}
 
+TEST_F(NightLightTest, TestAmbientLightEnabledSetting_FeatureOff) {
   // With the feature disabled it should always be disabled.
-  {
-    base::test::ScopedFeatureList features;
-    features.InitAndDisableFeature(features::kAllowAmbientEQ);
+  base::test::ScopedFeatureList features;
+  features.InitAndDisableFeature(features::kAllowAmbientEQ);
 
-    // Feature disabled, Device not supported, Pref disabled -> disabled
-    SetAmbientColorPrefEnabled(false);
-    SetAmbientColorSupported(false);
-    EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
+  // Feature disabled, Pref disabled -> disabled
+  SetAmbientColorPrefEnabled(false);
+  EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
 
-    // Feature disabled, Device not supported, Pref enabled -> disabled
-    SetAmbientColorPrefEnabled(true);
-    SetAmbientColorSupported(false);
-    EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
-
-    // Feature disabled, Device not supported, Pref enabled -> disabled
-    SetAmbientColorPrefEnabled(false);
-    SetAmbientColorSupported(true);
-    EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
-
-    // Feature disabled, Device supported, Pref enabled -> disabled
-    SetAmbientColorPrefEnabled(true);
-    SetAmbientColorSupported(true);
-    EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
-  }
+  // Feature disabled, Pref enabled -> disabled
+  SetAmbientColorPrefEnabled(true);
+  EXPECT_FALSE(GetController()->GetAmbientColorEnabled());
 }
 
 TEST_F(NightLightTest, TestAmbientLightRemappingTemperature) {
@@ -1082,9 +1053,10 @@
 }
 
 TEST_F(NightLightTest, TestAmbientColorMatrix) {
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeature(features::kAllowAmbientEQ);
   SetNightLightEnabled(false);
   SetAmbientColorPrefEnabled(true);
-  SetAmbientColorSupported(true);
   auto scaling_factors = GetAllDisplaysCompositorsRGBScaleFactors();
   // If no temperature is set, we expect 1.0 for each scaling factor.
   for (const gfx::Vector3dF& rgb : scaling_factors) {
@@ -1113,12 +1085,14 @@
 }
 
 TEST_F(NightLightTest, TestNightLightAndAmbientColorInteraction) {
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeature(features::kAllowAmbientEQ);
+
   SetNightLightEnabled(true);
 
   auto night_light_rgb = GetAllDisplaysCompositorsRGBScaleFactors().front();
 
   SetAmbientColorPrefEnabled(true);
-  SetAmbientColorSupported(true);
 
   auto night_light_and_ambient_rgb =
       GetAllDisplaysCompositorsRGBScaleFactors().front();
@@ -1661,6 +1635,92 @@
   EXPECT_TRUE(controller->GetAutoNightLightNotificationForTesting());
 }
 
+// Fixture for testing Ambient EQ.
+class AmbientEQTest : public NightLightTest {
+ public:
+  AmbientEQTest() = default;
+  ~AmbientEQTest() override = default;
+  AmbientEQTest(const AmbientEQTest& other) = delete;
+  AmbientEQTest& operator=(const AmbientEQTest& rhs) = delete;
+
+  static constexpr gfx::Vector3dF kDefaultScalingFactors{1.0f, 1.0f, 1.0f};
+
+  // NightLightTest:
+  void SetUp() override {
+    NightLightTest::SetUp();
+    features_.InitAndEnableFeature(features::kAllowAmbientEQ);
+    controller_ = GetController();
+  }
+
+ protected:
+  base::test::ScopedFeatureList features_;
+  NightLightControllerImpl* controller_;  // Not owned.
+};
+
+// static
+constexpr gfx::Vector3dF AmbientEQTest::kDefaultScalingFactors;
+
+TEST_F(AmbientEQTest, TestAmbientRgbScalingUpdatesOnPrefChanged) {
+  // Start with the pref disabled.
+  controller_->SetAmbientColorEnabled(false);
+
+  // Shift to the coolest temperature and the temperature updates even with the
+  // pref disabled but the scaling factors don't.
+  float ambient_temperature = SimulateAmbientColorFromPowerd(8000, 7350.0f);
+  EXPECT_EQ(ambient_temperature, controller_->ambient_temperature());
+  EXPECT_EQ(kDefaultScalingFactors, controller_->ambient_rgb_scaling_factors());
+
+  // Enabling the pref and the scaling factors update.
+  controller_->SetAmbientColorEnabled(true);
+  const auto coolest_scaling_factors =
+      controller_->ambient_rgb_scaling_factors();
+  EXPECT_NE(kDefaultScalingFactors, coolest_scaling_factors);
+
+  // Shift to the warmest temp and the the scaling factors should update along
+  // with the temperature while the pref is enabled.
+  ambient_temperature = SimulateAmbientColorFromPowerd(2700, 5800.0f);
+  EXPECT_EQ(ambient_temperature, controller_->ambient_temperature());
+  const auto warmest_scaling_factors =
+      controller_->ambient_rgb_scaling_factors();
+  EXPECT_NE(warmest_scaling_factors, coolest_scaling_factors);
+  EXPECT_NE(warmest_scaling_factors, kDefaultScalingFactors);
+}
+
+TEST_F(AmbientEQTest, TestAmbientRgbScalingUpdatesOnUserChangedToEnabled) {
+  // Start with user1 logged in with pref disabled.
+  controller_->SetAmbientColorEnabled(false);
+
+  // Shift to the coolest temperature and the temperature updates even with the
+  // pref disabled but the scaling factors don't.
+  float ambient_temperature = SimulateAmbientColorFromPowerd(8000, 7350.0f);
+  EXPECT_EQ(ambient_temperature, controller_->ambient_temperature());
+  EXPECT_EQ(kDefaultScalingFactors, controller_->ambient_rgb_scaling_factors());
+
+  // Enable the pref for user 2 then switch to user2 and the factors update.
+  user2_pref_service()->SetBoolean(prefs::kAmbientColorEnabled, true);
+  SwitchActiveUser(kUser2Email);
+  const auto coolest_scaling_factors =
+      controller_->ambient_rgb_scaling_factors();
+  EXPECT_NE(kDefaultScalingFactors, coolest_scaling_factors);
+}
+
+TEST_F(AmbientEQTest, TestAmbientRgbScalingUpdatesOnUserChangedBothDisabled) {
+  // Start with user1 logged in with pref disabled.
+  controller_->SetAmbientColorEnabled(false);
+
+  // Shift to the coolest temperature and the temperature updates even with the
+  // pref disabled but the scaling factors don't.
+  float ambient_temperature = SimulateAmbientColorFromPowerd(8000, 7350.0f);
+  EXPECT_EQ(ambient_temperature, controller_->ambient_temperature());
+  EXPECT_EQ(kDefaultScalingFactors, controller_->ambient_rgb_scaling_factors());
+
+  // Disable the pref for user 2 then switch to user2 and the factors still
+  // shouldn't update.
+  user2_pref_service()->SetBoolean(prefs::kAmbientColorEnabled, false);
+  SwitchActiveUser(kUser2Email);
+  EXPECT_EQ(kDefaultScalingFactors, controller_->ambient_rgb_scaling_factors());
+}
+
 }  // namespace
 
 }  // namespace ash
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc
index 18468d6..7de4c6e 100644
--- a/ash/system/status_area_widget_delegate.cc
+++ b/ash/system/status_area_widget_delegate.cc
@@ -7,11 +7,11 @@
 #include "ash/focus_cycler.h"
 #include "ash/root_window_controller.h"
 #include "ash/shelf/shelf.h"
-#include "ash/shelf/shelf_layout_manager.h"
 #include "ash/shelf/shelf_widget.h"
 #include "ash/shell.h"
 #include "ash/system/status_area_widget.h"
 #include "ash/system/tray/tray_constants.h"
+#include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "chromeos/constants/chromeos_switches.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
@@ -86,7 +86,6 @@
   set_owned_by_client();  // Deleted by DeleteDelegate().
 
   ShelfConfig::Get()->AddObserver(this);
-  shelf_->shelf_layout_manager()->AddObserver(this);
 
   // Allow the launcher to surrender the focus to another window upon
   // navigation completion by the user.
@@ -97,7 +96,6 @@
 
 StatusAreaWidgetDelegate::~StatusAreaWidgetDelegate() {
   ShelfConfig::Get()->RemoveObserver(this);
-  shelf_->shelf_layout_manager()->RemoveObserver(this);
 }
 
 void StatusAreaWidgetDelegate::SetFocusCyclerForTesting(
@@ -180,21 +178,6 @@
   UpdateLayout();
 }
 
-void StatusAreaWidgetDelegate::OnHotseatStateChanged(HotseatState old_state,
-                                                     HotseatState new_state) {
-  // Update the border of the last visible child so it has the right
-  // padding depending of the state of the shelf (See
-  // https://crbug.com/1025270). Don't layout as it will cause the whole
-  // transition to snap instead of animate (See https://crbug.com/1032770).
-  auto it = std::find_if(children().crbegin(), children().crend(),
-                         [](const View* v) { return v->GetVisible(); });
-  if (it == children().crend())
-    return;
-
-  View* last_visible_child = *it;
-  SetBorderOnChild(last_visible_child, /*is_child_on_edge=*/true);
-}
-
 void StatusAreaWidgetDelegate::UpdateLayout() {
   // Use a grid layout so that the trays can be centered in each cell, and
   // so that the widget gets laid out correctly when tray sizes change.
@@ -274,11 +257,13 @@
   // items also takes care of padding at the edge of the shelf.
   int right_edge = kPaddingBetweenWidgetsNewUi;
 
-  if (is_child_on_edge && chromeos::switches::ShouldShowShelfHotseat()) {
-    right_edge =
-        shelf_->shelf_layout_manager()->hotseat_state() == HotseatState::kShown
-            ? kPaddingBetweenWidgetAndRightScreenEdge
-            : 0;
+  const bool tablet_mode =
+      Shell::Get()->tablet_mode_controller() &&
+      Shell::Get()->tablet_mode_controller()->InTabletMode();
+
+  if (is_child_on_edge && chromeos::switches::ShouldShowShelfHotseat() &&
+      !tablet_mode) {
+    right_edge = kPaddingBetweenWidgetAndRightScreenEdge;
   }
 
   // Swap edges if alignment is not horizontal (bottom-to-top).
diff --git a/ash/system/status_area_widget_delegate.h b/ash/system/status_area_widget_delegate.h
index 16dc765..f5f6779 100644
--- a/ash/system/status_area_widget_delegate.h
+++ b/ash/system/status_area_widget_delegate.h
@@ -8,7 +8,6 @@
 #include "ash/ash_export.h"
 #include "ash/public/cpp/shelf_config.h"
 #include "ash/public/cpp/shelf_types.h"
-#include "ash/shelf/shelf_layout_manager_observer.h"
 #include "ash/system/status_area_widget.h"
 #include "base/macros.h"
 #include "ui/gfx/image/image_skia.h"
@@ -22,8 +21,7 @@
 // The View for the status area widget.
 class ASH_EXPORT StatusAreaWidgetDelegate : public views::AccessiblePaneView,
                                             public views::WidgetDelegate,
-                                            public ShelfConfig::Observer,
-                                            public ShelfLayoutManagerObserver {
+                                            public ShelfConfig::Observer {
  public:
   explicit StatusAreaWidgetDelegate(Shelf* shelf);
   ~StatusAreaWidgetDelegate() override;
@@ -61,10 +59,6 @@
   // Overridden from ShelfConfig::Observer:
   void OnShelfConfigUpdated() override;
 
-  // ShelfLayoutManagerObserver:
-  void OnHotseatStateChanged(HotseatState old_state,
-                             HotseatState new_state) override;
-
   void set_default_last_focusable_child(bool default_last_focusable_child) {
     default_last_focusable_child_ = default_last_focusable_child;
   }
diff --git a/ash/tooltips/tooltip_controller_unittest.cc b/ash/tooltips/tooltip_controller_unittest.cc
index 0756bd0..ef4d18b 100644
--- a/ash/tooltips/tooltip_controller_unittest.cc
+++ b/ash/tooltips/tooltip_controller_unittest.cc
@@ -117,16 +117,16 @@
   EXPECT_TRUE(helper_->IsTooltipVisible());
 
   // Disable mouse event which hides the cursor and check again.
-  ash::Shell::Get()->cursor_manager()->DisableMouseEvents();
+  Shell::Get()->cursor_manager()->DisableMouseEvents();
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(ash::Shell::Get()->cursor_manager()->IsCursorVisible());
+  EXPECT_FALSE(Shell::Get()->cursor_manager()->IsCursorVisible());
   helper_->UpdateIfRequired();
   EXPECT_FALSE(helper_->IsTooltipVisible());
 
   // Enable mouse event which shows the cursor and re-check.
-  ash::Shell::Get()->cursor_manager()->EnableMouseEvents();
+  Shell::Get()->cursor_manager()->EnableMouseEvents();
   base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(ash::Shell::Get()->cursor_manager()->IsCursorVisible());
+  EXPECT_TRUE(Shell::Get()->cursor_manager()->IsCursorVisible());
   helper_->UpdateIfRequired();
   EXPECT_TRUE(helper_->IsTooltipVisible());
 }
diff --git a/ash/touch/touch_observer_hud_unittest.cc b/ash/touch/touch_observer_hud_unittest.cc
index 4b7587c..012d923 100644
--- a/ash/touch/touch_observer_hud_unittest.cc
+++ b/ash/touch/touch_observer_hud_unittest.cc
@@ -205,7 +205,7 @@
     // Add ash-touch-hud flag to enable debug touch HUD. This flag should be set
     // before Ash environment is set up, i.e., before TouchHudTestBase::SetUp().
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
-        ash::switches::kAshTouchHud);
+        switches::kAshTouchHud);
 
     TouchHudTestBase::SetUp();
   }
diff --git a/ash/utility/screenshot_controller.cc b/ash/utility/screenshot_controller.cc
index d2a7e3f..9234f67 100644
--- a/ash/utility/screenshot_controller.cc
+++ b/ash/utility/screenshot_controller.cc
@@ -466,7 +466,7 @@
       return;
 
     ui::Accelerator accelerator(*event);
-    ash::Shell::Get()
+    Shell::Get()
         ->accelerator_controller()
         ->accelerator_history()
         ->StoreCurrentAccelerator(accelerator);
diff --git a/ash/wm/always_on_top_controller.cc b/ash/wm/always_on_top_controller.cc
index 2c03705..37cb4eb 100644
--- a/ash/wm/always_on_top_controller.cc
+++ b/ash/wm/always_on_top_controller.cc
@@ -86,7 +86,7 @@
          window->type() == aura::client::WINDOW_TYPE_POPUP);
   aura::Window* container = GetContainer(window);
   if (window->parent() != container &&
-      !window->GetProperty(ash::kDisallowReparentKey))
+      !window->GetProperty(kDisallowReparentKey))
     container->AddChild(window);
 }
 
diff --git a/ash/wm/base_state.cc b/ash/wm/base_state.cc
index 8381da906..f230f49 100644
--- a/ash/wm/base_state.cc
+++ b/ash/wm/base_state.cc
@@ -151,11 +151,11 @@
         window->SetProperty(aura::client::kPreMinimizedShowStateKey,
                             ToWindowShowState(previous_state_type));
       // We must not save MINIMIZED to |kPreMinimizedShowStateKey|.
-      else if (window->GetProperty(ash::kPrePipWindowStateTypeKey) !=
+      else if (window->GetProperty(kPrePipWindowStateTypeKey) !=
                WindowStateType::kMinimized)
-        window->SetProperty(aura::client::kPreMinimizedShowStateKey,
-                            ToWindowShowState(window->GetProperty(
-                                ash::kPrePipWindowStateTypeKey)));
+        window->SetProperty(
+            aura::client::kPreMinimizedShowStateKey,
+            ToWindowShowState(window->GetProperty(kPrePipWindowStateTypeKey)));
     }
     // Count minimizing a PIP window as dismissing it. Android apps in PIP mode
     // don't exit when they are dismissed, they just go back to being a regular
diff --git a/ash/wm/client_controlled_state_unittest.cc b/ash/wm/client_controlled_state_unittest.cc
index 49431fa..510dc904b 100644
--- a/ash/wm/client_controlled_state_unittest.cc
+++ b/ash/wm/client_controlled_state_unittest.cc
@@ -563,7 +563,7 @@
 }
 
 TEST_F(ClientControlledStateTest, HandleBoundsEventsUpdatesPipRestoreBounds) {
-  state()->EnterNextState(window_state(), ash::WindowStateType::kPip);
+  state()->EnterNextState(window_state(), WindowStateType::kPip);
 
   EXPECT_TRUE(window_state()->IsPip());
 
diff --git a/ash/wm/drag_details.h b/ash/wm/drag_details.h
index ea354035..4eecb5f 100644
--- a/ash/wm/drag_details.h
+++ b/ash/wm/drag_details.h
@@ -25,7 +25,7 @@
               ::wm::WindowMoveSource source);
   ~DragDetails();
 
-  ash::WindowStateType initial_state_type;
+  WindowStateType initial_state_type;
 
   // Initial bounds of the window in parent coordinates.
   const gfx::Rect initial_bounds_in_parent;
diff --git a/ash/wm/immersive_fullscreen_controller_unittest.cc b/ash/wm/immersive_fullscreen_controller_unittest.cc
index 9fedf59..a2a7c6a 100644
--- a/ash/wm/immersive_fullscreen_controller_unittest.cc
+++ b/ash/wm/immersive_fullscreen_controller_unittest.cc
@@ -541,7 +541,7 @@
 TEST_F(ImmersiveFullscreenControllerTest, MouseEventsVerticalDisplayLayout) {
   // Set up initial state.
   UpdateDisplay("800x600,800x600");
-  ash::Shell::Get()->display_manager()->SetLayoutForCurrentDisplays(
+  Shell::Get()->display_manager()->SetLayoutForCurrentDisplays(
       display::test::CreateDisplayLayout(display_manager(),
                                          display::DisplayPlacement::TOP, 0));
 
@@ -549,7 +549,7 @@
   ASSERT_TRUE(controller()->IsEnabled());
   ASSERT_FALSE(controller()->IsRevealed());
 
-  aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows();
+  aura::Window::Windows root_windows = Shell::GetAllRootWindows();
   ASSERT_EQ(root_windows[0],
             top_container()->GetWidget()->GetNativeWindow()->GetRootWindow());
 
@@ -837,7 +837,7 @@
 
 // Check that the window state gets properly marked for immersive fullscreen.
 TEST_F(ImmersiveFullscreenControllerTest, WindowStateImmersiveFullscreen) {
-  ash::WindowState* window_state = ash::WindowState::Get(window());
+  WindowState* window_state = WindowState::Get(window());
   SetWindowShowState(ui::SHOW_STATE_NORMAL);
 
   EXPECT_FALSE(window_state->IsInImmersiveFullscreen());
diff --git a/ash/wm/lock_action_handler_layout_manager_unittest.cc b/ash/wm/lock_action_handler_layout_manager_unittest.cc
index fcb3aa1e..196649a 100644
--- a/ash/wm/lock_action_handler_layout_manager_unittest.cc
+++ b/ash/wm/lock_action_handler_layout_manager_unittest.cc
@@ -316,7 +316,7 @@
 
   // Verify that window bounds get updated when Chromevox bounds are shown (so
   // the Chromevox panel does not overlay with the action handler window).
-  ash::ShelfLayoutManager* shelf_layout_manager =
+  ShelfLayoutManager* shelf_layout_manager =
       GetPrimaryShelf()->shelf_layout_manager();
   ASSERT_TRUE(shelf_layout_manager);
 
diff --git a/ash/wm/lock_layout_manager_unittest.cc b/ash/wm/lock_layout_manager_unittest.cc
index ac35ed9..c033952 100644
--- a/ash/wm/lock_layout_manager_unittest.cc
+++ b/ash/wm/lock_layout_manager_unittest.cc
@@ -65,7 +65,7 @@
                                       bool use_delegate) {
     aura::Window* parent =
         Shell::GetPrimaryRootWindowController()->GetContainer(
-            ash::kShellWindowId_LockScreenContainer);
+            kShellWindowId_LockScreenContainer);
     params.parent = parent;
     views::Widget* widget = new views::Widget;
     if (use_delegate)
@@ -177,7 +177,7 @@
 }
 
 TEST_F(LockLayoutManagerTest, AccessibilityPanel) {
-  ash::ShelfLayoutManager* shelf_layout_manager =
+  ShelfLayoutManager* shelf_layout_manager =
       GetPrimaryShelf()->shelf_layout_manager();
   ASSERT_TRUE(shelf_layout_manager);
 
@@ -335,7 +335,7 @@
 TEST_F(LockLayoutManagerTest, AccessibilityPanelWithMultipleMonitors) {
   UpdateDisplay("300x400,400x500");
 
-  ash::ShelfLayoutManager* shelf_layout_manager =
+  ShelfLayoutManager* shelf_layout_manager =
       GetPrimaryShelf()->shelf_layout_manager();
   ASSERT_TRUE(shelf_layout_manager);
 
diff --git a/ash/wm/lock_state_controller.h b/ash/wm/lock_state_controller.h
index c8857d43..112cd6e2 100644
--- a/ash/wm/lock_state_controller.h
+++ b/ash/wm/lock_state_controller.h
@@ -151,12 +151,12 @@
 
   // Fades in wallpaper layer with |speed| if it was hidden in unlocked state.
   void AnimateWallpaperAppearanceIfNecessary(
-      ash::SessionStateAnimator::AnimationSpeed speed,
+      SessionStateAnimator::AnimationSpeed speed,
       SessionStateAnimator::AnimationSequence* animation_sequence);
 
   // Fades out wallpaper layer with |speed| if it was hidden in unlocked state.
   void AnimateWallpaperHidingIfNecessary(
-      ash::SessionStateAnimator::AnimationSpeed speed,
+      SessionStateAnimator::AnimationSpeed speed,
       SessionStateAnimator::AnimationSequence* animation_sequence);
 
   // Notifies observers.
diff --git a/ash/wm/lock_window_state.cc b/ash/wm/lock_window_state.cc
index c7ae3eb..d28a23a 100644
--- a/ash/wm/lock_window_state.cc
+++ b/ash/wm/lock_window_state.cc
@@ -67,8 +67,8 @@
       if (window_state->IsMaximized() || window_state->IsFullscreen()) {
         UpdateBounds(window_state);
       } else {
-        const ash::SetBoundsWMEvent* bounds_event =
-            static_cast<const ash::SetBoundsWMEvent*>(event);
+        const SetBoundsWMEvent* bounds_event =
+            static_cast<const SetBoundsWMEvent*>(event);
         window_state->SetBoundsConstrained(bounds_event->requested_bounds());
       }
       break;
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc
index 4eee23e1..e44c06b 100644
--- a/ash/wm/overview/overview_grid.cc
+++ b/ash/wm/overview/overview_grid.cc
@@ -275,8 +275,8 @@
     DCHECK_EQ(window, target_window_);
     // When the property is cleared, the dragged window should have been merged
     // into |target_window_|, update the corresponding window item in overview.
-    if (key == ash::kIsDeferredTabDraggingTargetWindowKey &&
-        !window->GetProperty(ash::kIsDeferredTabDraggingTargetWindowKey)) {
+    if (key == kIsDeferredTabDraggingTargetWindowKey &&
+        !window->GetProperty(kIsDeferredTabDraggingTargetWindowKey)) {
       UpdateWindowItemInOverviewContaining(window);
       StopObserving();
     }
@@ -761,7 +761,7 @@
     // overview item so that it can't merge into this overview item if the
     // dragged window is currently in preview window area.
     if (target_window && !IsDropTargetWindow(target_window))
-      target_window->ClearProperty(ash::kIsDeferredTabDraggingTargetWindowKey);
+      target_window->ClearProperty(kIsDeferredTabDraggingTargetWindowKey);
 
     return;
   }
@@ -769,7 +769,7 @@
   // Show the tab drag highlight if |location_in_screen| is contained by the
   // browser windows' overview item in overview.
   if (target_window &&
-      target_window->GetProperty(ash::kIsDeferredTabDraggingTargetWindowKey)) {
+      target_window->GetProperty(kIsDeferredTabDraggingTargetWindowKey)) {
     auto* item = GetOverviewItemContaining(target_window);
     if (!item)
       return;
@@ -814,7 +814,7 @@
   aura::Window* target_window =
       GetTargetWindowOnLocation(location_in_screen, /*ignored_item=*/nullptr);
   if (target_window &&
-      target_window->GetProperty(ash::kIsDeferredTabDraggingTargetWindowKey)) {
+      target_window->GetProperty(kIsDeferredTabDraggingTargetWindowKey)) {
     // Create an window observer and update the minimized window widget after
     // the dragged window merges into |target_window|.
     if (!target_window_observer_)
@@ -1874,7 +1874,7 @@
     // into another window when changing the dragged window's bounds, so
     // that the dragged window doesn't merge into another window because of
     // its changed bounds.
-    dragged_window->SetProperty(ash::kCanAttachToAnotherWindowKey, false);
+    dragged_window->SetProperty(kCanAttachToAnotherWindowKey, false);
     TabletModeWindowState::UpdateWindowPosition(
         WindowState::Get(dragged_window), /*animate=*/false);
     const gfx::Rect new_bounds = dragged_window->bounds();
@@ -1884,7 +1884,7 @@
           gfx::RectF(new_bounds), gfx::RectF(old_bounds));
       dragged_window->SetTransform(transform);
     }
-    dragged_window->ClearProperty(ash::kCanAttachToAnotherWindowKey);
+    dragged_window->ClearProperty(kCanAttachToAnotherWindowKey);
   }
 
   overview_session_->AddItem(dragged_window, /*reposition=*/false,
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc
index 4acc895..cc6f811 100644
--- a/ash/wm/overview/overview_session_unittest.cc
+++ b/ash/wm/overview/overview_session_unittest.cc
@@ -169,11 +169,10 @@
     ScopedOverviewTransformWindow::SetImmediateCloseForTests();
     OverviewWallpaperController::SetDoNotChangeWallpaperForTests();
     FpsCounter::SetForceReportZeroAnimationForTest(true);
-    ash::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
-        true);
+    PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(true);
   }
   void TearDown() override {
-    ash::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
+    PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
         false);
     FpsCounter::SetForceReportZeroAnimationForTest(false);
     trace_names_.clear();
@@ -906,7 +905,7 @@
 TEST_P(OverviewSessionTest, SkipOverviewWindow) {
   std::unique_ptr<aura::Window> window1(CreateTestWindow());
   std::unique_ptr<aura::Window> window2(CreateTestWindow());
-  window2->SetProperty(ash::kHideInOverviewKey, true);
+  window2->SetProperty(kHideInOverviewKey, true);
 
   // Enter overview.
   ToggleOverview();
@@ -5486,7 +5485,7 @@
   // AshTestBase:
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        ash::features::kDragToSnapInClamshellMode);
+        features::kDragToSnapInClamshellMode);
     OverviewSessionTest::SetUp();
     Shell::Get()->tablet_mode_controller()->SetEnabledForTest(false);
     DCHECK(ShouldAllowSplitView());
diff --git a/ash/wm/resize_shadow_and_cursor_unittest.cc b/ash/wm/resize_shadow_and_cursor_unittest.cc
index f23cdda8..e4d64485 100644
--- a/ash/wm/resize_shadow_and_cursor_unittest.cc
+++ b/ash/wm/resize_shadow_and_cursor_unittest.cc
@@ -127,7 +127,7 @@
 // mouse's position.
 TEST_F(ResizeShadowAndCursorTest, MouseHover) {
   ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
-  ASSERT_TRUE(ash::WindowState::Get(window())->IsNormalStateType());
+  ASSERT_TRUE(WindowState::Get(window())->IsNormalStateType());
 
   generator.MoveMouseTo(50, 50);
   VerifyResizeShadow(false);
@@ -152,21 +152,21 @@
   EXPECT_EQ(HTBOTTOM, ResizeShadowHitTest());
   EXPECT_EQ(ui::CursorType::kSouthResize, GetCurrentCursorType());
 
-  generator.MoveMouseTo(50, 100 + ash::kResizeOutsideBoundsSize - 1);
+  generator.MoveMouseTo(50, 100 + kResizeOutsideBoundsSize - 1);
   VerifyResizeShadow(true);
   EXPECT_EQ(HTBOTTOM, ResizeShadowHitTest());
   EXPECT_EQ(ui::CursorType::kSouthResize, GetCurrentCursorType());
 
-  generator.MoveMouseTo(50, 100 + ash::kResizeOutsideBoundsSize + 10);
+  generator.MoveMouseTo(50, 100 + kResizeOutsideBoundsSize + 10);
   VerifyResizeShadow(false);
   EXPECT_EQ(ui::CursorType::kNull, GetCurrentCursorType());
 
-  generator.MoveMouseTo(50, 100 - ash::kResizeInsideBoundsSize);
+  generator.MoveMouseTo(50, 100 - kResizeInsideBoundsSize);
   VerifyResizeShadow(true);
   EXPECT_EQ(HTBOTTOM, ResizeShadowHitTest());
   EXPECT_EQ(ui::CursorType::kSouthResize, GetCurrentCursorType());
 
-  generator.MoveMouseTo(50, 100 - ash::kResizeInsideBoundsSize - 10);
+  generator.MoveMouseTo(50, 100 - kResizeInsideBoundsSize - 10);
   VerifyResizeShadow(false);
   EXPECT_EQ(ui::CursorType::kNull, GetCurrentCursorType());
 }
@@ -175,7 +175,7 @@
 // as long as a user is resizing a window.
 TEST_F(ResizeShadowAndCursorTest, MouseDrag) {
   ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
-  ASSERT_TRUE(ash::WindowState::Get(window())->IsNormalStateType());
+  ASSERT_TRUE(WindowState::Get(window())->IsNormalStateType());
   gfx::Size initial_size(window()->bounds().size());
 
   generator.MoveMouseTo(200, 50);
@@ -200,11 +200,11 @@
 
 // Test that the resize shadows stay visible while resizing a window via touch.
 TEST_F(ResizeShadowAndCursorTest, Touch) {
-  ASSERT_TRUE(ash::WindowState::Get(window())->IsNormalStateType());
+  ASSERT_TRUE(WindowState::Get(window())->IsNormalStateType());
   ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
 
-  int start_x = 200 + ash::kResizeOutsideBoundsSize - 1;
-  int start_y = 100 + ash::kResizeOutsideBoundsSize - 1;
+  int start_x = 200 + kResizeOutsideBoundsSize - 1;
+  int start_y = 100 + kResizeOutsideBoundsSize - 1;
   generator.GestureScrollSequenceWithCallback(
       gfx::Point(start_x, start_y), gfx::Point(start_x + 50, start_y + 50),
       base::TimeDelta::FromMilliseconds(200), 3,
@@ -217,16 +217,16 @@
 // used when the window is maximized.
 TEST_F(ResizeShadowAndCursorTest, MaximizeRestore) {
   ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
-  ASSERT_TRUE(ash::WindowState::Get(window())->IsNormalStateType());
+  ASSERT_TRUE(WindowState::Get(window())->IsNormalStateType());
 
   generator.MoveMouseTo(200, 50);
   EXPECT_EQ(HTRIGHT, ResizeShadowHitTest());
   EXPECT_EQ(ui::CursorType::kEastResize, GetCurrentCursorType());
-  generator.MoveMouseTo(200 - ash::kResizeInsideBoundsSize, 50);
+  generator.MoveMouseTo(200 - kResizeInsideBoundsSize, 50);
   EXPECT_EQ(HTRIGHT, ResizeShadowHitTest());
   EXPECT_EQ(ui::CursorType::kEastResize, GetCurrentCursorType());
 
-  ash::WindowState::Get(window())->Maximize();
+  WindowState::Get(window())->Maximize();
   gfx::Rect bounds(window()->GetBoundsInRootWindow());
   gfx::Point right_center(bounds.right() - 1,
                           (bounds.y() + bounds.bottom()) / 2);
@@ -234,11 +234,11 @@
   VerifyResizeShadow(false);
   EXPECT_EQ(ui::CursorType::kNull, GetCurrentCursorType());
 
-  ash::WindowState::Get(window())->Restore();
+  WindowState::Get(window())->Restore();
   generator.MoveMouseTo(200, 50);
   EXPECT_EQ(HTRIGHT, ResizeShadowHitTest());
   EXPECT_EQ(ui::CursorType::kEastResize, GetCurrentCursorType());
-  generator.MoveMouseTo(200 - ash::kResizeInsideBoundsSize, 50);
+  generator.MoveMouseTo(200 - kResizeInsideBoundsSize, 50);
   EXPECT_EQ(HTRIGHT, ResizeShadowHitTest());
   EXPECT_EQ(ui::CursorType::kEastResize, GetCurrentCursorType());
 }
@@ -247,15 +247,15 @@
 // for crbug.com/752583
 TEST_F(ResizeShadowAndCursorTest, Minimize) {
   ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
-  ASSERT_TRUE(ash::WindowState::Get(window())->IsNormalStateType());
+  ASSERT_TRUE(WindowState::Get(window())->IsNormalStateType());
 
   generator.MoveMouseTo(200, 50);
   VerifyResizeShadow(true);
 
-  ash::WindowState::Get(window())->Minimize();
+  WindowState::Get(window())->Minimize();
   VerifyResizeShadow(false);
 
-  ash::WindowState::Get(window())->Restore();
+  WindowState::Get(window())->Restore();
   VerifyResizeShadow(false);
 }
 
diff --git a/ash/wm/screen_dimmer.cc b/ash/wm/screen_dimmer.cc
index 332b5c9..d5ae6ab 100644
--- a/ash/wm/screen_dimmer.cc
+++ b/ash/wm/screen_dimmer.cc
@@ -50,7 +50,7 @@
   return container_ == Container::ROOT
              ? Shell::GetAllRootWindows()
              : GetContainersForAllRootWindows(
-                   ash::kShellWindowId_LockScreenContainersContainer);
+                   kShellWindowId_LockScreenContainersContainer);
 }
 
 void ScreenDimmer::OnRootWindowAdded(aura::Window* root_window) {
diff --git a/ash/wm/splitview/multi_display_overview_and_split_view_test.cc b/ash/wm/splitview/multi_display_overview_and_split_view_test.cc
index 7cd92ce8..a394ded 100644
--- a/ash/wm/splitview/multi_display_overview_and_split_view_test.cc
+++ b/ash/wm/splitview/multi_display_overview_and_split_view_test.cc
@@ -17,7 +17,7 @@
 void MultiDisplayOverviewAndSplitViewTest::SetUp() {
   if (GetParam()) {
     scoped_feature_list_.InitAndEnableFeature(
-        ash::features::kMultiDisplayOverviewAndSplitView);
+        features::kMultiDisplayOverviewAndSplitView);
   }
   AshTestBase::SetUp();
 }
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc
index ee6c8fd7..d5526c2 100644
--- a/ash/wm/splitview/split_view_controller.cc
+++ b/ash/wm/splitview/split_view_controller.cc
@@ -195,8 +195,7 @@
                                const void* key,
                                intptr_t old) override {
     DCHECK_EQ(window, dragged_window_);
-    if (key == ash::kIsDraggingTabsKey &&
-        !window_util::IsDraggingTabs(window)) {
+    if (key == kIsDraggingTabsKey && !window_util::IsDraggingTabs(window)) {
       // At this point we know the newly created dragged window just finished
       // dragging.
       EndTabDragging(window, /*is_being_destroyed=*/false);
@@ -222,7 +221,7 @@
   // update its bounds to ensure it has the right bounds after the drag ends.
   void UpdateSourceWindowBoundsAfterDragEnds(aura::Window* window) {
     aura::Window* source_window =
-        window->GetProperty(ash::kTabDraggingSourceWindowKey);
+        window->GetProperty(kTabDraggingSourceWindowKey);
     if (source_window) {
       TabletModeWindowState::UpdateWindowPosition(
           WindowState::Get(source_window), /*animate=*/true);
@@ -936,8 +935,8 @@
 }
 
 void SplitViewController::OnPostWindowStateTypeChange(
-    ash::WindowState* window_state,
-    ash::WindowStateType old_type) {
+    WindowState* window_state,
+    WindowStateType old_type) {
   DCHECK_EQ(
       window_state->GetDisplay().id(),
       display::Screen::GetScreen()->GetDisplayNearestWindow(root_window_).id());
@@ -1854,7 +1853,7 @@
     }
   } else {
     aura::Window* initiator_window =
-        window->GetProperty(ash::kTabDraggingSourceWindowKey);
+        window->GetProperty(kTabDraggingSourceWindowKey);
     // Note SnapWindow() might put the previous window that was snapped at the
     // |desired_snap_position| in overview.
     SnapWindow(window, desired_snap_position,
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h
index c9c0644..3f433fc 100644
--- a/ash/wm/splitview/split_view_controller.h
+++ b/ash/wm/splitview/split_view_controller.h
@@ -220,8 +220,8 @@
   void OnResizeLoopEnded(aura::Window* window) override;
 
   // WindowStateObserver:
-  void OnPostWindowStateTypeChange(ash::WindowState* window_state,
-                                   ash::WindowStateType old_type) override;
+  void OnPostWindowStateTypeChange(WindowState* window_state,
+                                   WindowStateType old_type) override;
 
   // wm::ActivationChangeObserver:
   void OnWindowActivated(ActivationReason reason,
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc
index 2bd92a7..54b2d54 100644
--- a/ash/wm/splitview/split_view_controller_unittest.cc
+++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -135,11 +135,10 @@
     base::RunLoop().RunUntilIdle();
     Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true);
     FpsCounter::SetForceReportZeroAnimationForTest(true);
-    ash::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
-        true);
+    PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(true);
   }
   void TearDown() override {
-    ash::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
+    PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
         false);
     FpsCounter::SetForceReportZeroAnimationForTest(false);
     trace_names_.clear();
@@ -4462,7 +4461,7 @@
 
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        ash::features::kDragToSnapInClamshellMode);
+        features::kDragToSnapInClamshellMode);
     SplitViewTabDraggingTest::SetUp();
   }
 
diff --git a/ash/wm/splitview/split_view_drag_indicators_unittest.cc b/ash/wm/splitview/split_view_drag_indicators_unittest.cc
index 35ee35a..8baa5467 100644
--- a/ash/wm/splitview/split_view_drag_indicators_unittest.cc
+++ b/ash/wm/splitview/split_view_drag_indicators_unittest.cc
@@ -41,11 +41,10 @@
     base::RunLoop().RunUntilIdle();
     Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true);
     base::RunLoop().RunUntilIdle();
-    ash::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
-        true);
+    PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(true);
   }
   void TearDown() override {
-    ash::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
+    PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest(
         false);
     AshTestBase::TearDown();
   }
diff --git a/ash/wm/splitview/split_view_utils.cc b/ash/wm/splitview/split_view_utils.cc
index cafa248..5362280 100644
--- a/ash/wm/splitview/split_view_utils.cc
+++ b/ash/wm/splitview/split_view_utils.cc
@@ -347,13 +347,12 @@
 }
 
 bool IsClamshellSplitViewModeEnabled() {
-  return base::FeatureList::IsEnabled(
-      ash::features::kDragToSnapInClamshellMode);
+  return base::FeatureList::IsEnabled(features::kDragToSnapInClamshellMode);
 }
 
 bool AreMultiDisplayOverviewAndSplitViewEnabled() {
   return base::FeatureList::IsEnabled(
-      ash::features::kMultiDisplayOverviewAndSplitView);
+      features::kMultiDisplayOverviewAndSplitView);
 }
 
 bool ShouldAllowSplitView() {
@@ -375,7 +374,7 @@
 }
 
 void ShowAppCannotSnapToast() {
-  ash::Shell::Get()->toast_manager()->Show(ash::ToastData(
+  Shell::Get()->toast_manager()->Show(ToastData(
       kAppCannotSnapToastId,
       l10n_util::GetStringUTF16(IDS_ASH_SPLIT_VIEW_CANNOT_SNAP),
       kAppCannotSnapToastDurationMs, base::Optional<base::string16>()));
diff --git a/ash/wm/system_modal_container_layout_manager_unittest.cc b/ash/wm/system_modal_container_layout_manager_unittest.cc
index 40524f8..f62f61b 100644
--- a/ash/wm/system_modal_container_layout_manager_unittest.cc
+++ b/ash/wm/system_modal_container_layout_manager_unittest.cc
@@ -328,7 +328,7 @@
   std::unique_ptr<aura::Window> status_control(
       status_delegate->OpenTestWindowWithParent(
           Shell::GetPrimaryRootWindowController()->GetContainer(
-              ash::kShellWindowId_ShelfControlContainer)));
+              kShellWindowId_ShelfControlContainer)));
   status_control->SetBounds(main->bounds());
 
   // Make sure that status window can receive event.
@@ -360,7 +360,7 @@
     EventTestWindow* lock_delegate = new EventTestWindow(false);
     std::unique_ptr<aura::Window> lock(lock_delegate->OpenTestWindowWithParent(
         Shell::GetPrimaryRootWindowController()->GetContainer(
-            ash::kShellWindowId_LockScreenContainer)));
+            kShellWindowId_LockScreenContainer)));
     // BlockUserSession could change the workspace size. Make sure |lock| has
     // the same bounds as |main| so that |lock| gets the generated mouse events.
     lock->SetBounds(main->bounds());
@@ -421,7 +421,7 @@
   std::unique_ptr<aura::Window> status_control(
       status_delegate->OpenTestWindowWithParent(
           Shell::GetPrimaryRootWindowController()->GetContainer(
-              ash::kShellWindowId_ShelfControlContainer)));
+              kShellWindowId_ShelfControlContainer)));
   status_control->SetBounds(main->bounds());
 
   // Events are blocked on all windows because status window is above the modal
@@ -627,7 +627,7 @@
     BlockUserSession(static_cast<UserSessionBlockReason>(block_reason));
     std::unique_ptr<aura::Window> lock_parent(OpenTestWindowWithParent(
         Shell::GetPrimaryRootWindowController()->GetContainer(
-            ash::kShellWindowId_LockScreenContainer),
+            kShellWindowId_LockScreenContainer),
         false));
     std::unique_ptr<aura::Window> lock_modal_window(
         OpenTestWindowWithParent(lock_parent.get(), true));
@@ -666,10 +666,10 @@
 
   aura::Window::Windows root_windows = Shell::GetAllRootWindows();
   EXPECT_EQ(2U, root_windows.size());
-  aura::Window* container1 = Shell::GetContainer(
-      root_windows[0], ash::kShellWindowId_SystemModalContainer);
-  aura::Window* container2 = Shell::GetContainer(
-      root_windows[1], ash::kShellWindowId_SystemModalContainer);
+  aura::Window* container1 =
+      Shell::GetContainer(root_windows[0], kShellWindowId_SystemModalContainer);
+  aura::Window* container2 =
+      Shell::GetContainer(root_windows[1], kShellWindowId_SystemModalContainer);
 
   std::unique_ptr<aura::Window> modal1(
       OpenTestWindowWithParent(container1, true));
diff --git a/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc b/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc
index 9a22cae5..27c131f2 100644
--- a/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc
+++ b/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc
@@ -121,7 +121,7 @@
       : dragged_window_(dragged_window) {
     DCHECK(dragged_window);
     aura::Window* source_window =
-        dragged_window->GetProperty(ash::kTabDraggingSourceWindowKey);
+        dragged_window->GetProperty(kTabDraggingSourceWindowKey);
     DCHECK(source_window);
 
     // Disable the backdrop for |source_window| during dragging.
@@ -160,7 +160,7 @@
   ~WindowsHider() override {
     // It might be possible that |source_window| is destroyed during dragging.
     aura::Window* source_window =
-        dragged_window_->GetProperty(ash::kTabDraggingSourceWindowKey);
+        dragged_window_->GetProperty(kTabDraggingSourceWindowKey);
     if (source_window)
       source_window->SetProperty(kBackdropWindowMode, source_window_backdrop_);
 
@@ -265,7 +265,7 @@
 bool TabletModeBrowserWindowDragDelegate::ShouldOpenOverviewWhenDragStarts() {
   DCHECK(dragged_window_);
   aura::Window* source_window =
-      dragged_window_->GetProperty(ash::kTabDraggingSourceWindowKey);
+      dragged_window_->GetProperty(kTabDraggingSourceWindowKey);
   return !source_window;
 }
 
@@ -275,10 +275,10 @@
   // source window is not in splitscreen && the source window is not in
   // overview.
   aura::Window* source_window =
-      dragged_window_->GetProperty(ash::kTabDraggingSourceWindowKey);
+      dragged_window_->GetProperty(kTabDraggingSourceWindowKey);
   if (!source_window || source_window == dragged_window_ ||
       split_view_controller_->IsWindowInSplitView(source_window) ||
-      source_window->GetProperty(ash::kIsShowingInOverviewKey)) {
+      source_window->GetProperty(kIsShowingInOverviewKey)) {
     return;
   }
 
@@ -333,7 +333,7 @@
     return;
 
   aura::Window* source_window =
-      dragged_window_->GetProperty(ash::kTabDraggingSourceWindowKey);
+      dragged_window_->GetProperty(kTabDraggingSourceWindowKey);
   // Do not merge back if there is no source window.
   if (!source_window)
     return;
@@ -381,7 +381,7 @@
 
   // Arriving here we know the dragged window should merge back into its source
   // window.
-  source_window->SetProperty(ash::kIsDeferredTabDraggingTargetWindowKey, true);
+  source_window->SetProperty(kIsDeferredTabDraggingTargetWindowKey, true);
 }
 
 }  // namespace ash
diff --git a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
index c3047fec..86a18a4 100644
--- a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
+++ b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
@@ -1213,7 +1213,7 @@
   wm::ActivateWindow(dragged_window.get());
   ASSERT_TRUE(Shell::Get()->toplevel_window_event_handler()->AttemptToStartDrag(
       dragged_window.get(), gfx::PointF(), HTCAPTION,
-      ash::ToplevelWindowEventHandler::EndClosure()));
+      ToplevelWindowEventHandler::EndClosure()));
   tablet_mode_controller()->SetEnabledForTest(true);
   EXPECT_EQ(SplitViewController::State::kLeftSnapped,
             split_view_controller()->state());
@@ -1255,7 +1255,7 @@
   wm::ActivateWindow(dragged_window.get());
   ASSERT_TRUE(Shell::Get()->toplevel_window_event_handler()->AttemptToStartDrag(
       dragged_window.get(), gfx::PointF(), HTCAPTION,
-      ash::ToplevelWindowEventHandler::EndClosure()));
+      ToplevelWindowEventHandler::EndClosure()));
   tablet_mode_controller()->SetEnabledForTest(true);
   EXPECT_EQ(SplitViewController::State::kLeftSnapped,
             split_view_controller()->state());
diff --git a/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc b/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc
index b9686ac..ca71b88 100644
--- a/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc
+++ b/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc
@@ -1913,7 +1913,7 @@
   // AshTestBase:
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        ash::features::kDragToSnapInClamshellMode);
+        features::kDragToSnapInClamshellMode);
     TabletModeWindowManagerTest::SetUp();
     DCHECK(ShouldAllowSplitView());
   }
diff --git a/ash/wm/test_session_state_animator.cc b/ash/wm/test_session_state_animator.cc
index 6131aae2..36d9863 100644
--- a/ash/wm/test_session_state_animator.cc
+++ b/ash/wm/test_session_state_animator.cc
@@ -231,7 +231,7 @@
   }
 }
 
-ash::SessionStateAnimator::AnimationSequence*
+SessionStateAnimator::AnimationSequence*
 TestSessionStateAnimator::BeginAnimationSequence(base::OnceClosure callback) {
   return new AnimationSequence(std::move(callback), this);
 }
diff --git a/ash/wm/toplevel_window_event_handler_unittest.cc b/ash/wm/toplevel_window_event_handler_unittest.cc
index 5529477..c489f359 100644
--- a/ash/wm/toplevel_window_event_handler_unittest.cc
+++ b/ash/wm/toplevel_window_event_handler_unittest.cc
@@ -187,7 +187,7 @@
 TEST_F(ToplevelWindowEventHandlerTest, WindowPositionAutoManagement) {
   std::unique_ptr<aura::Window> w1(CreateWindow(HTNOWHERE));
   const gfx::Size size = w1->bounds().size();
-  WindowState* window_state = ash::WindowState::Get(w1.get());
+  WindowState* window_state = WindowState::Get(w1.get());
   ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), w1.get());
 
   // Explicitly enable window position auto management, and expect it to be
@@ -1033,8 +1033,7 @@
   void SetUp() override {
     AshTestBase::SetUp();
 
-    feature_list_.InitAndEnableFeature(
-        ash::features::kSwipingFromLeftEdgeToGoBack);
+    feature_list_.InitAndEnableFeature(features::kSwipingFromLeftEdgeToGoBack);
     top_window_ = CreateAppWindow(gfx::Rect(), AppType::BROWSER);
     TabletModeControllerTestApi().EnterTabletMode();
   }
@@ -1069,7 +1068,7 @@
                            /*pointer_id=*/5, /*radius_x=*/5.0f,
                            /*radius_y=*/5.0, /*force=*/1.0f));
     ui::Event::DispatcherApi(&event).set_target(top_window_.get());
-    ash::Shell::Get()->toplevel_window_event_handler()->OnTouchEvent(&event);
+    Shell::Get()->toplevel_window_event_handler()->OnTouchEvent(&event);
   }
 
   aura::Window* top_window() { return top_window_.get(); }
@@ -1614,7 +1613,7 @@
         position.x(), position.y(), ui::EF_NONE, base::TimeTicks::Now(),
         ui::GestureEventDetails(type, scroll_x, scroll_y));
     ui::Event::DispatcherApi(&event).set_target(dragged_window_.get());
-    ash::Shell::Get()->toplevel_window_event_handler()->OnGestureEvent(&event);
+    Shell::Get()->toplevel_window_event_handler()->OnGestureEvent(&event);
   }
 
   std::unique_ptr<aura::Window> dragged_window_;
diff --git a/ash/wm/window_manager_unittest.cc b/ash/wm/window_manager_unittest.cc
index e9181ec12..df4f2024 100644
--- a/ash/wm/window_manager_unittest.cc
+++ b/ash/wm/window_manager_unittest.cc
@@ -722,7 +722,7 @@
 // Touch visually hides the cursor.
 TEST_F(WindowManagerTest, UpdateCursorVisibility) {
   ui::test::EventGenerator* generator = GetEventGenerator();
-  ::wm::CursorManager* cursor_manager = ash::Shell::Get()->cursor_manager();
+  ::wm::CursorManager* cursor_manager = Shell::Get()->cursor_manager();
 
   generator->MoveMouseTo(gfx::Point(0, 0));
   EXPECT_TRUE(cursor_manager->IsCursorVisible());
@@ -741,7 +741,7 @@
 // Tests cursor visibility on key pressed event.
 TEST_F(WindowManagerTest, UpdateCursorVisibilityOnKeyEvent) {
   ui::test::EventGenerator* generator = GetEventGenerator();
-  ::wm::CursorManager* cursor_manager = ash::Shell::Get()->cursor_manager();
+  ::wm::CursorManager* cursor_manager = Shell::Get()->cursor_manager();
 
   // Pressing a key hides the cursor but does not disable mouse events.
   generator->PressKey(ui::VKEY_A, ui::EF_NONE);
@@ -790,7 +790,7 @@
 
 TEST_F(WindowManagerTest, TestCursorClientObserver) {
   ui::test::EventGenerator* generator = GetEventGenerator();
-  ::wm::CursorManager* cursor_manager = ash::Shell::Get()->cursor_manager();
+  ::wm::CursorManager* cursor_manager = Shell::Get()->cursor_manager();
 
   std::unique_ptr<aura::Window> w1(
       CreateTestWindowInShell(SK_ColorWHITE, -1, gfx::Rect(0, 0, 100, 100)));
diff --git a/ash/wm/window_properties.cc b/ash/wm/window_properties.cc
index 10c2ea33..324be35 100644
--- a/ash/wm/window_properties.cc
+++ b/ash/wm/window_properties.cc
@@ -15,6 +15,6 @@
 
 DEFINE_UI_CLASS_PROPERTY_KEY(bool, kWindowIsJanky, false)
 
-DEFINE_OWNED_UI_CLASS_PROPERTY_KEY(ash::WindowState, kWindowStateKey, nullptr)
+DEFINE_OWNED_UI_CLASS_PROPERTY_KEY(WindowState, kWindowStateKey, nullptr)
 
 }  // namespace ash
diff --git a/ash/wm/window_resizer.cc b/ash/wm/window_resizer.cc
index 3eccfc0..c6f185e 100644
--- a/ash/wm/window_resizer.cc
+++ b/ash/wm/window_resizer.cc
@@ -77,7 +77,7 @@
 
 WindowResizer::WindowResizer(WindowState* window_state)
     : window_state_(window_state) {
-  recorder_ = ash::CreatePresentationTimeHistogramRecorder(
+  recorder_ = CreatePresentationTimeHistogramRecorder(
       GetTarget()->layer()->GetCompositor(),
       "Ash.InteractiveWindowResize.TimeToPresent",
       "Ash.InteractiveWindowResize.TimeToPresent.MaxLatency");
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc
index 0ebb3a2..3da0d82 100644
--- a/ash/wm/window_state.cc
+++ b/ash/wm/window_state.cc
@@ -597,7 +597,7 @@
   return window_->GetProperty(aura::client::kShowStateKey);
 }
 
-ash::WindowPinType WindowState::GetPinType() const {
+WindowPinType WindowState::GetPinType() const {
   return window_->GetProperty(kWindowPinTypeKey);
 }
 
@@ -644,11 +644,11 @@
   }
 
   // sync up current window show state with PinType property.
-  ash::WindowPinType pin_type = ash::WindowPinType::kNone;
+  WindowPinType pin_type = WindowPinType::kNone;
   if (GetStateType() == WindowStateType::kPinned)
-    pin_type = ash::WindowPinType::kPinned;
+    pin_type = WindowPinType::kPinned;
   else if (GetStateType() == WindowStateType::kTrustedPinned)
-    pin_type = ash::WindowPinType::kTrustedPinned;
+    pin_type = WindowPinType::kTrustedPinned;
   if (pin_type != GetPinType()) {
     base::AutoReset<bool> resetter(&ignore_property_change_, true);
     window_->SetProperty(kWindowPinTypeKey, pin_type);
@@ -778,8 +778,7 @@
     // There may already be a system ui window on the initial position.
     UpdatePipBounds();
     if (!was_pip) {
-      window()->SetProperty(ash::kPrePipWindowStateTypeKey,
-                            old_window_state_type);
+      window()->SetProperty(kPrePipWindowStateTypeKey, old_window_state_type);
     }
 
     CollectPipEnterExitMetrics(/*enter=*/true);
@@ -903,7 +902,7 @@
     if (!ignore_property_change_) {
       // This change came from outside ash. Update our shelf visibility based
       // on our changed state.
-      ash::Shell::Get()->UpdateShelfVisibility();
+      Shell::Get()->UpdateShelfVisibility();
     }
     return;
   }
diff --git a/ash/wm/window_state.h b/ash/wm/window_state.h
index 33ea9cc..8e3c9c1f 100644
--- a/ash/wm/window_state.h
+++ b/ash/wm/window_state.h
@@ -395,7 +395,7 @@
   ui::WindowShowState GetShowState() const;
 
   // Return the window's current pin type.
-  ash::WindowPinType GetPinType() const;
+  WindowPinType GetPinType() const;
 
   // Sets the window's bounds in screen coordinates.
   void SetBoundsInScreen(const gfx::Rect& bounds_in_screen);
diff --git a/ash/wm/window_util.cc b/ash/wm/window_util.cc
index 5c790877..1639f00 100644
--- a/ash/wm/window_util.cc
+++ b/ash/wm/window_util.cc
@@ -316,9 +316,9 @@
   if (!pip_container)
     return;
 
-  auto pip_window_iter = std::find_if(pip_container->children().begin(),
-                                      pip_container->children().end(),
-                                      window_util::IsArcPipWindow);
+  auto pip_window_iter =
+      std::find_if(pip_container->children().begin(),
+                   pip_container->children().end(), IsArcPipWindow);
   if (pip_window_iter == pip_container->children().end())
     return;
 
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc
index c33c564..66014d9 100644
--- a/ash/wm/workspace/workspace_layout_manager_unittest.cc
+++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -1593,7 +1593,7 @@
   window_nonarc->Show();
 
   window_arc->SetProperty(aura::client::kAppType,
-                          static_cast<int>(ash::AppType::ARC_APP));
+                          static_cast<int>(AppType::ARC_APP));
   EXPECT_FALSE(test_helper.GetBackdropWindow());
 
   // ARC window will have a backdrop only when it's active.
diff --git a/ash/wm/workspace_controller_unittest.cc b/ash/wm/workspace_controller_unittest.cc
index dfc7d67..92dd0cbf 100644
--- a/ash/wm/workspace_controller_unittest.cc
+++ b/ash/wm/workspace_controller_unittest.cc
@@ -348,7 +348,7 @@
   std::unique_ptr<Window> w1(CreateTestWindow());
   const gfx::Rect w1_bounds(0, 1, 101, 102);
   Shelf* shelf = GetPrimaryShelf();
-  shelf->SetAutoHideBehavior(ash::ShelfAutoHideBehavior::kAlways);
+  shelf->SetAutoHideBehavior(ShelfAutoHideBehavior::kAlways);
   const gfx::Rect touches_shelf_bounds(
       0, shelf_layout_manager()->GetIdealBounds().y() - 10, 101, 102);
   // Move |w1| to overlap the shelf.
@@ -444,7 +444,7 @@
   // AshTestHelper.
   SessionInfo info;
   info.state = session_manager::SessionState::ACTIVE;
-  ash::Shell::Get()->session_controller()->SetSessionInfo(info);
+  Shell::Get()->session_controller()->SetSessionInfo(info);
 
   std::unique_ptr<Window> w1(CreateTestWindow());
   w1->Show();
diff --git a/base/files/file_path.cc b/base/files/file_path.cc
index 5514ddf0..5668636 100644
--- a/base/files/file_path.cc
+++ b/base/files/file_path.cc
@@ -35,7 +35,8 @@
 
 namespace {
 
-const char* const kCommonDoubleExtensionSuffixes[] = { "gz", "z", "bz2", "bz" };
+const char* const kCommonDoubleExtensionSuffixes[] = {"gz", "xz", "bz2", "z",
+                                                      "bz"};
 const char* const kCommonDoubleExtensions[] = { "user.js" };
 
 // Compatibility shim for cross-platform code that passes a StringPieceType to a
diff --git a/base/files/file_path_unittest.cc b/base/files/file_path_unittest.cc
index 1fc624f..d576ab4 100644
--- a/base/files/file_path_unittest.cc
+++ b/base/files/file_path_unittest.cc
@@ -728,6 +728,7 @@
 }
 
 TEST_F(FilePathTest, Extension2) {
+  // clang-format off
   const struct UnaryTestData cases[] = {
 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
     { FPL("C:\\a\\b\\c.ext"),        FPL(".ext") },
@@ -772,8 +773,11 @@
     { FPL("/foo.1234.user.js"),      FPL(".user.js") },
     { FPL("foo.user.js"),            FPL(".user.js") },
     { FPL("/foo.tar.bz"),            FPL(".tar.bz") },
+    { FPL("/foo.tar.xz"),            FPL(".tar.xz") },
   };
-  for (unsigned int i = 0; i < base::size(cases); ++i) {
+  // clang-format on
+
+  for (size_t i = 0; i < base::size(cases); ++i) {
     FilePath path(cases[i].input);
     FilePath::StringType extension = path.Extension();
     FilePath::StringType final_extension = path.FinalExtension();
@@ -782,7 +786,8 @@
     EXPECT_EQ(cases[i].expected, final_extension)
         << "i: " << i << ", path: " << path.value();
   }
-  for (unsigned int i = 0; i < base::size(double_extension_cases); ++i) {
+
+  for (size_t i = 0; i < base::size(double_extension_cases); ++i) {
     FilePath path(double_extension_cases[i].input);
     FilePath::StringType extension = path.Extension();
     EXPECT_EQ(double_extension_cases[i].expected, extension)
@@ -878,7 +883,7 @@
     { FPL("/foo.bar/foo"),        FPL("/foo.bar/foo") },
     { FPL("/foo.bar/..////"),     FPL("/foo.bar/..////") },
   };
-  for (unsigned int i = 0; i < base::size(cases); ++i) {
+  for (size_t i = 0; i < base::size(cases); ++i) {
     FilePath path(cases[i].input);
     FilePath removed = path.RemoveExtension();
     FilePath removed_final = path.RemoveFinalExtension();
@@ -887,13 +892,18 @@
     EXPECT_EQ(cases[i].expected, removed_final.value()) << "i: " << i <<
         ", path: " << path.value();
   }
-  {
+
+  const FilePath::StringPieceType tarballs[] = {
+      FPL("foo.tar.gz"), FPL("foo.tar.xz"), FPL("foo.tar.bz2"),
+      FPL("foo.tar.Z"), FPL("foo.tar.bz")};
+  for (size_t i = 0; i < base::size(tarballs); ++i) {
     FilePath path(FPL("foo.tar.gz"));
     FilePath removed = path.RemoveExtension();
     FilePath removed_final = path.RemoveFinalExtension();
-    EXPECT_EQ(FPL("foo"), removed.value()) << ", path: " << path.value();
-    EXPECT_EQ(FPL("foo.tar"), removed_final.value()) << ", path: "
-                                                     << path.value();
+    EXPECT_EQ(FPL("foo"), removed.value())
+        << "i: " << i << ", path: " << path.value();
+    EXPECT_EQ(FPL("foo.tar"), removed_final.value())
+        << "i: " << i << ", path: " << path.value();
   }
 }
 
diff --git a/base/metrics/OWNERS b/base/metrics/OWNERS
index 3d7488d3a..f70e5d4c 100644
--- a/base/metrics/OWNERS
+++ b/base/metrics/OWNERS
@@ -4,7 +4,6 @@
 isherman@chromium.org
 jwd@chromium.org
 mpearson@chromium.org
-nikunjb@chromium.org
 rkaplow@chromium.org
 
 # COMPONENT: Internals>Metrics
diff --git a/base/task/sequence_manager/sequence_manager.h b/base/task/sequence_manager/sequence_manager.h
index 9710bf8f..5f56cef 100644
--- a/base/task/sequence_manager/sequence_manager.h
+++ b/base/task/sequence_manager/sequence_manager.h
@@ -333,12 +333,6 @@
 BASE_EXPORT std::unique_ptr<SequenceManager> CreateUnboundSequenceManager(
     SequenceManager::Settings settings = SequenceManager::Settings());
 
-// Create a SequenceManager that runs on top of |task_runner|.
-// TODO(alexclarke): Change |task_runner| to a SequencedTaskRunner.
-BASE_EXPORT std::unique_ptr<SequenceManager> CreateFunneledSequenceManager(
-    scoped_refptr<SingleThreadTaskRunner> task_runner,
-    SequenceManager::Settings settings = SequenceManager::Settings());
-
 }  // namespace sequence_manager
 }  // namespace base
 
diff --git a/base/task/sequence_manager/sequence_manager_impl.cc b/base/task/sequence_manager/sequence_manager_impl.cc
index fcdb8d1..a4add2a 100644
--- a/base/task/sequence_manager/sequence_manager_impl.cc
+++ b/base/task/sequence_manager/sequence_manager_impl.cc
@@ -71,16 +71,6 @@
   return internal::SequenceManagerImpl::CreateUnbound(std::move(settings));
 }
 
-BASE_EXPORT std::unique_ptr<SequenceManager> CreateFunneledSequenceManager(
-    scoped_refptr<SingleThreadTaskRunner> task_runner,
-    SequenceManager::Settings settings) {
-  std::unique_ptr<SequenceManager> sequence_manager =
-      internal::SequenceManagerImpl::CreateSequenceFunneled(
-          std::move(task_runner), std::move(settings));
-  sequence_manager->BindToCurrentThread();
-  return sequence_manager;
-}
-
 namespace internal {
 
 using TimeRecordingPolicy =
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index f7257bb..335ff76 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -4559,11 +4559,6 @@
     # Prevent "unused variable".
     not_needed([ "_enable_multidex" ])
 
-    # TODO: Remove downstream use of static_library_proguard_disabled.
-    if (defined(invoker.static_library_proguard_disabled)) {
-      not_needed(invoker, [ "static_library_proguard_disabled" ])
-    }
-
     if (_proguard_enabled) {
       _uses_static_library_synchronized_proguard =
           defined(invoker.static_library_synchronized_proguard) &&
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index d8c4fd6e..d9253fb 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -143,11 +143,10 @@
   # rest with 0xAA. This makes behavior of uninitialized memory bugs consistent,
   # recognizeble in debugger, and crashes memory accesses by uninitialized
   # pointers.
-  # TODO(vitalybuka): investigate why some debug windows bots fail tests.
+  # TODO(vitalybuka):
   # 'is_android' breaks content_shell_test_apk on android-kitkat-arm-rel.
   # 'use_xcode_clang' may call old clang.
-  init_stack_vars = !is_android && !(is_win && is_debug) && !use_xcode_clang &&
-                    !is_official_build
+  init_stack_vars = !is_android && !use_xcode_clang && !is_official_build
 }
 
 declare_args() {
diff --git a/build/config/mac/mac_sdk.gni b/build/config/mac/mac_sdk.gni
index f0a8ee34..27c3b36 100644
--- a/build/config/mac/mac_sdk.gni
+++ b/build/config/mac/mac_sdk.gni
@@ -35,7 +35,7 @@
   # The SDK version used when making official builds. This is a single exact
   # version, not a minimum. If this version isn't available official builds
   # will fail.
-  mac_sdk_official_version = "10.14"
+  mac_sdk_official_version = "10.15"
 }
 
 # Check that the version of macOS SDK used is the one requested when building
diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py
index f50635c..0d64142 100755
--- a/build/mac_toolchain.py
+++ b/build/mac_toolchain.py
@@ -28,10 +28,10 @@
 import sys
 
 
-# This contains binaries from Xcode 10.12.1, along with the 10.14 SDKs. To build
-# this package, see comments in build/xcode_binaries.yaml
+# This contains binaries from Xcode 11.2.1, along with the 10.15 SDKs (aka
+# 11B53). To build this package, see comments in build/xcode_binaries.yaml
 MAC_BINARIES_LABEL = 'infra_internal/ios/xcode/xcode_binaries/mac-amd64'
-MAC_BINARIES_TAG = 'yjQtk3auAegQO4t18uBtBlKbj76xBjVtLE-3UM2faRUC'
+MAC_BINARIES_TAG = 'HHSqYjco5P_Q5g9gOWV6djGpZ9aqlV12N0hxKJv8U3gC'
 
 # The toolchain will not be downloaded if the minimum OS version is not met.
 # 17 is the major version number for macOS 10.13.
diff --git a/cc/input/input_handler.h b/cc/input/input_handler.h
index cc801af..c73d03a 100644
--- a/cc/input/input_handler.h
+++ b/cc/input/input_handler.h
@@ -185,7 +185,6 @@
   // taken into account when determining the duration of the animation if one
   // is created.
   virtual InputHandlerScrollResult ScrollUpdate(ScrollState* scroll_state,
-                                                ScrollInputType type,
                                                 base::TimeDelta delayed_by) = 0;
 
   // Stop scrolling the selected layer. Should only be called if ScrollBegin()
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 0a4e73d..a63bbd4 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -4405,7 +4405,10 @@
 }
 
 void LayerTreeHostImpl::ScrollLatchedScroller(ScrollState* scroll_state) {
-  DCHECK(CurrentlyScrollingNode() && scroll_state);
+  DCHECK(CurrentlyScrollingNode());
+  DCHECK(scroll_state);
+  DCHECK(latched_scroll_type_.has_value());
+
   ScrollNode* scroll_node = CurrentlyScrollingNode();
   gfx::Point viewport_point(scroll_state->position_x(),
                             scroll_state->position_y());
@@ -4428,7 +4431,8 @@
     // still use Viewport::ScrollBy to also move browser controls if needed.
     Viewport::ScrollResult result = viewport().ScrollBy(
         delta, viewport_point, scroll_state->is_direct_manipulation(),
-        !wheel_scrolling_, scroll_node->scrolls_outer_viewport);
+        latched_scroll_type_ != InputHandler::WHEEL,
+        scroll_node->scrolls_outer_viewport);
 
     applied_delta = result.consumed_delta;
     delta_applied_to_content = result.content_scrolled_delta;
@@ -4530,9 +4534,9 @@
   scroll_affects_scroll_handler_ = active_tree_->have_scroll_event_handlers();
   scroll_animating_snap_target_ids_ = TargetSnapAreaElementIds();
   last_latched_scroller_ = CurrentlyScrollingNode()->element_id;
-  wheel_scrolling_ = type == InputHandler::WHEEL;
+  latched_scroll_type_ = type;
 
-  frame_trackers_.StartSequence(wheel_scrolling_
+  frame_trackers_.StartSequence(latched_scroll_type_ == InputHandler::WHEEL
                                     ? FrameSequenceTrackerType::kWheelScroll
                                     : FrameSequenceTrackerType::kTouchScroll);
   client_->RenewTreePriority();
@@ -4587,8 +4591,7 @@
 }
 
 bool LayerTreeHostImpl::ShouldAnimateScroll(
-    const ScrollState& scroll_state,
-    InputHandler::ScrollInputType type) const {
+    const ScrollState& scroll_state) const {
   if (!settings_.enable_smooth_scroll)
     return false;
 
@@ -4603,7 +4606,7 @@
 
   // Mac does not smooth scroll wheel events (crbug.com/574283). We allow tests
   // to force it on.
-  return type == InputHandler::SCROLLBAR
+  return latched_scroll_type_ == InputHandler::SCROLLBAR
              ? true
              : force_smooth_wheel_scrolling_for_testing_;
 #else
@@ -4613,11 +4616,10 @@
 
 InputHandlerScrollResult LayerTreeHostImpl::ScrollUpdate(
     ScrollState* scroll_state,
-    InputHandler::ScrollInputType type,
     base::TimeDelta delayed_by) {
   DCHECK(scroll_state);
 
-  if (ShouldAnimateScroll(*scroll_state, type)) {
+  if (ShouldAnimateScroll(*scroll_state)) {
     DCHECK(!scroll_state->is_in_inertial_phase());
     gfx::Vector2dF scroll_delta(scroll_state->delta_x(),
                                 scroll_state->delta_y());
@@ -4901,6 +4903,7 @@
   did_scroll_x_for_scroll_gesture_ = false;
   did_scroll_y_for_scroll_gesture_ = false;
   scroll_animating_snap_target_ids_ = TargetSnapAreaElementIds();
+  latched_scroll_type_.reset();
 }
 
 void LayerTreeHostImpl::ScrollEnd(bool should_snap) {
@@ -4911,12 +4914,14 @@
     return;
   }
 
+  DCHECK(latched_scroll_type_.has_value());
+
   browser_controls_offset_manager_->ScrollEnd();
-  ClearCurrentlyScrollingNode();
-  frame_trackers_.StopSequence(wheel_scrolling_
+  frame_trackers_.StopSequence(latched_scroll_type_ == InputHandler::WHEEL
                                    ? FrameSequenceTrackerType::kWheelScroll
                                    : FrameSequenceTrackerType::kTouchScroll);
 
+  ClearCurrentlyScrollingNode();
   deferred_scroll_end_ = false;
   scroll_gesture_did_end_ = true;
   client_->SetNeedsCommitOnImplThread();
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 1243d52d..32e967a 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -268,7 +268,6 @@
       InputHandler::ScrollInputType type) override;
   InputHandlerScrollResult ScrollUpdate(
       ScrollState* scroll_state,
-      InputHandler::ScrollInputType type,
       base::TimeDelta delayed_by = base::TimeDelta()) override;
   void RequestUpdateForSynchronousInputHandler() override;
   void SetSynchronousInputHandlerRootScrollOffset(
@@ -933,8 +932,7 @@
 
   void ScrollLatchedScroller(ScrollState* scroll_state);
 
-  bool ShouldAnimateScroll(const ScrollState& scroll_state,
-                           InputHandler::ScrollInputType type) const;
+  bool ShouldAnimateScroll(const ScrollState& scroll_state) const;
 
   bool AnimatePageScale(base::TimeTicks monotonic_time);
   bool AnimateScrollbars(base::TimeTicks monotonic_time);
@@ -1090,7 +1088,6 @@
   std::unique_ptr<LayerTreeImpl> recycle_tree_;
 
   InputHandlerClient* input_handler_client_ = nullptr;
-  bool wheel_scrolling_ = false;
 
   // This is used to tell the scheduler there are active scroll handlers on the
   // page so we should prioritize latency during a scroll to try to keep
@@ -1289,6 +1286,10 @@
   // the first commit after a GSE.
   ElementId last_latched_scroller_;
 
+  // The source device type that started the scroll gesture. Only set between a
+  // ScrollBegin and ScrollEnd.
+  base::Optional<InputHandler::ScrollInputType> latched_scroll_type_;
+
   // Scroll animation can finish either before or after GSE arrival.
   // deferred_scroll_end_ is set when the GSE has arrvied before scroll
   // animation completion. ScrollEnd will get called once the animation is
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 7cc295d4..ce4a824 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -1147,8 +1147,7 @@
   EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point()));
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+          .get());
   EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(0, 10)));
   host_impl_->ScrollEnd();
   EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point()));
@@ -1171,8 +1170,7 @@
   EXPECT_TRUE(host_impl_->IsActivelyScrolling());
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(host_impl_->IsActivelyScrolling());
   host_impl_->ScrollEnd();
   EXPECT_FALSE(host_impl_->IsActivelyScrolling());
@@ -1237,8 +1235,7 @@
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::ScrollOffsetToVector2dF(scroll_delta),
                   InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
   std::unique_ptr<ScrollAndScaleSet> scroll_info =
       host_impl_->ProcessScrollDeltas();
@@ -1258,8 +1255,7 @@
             status.main_thread_scrolling_reasons);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(host_impl_->active_tree()->CurrentlyScrollingNode());
   EXPECT_TRUE(host_impl_->IsActivelyScrolling());
 
@@ -1476,8 +1472,7 @@
   EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(75, 75)));
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(25, 25)));
   host_impl_->ScrollEnd();
   EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(75, 75)));
@@ -1493,8 +1488,7 @@
   EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(75, 75)));
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+          .get());
   host_impl_->ScrollEnd();
   EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(75, 75)));
 }
@@ -1521,8 +1515,8 @@
 
   EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(40, 10)));
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), gfx::Vector2d(0, 1), InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(gfx::Point(), gfx::Vector2d(0, 1), InputHandler::WHEEL)
+          .get());
   host_impl_->ScrollEnd();
 
   // This point is still inside the non-fast region.
@@ -1582,43 +1576,37 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(-10, 0),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_FALSE(
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, -10),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_FALSE(
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(-10, -10),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
 
   // Scrolling to the right/bottom will succeed.
   EXPECT_TRUE(host_impl_
                   ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(10, 0),
                                              InputHandler::TOUCHSCREEN)
-                                     .get(),
-                                 InputHandler::TOUCHSCREEN)
+                                     .get())
                   .did_scroll);
   EXPECT_TRUE(host_impl_
                   ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, 10),
                                              InputHandler::TOUCHSCREEN)
-                                     .get(),
-                                 InputHandler::TOUCHSCREEN)
+                                     .get())
                   .did_scroll);
   EXPECT_TRUE(
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(10, 10),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
 
   // Scrolling to left/top will now succeed.
@@ -1626,22 +1614,19 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(-10, 0),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_TRUE(
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, -10),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_TRUE(
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(-10, -10),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
 
   // Scrolling diagonally against an edge will succeed.
@@ -1649,22 +1634,19 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(10, -10),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_TRUE(
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(-10, 0),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_TRUE(
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(-10, 10),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
 
   // Trying to scroll more than the available space will also succeed.
@@ -1672,8 +1654,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(5000, 5000),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
 }
 
@@ -1696,8 +1677,7 @@
             GetSnapContainerData(overflow)->GetTargetSnapAreaElementIds());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get());
   EXPECT_EQ(TargetSnapAreaElementIds(),
             GetSnapContainerData(overflow)->GetTargetSnapAreaElementIds());
 
@@ -1741,8 +1721,7 @@
             GetSnapContainerData(overflow)->GetTargetSnapAreaElementIds());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get());
   EXPECT_EQ(TargetSnapAreaElementIds(),
             GetSnapContainerData(overflow)->GetTargetSnapAreaElementIds());
 
@@ -1786,8 +1765,7 @@
             GetSnapContainerData(overflow)->GetTargetSnapAreaElementIds());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, delta, InputHandler::WHEEL).get());
   EXPECT_EQ(TargetSnapAreaElementIds(),
             GetSnapContainerData(overflow)->GetTargetSnapAreaElementIds());
 
@@ -1827,8 +1805,7 @@
               BeginState(pointer_position, delta, InputHandler::WHEEL).get(),
               InputHandler::WHEEL)
           .thread);
-  host_impl_->ScrollUpdate(AnimatedUpdateState(pointer_position, delta).get(),
-                           InputHandler::WHEEL);
+  host_impl_->ScrollUpdate(AnimatedUpdateState(pointer_position, delta).get());
   host_impl_->ScrollEnd();
 
   EXPECT_EQ(overflow->scroll_tree_index(),
@@ -1888,8 +1865,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get());
   EXPECT_FALSE(host_impl_->IsAnimatingForSnap());
 
   viz::BeginFrameArgs begin_frame_args =
@@ -1951,8 +1927,7 @@
 
   // There is a snap target at 50, scroll to it directly.
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get());
   EXPECT_FALSE(host_impl_->IsAnimatingForSnap());
 
   viz::BeginFrameArgs begin_frame_args =
@@ -2001,8 +1976,7 @@
 
   // Should be (20, 20) in the scroller's coordinate.
   InputHandlerScrollResult result = host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, delta, InputHandler::WHEEL).get());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 20), overflow->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(4, 4), result.current_visual_offset);
 
@@ -2041,8 +2015,7 @@
 
   // Should be (20, 20) in the scroller's coordinate.
   InputHandlerScrollResult result = host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, delta, InputHandler::WHEEL).get());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 20), overflow->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(4, 4), result.current_visual_offset);
 
@@ -2093,8 +2066,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 30), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
@@ -2118,8 +2090,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 30), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
@@ -2137,8 +2108,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 20), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
@@ -2156,8 +2126,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, diagonal_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, diagonal_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 20), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
@@ -2182,8 +2151,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
@@ -2201,8 +2169,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
@@ -2220,8 +2187,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, diagonal_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, diagonal_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
@@ -2245,17 +2211,13 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, x_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, -x_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, -x_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, y_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollUpdate(
-      UpdateState(pointer_position, -y_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(pointer_position, -y_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset());
@@ -2287,8 +2249,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(scroll_position, scroll_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(scroll_position, scroll_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset());
@@ -2308,8 +2269,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(scroll_position, scroll_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(scroll_position, scroll_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
@@ -2328,8 +2288,7 @@
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollUpdate(
-      UpdateState(scroll_position, scroll_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(scroll_position, scroll_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
@@ -2650,8 +2609,7 @@
                                 InputHandler::WHEEL)
                   .thread);
     host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-        InputHandler::WHEEL);
+        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
     host_impl_->ScrollEnd();
 
     std::unique_ptr<ScrollAndScaleSet> scroll_info =
@@ -2757,11 +2715,10 @@
                                      InputHandler::TOUCHSCREEN)
                               .get(),
                           InputHandler::TOUCHSCREEN);
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100, 100),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                       gfx::Vector2dF(100, 100),
+                                       InputHandler::TOUCHSCREEN)
+                               .get());
   host_impl_->ScrollEnd();
 
   EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 50),
@@ -2776,11 +2733,10 @@
                  InputHandler::TOUCHSCREEN)
           .get(),
       InputHandler::TOUCHSCREEN);
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(0, 0), gfx::Vector2dF(1000, 1000),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                       gfx::Vector2dF(1000, 1000),
+                                       InputHandler::TOUCHSCREEN)
+                               .get());
   host_impl_->ScrollEnd();
 
   EXPECT_VECTOR_EQ(gfx::Vector2dF(250, 250),
@@ -2816,11 +2772,10 @@
                  InputHandler::TOUCHSCREEN)
           .get(),
       InputHandler::TOUCHSCREEN);
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(250, 250), gfx::Vector2dF(0.125f, 0.125f),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(250, 250),
+                                       gfx::Vector2dF(0.125f, 0.125f),
+                                       InputHandler::TOUCHSCREEN)
+                               .get());
   EXPECT_VECTOR2DF_EQ(gfx::Vector2dF(0.125f, 0.125f),
                       outer_scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR2DF_EQ(gfx::Vector2dF(0, 0),
@@ -2835,11 +2790,10 @@
                  InputHandler::TOUCHSCREEN)
           .get(),
       InputHandler::TOUCHSCREEN);
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(250, 250), gfx::Vector2dF(0.5f, 0.5f),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(250, 250),
+                                       gfx::Vector2dF(0.5f, 0.5f),
+                                       InputHandler::TOUCHSCREEN)
+                               .get());
   EXPECT_VECTOR2DF_EQ(gfx::Vector2dF(0.125f, 0.125f),
                       outer_scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR2DF_EQ(gfx::Vector2dF(0.25f, 0.25f),
@@ -2883,11 +2837,10 @@
   // Needed so that the pinch is accounted for in draw properties.
   DrawFrame();
 
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(250, 250), gfx::Vector2dF(10, 10),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(250, 250),
+                                       gfx::Vector2dF(10, 10),
+                                       InputHandler::TOUCHSCREEN)
+                               .get());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0),
                    outer_scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(130, 130),
@@ -2895,11 +2848,10 @@
 
   DrawFrame();
 
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(250, 250), gfx::Vector2dF(400, 400),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(250, 250),
+                                       gfx::Vector2dF(400, 400),
+                                       InputHandler::TOUCHSCREEN)
+                               .get());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(80, 80),
                    outer_scroll_layer->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(250, 250),
@@ -3020,8 +2972,7 @@
       InputHandler::WHEEL);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(0, 0), gfx::Vector2dF(10, 20), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
 
   EXPECT_VECTOR_EQ(gfx::Vector2dF(5, 10),
@@ -3034,11 +2985,10 @@
                                      InputHandler::WHEEL)
                               .get(),
                           InputHandler::WHEEL);
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100, 100),
-                  InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                       gfx::Vector2dF(100, 100),
+                                       InputHandler::WHEEL)
+                               .get());
   host_impl_->ScrollEnd();
 
   EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 50),
@@ -3052,11 +3002,10 @@
                                      InputHandler::WHEEL)
                               .get(),
                           InputHandler::WHEEL);
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(0, 0), gfx::Vector2dF(190, 180),
-                  InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                       gfx::Vector2dF(190, 180),
+                                       InputHandler::WHEEL)
+                               .get());
   host_impl_->ScrollEnd();
 
   EXPECT_VECTOR_EQ(gfx::Vector2dF(100, 100),
@@ -3082,8 +3031,7 @@
                 .thread);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+          .get());
   host_impl_->QueueSwapPromiseForMainThreadScrollUpdate(
       std::move(swap_promise));
   host_impl_->ScrollEnd();
@@ -3122,16 +3070,14 @@
                                        InputHandler::TOUCHSCREEN)
                                 .get(),
                             InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(21, 21), gfx::Vector2d(5, 5),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(21, 21), gfx::Vector2d(100, 100),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(21, 21),
+                                         gfx::Vector2d(5, 5),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(21, 21),
+                                         gfx::Vector2d(100, 100),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     // The child should be fully scrolled by the first ScrollUpdate.
@@ -3153,26 +3099,22 @@
                                        InputHandler::TOUCHSCREEN)
                                 .get(),
                             InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(21, 21), gfx::Vector2d(3, 4),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(21, 21), gfx::Vector2d(2, 1),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(21, 21), gfx::Vector2d(2, 1),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(21, 21), gfx::Vector2d(2, 1),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(21, 21),
+                                         gfx::Vector2d(3, 4),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(21, 21),
+                                         gfx::Vector2d(2, 1),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(21, 21),
+                                         gfx::Vector2d(2, 1),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(21, 21),
+                                         gfx::Vector2d(2, 1),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     // The ScrollUpdate's should scroll the parent to its extent.
@@ -3323,11 +3265,10 @@
         InputHandler::TOUCHSCREEN);
     host_impl_->PinchGestureBegin();
     host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10));
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(10, 10), gfx::Vector2d(-10, -10),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(10, 10),
+                                         gfx::Vector2d(-10, -10),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20));
     host_impl_->PinchGestureEnd(gfx::Point(20, 20), true);
     host_impl_->ScrollEnd();
@@ -3362,11 +3303,10 @@
     // Needed so layer transform includes page scale.
     DrawFrame();
 
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2d(10, 10),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2d(10, 10),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->PinchGestureUpdate(1, gfx::Point(10, 10));
     host_impl_->PinchGestureEnd(gfx::Point(10, 10), true);
     host_impl_->ScrollEnd();
@@ -3407,11 +3347,10 @@
                           InputHandler::TOUCHSCREEN);
   host_impl_->PinchGestureBegin();
   host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10));
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(10, 10), gfx::Vector2dF(0, -1.001f),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(10, 10),
+                                       gfx::Vector2dF(0, -1.001f),
+                                       InputHandler::TOUCHSCREEN)
+                               .get());
   host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 9));
   host_impl_->PinchGestureEnd(gfx::Point(10, 9), true);
   host_impl_->ScrollEnd();
@@ -3450,11 +3389,10 @@
       BeginState(gfx::Point(10, 10), gfx::Vector2dF(0, -1), InputHandler::WHEEL)
           .get(),
       InputHandler::WHEEL);
-  host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(10, 10), gfx::Vector2dF(0, -1),
-                  InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+  host_impl_->ScrollUpdate(UpdateState(gfx::Point(10, 10),
+                                       gfx::Vector2dF(0, -1),
+                                       InputHandler::WHEEL)
+                               .get());
   host_impl_->ScrollEnd();
 
   gfx::ScrollOffset active_base =
@@ -4014,7 +3952,7 @@
       ASSERT_EQ(host_impl_->CurrentlyScrollingNode(),
                 host_impl_->OuterViewportScrollNode());
 
-      host_impl_->ScrollUpdate(update_state.get(), type);
+      host_impl_->ScrollUpdate(update_state.get());
       EXPECT_TRUE(GetImplAnimationHost()->IsImplOnlyScrollAnimating());
 
       host_impl_->ScrollEnd();
@@ -4036,7 +3974,7 @@
       ASSERT_EQ(host_impl_->CurrentlyScrollingNode(),
                 host_impl_->OuterViewportScrollNode());
 
-      host_impl_->ScrollUpdate(update_state.get(), type);
+      host_impl_->ScrollUpdate(update_state.get());
       EXPECT_FALSE(GetImplAnimationHost()->IsImplOnlyScrollAnimating());
 
       host_impl_->ScrollEnd();
@@ -4081,7 +4019,7 @@
       ASSERT_EQ(host_impl_->CurrentlyScrollingNode(),
                 host_impl_->OuterViewportScrollNode());
 
-      host_impl_->ScrollUpdate(update_state.get(), type);
+      host_impl_->ScrollUpdate(update_state.get());
       EXPECT_FALSE(GetImplAnimationHost()->IsImplOnlyScrollAnimating());
 
       host_impl_->ScrollEnd();
@@ -4204,8 +4142,7 @@
         InputHandler::WHEEL);
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(0, 0), InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     host_impl_->ScrollEnd();
     EXPECT_FALSE(did_request_next_frame_);
     EXPECT_FALSE(did_request_redraw_);
@@ -4241,8 +4178,7 @@
         InputHandler::WHEEL);
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(0, 5), InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     EXPECT_FALSE(did_request_next_frame_);
     EXPECT_TRUE(did_request_redraw_);
     did_request_redraw_ = false;
@@ -4394,8 +4330,7 @@
         InputHandler::WHEEL);
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(0, 5), InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     host_impl_->ScrollEnd();
 
     CreatePendingTree();
@@ -4524,8 +4459,7 @@
       InputHandler::WHEEL);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(20, 20), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
 
   EXPECT_TRUE(scrollbar_1_->Opacity());
@@ -4540,8 +4474,7 @@
                               .get(),
                           InputHandler::WHEEL);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(70, 70), gfx::Vector2d(0, 100)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(70, 70), gfx::Vector2d(0, 100)).get());
   host_impl_->ScrollEnd();
 
   EXPECT_TRUE(scrollbar_1_->Opacity());
@@ -4807,8 +4740,7 @@
       InputHandler::WHEEL);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(10, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
   EXPECT_FALSE(animation_task_.is_null());
   animation_task_.Reset();
@@ -4895,8 +4827,7 @@
       InputHandler::WHEEL);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 100), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
 
   // Move the mouse near the thumb in the top position.
@@ -4910,8 +4841,7 @@
       InputHandler::WHEEL);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, -100), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
 
   // Move the mouse near the thumb in the top position.
@@ -5134,8 +5064,7 @@
                 .thread);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   {
     viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
@@ -5882,8 +5811,7 @@
   // the minimum scale as well.
   host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0), gfx::Vector2dF(0, 25),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN);
+                               .get());
   EXPECT_VIEWPORT_GEOMETRIES(0.5f);
 
   host_impl_->ScrollEnd();
@@ -6023,8 +5951,7 @@
                 .thread);
   host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2dF(0, 50),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN);
+                               .get());
 
   // The entire scroll delta should have been used to hide the browser controls.
   // The viewport layers should be resized back to their full sizes.
@@ -6036,8 +5963,7 @@
   // The inner viewport should be scrollable by 50px * page_scale.
   host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2dF(0, 100),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN);
+                               .get());
   EXPECT_EQ(50, inner_scroll->CurrentScrollOffset().y());
   EXPECT_EQ(0, outer_scroll->CurrentScrollOffset().y());
   EXPECT_EQ(gfx::ScrollOffset(), outer_scroll->MaxScrollOffset());
@@ -6056,8 +5982,7 @@
 
   host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2dF(0, -50),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN);
+                               .get());
 
   // The entire scroll delta should have been used to show the browser controls.
   // The outer viewport should be resized to accomodate and scrolled to the
@@ -6072,22 +5997,19 @@
   // since it wasn't scrollable when the scroll began.
   host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2dF(0, -20),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN);
+                               .get());
   EXPECT_EQ(25, outer_scroll->CurrentScrollOffset().y());
   EXPECT_EQ(15, inner_scroll->CurrentScrollOffset().y());
 
   host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2dF(0, -30),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN);
+                               .get());
   EXPECT_EQ(25, outer_scroll->CurrentScrollOffset().y());
   EXPECT_EQ(0, inner_scroll->CurrentScrollOffset().y());
 
   host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2dF(0.f, -50),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN);
+                               .get());
   host_impl_->ScrollEnd();
 
   EXPECT_EQ(0, outer_scroll->CurrentScrollOffset().y());
@@ -6131,6 +6053,14 @@
 
   // Scroll past the maximum extent. The delta shouldn't be greater than the
   // browser controls height.
+  EXPECT_EQ(
+      InputHandler::SCROLL_ON_IMPL_THREAD,
+      host_impl_
+          ->ScrollBegin(BeginState(gfx::Point(), top_controls_scroll_delta,
+                                   InputHandler::TOUCHSCREEN)
+                            .get(),
+                        InputHandler::TOUCHSCREEN)
+          .thread);
   host_impl_->browser_controls_manager()->ScrollBegin();
   host_impl_->browser_controls_manager()->ScrollBy(top_controls_scroll_delta);
   host_impl_->browser_controls_manager()->ScrollBy(top_controls_scroll_delta);
@@ -6141,6 +6071,14 @@
   host_impl_->ScrollEnd();
 
   // Scroll in the direction to make the browser controls show.
+  EXPECT_EQ(
+      InputHandler::SCROLL_ON_IMPL_THREAD,
+      host_impl_
+          ->ScrollBegin(BeginState(gfx::Point(), -top_controls_scroll_delta,
+                                   InputHandler::TOUCHSCREEN)
+                            .get(),
+                        InputHandler::TOUCHSCREEN)
+          .thread);
   host_impl_->browser_controls_manager()->ScrollBegin();
   host_impl_->browser_controls_manager()->ScrollBy(-top_controls_scroll_delta);
   EXPECT_EQ(top_controls_scroll_delta.y(),
@@ -6149,6 +6087,7 @@
       gfx::Vector2dF(0, top_controls_height_ - top_controls_scroll_delta.y()),
       property_trees->outer_viewport_container_bounds_delta());
   host_impl_->browser_controls_manager()->ScrollEnd();
+  host_impl_->ScrollEnd();
 }
 
 // Push a browser controls ratio from the main thread that we didn't send as a
@@ -6215,8 +6154,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
   host_impl_->ScrollEnd();
 
   // Browser controls should be hidden
@@ -6416,8 +6354,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
 
   // scrolling down at the max extents no longer hides the browser controls
   EXPECT_EQ(1, host_impl_->active_tree()->CurrentTopControlsShownRatio());
@@ -6450,8 +6387,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
   host_impl_->ScrollEnd();
 
   // The viewport offset shouldn't have changed.
@@ -6484,8 +6420,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
   host_impl_->ScrollEnd();
 
   EXPECT_FLOAT_EQ(
@@ -6526,8 +6461,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
 
   EXPECT_EQ(OuterViewportScrollLayer()->scroll_tree_index(),
             host_impl_->CurrentlyScrollingNode()->id);
@@ -6547,8 +6481,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
 
   EXPECT_EQ(0, host_impl_->browser_controls_manager()->ContentTopOffset());
   EXPECT_EQ(OuterViewportScrollLayer()->scroll_tree_index(),
@@ -6570,8 +6503,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
 
   EXPECT_EQ(top_controls_height_,
             host_impl_->browser_controls_manager()->ContentTopOffset());
@@ -6686,8 +6618,7 @@
         InputHandler::TOUCHSCREEN);
     host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, 2000),
                                          InputHandler::TOUCHSCREEN)
-                                 .get(),
-                             InputHandler::TOUCHSCREEN);
+                                 .get());
     host_impl_->ScrollEnd();
   }
 
@@ -6810,8 +6741,7 @@
           .thread);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
   EXPECT_TRUE(did_request_redraw_);
   EXPECT_TRUE(did_request_commit_);
@@ -6840,8 +6770,7 @@
           .thread);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
   EXPECT_TRUE(did_request_redraw_);
   EXPECT_TRUE(did_request_commit_);
@@ -6942,8 +6871,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
 
   // Set new page scale from main thread.
@@ -6985,8 +6913,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
 
   // Set new page scale on impl thread by pinching.
@@ -7084,8 +7011,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-      InputHandler::WHEEL);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
   host_impl_->ScrollEnd();
 
   float page_scale = 2;
@@ -7142,8 +7068,7 @@
                                 InputHandler::WHEEL)
                   .thread);
     host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-        InputHandler::WHEEL);
+        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
     host_impl_->ScrollEnd();
 
     std::unique_ptr<ScrollAndScaleSet> scroll_info =
@@ -7200,8 +7125,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, -100)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, -100)).get());
 
   begin_frame_args.frame_time = start_time;
   begin_frame_args.frame_id.sequence_number++;
@@ -7226,8 +7150,7 @@
 
   // Second ScrollAnimated should remain latched to the grand_child_layer.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, -100)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, -100)).get());
 
   begin_frame_args.frame_time =
       start_time + base::TimeDelta::FromMilliseconds(250);
@@ -7287,8 +7210,7 @@
                   .thread);
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     host_impl_->ScrollEnd();
 
     std::unique_ptr<ScrollAndScaleSet> scroll_info =
@@ -7315,8 +7237,7 @@
               child_layer->scroll_tree_index());
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_EQ(host_impl_->CurrentlyScrollingNode()->id,
               child_layer->scroll_tree_index());
     host_impl_->ScrollEnd();
@@ -7347,8 +7268,7 @@
               grand_child_layer->scroll_tree_index());
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_EQ(host_impl_->CurrentlyScrollingNode()->id,
               grand_child_layer->scroll_tree_index());
     host_impl_->ScrollEnd();
@@ -7381,8 +7301,7 @@
               host_impl_->CurrentlyScrollingNode()->id);
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     host_impl_->ScrollEnd();
 
     scroll_info = host_impl_->ProcessScrollDeltas();
@@ -7426,8 +7345,7 @@
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::ScrollOffsetToVector2dF(scroll_delta),
                     InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     host_impl_->ScrollEnd();
 
     std::unique_ptr<ScrollAndScaleSet> scroll_info =
@@ -7470,8 +7388,7 @@
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::ScrollOffsetToVector2dF(scroll_delta),
                     InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     host_impl_->ScrollEnd();
 
     std::unique_ptr<ScrollAndScaleSet> scroll_info =
@@ -7532,8 +7449,7 @@
                 .thread);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gesture_scroll_delta, InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+          .get());
   host_impl_->ScrollEnd();
 
   // The layer should have scrolled down in its local coordinates.
@@ -7559,8 +7475,7 @@
       UpdateState(gfx::Point(),
                   gfx::ScrollOffsetToVector2dF(wheel_scroll_delta),
                   InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
 
   // The layer should have scrolled down in its local coordinates.
@@ -7613,8 +7528,7 @@
             .thread);
     host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gesture_scroll_delta,
                                          InputHandler::TOUCHSCREEN)
-                                 .get(),
-                             InputHandler::TOUCHSCREEN);
+                                 .get());
     host_impl_->ScrollEnd();
 
     // The child layer should have scrolled down in its local coordinates an
@@ -7645,8 +7559,7 @@
             .thread);
     host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gesture_scroll_delta,
                                          InputHandler::TOUCHSCREEN)
-                                 .get(),
-                             InputHandler::TOUCHSCREEN);
+                                 .get());
     host_impl_->ScrollEnd();
 
     // The child layer should have scrolled down in its local coordinates an
@@ -7731,8 +7644,7 @@
         UpdateState(viewport_point,
                     gfx::ScrollOffsetToVector2dF(gesture_scroll_deltas[i]),
                     InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     viewport_point +=
         gfx::ScrollOffsetToFlooredVector2d(gesture_scroll_deltas[i]);
     host_impl_->ScrollEnd();
@@ -7769,8 +7681,7 @@
                               InputHandler::TOUCHSCREEN)
                 .thread);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
   host_impl_->ScrollEnd();
 
   // The layer should have scrolled down in its local coordinates, but half the
@@ -7797,8 +7708,7 @@
       UpdateState(gfx::Point(),
                   gfx::ScrollOffsetToVector2dF(wheel_scroll_delta),
                   InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   host_impl_->ScrollEnd();
 
   // It should apply the scale factor to the scroll delta for the wheel event.
@@ -7900,16 +7810,14 @@
   host_impl_->SetSynchronousInputHandlerRootScrollOffset(current_offset);
 
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
   EXPECT_EQ(ScrollOffsetWithDelta(current_offset, scroll_delta),
             scroll_watcher.last_set_scroll_offset());
 
   current_offset = gfx::ScrollOffset(42, 41);
   host_impl_->SetSynchronousInputHandlerRootScrollOffset(current_offset);
   host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get(),
-      InputHandler::TOUCHSCREEN);
+      UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN).get());
   EXPECT_EQ(current_offset + gfx::ScrollOffset(scroll_delta),
             scroll_watcher.last_set_scroll_offset());
   host_impl_->ScrollEnd();
@@ -8113,8 +8021,7 @@
                 .thread);
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_FALSE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(), scroll_result.unused_scroll_delta);
@@ -8123,8 +8030,7 @@
   // Overscroll events are reflected immediately.
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 50), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, 10), scroll_result.unused_scroll_delta);
@@ -8135,8 +8041,7 @@
   // In-bounds scrolling resets accumulated overscroll for the scrolled axes.
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, -50), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_FALSE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(), scroll_result.unused_scroll_delta);
@@ -8146,8 +8051,7 @@
 
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, -10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_FALSE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, -10), scroll_result.unused_scroll_delta);
@@ -8157,8 +8061,7 @@
 
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(10, 0), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_FALSE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, 0), scroll_result.unused_scroll_delta);
@@ -8168,8 +8071,7 @@
 
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(-15, 0), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(-5, 0), scroll_result.unused_scroll_delta);
@@ -8179,8 +8081,7 @@
 
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 60), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, 10), scroll_result.unused_scroll_delta);
@@ -8190,8 +8091,7 @@
 
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(10, -60), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, -10), scroll_result.unused_scroll_delta);
@@ -8203,8 +8103,7 @@
   // as no scroll occurs.
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, -20), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_FALSE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, -20), scroll_result.unused_scroll_delta);
@@ -8214,8 +8113,7 @@
 
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, -20), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_FALSE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, -20), scroll_result.unused_scroll_delta);
@@ -8226,8 +8124,7 @@
   // Overscroll resets on valid scroll.
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_FALSE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, 0), scroll_result.unused_scroll_delta);
@@ -8237,8 +8134,7 @@
 
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, -20), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_TRUE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, -10), scroll_result.unused_scroll_delta);
@@ -8287,8 +8183,7 @@
                   .thread);
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_EQ(host_impl_->CurrentlyScrollingNode()->id,
               grand_child_layer->scroll_tree_index());
     EXPECT_TRUE(scroll_result.did_scroll);
@@ -8320,8 +8215,7 @@
                   .thread);
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_TRUE(scroll_result.did_scroll);
     EXPECT_FALSE(scroll_result.did_overscroll_root);
     EXPECT_EQ(host_impl_->CurrentlyScrollingNode()->id,
@@ -8343,8 +8237,7 @@
               grand_child_layer->scroll_tree_index());
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_TRUE(scroll_result.did_scroll);
     EXPECT_FALSE(scroll_result.did_overscroll_root);
     EXPECT_EQ(host_impl_->CurrentlyScrollingNode()->id,
@@ -8371,20 +8264,17 @@
                                 InputHandler::WHEEL)
                   .thread);
     scroll_result = host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-        InputHandler::WHEEL);
+        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
     EXPECT_TRUE(scroll_result.did_scroll);
     EXPECT_FALSE(scroll_result.did_overscroll_root);
     EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll());
     scroll_result = host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-        InputHandler::WHEEL);
+        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
     EXPECT_TRUE(scroll_result.did_scroll);
     EXPECT_TRUE(scroll_result.did_overscroll_root);
     EXPECT_EQ(gfx::Vector2dF(0, 6), host_impl_->accumulated_root_overscroll());
     scroll_result = host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-        InputHandler::WHEEL);
+        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
     EXPECT_FALSE(scroll_result.did_scroll);
     EXPECT_TRUE(scroll_result.did_overscroll_root);
     EXPECT_EQ(gfx::Vector2dF(0, 14), host_impl_->accumulated_root_overscroll());
@@ -8414,8 +8304,7 @@
                 .thread);
   scroll_result = host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   EXPECT_FALSE(scroll_result.did_scroll);
   EXPECT_TRUE(scroll_result.did_overscroll_root);
   EXPECT_EQ(gfx::Vector2dF(0, 10), host_impl_->accumulated_root_overscroll());
@@ -8441,8 +8330,7 @@
             .thread);
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(0, 100), InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     EXPECT_TRUE(scroll_result.did_scroll);
     EXPECT_FALSE(scroll_result.did_overscroll_root);
     EXPECT_EQ(gfx::Vector2dF().ToString(),
@@ -8450,8 +8338,7 @@
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(0, -2.30f),
                     InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     EXPECT_TRUE(scroll_result.did_scroll);
     EXPECT_FALSE(scroll_result.did_overscroll_root);
     EXPECT_EQ(gfx::Vector2dF().ToString(),
@@ -8470,8 +8357,7 @@
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(0, 20),
                     InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_TRUE(scroll_result.did_scroll);
     EXPECT_TRUE(scroll_result.did_overscroll_root);
     EXPECT_VECTOR2DF_EQ(gfx::Vector2dF(0.000000f, 17.699997f),
@@ -8480,8 +8366,7 @@
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(0.02f, -0.01f),
                     InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_FALSE(scroll_result.did_scroll);
     EXPECT_FALSE(scroll_result.did_overscroll_root);
     EXPECT_VECTOR2DF_EQ(gfx::Vector2dF(0.000000f, 17.699997f),
@@ -8500,8 +8385,7 @@
     scroll_result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), gfx::Vector2dF(-0.12f, 0.1f),
                     InputHandler::WHEEL)
-            .get(),
-        InputHandler::WHEEL);
+            .get());
     EXPECT_FALSE(scroll_result.did_scroll);
     EXPECT_FALSE(scroll_result.did_overscroll_root);
     EXPECT_EQ(gfx::Vector2dF().ToString(),
@@ -8531,11 +8415,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100, 100),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(100, 100),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(100, 100),
                      scroll_layer->CurrentScrollOffset());
@@ -8549,8 +8432,7 @@
     InputHandlerScrollResult result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(0, 0), gfx::Vector2dF(120, 140),
                     InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(200, 200),
                      scroll_layer->CurrentScrollOffset());
@@ -8565,8 +8447,7 @@
     InputHandlerScrollResult result = host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(0, 0), gfx::Vector2dF(20, 40),
                     InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(200, 200),
                      scroll_layer->CurrentScrollOffset());
@@ -8651,11 +8532,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(1000, 1000),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(1000, 1000),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_EQ(1, host_impl_->active_tree()->CurrentTopControlsShownRatio());
@@ -8678,20 +8558,17 @@
         InputHandler::TOUCHSCREEN);
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     EXPECT_EQ(0, host_impl_->active_tree()->CurrentTopControlsShownRatio());
     EXPECT_VECTOR_EQ(gfx::Vector2dF(),
                      inner_scroll_layer->CurrentScrollOffset());
 
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 10),
                      inner_scroll_layer->CurrentScrollOffset());
@@ -8738,11 +8615,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(200, 200),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(200, 200),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(200, 200),
@@ -8753,11 +8629,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(200, 200),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(200, 200),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0),
@@ -8776,11 +8651,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100, 100),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(100, 100),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(),
@@ -8808,11 +8682,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100, 100),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(100, 100),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 50),
@@ -8823,11 +8696,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100, 100),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(100, 100),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0),
@@ -8879,11 +8751,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(1000, 1000),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(1000, 1000),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(600, 600),
@@ -8898,11 +8769,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(1000, 1000),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(1000, 1000),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(600, 600),
@@ -8940,8 +8810,8 @@
                      inner_scroll_layer->CurrentScrollOffset());
 
     host_impl_->ScrollUpdate(
-        UpdateState(anchor, viewport_size_vec, InputHandler::TOUCHSCREEN).get(),
-        InputHandler::TOUCHSCREEN);
+        UpdateState(anchor, viewport_size_vec, InputHandler::TOUCHSCREEN)
+            .get());
 
     EXPECT_VECTOR_EQ(ScaleVector2d(viewport_size_vec, 1 / page_scale_factor),
                      inner_scroll_layer->CurrentScrollOffset());
@@ -8972,11 +8842,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(2000, 2000),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(2000, 2000),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(600, 600),
@@ -8990,11 +8859,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(2000, 2000),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(2000, 2000),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(ScaleVector2d(viewport_size_vec, 1 / page_scale_factor),
@@ -9008,11 +8876,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(2000, 2000),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(2000, 2000),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(),
@@ -10746,8 +10613,7 @@
         host_impl_
             ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, 10),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN)
+                               .get())
             .did_scroll);
     host_impl_->ScrollEnd();
 
@@ -10768,8 +10634,7 @@
         host_impl_
             ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, 10),
                                        InputHandler::TOUCHSCREEN)
-                               .get(),
-                           InputHandler::TOUCHSCREEN)
+                               .get())
             .did_scroll);
     host_impl_->ScrollEnd();
 
@@ -10878,11 +10743,10 @@
   EXPECT_EQ(gfx::Vector2dF().ToString(),
             scroll_layer->CurrentScrollOffset().ToString());
 
-  result = host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  result = host_impl_->ScrollUpdate(UpdateState(gfx::Point(),
+                                                gfx::Vector2d(0, offset),
+                                                InputHandler::TOUCHSCREEN)
+                                        .get());
   EXPECT_EQ(result.unused_scroll_delta, gfx::Vector2d(0, 0));
   EXPECT_TRUE(result.did_scroll);
   EXPECT_FLOAT_EQ(-offset,
@@ -10893,11 +10757,10 @@
   // Scroll across the boundary
   const float content_scroll = 20;
   offset = residue + content_scroll;
-  result = host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  result = host_impl_->ScrollUpdate(UpdateState(gfx::Point(),
+                                                gfx::Vector2d(0, offset),
+                                                InputHandler::TOUCHSCREEN)
+                                        .get());
   EXPECT_TRUE(result.did_scroll);
   EXPECT_EQ(result.unused_scroll_delta, gfx::Vector2d(0, 0));
   EXPECT_EQ(-top_controls_height_,
@@ -10907,11 +10770,10 @@
 
   // Now scroll back to the top of the content
   offset = -content_scroll;
-  result = host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  result = host_impl_->ScrollUpdate(UpdateState(gfx::Point(),
+                                                gfx::Vector2d(0, offset),
+                                                InputHandler::TOUCHSCREEN)
+                                        .get());
   EXPECT_TRUE(result.did_scroll);
   EXPECT_EQ(result.unused_scroll_delta, gfx::Vector2d(0, 0));
   EXPECT_EQ(-top_controls_height_,
@@ -10921,11 +10783,10 @@
 
   // And scroll the browser controls completely into view
   offset = -top_controls_height_;
-  result = host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  result = host_impl_->ScrollUpdate(UpdateState(gfx::Point(),
+                                                gfx::Vector2d(0, offset),
+                                                InputHandler::TOUCHSCREEN)
+                                        .get());
   EXPECT_TRUE(result.did_scroll);
   EXPECT_EQ(result.unused_scroll_delta, gfx::Vector2d(0, 0));
   EXPECT_EQ(0, host_impl_->browser_controls_manager()->ControlsTopOffset());
@@ -10933,11 +10794,10 @@
             scroll_layer->CurrentScrollOffset().ToString());
 
   // And attempt to scroll past the end
-  result = host_impl_->ScrollUpdate(
-      UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
-                  InputHandler::TOUCHSCREEN)
-          .get(),
-      InputHandler::TOUCHSCREEN);
+  result = host_impl_->ScrollUpdate(UpdateState(gfx::Point(),
+                                                gfx::Vector2d(0, offset),
+                                                InputHandler::TOUCHSCREEN)
+                                        .get());
   EXPECT_FALSE(result.did_scroll);
   EXPECT_EQ(result.unused_scroll_delta, gfx::Vector2d(0, -50));
   EXPECT_EQ(0, host_impl_->browser_controls_manager()->ControlsTopOffset());
@@ -10975,8 +10835,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, delta),
                                      InputHandler::WHEEL)
-                             .get(),
-                         InputHandler::WHEEL)
+                             .get())
           .did_scroll);
   EXPECT_FLOAT_EQ(0,
                   host_impl_->browser_controls_manager()->ControlsTopOffset());
@@ -10987,8 +10846,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, delta),
                                      InputHandler::WHEEL)
-                             .get(),
-                         InputHandler::WHEEL)
+                             .get())
           .did_scroll);
   EXPECT_FLOAT_EQ(0,
                   host_impl_->browser_controls_manager()->ControlsTopOffset());
@@ -11025,8 +10883,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_FLOAT_EQ(-offset,
                   host_impl_->browser_controls_manager()->ControlsTopOffset());
@@ -11117,8 +10974,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_FLOAT_EQ(-offset,
                   host_impl_->browser_controls_manager()->ControlsTopOffset());
@@ -11193,8 +11049,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_EQ(-offset,
             host_impl_->browser_controls_manager()->ControlsTopOffset());
@@ -11205,8 +11060,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, offset).ToString(),
             scroll_layer->CurrentScrollOffset().ToString());
@@ -11215,8 +11069,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, offset),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
 
   // Should have fully scrolled
@@ -11228,11 +11081,10 @@
   // Overscroll the content
   EXPECT_FALSE(
       host_impl_
-          ->ScrollUpdate(
-              UpdateState(gfx::Point(), gfx::Vector2d(0, overscrollamount),
-                          InputHandler::TOUCHSCREEN)
-                  .get(),
-              InputHandler::TOUCHSCREEN)
+          ->ScrollUpdate(UpdateState(gfx::Point(),
+                                     gfx::Vector2d(0, overscrollamount),
+                                     InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, 2 * offset).ToString(),
             scroll_layer->CurrentScrollOffset().ToString());
@@ -11240,11 +11092,10 @@
             host_impl_->accumulated_root_overscroll().ToString());
 
   EXPECT_TRUE(host_impl_
-                  ->ScrollUpdate(
-                      UpdateState(gfx::Point(), gfx::Vector2d(0, -2 * offset),
-                                  InputHandler::TOUCHSCREEN)
-                          .get(),
-                      InputHandler::TOUCHSCREEN)
+                  ->ScrollUpdate(UpdateState(gfx::Point(),
+                                             gfx::Vector2d(0, -2 * offset),
+                                             InputHandler::TOUCHSCREEN)
+                                     .get())
                   .did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, 0).ToString(),
             scroll_layer->CurrentScrollOffset().ToString());
@@ -11255,8 +11106,7 @@
       host_impl_
           ->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2d(0, -offset),
                                      InputHandler::TOUCHSCREEN)
-                             .get(),
-                         InputHandler::TOUCHSCREEN)
+                             .get())
           .did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, 0).ToString(),
             scroll_layer->CurrentScrollOffset().ToString());
@@ -11308,11 +11158,10 @@
                    InputHandler::TOUCHSCREEN)
             .get(),
         InputHandler::TOUCHSCREEN);
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100, 100),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(0, 0),
+                                         gfx::Vector2dF(100, 100),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     host_impl_->ScrollEnd();
 
     EXPECT_VECTOR_EQ(gfx::Vector2dF(), outer_scroll->CurrentScrollOffset());
@@ -11390,8 +11239,7 @@
     // Scroll near the edge of the outer viewport.
     host_impl_->ScrollUpdate(
         UpdateState(gfx::Point(), scroll_delta, InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+            .get());
     inner_expected += scroll_delta;
     EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point()));
 
@@ -11401,11 +11249,10 @@
     // Now diagonal scroll across the outer viewport boundary in a single event.
     // The entirety of the scroll should be consumed, as bubbling between inner
     // and outer viewport layers is perfect.
-    host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(), gfx::ScaleVector2d(scroll_delta, 2),
-                    InputHandler::TOUCHSCREEN)
-            .get(),
-        InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollUpdate(UpdateState(gfx::Point(),
+                                         gfx::ScaleVector2d(scroll_delta, 2),
+                                         InputHandler::TOUCHSCREEN)
+                                 .get());
     EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point()));
     outer_expected += scroll_delta;
     inner_expected += scroll_delta;
@@ -11483,8 +11330,7 @@
   scroll_result =
       host_impl_->ScrollUpdate(UpdateState(gfx::Point(), gfx::Vector2dF(0, 100),
                                            InputHandler::TOUCHSCREEN)
-                                   .get(),
-                               InputHandler::TOUCHSCREEN);
+                                   .get());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), inner_scroll->CurrentScrollOffset());
 
   // When inner viewport is unscrollable, a fling gives zero overscroll.
@@ -11870,8 +11716,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get());
 
   // Ensure the scroll update happens immediately.
   EXPECT_EQ(scrolling_layer->CurrentScrollOffset().y(), 50);
@@ -11909,8 +11754,7 @@
                                 InputHandler::WHEEL)
                   .thread);
     host_impl_->ScrollUpdate(
-        AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get(),
-        InputHandler::WHEEL);
+        AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get());
 
     EXPECT_EQ(0, set_needs_commit_count);
     EXPECT_EQ(1, set_needs_redraw_count);
@@ -11950,8 +11794,7 @@
                                      &set_needs_redraw_count));
     // Update target.
     host_impl_->ScrollUpdate(
-        AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get(),
-        InputHandler::WHEEL);
+        AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get());
     host_impl_->ScrollEnd();
 
     EXPECT_EQ(0, set_needs_commit_count);
@@ -12011,7 +11854,7 @@
         BeginState(position, gfx::Vector2d(0, 50), InputHandler::WHEEL);
     host_impl_->ScrollBegin(begin_state.get(), InputHandler::WHEEL);
     auto update_state = AnimatedUpdateState(position, gfx::Vector2d(0, 50));
-    host_impl_->ScrollUpdate(update_state.get(), InputHandler::WHEEL);
+    host_impl_->ScrollUpdate(update_state.get());
     EXPECT_EQ(outer_scroll->scroll_tree_index(),
               host_impl_->CurrentlyScrollingNode()->id);
 
@@ -12118,11 +11961,9 @@
                           InputHandler::WHEEL)
             .thread);
     host_impl_->ScrollUpdate(
-        AnimatedUpdateState(gfx::Point(10, 10), gfx::Vector2d(0, 10)).get(),
-        InputHandler::WHEEL);
+        AnimatedUpdateState(gfx::Point(10, 10), gfx::Vector2d(0, 10)).get());
     host_impl_->ScrollUpdate(
-        AnimatedUpdateState(gfx::Point(10, 10), gfx::Vector2d(0, 20)).get(),
-        InputHandler::WHEEL);
+        AnimatedUpdateState(gfx::Point(10, 10), gfx::Vector2d(0, 20)).get());
 
     // Scrolling the inner viewport happens through the Viewport class which
     // uses the outer viewport to represent "latched to the viewport".
@@ -12302,14 +12143,12 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get());
   // This will call ScrollOffsetAnimationCurve::UpdateTarget while the animation
   // created above is in state ANIMATION::WAITING_FOR_TARGET_AVAILABILITY and
   // doesn't have a start time.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 100)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 100)).get());
 
   begin_frame_args.frame_time =
       start_time + base::TimeDelta::FromMilliseconds(250);
@@ -12358,7 +12197,7 @@
                 .thread);
   host_impl_->ScrollUpdate(
       AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 100)).get(),
-      InputHandler::WHEEL, base::TimeDelta::FromMilliseconds(100));
+      base::TimeDelta::FromMilliseconds(100));
 
   LayerImpl* scrolling_layer = OuterViewportScrollLayer();
   EXPECT_EQ(scrolling_layer->scroll_tree_index(),
@@ -12387,7 +12226,7 @@
   // Update target.
   host_impl_->ScrollUpdate(
       AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 100)).get(),
-      InputHandler::WHEEL, base::TimeDelta::FromMilliseconds(150));
+      base::TimeDelta::FromMilliseconds(150));
 
   // Third tick after 100ms, should be at the target position since update
   // target was called with a large value of jank.
@@ -12423,8 +12262,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get());
 
   LayerImpl* scrolling_layer = OuterViewportScrollLayer();
   EXPECT_EQ(scrolling_layer->scroll_tree_index(),
@@ -12469,7 +12307,7 @@
   // Use "precise pixel" granularity to avoid animating.
   update_state->data()->delta_granularity = static_cast<double>(
       ui::input_types::ScrollGranularity::kScrollByPrecisePixel);
-  host_impl_->ScrollUpdate(update_state.get(), InputHandler::WHEEL);
+  host_impl_->ScrollUpdate(update_state.get());
   EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(0, y + 50)));
   host_impl_->ScrollEnd();
   EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point()));
@@ -12507,8 +12345,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get());
 
   LayerImpl* scrolling_layer = OuterViewportScrollLayer();
   EXPECT_EQ(scrolling_layer->scroll_tree_index(),
@@ -12535,8 +12372,7 @@
 
   // Update target.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(0, 50)).get());
   host_impl_->ScrollEnd();
   host_impl_->DidFinishImplFrame();
 
@@ -12599,8 +12435,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(10, 20)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(10, 20)).get());
   host_impl_->Animate();
   host_impl_->UpdateAnimationState(true);
   EXPECT_EQ(outer_scroll_layer->scroll_tree_index(),
@@ -12617,8 +12452,7 @@
   // Scroll by the inner viewport's max scroll extent, the remainder
   // should bubble up to the outer viewport.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(100, 100)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(100, 100)).get());
   host_impl_->Animate();
   host_impl_->UpdateAnimationState(true);
   EXPECT_EQ(outer_scroll_layer->scroll_tree_index(),
@@ -12635,8 +12469,7 @@
   // Scroll by the outer viewport's max scroll extent, it should all go to the
   // outer viewport.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(190, 180)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(190, 180)).get());
   host_impl_->Animate();
   host_impl_->UpdateAnimationState(true);
   EXPECT_EQ(outer_scroll_layer->scroll_tree_index(),
@@ -12653,8 +12486,7 @@
   // Scroll upwards by the max scroll extent. The inner viewport should animate
   // and the remainder should bubble to the outer viewport.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(-110, -120)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(-110, -120)).get());
   host_impl_->Animate();
   host_impl_->UpdateAnimationState(true);
   EXPECT_EQ(outer_scroll_layer->scroll_tree_index(),
@@ -12699,8 +12531,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(90, 90)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(90, 90)).get());
   host_impl_->Animate();
   host_impl_->UpdateAnimationState(true);
   // When either the inner or outer node is being scrolled, the outer node is
@@ -12719,8 +12550,7 @@
 
   // Update target.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(50, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(50, 50)).get());
   host_impl_->Animate();
   host_impl_->UpdateAnimationState(true);
   EXPECT_EQ(outer_scroll_layer->scroll_tree_index(),
@@ -12765,8 +12595,7 @@
                               InputHandler::WHEEL)
                 .thread);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(50, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(50, 50)).get());
 
   EXPECT_EQ(scrolling_layer->scroll_tree_index(),
             host_impl_->CurrentlyScrollingNode()->id);
@@ -12794,8 +12623,7 @@
 
   // Update target.
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(50, 50)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(50, 50)).get());
   host_impl_->DidFinishImplFrame();
 
   begin_frame_args.frame_time =
@@ -12851,8 +12679,7 @@
           .get(),
       InputHandler::WHEEL);
   host_impl_->ScrollUpdate(
-      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(500, 500)).get(),
-      InputHandler::WHEEL);
+      AnimatedUpdateState(gfx::Point(), gfx::Vector2d(500, 500)).get());
 
   EXPECT_EQ(scrolling_layer->scroll_tree_index(),
             host_impl_->CurrentlyScrollingNode()->id);
@@ -12986,8 +12813,7 @@
     EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset());
 
     host_impl_->ScrollUpdate(
-        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get(),
-        InputHandler::WHEEL);
+        UpdateState(gfx::Point(), scroll_delta, InputHandler::WHEEL).get());
     host_impl_->ScrollEnd();
     EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 2.5),
                      scroll_layer->CurrentScrollOffset());
@@ -13660,9 +13486,7 @@
   EXPECT_FALSE(
       scrollbar_2_animation_controller->MouseIsOverScrollbarThumb(VERTICAL));
 
-  // Capture scrollbar_1, then move mouse to scrollbar_2's layer, should post an
-  // event to fade out scrollbar_1.
-  scrollbar_1_animation_controller->DidScrollUpdate();
+  // Capture scrollbar_1, then move mouse to scrollbar_2's layer);
   animation_task_.Reset();
 
   // Only the MouseMove's location will affect the overlay scrollbar.
@@ -14033,8 +13857,7 @@
                 .thread);
   host_impl_->ScrollUpdate(
       UpdateState(gfx::Point(), gfx::Vector2d(0, 10), InputHandler::WHEEL)
-          .get(),
-      InputHandler::WHEEL);
+          .get());
   {
     RenderFrameMetadata metadata = StartDrawAndProduceRenderFrameMetadata();
     EXPECT_EQ(gfx::Vector2dF(0, 10), metadata.root_scroll_offset);
@@ -14257,8 +14080,7 @@
           InputHandler::WHEEL);
       host_impl_->ScrollUpdate(
           UpdateState(gfx::Point(), test_leg.scroll_delta, InputHandler::WHEEL)
-              .get(),
-          InputHandler::WHEEL);
+              .get());
     }
 
     // Trigger draw.
@@ -14298,7 +14120,7 @@
   ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode();
   EXPECT_TRUE(scroll_node);
 
-  host_impl_->ScrollUpdate(scroll_state.get(), InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(scroll_state.get());
 
   // Check to see the scroll tree's currently scrolling node is
   // still the same.
@@ -14308,7 +14130,7 @@
   host_impl_->active_tree()->SetCurrentlyScrollingNode(nullptr);
   EXPECT_FALSE(scroll_tree.CurrentlyScrollingNode());
 
-  host_impl_->ScrollUpdate(scroll_state.get(), InputHandler::TOUCHSCREEN);
+  host_impl_->ScrollUpdate(scroll_state.get());
 
   EXPECT_EQ(nullptr, scroll_tree.CurrentlyScrollingNode());
 }
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc
index 39cfa35..612d7df9 100644
--- a/cc/trees/layer_tree_host_unittest_scroll.cc
+++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -716,8 +716,7 @@
         InputHandler::ScrollStatus status = impl->ScrollBegin(
             BeginState(scroll_point).get(), InputHandler::TOUCHSCREEN);
         EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
-        impl->ScrollUpdate(UpdateState(gfx::Point(), scroll_amount_).get(),
-                           InputHandler::TOUCHSCREEN);
+        impl->ScrollUpdate(UpdateState(gfx::Point(), scroll_amount_).get());
         auto* scrolling_node = impl->CurrentlyScrollingNode();
         CHECK(scrolling_node);
         impl->ScrollEnd();
@@ -742,8 +741,7 @@
         InputHandler::ScrollStatus status = impl->ScrollBegin(
             BeginState(scroll_point).get(), InputHandler::WHEEL);
         EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
-        impl->ScrollUpdate(UpdateState(gfx::Point(), scroll_amount_).get(),
-                           InputHandler::WHEEL);
+        impl->ScrollUpdate(UpdateState(gfx::Point(), scroll_amount_).get());
         impl->ScrollEnd();
 
         // Check the scroll is applied as a delta.
@@ -1137,7 +1135,7 @@
   update_scroll_state_data.delta_y = offset.y();
   std::unique_ptr<ScrollState> update_scroll_state(
       new ScrollState(update_scroll_state_data));
-  host_impl->ScrollUpdate(update_scroll_state.get(), InputHandler::TOUCHSCREEN);
+  host_impl->ScrollUpdate(update_scroll_state.get());
 
   host_impl->ScrollEnd(true /* should_snap */);
 }
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 11105d8a..a6d5a70 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -464,15 +464,6 @@
   if (enable_vr) {
     deps += [ ":chrome_vr_java_resources" ]
   }
-
-  if (enable_arcore) {
-    # AR DFM is disabled, so include the ARCore dependencies here as well.
-    # They are needed for "java/src/org/chromium/chrome/browser/vr/ArCoreShimImpl.java"
-    # to compile.
-    deps +=
-        [ "//third_party/arcore-android-sdk-client:com_google_ar_core_java" ]
-  }
-
   srcjar_deps += [ ":chrome_vr_android_java_enums_srcjar" ]
   if (enable_feed_in_chrome) {
     deps += [ ":chrome_feed_java_resources" ]
@@ -2166,8 +2157,10 @@
     ]
 
     # Include ArCore files directly instead of using bundles.
-    deps +=
-        [ "//third_party/arcore-android-sdk-client:com_google_ar_core_java" ]
+    deps += [
+      "//chrome/browser/android/vr:ar_java",
+      "//third_party/arcore-android-sdk-client:com_google_ar_core_java",
+    ]
 
     _libarcore_dir = get_label_info(
                          "//third_party/arcore-android-sdk-client:com_google_ar_core_java($default_toolchain)",
@@ -2952,6 +2945,8 @@
     "//base/test:test_support_java",
     "//chrome/android:chrome_java",
     "//chrome/test/android:chrome_java_test_support",
+    "//components/payments/content/android:java",
+    "//content/public/android:content_java",
     "//content/public/test/android:android_test_message_pump_support_java",
     "//content/public/test/android:content_java_test_support",
     "//third_party/blink/public:blink_headers_java",
@@ -2966,6 +2961,8 @@
     "native_java_unittests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java",
     "native_java_unittests/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java",
     "native_java_unittests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java",
+    "native_java_unittests/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java",
+    "native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java",
   ]
 
   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
@@ -2979,5 +2976,7 @@
     "native_java_unittests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java",
     "native_java_unittests/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java",
     "native_java_unittests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java",
+    "native_java_unittests/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java",
+    "native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java",
   ]
 }
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index 37061f40..0e1736b 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -165,8 +165,6 @@
   "junit/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionProcessorUnitTest.java",
   "junit/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilderUnitTest.java",
   "junit/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksFaviconThrottleTest.java",
-  "junit/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java",
-  "junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java",
   "junit/src/org/chromium/chrome/browser/payments/AutofillContactTest.java",
   "junit/src/org/chromium/chrome/browser/payments/AutofillContactUnitTest.java",
   "junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java",
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni
index 1c2a03a8..12c17b0 100644
--- a/chrome/android/chrome_public_apk_tmpl.gni
+++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -318,12 +318,6 @@
 template("monochrome_public_common_apk_or_module_tmpl") {
   _is_bundle_module = defined(invoker.target_type) &&
                       invoker.target_type == "android_app_bundle_module"
-  if (_is_bundle_module) {
-    assert(
-        defined(invoker.is_base_module),
-        "_is_bundle_module is true but the invoker does not define is_base_module!")
-  }
-
   if (defined(invoker.enable_multidex)) {
     _enable_multidex = invoker.enable_multidex
   } else {
@@ -350,30 +344,6 @@
       "//components/crash/android:handler_java",
     ]
 
-    if (_is_bundle_module && invoker.is_base_module && enable_arcore) {
-      # AR DFM is disabled - set the loadable_modules / secondary_abi_loadable_modules
-      # to what would be brought in by the module.
-      # This needs to happen for monochrome & trichrome builds of base module if ARCore is enabled.
-
-      _deps +=
-          [ "//third_party/arcore-android-sdk-client:com_google_ar_core_java" ]
-
-      _libarcore_dir = get_label_info(
-                           "//third_party/arcore-android-sdk-client:com_google_ar_core_java($default_toolchain)",
-                           "target_out_dir") + "/com_google_ar_core_java/jni"
-
-      if (android_64bit_target_cpu) {
-        if (invoker.is_64_bit_browser) {
-          loadable_modules = [ "$_libarcore_dir/arm64-v8a/libarcore_sdk_c.so" ]
-        } else {
-          secondary_abi_loadable_modules =
-              [ "$_libarcore_dir/armeabi-v7a/libarcore_sdk_c.so" ]
-        }
-      } else {
-        loadable_modules = [ "$_libarcore_dir/armeabi-v7a/libarcore_sdk_c.so" ]
-      }
-    }
-
     if (is_monochrome) {
       product_config_java_packages = [
         "org.chromium.chrome.browser",
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
index cf90b68..bb3cf14 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -175,6 +175,21 @@
         <!-- ARCore APK integration -->
         <!-- This tag indicates that this application optionally uses ARCore. -->
         <meta-data android:name="com.google.ar.core" android:value="optional" />
+        <!-- This value must match value present in ARCore SDK's .aar -->
+        <!-- TODO(https://crbug.com/917406): modify build scripts to
+             automatically pull this value in - the problem exists because in
+             bundle mode, the ARCore SDK is packaged into AR module and
+             the module installation will not automatically bring in DFM's
+             manifest entries. -->
+        <meta-data android:name="com.google.ar.core.min_apk_version"
+            android:value="190531000"/>
+        <activity
+            android:name="com.google.ar.core.InstallActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:excludeFromRecents="true"
+            android:exported="false"
+            android:launchMode="singleTop"
+            android:theme="@android:style/Theme.Material.Light.Dialog.Alert" />
         {% endif %}
 
         <!-- Cast support -->
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImpl.java
index 0030509..880329e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImpl.java
@@ -55,7 +55,7 @@
         // Parent ViewGroup, or null.
         private ViewGroup mParent;
 
-        public SurfaceState(Context context, int format, boolean useSurfaceControl,
+        public SurfaceState(Context context, int format, boolean supportMediaOverlay,
                 SurfaceHolder.Callback2 callback) {
             surfaceView = new SurfaceView(context);
 
@@ -66,7 +66,7 @@
             // stacked on top of the translucent one, the framework doesn't draw any content
             // underneath it and shows its background instead when it has no content during the
             // transition.
-            if (format == PixelFormat.TRANSLUCENT && !useSurfaceControl) {
+            if (format == PixelFormat.TRANSLUCENT && supportMediaOverlay) {
                 surfaceView.setZOrderMediaOverlay(true);
             }
             surfaceView.setVisibility(View.INVISIBLE);
@@ -130,15 +130,15 @@
     // View to which we'll attach the SurfaceView.
     private final ViewGroup mParentView;
 
-    public CompositorSurfaceManagerImpl(
-            ViewGroup parentView, SurfaceManagerCallbackTarget client, boolean useSurfaceControl) {
+    public CompositorSurfaceManagerImpl(ViewGroup parentView, SurfaceManagerCallbackTarget client,
+            boolean supportMediaOverlay) {
         mParentView = parentView;
         mClient = client;
 
         mTranslucent = new SurfaceState(
-                parentView.getContext(), PixelFormat.TRANSLUCENT, useSurfaceControl, this);
+                parentView.getContext(), PixelFormat.TRANSLUCENT, supportMediaOverlay, this);
         mOpaque = new SurfaceState(
-                mParentView.getContext(), PixelFormat.OPAQUE, useSurfaceControl, this);
+                mParentView.getContext(), PixelFormat.OPAQUE, supportMediaOverlay, this);
     }
 
     /**
@@ -254,7 +254,7 @@
 
         mTranslucent.surfaceHolder().removeCallback(this);
         mTranslucent =
-                new SurfaceState(mParentView.getContext(), PixelFormat.TRANSLUCENT, true, this);
+                new SurfaceState(mParentView.getContext(), PixelFormat.TRANSLUCENT, false, this);
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
index ef28798..cd598a5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
@@ -343,6 +343,19 @@
      * @param enabled Whether to enter or leave overlay immersive ar mode.
      */
     public void setOverlayImmersiveArMode(boolean enabled) {
+        if (mIsSurfaceControlEnabled) {
+            // SurfaceControl doesn't mark the translucent SurfaceView as a media overlay by
+            // default, but we need that to allow the DOM content drawn by the compositor to show
+            // above the WebXR content. Replace the surface manager with a customized one
+            // for the duration of the immersive-ar session.
+            if (enabled) {
+                mCompositorSurfaceManager.shutDown();
+                createCompositorSurfaceManager(true);
+            } else {
+                mCompositorSurfaceManager.shutDown();
+                createCompositorSurfaceManager();
+            }
+        }
         setOverlayVideoMode(enabled);
         CompositorViewJni.get().setOverlayImmersiveArMode(
                 mNativeCompositorView, CompositorView.this, enabled);
@@ -602,14 +615,21 @@
         createCompositorSurfaceManager();
     }
 
-    private void createCompositorSurfaceManager() {
+    private void createCompositorSurfaceManager(boolean supportMediaOverlay) {
         mCompositorSurfaceManager =
-                new CompositorSurfaceManagerImpl(this, this, mIsSurfaceControlEnabled);
+                new CompositorSurfaceManagerImpl(this, this, supportMediaOverlay);
         mCompositorSurfaceManager.requestSurface(getSurfacePixelFormat());
         CompositorViewJni.get().setNeedsComposite(mNativeCompositorView, CompositorView.this);
         mCompositorSurfaceManager.setVisibility(getVisibility());
     }
 
+    private void createCompositorSurfaceManager() {
+        // If surface control is available, video overlays don't need a translucent media
+        // overlay view, so disable support for that. This lets other components such
+        // as ThinWebView use ZOrderMediaOverlay.
+        createCompositorSurfaceManager(!mIsSurfaceControlEnabled);
+    }
+
     @NativeMethods
     interface Natives {
         long init(CompositorView caller, boolean lowMemDevice, WindowAndroid windowAndroid,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
index 633e2af..20ad351 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
@@ -110,8 +110,6 @@
     // The denominator for the above formula, which will adjust the scale for the alpha.
     private final float mTextOffsetAdjustedScale;
 
-    private Bitmap mCachedSearchEngineLogoBitmap;
-
     StatusMediator(PropertyModel model, Resources resources, Context context,
             UrlBarEditingTextStateProvider urlBarEditingTextStateProvider) {
         mModel = model;
@@ -427,9 +425,6 @@
      */
     public void updateSearchEngineStatusIcon(boolean shouldShowSearchEngineLogo,
             boolean isSearchEngineGoogle, String searchEngineUrl) {
-        if (!TextUtils.equals(searchEngineUrl, mSearchEngineLogoUrl)) {
-            mCachedSearchEngineLogoBitmap = null;
-        }
         mIsSearchEngineStateSetup = true;
         mIsSearchEngineGoogle = isSearchEngineGoogle;
         mSearchEngineLogoUrl = searchEngineUrl;
@@ -551,20 +546,13 @@
 
     /** @return The non-Google search engine icon {@link Bitmap}. */
     private void getNonGoogleSearchEngineIconBitmap(final Callback<StatusIconResource> callback) {
-        if (mCachedSearchEngineLogoBitmap != null) {
-            callback.onResult(
-                    new StatusIconResource(mSearchEngineLogoUrl, mCachedSearchEngineLogoBitmap, 0));
-        }
-
         mDelegate.getSearchEngineLogoFavicon(mResources, (favicon) -> {
             if (favicon == null || mShouldCancelCustomFavicon) {
                 callback.onResult(new StatusIconResource(R.drawable.ic_search, 0));
                 return;
             }
 
-            mCachedSearchEngineLogoBitmap = favicon;
-            callback.onResult(
-                    new StatusIconResource(mSearchEngineLogoUrl, mCachedSearchEngineLogoBitmap, 0));
+            callback.onResult(new StatusIconResource(mSearchEngineLogoUrl, favicon, 0));
         });
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS b/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS
index 3a67b20a..ba53974 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS
@@ -6,6 +6,7 @@
   "+chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java",
   "+chrome/android/java/src/org/chromium/chrome/browser/tab",
   "+chrome/android/java/src/org/chromium/chrome/browser/webapps/WebDisplayMode.java",
+  "+chrome/browser/preferences",
   "+chrome/browser/ui/android/widget",
   "+components/browser_ui/styles/android",
   "+content/public/android/java/src/org/chromium/content_public",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabIdManager.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabIdManager.java
index 395bdcc1..272f200 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabIdManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabIdManager.java
@@ -6,11 +6,12 @@
 
 import android.annotation.SuppressLint;
 import android.content.Context;
-import android.content.SharedPreferences;
 
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.ContextUtils;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 
 import java.util.concurrent.atomic.AtomicInteger;
@@ -30,9 +31,6 @@
  *                    started first.  Unify the ways the maximum Tab ID is set (crbug.com/502384).
  */
 public class TabIdManager {
-    @VisibleForTesting
-    public static final String PREF_NEXT_ID =
-            "org.chromium.chrome.browser.tab.TabIdManager.NEXT_ID";
 
     private static final Object INSTANCE_LOCK = new Object();
     @SuppressLint("StaticFieldLeak")
@@ -41,7 +39,7 @@
     private final Context mContext;
     private final AtomicInteger mIdCounter = new AtomicInteger();
 
-    private SharedPreferences mPreferences;
+    private SharedPreferencesManager mPreferences;
 
     /** Returns the Singleton instance of the TabIdManager. */
     public static TabIdManager getInstance() {
@@ -60,8 +58,8 @@
     /**
      * Validates {@code id} and increments the internal counter to make sure future ids don't
      * collide.
-     * @param id The current id.  May be {@link #INVALID_TAB_ID}.
-     * @return A new id if {@code id} was {@link #INVALID_TAB_ID}, or {@code id}.
+     * @param id The current id.  May be {@link Tab#INVALID_TAB_ID}.
+     * @return A new id if {@code id} was {@link Tab#INVALID_TAB_ID}, or {@code id}.
      */
     public final int generateValidId(int id) {
         if (id == Tab.INVALID_TAB_ID) id = mIdCounter.getAndIncrement();
@@ -85,7 +83,7 @@
         // It's possible idCounter has been incremented between the get and the add but that's OK --
         // in the worst case mIdCounter will just be overly incremented.
         mIdCounter.addAndGet(diff);
-        mPreferences.edit().putInt(PREF_NEXT_ID, mIdCounter.get()).apply();
+        mPreferences.writeInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, mIdCounter.get());
     }
 
     private TabIdManager(Context context) {
@@ -94,7 +92,7 @@
         // Read the shared preference.  This has to be done on the critical path to ensure that the
         // myriad Activities that serve as entries into Chrome are all synchronized on the correct
         // maximum Tab ID.
-        mPreferences = ContextUtils.getAppSharedPreferences();
-        mIdCounter.set(mPreferences.getInt(PREF_NEXT_ID, 0));
+        mPreferences = SharedPreferencesManager.getInstance();
+        mIdCounter.set(mPreferences.readInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID));
     }
 }
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreInstallUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreInstallUtils.java
index a08ab3c3..4548a393 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreInstallUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreInstallUtils.java
@@ -6,6 +6,7 @@
 
 import android.app.Activity;
 
+import org.chromium.base.BundleUtils;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.base.annotations.CalledByNative;
@@ -81,8 +82,7 @@
     @CalledByNative
     private boolean canRequestInstallArModule() {
         // We can only try to install the AR module if we are in a bundle mode.
-        // Currently, AR DFM is disabled so we should never have to install it.
-        return false;
+        return BundleUtils.isBundle();
     }
 
     @CalledByNative
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index d8d5e824..04e674ef 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -47,9 +47,4 @@
     "java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java",
     "java/src/org/chromium/chrome/browser/vr/ArImmersiveOverlay.java",
   ]
-
-  # AR DFM is disabled - include the ArCoreShimImpl.java as well.
-  # This is not rolled into the above to facilitate re-enabling AR DFM if need arises.
-  chrome_java_sources +=
-      [ "java/src/org/chromium/chrome/browser/vr/ArCoreShimImpl.java" ]
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java
index 4e50dd26..9b82f76b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java
@@ -567,10 +567,10 @@
 
             Tab tab = mCustomTabActivityTestRule.getActivity().getActivityTab();
 
-            // TODO(carlosil): For now, we check the presence of an interstitial through the title
-            // since isShowingInterstitialPage does not work with committed interstitials. Once we
-            // fully migrate to committed interstitials, this should be changed to a more robust
-            // check.
+            // TODO(crbug.com/1039443): For now, we check the presence of an interstitial through
+            // the title since isShowingInterstitialPage does not work with committed interstitials.
+            // Once we fully migrate to committed interstitials, this should be changed to a more
+            // robust check.
             CriteriaHelper.pollUiThread(
                     () -> tab.getWebContents().getTitle().equals("Security error"));
 
@@ -609,8 +609,11 @@
 
             Tab tab = mCustomTabActivityTestRule.getActivity().getActivityTab();
             WebContents webContents = tab.getWebContents();
-            // Need to poll as the subresource request is async.
-            CriteriaHelper.pollUiThread(() -> webContents.isShowingInterstitialPage());
+            // TODO(crbug.com/1039443): For now, we check the presence of an interstitial through
+            // the title since isShowingInterstitialPage does not work with committed interstitials.
+            // Once we fully migrate to committed interstitials, this should be changed to a more
+            // robust check.
+            CriteriaHelper.pollUiThread(() -> webContents.getTitle().equals("Security error"));
         } finally {
             MockSafeBrowsingApiHandler.clearMockResponses();
         }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabIdManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabIdManagerTest.java
index 76b08fa..a8c6a6e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabIdManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabIdManagerTest.java
@@ -5,7 +5,6 @@
 package org.chromium.chrome.browser.tab;
 
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.annotation.UiThreadTest;
 import android.support.test.filters.SmallTest;
@@ -17,8 +16,9 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import org.chromium.base.ContextUtils;
 import org.chromium.base.test.util.AdvancedMockContext;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 
 /** Tests for the TabIdManager. */
@@ -39,17 +39,15 @@
     @UiThreadTest
     @SmallTest
     public void testBasic() {
-        SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putInt(TabIdManager.PREF_NEXT_ID, 11684);
-        editor.apply();
+        SharedPreferencesManager prefs = SharedPreferencesManager.getInstance();
+        prefs.writeInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, 11684);
 
         TabIdManager manager = TabIdManager.getInstance(mContext);
         Assert.assertEquals(
                 "Wrong Tab ID was generated", 11684, manager.generateValidId(Tab.INVALID_TAB_ID));
 
-        Assert.assertEquals(
-                "Wrong next Tab ID", 11685, prefs.getInt(TabIdManager.PREF_NEXT_ID, -1));
+        Assert.assertEquals("Wrong next Tab ID", 11685,
+                prefs.readInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, -1));
     }
 
     /** Tests that the max ID is updated properly. */
@@ -57,24 +55,22 @@
     @UiThreadTest
     @SmallTest
     public void testIncrementIdCounterTo() {
-        SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putInt(TabIdManager.PREF_NEXT_ID, 11684);
-        editor.apply();
+        SharedPreferencesManager prefs = SharedPreferencesManager.getInstance();
+        prefs.writeInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, 11684);
 
         TabIdManager manager = TabIdManager.getInstance(mContext);
         Assert.assertEquals(
                 "Wrong Tab ID was generated", 11684, manager.generateValidId(Tab.INVALID_TAB_ID));
 
-        Assert.assertEquals(
-                "Wrong next Tab ID", 11685, prefs.getInt(TabIdManager.PREF_NEXT_ID, -1));
+        Assert.assertEquals("Wrong next Tab ID", 11685,
+                prefs.readInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, -1));
 
         manager.incrementIdCounterTo(100);
-        Assert.assertEquals(
-                "Didn't stay the same", 11685, prefs.getInt(TabIdManager.PREF_NEXT_ID, -1));
+        Assert.assertEquals("Didn't stay the same", 11685,
+                prefs.readInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, -1));
 
         manager.incrementIdCounterTo(1000000);
-        Assert.assertEquals(
-                "Didn't increase", 1000000, prefs.getInt(TabIdManager.PREF_NEXT_ID, -1));
+        Assert.assertEquals("Didn't increase", 1000000,
+                prefs.readInt(ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, -1));
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappModeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappModeTest.java
index 1be2a042b..e71c7af 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappModeTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappModeTest.java
@@ -7,7 +7,6 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.MediumTest;
 import android.view.View;
@@ -19,7 +18,6 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.ApplicationStatus;
-import org.chromium.base.ContextUtils;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
@@ -31,7 +29,8 @@
 import org.chromium.chrome.browser.DeferredStartupHandler;
 import org.chromium.chrome.browser.ShortcutHelper;
 import org.chromium.chrome.browser.document.ChromeIntentUtil;
-import org.chromium.chrome.browser.tab.TabIdManager;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.MultiActivityTestRule;
 import org.chromium.chrome.test.util.ApplicationTestUtils;
@@ -173,10 +172,8 @@
     @MediumTest
     @Feature({"Webapps"})
     public void testWebappTabIdsProperlyAssigned() {
-        SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putInt(TabIdManager.PREF_NEXT_ID, 11684);
-        editor.apply();
+        SharedPreferencesManager.getInstance().writeInt(
+                ChromePreferenceKeys.TAB_ID_MANAGER_NEXT_ID, 11684);
 
         final WebappActivity webappActivity =
                 startWebappActivity(WEBAPP_1_ID, WEBAPP_1_URL, WEBAPP_1_TITLE, WEBAPP_ICON);
diff --git a/chrome/android/modules/chrome_bundle_tmpl.gni b/chrome/android/modules/chrome_bundle_tmpl.gni
index 3429eb66..0a83053 100644
--- a/chrome/android/modules/chrome_bundle_tmpl.gni
+++ b/chrome/android/modules/chrome_bundle_tmpl.gni
@@ -76,7 +76,6 @@
                              "proguard_android_sdk_dep",
                              "proguard_jar_path",
                              "sign_bundle",
-                             "static_library_proguard_disabled",
                              "static_library_provider",
                              "static_library_synchronized_proguard",
                              "verify_proguard_flags",
diff --git a/chrome/android/modules/chrome_feature_modules.gni b/chrome/android/modules/chrome_feature_modules.gni
index 016da28e..8b8202a 100644
--- a/chrome/android/modules/chrome_feature_modules.gni
+++ b/chrome/android/modules/chrome_feature_modules.gni
@@ -60,7 +60,7 @@
 
 # Modules shipped in Monochrome (Android N+).
 monochrome_module_descs = chrome_modern_module_descs
-if (false) {  # AR DFM is currently disabled
+if (enable_arcore) {
   monochrome_module_descs += [ ar_module_desc ]
 }
 if (!disable_autofill_assistant_dfm) {
diff --git a/chrome/android/native_java_unittests/DEPS b/chrome/android/native_java_unittests/DEPS
index 75b613e..43a6b0eb 100644
--- a/chrome/android/native_java_unittests/DEPS
+++ b/chrome/android/native_java_unittests/DEPS
@@ -1,3 +1,7 @@
 include_rules = [
+  "+components/payments/content/android/java/src/org/chromium/components/payments",
   "+components/search_engines/android/java/src/org/chromium/components/search_engines",
+
+  "-content/public/android/java",
+  "+content/public/android/java/src/org/chromium/content_public",
 ]
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/partnercustomizations/OWNERS b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/partnercustomizations/OWNERS
similarity index 100%
rename from chrome/android/junit/src/org/chromium/chrome/browser/partnercustomizations/OWNERS
rename to chrome/android/native_java_unittests/src/org/chromium/chrome/browser/partnercustomizations/OWNERS
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java
similarity index 91%
rename from chrome/android/junit/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java
rename to chrome/android/native_java_unittests/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java
index 1c3bf017..da39669 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java
+++ b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizationsUnitTest.java
@@ -5,21 +5,20 @@
 package org.chromium.chrome.browser.partnercustomizations;
 
 import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.annotation.Config;
 
-import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.CalledByNativeJavaTest;
 import org.chromium.base.test.util.Feature;
 
 /**
  * Unit tests for {@link PartnerBrowserCustomizations}.
  */
-@RunWith(BaseRobolectricTestRunner.class)
-@Config(manifest = Config.NONE)
 public class PartnerBrowserCustomizationsUnitTest {
-    @Test
+    @CalledByNative
+    private PartnerBrowserCustomizationsUnitTest() {}
+
     @Feature({"Homepage"})
+    @CalledByNativeJavaTest
     public void testIsValidHomepage() {
         Assert.assertTrue(PartnerBrowserCustomizations.isValidHomepage(
                 "chrome-native://newtab/path#fragment"));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
similarity index 92%
rename from chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
rename to chrome/android/native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
index 638901c4..e0fdac3 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
+++ b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
@@ -14,14 +14,12 @@
 import android.os.Bundle;
 
 import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 import org.mockito.ArgumentMatcher;
 import org.mockito.ArgumentMatchers;
 import org.mockito.Mockito;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
 
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.CalledByNativeJavaTest;
 import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppCreatedCallback;
 import org.chromium.components.payments.PaymentManifestDownloader;
 import org.chromium.components.payments.PaymentManifestParser;
@@ -36,13 +34,21 @@
 import java.util.Set;
 
 /** Tests for the native Android payment app finder. */
-@RunWith(RobolectricTestRunner.class)
-@Config(sdk = 21, manifest = Config.NONE)
 public class AndroidPaymentAppFinderUnitTest {
     private static final IntentArgumentMatcher sPayIntentArgumentMatcher =
             new IntentArgumentMatcher(new Intent("org.chromium.intent.action.PAY"));
 
-    public AndroidPaymentAppFinderUnitTest() {}
+    // SHA256("01020304050607080900"):
+    public static final byte[][] BOB_PAY_SIGNATURE_FINGERPRINTS = {{(byte) 0x9A, (byte) 0x89,
+            (byte) 0xC6, (byte) 0x8C, (byte) 0x4C, (byte) 0x5E, (byte) 0x28, (byte) 0xB8,
+            (byte) 0xC4, (byte) 0xA5, (byte) 0x56, (byte) 0x76, (byte) 0x73, (byte) 0xD4,
+            (byte) 0x62, (byte) 0xFF, (byte) 0xF5, (byte) 0x15, (byte) 0xDB, (byte) 0x46,
+            (byte) 0x11, (byte) 0x6F, (byte) 0x99, (byte) 0x00, (byte) 0x62, (byte) 0x4D,
+            (byte) 0x09, (byte) 0xC4, (byte) 0x74, (byte) 0xF5, (byte) 0x93, (byte) 0xFB}};
+    public static final Signature BOB_PAY_SIGNATURE = new Signature("01020304050607080900");
+
+    @CalledByNative
+    private AndroidPaymentAppFinderUnitTest() {}
 
     /**
      * Argument matcher that matches Intents using |filterEquals| method.
@@ -65,7 +71,7 @@
         }
     }
 
-    @Test
+    @CalledByNativeJavaTest
     public void testNoValidPaymentMethodNames() {
         Set<String> methodNames = new HashSet<>();
         methodNames.add("unknown-payment-method-name");
@@ -84,7 +90,7 @@
         Mockito.verify(callback).onAllPaymentAppsCreated();
     }
 
-    @Test
+    @CalledByNativeJavaTest
     public void testQueryWithoutApps() {
         PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
         Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntentWithMetaData(
@@ -107,7 +113,7 @@
         Mockito.verify(callback).onAllPaymentAppsCreated();
     }
 
-    @Test
+    @CalledByNativeJavaTest
     public void testQueryWithoutMetaData() {
         List<ResolveInfo> activities = new ArrayList<>();
         ResolveInfo alicePay = new ResolveInfo();
@@ -138,7 +144,7 @@
         Mockito.verify(callback).onAllPaymentAppsCreated();
     }
 
-    @Test
+    @CalledByNativeJavaTest
     public void testQueryWithUnsupportedPaymentMethod() {
         List<ResolveInfo> activities = new ArrayList<>();
         ResolveInfo alicePay = new ResolveInfo();
@@ -174,7 +180,7 @@
         Mockito.verify(callback).onAllPaymentAppsCreated();
     }
 
-    @Test
+    @CalledByNativeJavaTest
     public void testQueryBasicCardsWithTwoApps() {
         List<ResolveInfo> activities = new ArrayList<>();
         ResolveInfo alicePay = new ResolveInfo();
@@ -239,7 +245,7 @@
         Mockito.verify(callback).onAllPaymentAppsCreated();
     }
 
-    @Test
+    @CalledByNativeJavaTest
     public void testQueryBobPayWithOneAppThatHasIsReadyToPayService() {
         List<ResolveInfo> activities = new ArrayList<>();
         ResolveInfo bobPay = new ResolveInfo();
@@ -274,14 +280,15 @@
         isBobPayReadyToPay.serviceInfo.name = "com.bobpay.app.IsReadyToWebPay";
         services.add(isBobPayReadyToPay);
         Intent isReadyToPayIntent = new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY);
-        Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
+        Mockito
+                .when(packageManagerDelegate.getServicesThatCanRespondToIntent(
                         ArgumentMatchers.argThat(new IntentArgumentMatcher(isReadyToPayIntent))))
                 .thenReturn(services);
 
         PackageInfo bobPayPackageInfo = new PackageInfo();
         bobPayPackageInfo.versionCode = 10;
         bobPayPackageInfo.signatures = new Signature[1];
-        bobPayPackageInfo.signatures[0] = PaymentManifestVerifierTest.BOB_PAY_SIGNATURE;
+        bobPayPackageInfo.signatures[0] = BOB_PAY_SIGNATURE;
         Mockito.when(packageManagerDelegate.getPackageInfoWithSignatures("com.bobpay.app"))
                 .thenReturn(bobPayPackageInfo);
 
@@ -318,8 +325,8 @@
             public void parseWebAppManifest(String content, ManifestParseCallback callback) {
                 WebAppManifestSection[] manifest = new WebAppManifestSection[1];
                 int minVersion = 10;
-                manifest[0] = new WebAppManifestSection("com.bobpay.app", minVersion,
-                        PaymentManifestVerifierTest.BOB_PAY_SIGNATURE_FINGERPRINTS);
+                manifest[0] = new WebAppManifestSection(
+                        "com.bobpay.app", minVersion, BOB_PAY_SIGNATURE_FINGERPRINTS);
                 callback.onWebAppManifestParseSuccess(manifest);
             }
 
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index b524820..9c88ab16 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4467,7 +4467,10 @@
   }
 
   if (enable_kaleidoscope) {
-    deps += [ "//chrome/browser/media/kaleidoscope/internal" ]
+    deps += [
+      "//chrome/browser/media/kaleidoscope/internal",
+      "//chrome/browser/media/kaleidoscope/internal/mojom",
+    ]
   }
 
   if (enable_legacy_desktop_in_product_help) {
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 50448e9..3024ebd 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4357,6 +4357,10 @@
      kOsWin | kOsMac | kOsLinux,
      FEATURE_VALUE_TYPE(autofill::features::kAutofillCreditCardUploadFeedback)},
 
+    {"font-access", flag_descriptions::kFontAccessAPIName,
+     flag_descriptions::kFontAccessAPIDescription, kOsAll,
+     FEATURE_VALUE_TYPE(blink::features::kFontAccess)},
+
     {"font-src-local-matching", flag_descriptions::kFontSrcLocalMatchingName,
      flag_descriptions::kFontSrcLocalMatchingDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kFontSrcLocalMatching)},
diff --git a/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.cc b/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.cc
index 4331b9c..aa511b1 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.cc
@@ -66,8 +66,9 @@
 
 ArCoreConsentPrompt::~ArCoreConsentPrompt() = default;
 
-void ArCoreConsentPrompt::OnUserConsentResult(JNIEnv* env,
-                                              jboolean is_granted) {
+void ArCoreConsentPrompt::OnUserConsentResult(
+    JNIEnv* env,
+    jboolean is_granted) {
   jdelegate_.Reset();
 
   if (!on_user_consent_callback_)
@@ -138,8 +139,9 @@
       GetTabFromRenderer(render_process_id_, render_frame_id_));
 }
 
-void ArCoreConsentPrompt::OnRequestInstallArModuleResult(JNIEnv* env,
-                                                         bool success) {
+void ArCoreConsentPrompt::OnRequestInstallArModuleResult(
+    JNIEnv* env,
+    bool success) {
   DVLOG(1) << __func__;
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
@@ -148,8 +150,9 @@
   }
 }
 
-void ArCoreConsentPrompt::OnRequestInstallSupportedArCoreResult(JNIEnv* env,
-                                                                bool success) {
+void ArCoreConsentPrompt::OnRequestInstallSupportedArCoreResult(
+    JNIEnv* env,
+    bool success) {
   DVLOG(1) << __func__;
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(on_request_arcore_install_or_update_result_callback_);
@@ -159,8 +162,17 @@
 
 void ArCoreConsentPrompt::RequestArModule() {
   DVLOG(1) << __func__;
+  if (ShouldRequestInstallArModule()) {
+    if (!CanRequestInstallArModule()) {
+      OnRequestArModuleResult(false);
+      return;
+    }
 
-  DCHECK(!ShouldRequestInstallArModule()) << "AR DFM should not be needed!";
+    on_request_ar_module_result_callback_ = base::BindOnce(
+        &ArCoreConsentPrompt::OnRequestArModuleResult, GetWeakPtr());
+    RequestInstallArModule();
+    return;
+  }
 
   OnRequestArModuleResult(true);
 }
diff --git a/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc b/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc
index 72992c1..dce5c25 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc
@@ -19,6 +19,10 @@
 
 namespace vr {
 
+namespace {
+
+}  // namespace
+
 ArCoreJavaUtils::ArCoreJavaUtils() {
   JNIEnv* env = AttachCurrentThread();
   if (!env)
@@ -105,21 +109,6 @@
   // absolute path.
   ScopedJavaLocalRef<jstring> java_path =
       Java_ArCoreJavaUtils_getArCoreShimLibraryPath(env);
-
-  // Crash in debug builds if `java_path` is a null pointer but handle this
-  // situation in release builds. This is done by design - the `java_path` will
-  // be null only if there was a regression introduced to our gn/gni files w/o
-  // causing a build break. In release builds, this approach will result in the
-  // site not being able to request an AR session.
-  DCHECK(java_path)
-      << "Unable to find path to ARCore SDK library - please ensure that "
-         "loadable_modules and secondary_abi_loadable_modules are set "
-         "correctly when building";
-  if (!java_path) {
-    LOG(ERROR) << "Unable to find path to ARCore SDK library";
-    return false;
-  }
-
   return LoadArCoreSdk(base::android::ConvertJavaStringToUTF8(env, java_path));
 }
 
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index 9f748ed..cdf909c 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/accessibility/accessibility_labels_service.h"
 #include "chrome/browser/accessibility/accessibility_labels_service_factory.h"
 #include "chrome/browser/bad_message.h"
+#include "chrome/browser/buildflags.h"
 #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
 #include "chrome/browser/engagement/site_engagement_details.mojom.h"
 #include "chrome/browser/language/translate_frame_binder.h"
@@ -134,6 +135,11 @@
 #include "extensions/common/api/mime_handler.mojom.h"  // nogncheck
 #endif
 
+#if BUILDFLAG(ENABLE_KALEIDOSCOPE)
+#include "chrome/browser/media/kaleidoscope/internal/kaleidoscope_ui.h"
+#include "chrome/browser/media/kaleidoscope/internal/mojom/kaleidoscope.mojom.h"
+#endif  // BUILDFLAG(ENABLE_KALEIDOSCOPE)
+
 namespace chrome {
 namespace internal {
 
@@ -221,16 +227,20 @@
 void BindUnhandledTapWebContentsObserver(
     content::RenderFrameHost* const host,
     mojo::PendingReceiver<blink::mojom::UnhandledTapNotifier> receiver) {
+  auto* web_contents = content::WebContents::FromRenderFrameHost(host);
+  if (!web_contents)
+    return;
+
   auto* unhandled_tap_notifier_observer =
       contextual_search::UnhandledTapWebContentsObserver::FromWebContents(
-          content::WebContents::FromRenderFrameHost(host));
+          web_contents);
+  if (!unhandled_tap_notifier_observer)
+    return;
 
-  if (unhandled_tap_notifier_observer) {
-    contextual_search::CreateUnhandledTapNotifierImpl(
-        unhandled_tap_notifier_observer->device_scale_factor(),
-        unhandled_tap_notifier_observer->unhandled_tap_callback(),
-        std::move(receiver));
-  }
+  contextual_search::CreateUnhandledTapNotifierImpl(
+      unhandled_tap_notifier_observer->device_scale_factor(),
+      unhandled_tap_notifier_observer->unhandled_tap_callback(),
+      std::move(receiver));
 }
 #endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
 
@@ -268,9 +278,12 @@
     content::RenderFrameHost* const frame_host,
     mojo::PendingReceiver<dom_distiller::mojom::DistillabilityService>
         receiver) {
+  auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
+  if (!web_contents)
+    return;
+
   dom_distiller::DistillabilityDriver* driver =
-      dom_distiller::DistillabilityDriver::FromWebContents(
-          content::WebContents::FromRenderFrameHost(frame_host));
+      dom_distiller::DistillabilityDriver::FromWebContents(web_contents);
   if (!driver)
     return;
   driver->CreateDistillabilityService(std::move(receiver));
@@ -280,10 +293,13 @@
     content::RenderFrameHost* const frame_host,
     mojo::PendingReceiver<dom_distiller::mojom::DistillerJavaScriptService>
         receiver) {
+  auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
+  if (!web_contents)
+    return;
+
   dom_distiller::DomDistillerService* dom_distiller_service =
       dom_distiller::DomDistillerServiceFactory::GetForBrowserContext(
-          content::WebContents::FromRenderFrameHost(frame_host)
-              ->GetBrowserContext());
+          web_contents->GetBrowserContext());
   auto* distiller_ui_handle = dom_distiller_service->GetDistillerUIHandle();
 #if defined(OS_ANDROID)
   static_cast<dom_distiller::android::DistillerUIHandleAndroid*>(
@@ -296,8 +312,12 @@
 void BindPrerenderCanceler(
     content::RenderFrameHost* frame_host,
     mojo::PendingReceiver<mojom::PrerenderCanceler> receiver) {
-  auto* prerender_contents = prerender::PrerenderContents::FromWebContents(
-      content::WebContents::FromRenderFrameHost(frame_host));
+  auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
+  if (!web_contents)
+    return;
+
+  auto* prerender_contents =
+      prerender::PrerenderContents::FromWebContents(web_contents);
   if (!prerender_contents)
     return;
   prerender_contents->OnPrerenderCancelerReceiver(std::move(receiver));
@@ -344,10 +364,12 @@
     content::RenderFrameHost* frame_host,
     mojo::PendingReceiver<extensions::mime_handler::MimeHandlerService>
         receiver) {
-  content::WebContents* contents =
-      content::WebContents::FromRenderFrameHost(frame_host);
+  auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
+  if (!web_contents)
+    return;
+
   auto* guest_view =
-      extensions::MimeHandlerViewGuest::FromWebContents(contents);
+      extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
   if (!guest_view)
     return;
   extensions::MimeHandlerServiceImpl::Create(guest_view->GetStreamWeakPtr(),
@@ -358,10 +380,12 @@
     content::RenderFrameHost* frame_host,
     mojo::PendingReceiver<extensions::mime_handler::BeforeUnloadControl>
         receiver) {
-  content::WebContents* contents =
-      content::WebContents::FromRenderFrameHost(frame_host);
+  auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
+  if (!web_contents)
+    return;
+
   auto* guest_view =
-      extensions::MimeHandlerViewGuest::FromWebContents(contents);
+      extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
   if (!guest_view)
     return;
   guest_view->FuseBeforeUnloadControl(std::move(receiver));
@@ -544,6 +568,11 @@
   RegisterWebUIControllerInterfaceBinder<::mojom::ResetPasswordHandler,
                                          ResetPasswordUI>(map);
 #endif
+
+#if BUILDFLAG(ENABLE_KALEIDOSCOPE)
+  RegisterWebUIControllerInterfaceBinder<media::mojom::KaleidoscopeDataProvider,
+                                         KaleidoscopeUI>(map);
+#endif  // BUILDFLAG(ENABLE_KALEIDOSCOPE)
 }
 
 }  // namespace internal
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 5504b42..8d092e7 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -3575,6 +3575,7 @@
     case service_manager::SandboxType::kCdm:
     case service_manager::SandboxType::kPdfCompositor:
     case service_manager::SandboxType::kAudio:
+    case service_manager::SandboxType::kSoda:
       // Should never reach here.
       CHECK(0);
       return base::string16();
diff --git a/chrome/browser/component_updater/soda_component_installer.cc b/chrome/browser/component_updater/soda_component_installer.cc
index 8009a6d..59a91105f1 100644
--- a/chrome/browser/component_updater/soda_component_installer.cc
+++ b/chrome/browser/component_updater/soda_component_installer.cc
@@ -21,16 +21,15 @@
 
 namespace {
 
-// The SHA256 of the SubjectPublicKeyInfo used to sign the archive.
-// TODO(evliu): The SODA library isn't ready to be exposed to the public yet so
-// we should not check in the SHA256.
+// The SHA256 of the SubjectPublicKeyInfo used to sign the component.
+// The component id is: icnkogojpkfjeajonkmlplionaamopkf
 const uint8_t kSODAPublicKeySHA256[32] = {
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+    0x82, 0xda, 0xe6, 0xe9, 0xfa, 0x59, 0x40, 0x9e, 0xda, 0xcb, 0xfb,
+    0x8e, 0xd0, 0x0c, 0xef, 0xa5, 0xc0, 0x97, 0x00, 0x84, 0x1c, 0x21,
+    0xa6, 0xae, 0xc8, 0x1b, 0x87, 0xfb, 0x12, 0x27, 0x28, 0xb1};
 
 const base::FilePath::CharType kSODABinaryFileName[] =
-    FILE_PATH_LITERAL("SODAFiles/libsoda.experimental.so");
+    FILE_PATH_LITERAL("SODAFiles/libsoda.so");
 
 static_assert(base::size(kSODAPublicKeySHA256) == crypto::kSHA256Length,
               "Wrong hash length");
@@ -120,12 +119,24 @@
   return std::vector<std::string>();
 }
 
+void UpdateSODAInstallDirPref(PrefService* prefs,
+                              const base::FilePath& install_dir) {
+  prefs->SetFilePath(prefs::kSODAPath, install_dir.Append(kSODABinaryFileName));
+}
+
 void RegisterSODAComponent(ComponentUpdateService* cus,
                            PrefService* prefs,
                            base::OnceClosure callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  // TODO(evliu): The SODA library isn't ready to be exposed to the public yet
-  // we should not register the component.
-  NOTIMPLEMENTED();
+
+  auto installer = base::MakeRefCounted<ComponentInstaller>(
+      std::make_unique<SODAComponentInstallerPolicy>(base::BindRepeating(
+          [](PrefService* prefs, const base::FilePath& install_dir) {
+            base::PostTask(
+                FROM_HERE, {BrowserThread::UI, base::TaskPriority::BEST_EFFORT},
+                base::BindOnce(&UpdateSODAInstallDirPref, prefs, install_dir));
+          },
+          prefs)));
+  installer->Register(cus, std::move(callback));
 }
 }  // namespace component_updater
diff --git a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
index 0dfbd3e..15bdb1fa4 100644
--- a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
+++ b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
@@ -21,12 +21,15 @@
 #include "base/path_service.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/simple_test_clock.h"
 #include "base/threading/thread_restrictions.h"
+#include "base/time/time.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/extensions/api/extension_action/test_extension_action_api_observer.h"
@@ -62,6 +65,7 @@
 #include "content/public/test/simple_url_loader_test_helper.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "content/public/test/test_utils.h"
+#include "extensions/browser/api/declarative_net_request/action_tracker.h"
 #include "extensions/browser/api/declarative_net_request/constants.h"
 #include "extensions/browser/api/declarative_net_request/rules_monitor_service.h"
 #include "extensions/browser/api/declarative_net_request/ruleset_manager.h"
@@ -556,6 +560,32 @@
         base::StringPrintf(kGetMatchedRulesScript, tab_id_param.c_str()));
   }
 
+  // Calls getMatchedRules for |extension_id|, |tab_id| and optionally,
+  // |timestamp|. Returns the matched rule count for the tab specified by
+  // |tab_id| and are more recent than |timestamp| if specified.
+  std::string GetMatchedRuleCountForTab(const ExtensionId& extension_id,
+                                        int tab_id,
+                                        base::Optional<base::Time> timestamp) {
+    const char kGetMatchedRulesScript[] = R"(
+      chrome.declarativeNetRequest.getMatchedRules(%s, (rules) => {
+        var rule_count = rules.rulesMatchedInfo.length;
+        window.domAutomationController.send(rule_count.toString());
+      });
+    )";
+
+    std::string param_string = base::StringPrintf("{tabId: %d}", tab_id);
+
+    if (timestamp) {
+      double timestamp_in_js = timestamp->ToJsTimeIgnoringNull();
+      param_string = base::StringPrintf("{tabId: %d, minTimeStamp: %f}", tab_id,
+                                        timestamp_in_js);
+    }
+
+    return ExecuteScriptInBackgroundPage(
+        extension_id,
+        base::StringPrintf(kGetMatchedRulesScript, param_string.c_str()));
+  }
+
   std::set<GURL> GetAndResetRequestsToServer() {
     base::AutoLock lock(requests_to_server_lock_);
     std::set<GURL> results = requests_to_server_;
@@ -3566,6 +3596,9 @@
     base::Optional<int> tab_id;
     std::string expected_rule_and_tab_ids;
   } test_cases[] = {
+      // No rules should be matched for |extension_1| and the unknown tab ID.
+      {extension_1_id, extension_misc::kUnknownTabId, ""},
+
       // No filter is specified for |extension_1|, therefore two MatchedRuleInfo
       // should be returned:
       // (abc_id, first_tab_id) and (abc_id, second_tab_id)
@@ -3687,6 +3720,98 @@
   EXPECT_EQ("", actual_rule_and_tab_ids);
 }
 
+// Test that getMatchedRules only returns rules more recent than the provided
+// timestamp.
+IN_PROC_BROWSER_TEST_P(DeclarativeNetRequestBrowserTest,
+                       GetMatchedRulesTimestampFiltering) {
+  base::Time start_time = base::Time::Now();
+
+  base::SimpleTestClock clock_;
+  clock_.SetNow(start_time);
+  auto* rules_monitor_service =
+      declarative_net_request::RulesMonitorService::Get(profile());
+  rules_monitor_service->action_tracker().SetClockForTests(&clock_);
+
+  // Load the extension with a background script so scripts can be run from its
+  // generated background page.
+  set_has_background_script(true);
+
+  const std::string kFrameName1 = "frame1";
+  const GURL page_url = embedded_test_server()->GetURL(
+      "nomatch.com", "/page_with_two_frames.html");
+
+  const std::string example_host = "example.com";
+  const GURL sub_frame_url = embedded_test_server()->GetURL(
+      example_host, "/pages_with_script/index.html");
+
+  TestRule rule = CreateGenericRule();
+  rule.id = kMinValidID;
+  rule.condition->url_filter = example_host;
+  rule.condition->resource_types = std::vector<std::string>({"sub_frame"});
+  rule.action->type = "block";
+
+  ASSERT_NO_FATAL_FAILURE(LoadExtensionWithRules({rule}, "extension_1", {}));
+  const ExtensionId& extension_id = last_loaded_extension_id();
+  ui_test_utils::NavigateToURL(browser(), page_url);
+
+  // Using subframes here to make requests without triggering main-frame
+  // navigations. This request will match with the block rule for example.com at
+  // |start_time|.
+  NavigateFrame(kFrameName1, sub_frame_url);
+
+  const char getMatchedRuleTimestampScript[] = R"(
+    chrome.declarativeNetRequest.getMatchedRules((rules) => {
+      var rule_count = rules.rulesMatchedInfo.length;
+      var timestamp = rule_count === 1 ?
+          rules.rulesMatchedInfo[0].timeStamp.toString() : '';
+
+      window.domAutomationController.send(timestamp);
+    });
+  )";
+
+  std::string timestamp_string = ExecuteScriptInBackgroundPage(
+      extension_id, getMatchedRuleTimestampScript);
+
+  double matched_rule_timestamp;
+  ASSERT_TRUE(base::StringToDouble(timestamp_string, &matched_rule_timestamp));
+
+  // Verify that the rule was matched at |start_time|.
+  EXPECT_DOUBLE_EQ(start_time.ToJsTimeIgnoringNull(), matched_rule_timestamp);
+
+  // Advance the clock to capture a timestamp after when the first request was
+  // made.
+  clock_.Advance(base::TimeDelta::FromMilliseconds(100));
+  base::Time timestamp_1 = clock_.Now();
+  clock_.Advance(base::TimeDelta::FromMilliseconds(100));
+
+  // Navigate to example.com again. This should cause |rule| to be matched.
+  NavigateFrame(kFrameName1, sub_frame_url);
+
+  // Advance the clock to capture a timestamp after when the second request was
+  // made.
+  clock_.Advance(base::TimeDelta::FromMilliseconds(100));
+  base::Time timestamp_2 = clock_.Now();
+
+  int first_tab_id = ExtensionTabUtil::GetTabId(web_contents());
+
+  // Two rules should be matched on |first_tab_id|.
+  std::string rule_count =
+      GetMatchedRuleCountForTab(extension_id, first_tab_id, base::nullopt);
+  EXPECT_EQ("2", rule_count);
+
+  // Only one rule should be matched on |first_tab_id| after |timestamp_1|.
+  rule_count =
+      GetMatchedRuleCountForTab(extension_id, first_tab_id, timestamp_1);
+  EXPECT_EQ("1", rule_count);
+
+  // No rules should be matched on |first_tab_id| after |timestamp_2|.
+  rule_count =
+      GetMatchedRuleCountForTab(extension_id, first_tab_id, timestamp_2);
+  EXPECT_EQ("0", rule_count);
+
+  rules_monitor_service->action_tracker().SetClockForTests(nullptr);
+}
+
 // Test fixture to verify that host permissions for the request url and the
 // request initiator are properly checked when redirecting requests. Loads an
 // example.com url with four sub-frames named frame_[1..4] from hosts
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index ec1c48e..6a4a4f2 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -2280,6 +2280,11 @@
     "expiry_milestone": 82
   },
   {
+    "name": "font-access",
+    "owners": [ "cmp", "oyiptong" ],
+    "expiry_milestone": 85
+  },
+  {
     "name": "font-src-local-matching",
     "owners": [ "drott", "layout-dev" ],
     "expiry_milestone": 82
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 7b472a3..0fc4cc16 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -369,6 +369,11 @@
 const char kFocusModeDescription[] =
     "If enabled, allows the user to switch to Focus Mode";
 
+const char kFontAccessAPIName[] = "Font Access APIs";
+const char kFontAccessAPIDescription[] =
+    "Enables the experimental Font Access APIs, giving websites access "
+    "to enumerate local fonts and access their table data.";
+
 const char kFontSrcLocalMatchingName[] =
     "Match @font-face { src: local(<name>) } names by PostScript and full font "
     "name.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 01c78e8..b6e50b2e 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -243,6 +243,9 @@
 extern const char
     kExperimentalAccessibilityLanguageDetectionDynamicDescription[];
 
+extern const char kFontAccessAPIName[];
+extern const char kFontAccessAPIDescription[];
+
 extern const char kFontSrcLocalMatchingName[];
 extern const char kFontSrcLocalMatchingDescription[];
 
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
index 4e5fc75..8877191 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
@@ -545,6 +545,8 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   LOCAL_HISTOGRAM_BOOLEAN("OptimizationGuide.FetchedHints.Stored", true);
 
+  hint_cache_->PurgeExpiredFetchedHints();
+
   top_hosts_hints_fetch_timer_.Stop();
   top_hosts_hints_fetch_timer_.Start(
       FROM_HERE, hint_cache_->GetFetchedHintsUpdateTime() - clock_->Now(), this,
diff --git a/chrome/browser/partnercustomizations/partner_browser_customizations_unittest.cc b/chrome/browser/partnercustomizations/partner_browser_customizations_unittest.cc
new file mode 100644
index 0000000..cea66c1b
--- /dev/null
+++ b/chrome/browser/partnercustomizations/partner_browser_customizations_unittest.cc
@@ -0,0 +1,25 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/android/jni_android.h"
+#include "chrome/android/native_j_unittests_jni_headers/PartnerBrowserCustomizationsUnitTest_jni.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::android::AttachCurrentThread;
+
+class PartnerBrowserCustomizationsUnitTest : public ::testing::Test {
+ public:
+  PartnerBrowserCustomizationsUnitTest()
+      : j_test_(Java_PartnerBrowserCustomizationsUnitTest_Constructor(
+            AttachCurrentThread())) {}
+
+  const base::android::ScopedJavaGlobalRef<jobject>& j_test() {
+    return j_test_;
+  }
+
+ private:
+  base::android::ScopedJavaGlobalRef<jobject> j_test_;
+};
+
+JAVA_TESTS(PartnerBrowserCustomizationsUnitTest, j_test())
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index 839a8c7..4090321 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -1237,6 +1237,9 @@
           web_contents(), content_driver, focused_field_type))
     return;
 
+  if (!content_driver->CanShowAutofillUi())
+    return;
+
   if (!PasswordAccessoryController::AllowedForWebContents(web_contents()))
     return;
 
diff --git a/chrome/browser/payments/android/android_payment_app_finder_unittest.cc b/chrome/browser/payments/android/android_payment_app_finder_unittest.cc
new file mode 100644
index 0000000..e871337
--- /dev/null
+++ b/chrome/browser/payments/android/android_payment_app_finder_unittest.cc
@@ -0,0 +1,25 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/android/jni_android.h"
+#include "chrome/android/native_j_unittests_jni_headers/AndroidPaymentAppFinderUnitTest_jni.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::android::AttachCurrentThread;
+
+class AndroidPaymentAppFinderUnitTest : public ::testing::Test {
+ public:
+  AndroidPaymentAppFinderUnitTest()
+      : j_test_(Java_AndroidPaymentAppFinderUnitTest_Constructor(
+            AttachCurrentThread())) {}
+
+  const base::android::ScopedJavaGlobalRef<jobject>& j_test() {
+    return j_test_;
+  }
+
+ private:
+  base::android::ScopedJavaGlobalRef<jobject> j_test_;
+};
+
+JAVA_TESTS(AndroidPaymentAppFinderUnitTest, j_test())
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
index 575ec07..29af5ad 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -476,6 +476,9 @@
 
     public static final String SYNC_SESSIONS_UUID = "chromium.sync.sessions.id";
 
+    public static final String TAB_ID_MANAGER_NEXT_ID =
+            "org.chromium.chrome.browser.tab.TabIdManager.NEXT_ID";
+
     /**
      * Keys for deferred recording of the outcomes of showing the clear data dialog after
      * Trusted Web Activity client apps are uninstalled or have their data cleared.
@@ -710,6 +713,7 @@
                 SNAPSHOT_DATABASE_REMOVED,
                 START_SURFACE_SINGLE_PANE_ENABLED_KEY,
                 SYNC_SESSIONS_UUID,
+                TAB_ID_MANAGER_NEXT_ID,
                 TWA_DIALOG_NUMBER_OF_DISMISSALS_ON_CLEAR_DATA,
                 TWA_DIALOG_NUMBER_OF_DISMISSALS_ON_UNINSTALL,
                 TWA_DISCLOSURE_ACCEPTED_PACKAGES,
diff --git a/chrome/browser/resources/local_discovery/local_discovery.js b/chrome/browser/resources/local_discovery/local_discovery.js
index 1d2a545..068b7ca 100644
--- a/chrome/browser/resources/local_discovery/local_discovery.js
+++ b/chrome/browser/resources/local_discovery/local_discovery.js
@@ -28,10 +28,11 @@
   let isUserLoggedIn = true;
 
   /**
-   * Whether or not the user is supervised or off the record.
+   * Whether or not the user's profile is restricted because of being
+   * supervised, off the record, or limited by an enterprise policy.
    * @type bool
    */
-  let isUserSupervisedOrOffTheRecord = false;
+  let isUserProfileRestricted = false;
 
   /**
    * Whether or not the path-based dialog has been shown.
@@ -357,7 +358,7 @@
     } else {
       $('no-printers-message').hidden = true;
       $('register-login-promo').hidden =
-          isUserLoggedIn || isUserSupervisedOrOffTheRecord;
+          isUserLoggedIn || isUserProfileRestricted;
     }
     if (!($('register-login-promo').hidden) ||
         !($('cloud-devices-login-promo').hidden) ||
@@ -433,26 +434,31 @@
   }
 
   /**
-   * User is not logged in.
+   * Registers whether the user is logged in. Modifies the UI to display the
+   * appropriate content based on user log-in status and profile restrictions.
+   * @param {boolean} userLoggedIn Whether the user is logged in.
+   * @param {boolean} userProfileRestricted Whether the user profile's access to
+   *     the local discovery page is restricted because of being supervised, off
+   *     the record, or disallowed by policy.
    */
-  function setUserLoggedIn(userLoggedIn, userSupervisedOrOffTheRecord) {
+  function setUserLoggedIn(userLoggedIn, userProfileRestricted) {
     isUserLoggedIn = userLoggedIn;
-    isUserSupervisedOrOffTheRecord = userSupervisedOrOffTheRecord;
+    isUserProfileRestricted = userProfileRestricted;
 
     $('cloud-devices-login-promo').hidden =
-        isUserLoggedIn || isUserSupervisedOrOffTheRecord;
+        isUserLoggedIn || isUserProfileRestricted;
     $('register-overlay-login-promo').hidden =
-        isUserLoggedIn || isUserSupervisedOrOffTheRecord;
+        isUserLoggedIn || isUserProfileRestricted;
     $('register-continue').disabled =
-        !isUserLoggedIn || isUserSupervisedOrOffTheRecord;
+        !isUserLoggedIn || isUserProfileRestricted;
 
-    $('my-devices-container').hidden = userSupervisedOrOffTheRecord;
+    $('my-devices-container').hidden = isUserProfileRestricted;
 
-    if (isUserSupervisedOrOffTheRecord) {
+    if (isUserProfileRestricted) {
       $('cloud-print-connector-section').hidden = true;
     }
 
-    if (isUserLoggedIn && !isUserSupervisedOrOffTheRecord) {
+    if (isUserLoggedIn && !isUserProfileRestricted) {
       requestDeviceList();
       $('register-login-promo').hidden = true;
     } else {
diff --git a/chrome/browser/resources/new_tab_page/new_tab_page.html b/chrome/browser/resources/new_tab_page/new_tab_page.html
index b0a190e..47486b3 100644
--- a/chrome/browser/resources/new_tab_page/new_tab_page.html
+++ b/chrome/browser/resources/new_tab_page/new_tab_page.html
@@ -11,7 +11,7 @@
       }
 
       body {
-        background: white;
+        background: $i18n{backgroundColor};
         margin: 0;
       }
 
diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn
index 2be519c2..34f83ef 100644
--- a/chrome/browser/resources/settings/BUILD.gn
+++ b/chrome/browser/resources/settings/BUILD.gn
@@ -105,10 +105,7 @@
   }
 
   if (is_chromeos) {
-    deps += [
-      "chromeos:closure_compile",
-      "parental_controls_page:closure_compile",
-    ]
+    deps += [ "chromeos:closure_compile" ]
   }
 }
 
diff --git a/chrome/browser/resources/settings/OWNERS b/chrome/browser/resources/settings/OWNERS
index 451efc7..586b9103 100644
--- a/chrome/browser/resources/settings/OWNERS
+++ b/chrome/browser/resources/settings/OWNERS
@@ -6,6 +6,7 @@
 michaelpg@chromium.org
 stevenjb@chromium.org
 tommycli@chromium.org
+zentaro@chromium.org
 
 # Chrome OS Settings
 per-file *os_settings*=file://chrome/browser/resources/settings/chromeos/OWNERS
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn
index 494fd16..ee3764e1 100644
--- a/chrome/browser/resources/settings/chromeos/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -94,6 +94,7 @@
     "os_settings_menu:closure_compile",
     "os_settings_page:closure_compile",
     "os_settings_ui:closure_compile",
+    "parental_controls_page:closure_compile",
     "personalization_page:closure_compile",
     "plugin_vm_page:closure_compile",
   ]
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn
index 1f98481..c510e4a 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn
@@ -21,8 +21,6 @@
     ":users_add_user_dialog",
     ":users_page",
     "//chrome/browser/resources/settings/people_page:account_manager_browser_proxy",
-    "//chrome/browser/resources/settings/people_page:change_picture",
-    "//chrome/browser/resources/settings/people_page:change_picture_browser_proxy",
     "//chrome/browser/resources/settings/people_page:profile_info_browser_proxy",
     "//chrome/browser/resources/settings/people_page:signout_dialog",
     "//chrome/browser/resources/settings/people_page:sync_browser_proxy",
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
index f0e16c3..b9d85629 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
@@ -15,7 +15,7 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
 <link rel="import" href="../../controls/settings_toggle_button.html">
 <link rel="import" href="../../icons.html">
-<link rel="import" href="../../parental_controls_page/parental_controls_page.html">
+<link rel="import" href="../parental_controls_page/parental_controls_page.html">
 <link rel="import" href="../../people_page/account_manager_browser_proxy.html">
 <link rel="import" href="../../people_page/profile_info_browser_proxy.html">
 <link rel="import" href="../../people_page/signout_dialog.html">
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.html b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.html
index 18b4581..bdd8c736 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.html
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.html
@@ -91,6 +91,10 @@
         padding-inline-end: 20px;
         padding-inline-start: 20px;
       }
+
+      #make-model-body {
+        height: 290px;
+      }
     </style>
     <add-printer-dialog>
       <div slot="dialog-title">
@@ -98,7 +102,7 @@
         <printer-dialog-error error-text="[[errorText_]]">
         </printer-dialog-error>
       </div>
-      <div slot="dialog-body">
+      <div id="make-model-body" slot="dialog-body">
         <div class="subtext" id="makeModelTextInfo">
           <settings-localized-link
               localized-string=
@@ -110,16 +114,14 @@
           <cr-searchable-drop-down id="manufacturerDropdown"
               items="[[manufacturerList]]"
               label="$i18n{printerManufacturer}"
-              value="{{activePrinter.ppdManufacturer}}"
-              invalid="{{isManufacturerInvalid_}}">
+              value="{{activePrinter.ppdManufacturer}}">
           </cr-searchable-drop-down>
         </div>
         <div class="settings-box two-line">
           <cr-searchable-drop-down id="modelDropdown"
               items="[[modelList]]"
               label="$i18n{printerModel}"
-              value="{{activePrinter.ppdModel}}"
-              invalid="{{isModelInvalid_}}">
+              value="{{activePrinter.ppdModel}}">
           </cr-searchable-drop-down>
         </div>
         <div id="ppdLabel" class="cr-form-field-label">
@@ -152,9 +154,7 @@
               disabled="[[!canAddPrinter_(activePrinter.ppdManufacturer,
                                           activePrinter.ppdModel,
                                           activePrinter.printerPPDPath,
-                                          addPrinterInProgress_,
-                                          isManufacturerInvalid_,
-                                          isModelInvalid_)]]"
+                                          addPrinterInProgress_)]]"
               on-click="addPrinter_">
             $i18n{addPrinterButtonText}
           </cr-button>
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.js b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.js
index 78164217..3148a4b4 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.js
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog.js
@@ -264,20 +264,6 @@
       type: String,
       value: '',
     },
-
-    /**
-     * Indicates whether the value in the Manufacturer dropdown is a valid
-     * printer manufacturer. Set by manufacturerDropdown.
-     * @private
-     */
-    isManufacturerInvalid_: Boolean,
-
-    /**
-     * Indicates whether the value in the Model dropdown is a valid printer
-     * model. Set by modelDropdown.
-     * @private
-     */
-    isModelInvalid_: Boolean,
   },
 
   observers: [
@@ -450,8 +436,7 @@
   canAddPrinter_: function(ppdManufacturer, ppdModel, printerPPDPath) {
     return !this.addPrinterInProgress_ &&
         settings.printing.isPPDInfoValid(
-            ppdManufacturer, ppdModel, printerPPDPath) &&
-        !this.isManufacturerInvalid_ && !this.isModelInvalid_;
+            ppdManufacturer, ppdModel, printerPPDPath);
   },
 });
 
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog_elements.html b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog_elements.html
index d63d6cd..1ab71e7 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog_elements.html
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_add_printer_dialog_elements.html
@@ -15,7 +15,6 @@
         --cr-dialog-body-border-bottom: 1px solid var(--paper-grey-300);
       }
       #dialog [slot=body] {
-        height: 350px;
         padding-inline-end: 0;
         padding-inline-start: 0;
       }
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printer_shared_css.html b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printer_shared_css.html
index 60f64ffc..59dc298 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printer_shared_css.html
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printer_shared_css.html
@@ -68,6 +68,10 @@
         padding-top: 6px;
       }
 
+      [slot='dialog-body'] {
+        height: 350px;
+      }
+
       .flex-auto {
         flex: 1 1 auto;
       }
diff --git a/chrome/browser/resources/settings/parental_controls_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/parental_controls_page/BUILD.gn
similarity index 96%
rename from chrome/browser/resources/settings/parental_controls_page/BUILD.gn
rename to chrome/browser/resources/settings/chromeos/parental_controls_page/BUILD.gn
index bf02be9..6c60c05 100644
--- a/chrome/browser/resources/settings/parental_controls_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/parental_controls_page/BUILD.gn
@@ -19,7 +19,7 @@
 js_library("parental_controls_page") {
   deps = [
     ":parental_controls_browser_proxy",
-    "..:route",
+    "../..:route",
     "//ui/webui/resources/js:cr",
     "//ui/webui/resources/js:i18n_behavior",
     "//ui/webui/resources/js:web_ui_listener_behavior",
diff --git a/chrome/browser/resources/settings/parental_controls_page/parental_controls_browser_proxy.html b/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_browser_proxy.html
similarity index 100%
rename from chrome/browser/resources/settings/parental_controls_page/parental_controls_browser_proxy.html
rename to chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_browser_proxy.html
diff --git a/chrome/browser/resources/settings/parental_controls_page/parental_controls_browser_proxy.js b/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_browser_proxy.js
similarity index 100%
rename from chrome/browser/resources/settings/parental_controls_page/parental_controls_browser_proxy.js
rename to chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_browser_proxy.js
diff --git a/chrome/browser/resources/settings/parental_controls_page/parental_controls_page.html b/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.html
similarity index 83%
rename from chrome/browser/resources/settings/parental_controls_page/parental_controls_page.html
rename to chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.html
index d933253d..3e84075 100644
--- a/chrome/browser/resources/settings/parental_controls_page/parental_controls_page.html
+++ b/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.html
@@ -5,12 +5,12 @@
 <link rel="import" href="chrome://resources/html/cr.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="parental_controls_browser_proxy.html">
-<link rel="import" href="../i18n_setup.html">
-<link rel="import" href="../icons.html">
-<link rel="import" href="../route.html">
-<link rel="import" href="../settings_page/settings_animated_pages.html">
-<link rel="import" href="../settings_page/settings_subpage.html">
-<link rel="import" href="../settings_shared_css.html">
+<link rel="import" href="../../i18n_setup.html">
+<link rel="import" href="../../icons.html">
+<link rel="import" href="../../route.html">
+<link rel="import" href="../../settings_page/settings_animated_pages.html">
+<link rel="import" href="../../settings_page/settings_subpage.html">
+<link rel="import" href="../../settings_shared_css.html">
 
 <dom-module id="settings-parental-controls-page">
   <template>
diff --git a/chrome/browser/resources/settings/parental_controls_page/parental_controls_page.js b/chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.js
similarity index 100%
rename from chrome/browser/resources/settings/parental_controls_page/parental_controls_page.js
rename to chrome/browser/resources/settings/chromeos/parental_controls_page/parental_controls_page.js
diff --git a/chrome/browser/resources/settings/chromeos/personalization_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/personalization_page/BUILD.gn
index 3d81c8d1..f1c8143 100644
--- a/chrome/browser/resources/settings/chromeos/personalization_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/personalization_page/BUILD.gn
@@ -6,10 +6,34 @@
 
 js_type_check("closure_compile") {
   deps = [
+    ":change_picture",
+    ":change_picture_browser_proxy",
     ":personalization_page",
   ]
 }
 
+js_library("change_picture") {
+  deps = [
+    ":change_picture_browser_proxy",
+    "../..:route",
+    "//third_party/polymer/v1_0/components-chromium/iron-selector:iron-selector-extracted",
+    "//ui/webui/resources/cr_elements/chromeos/cr_picture:cr_picture_list",
+    "//ui/webui/resources/cr_elements/chromeos/cr_picture:cr_picture_pane",
+    "//ui/webui/resources/cr_elements/chromeos/cr_picture:cr_picture_types",
+    "//ui/webui/resources/cr_elements/chromeos/cr_picture:cr_png_behavior",
+    "//ui/webui/resources/js:i18n_behavior",
+    "//ui/webui/resources/js:load_time_data",
+    "//ui/webui/resources/js:util",
+    "//ui/webui/resources/js:web_ui_listener_behavior",
+  ]
+}
+
+js_library("change_picture_browser_proxy") {
+  deps = [
+    "//ui/webui/resources/js:cr",
+  ]
+}
+
 js_library("personalization_page") {
   deps = [
     ":wallpaper_browser_proxy",
diff --git a/chrome/browser/resources/settings/people_page/change_picture.html b/chrome/browser/resources/settings/chromeos/personalization_page/change_picture.html
similarity index 93%
rename from chrome/browser/resources/settings/people_page/change_picture.html
rename to chrome/browser/resources/settings/chromeos/personalization_page/change_picture.html
index 2a2ca60..3042993 100644
--- a/chrome/browser/resources/settings/people_page/change_picture.html
+++ b/chrome/browser/resources/settings/chromeos/personalization_page/change_picture.html
@@ -3,12 +3,13 @@
 <link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_picture_list.html">
 <link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html">
 <link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_picture_types.html">
+<link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_png_behavior.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/html/util.html">
 <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
-<link rel="import" href="../i18n_setup.html">
-<link rel="import" href="../route.html">
-<link rel="import" href="../settings_shared_css.html">
+<link rel="import" href="../../i18n_setup.html">
+<link rel="import" href="../../route.html">
+<link rel="import" href="../../settings_shared_css.html">
 <link rel="import" href="change_picture_browser_proxy.html">
 
 <dom-module id="settings-change-picture">
diff --git a/chrome/browser/resources/settings/people_page/change_picture.js b/chrome/browser/resources/settings/chromeos/personalization_page/change_picture.js
similarity index 100%
rename from chrome/browser/resources/settings/people_page/change_picture.js
rename to chrome/browser/resources/settings/chromeos/personalization_page/change_picture.js
diff --git a/chrome/browser/resources/settings/people_page/change_picture_browser_proxy.html b/chrome/browser/resources/settings/chromeos/personalization_page/change_picture_browser_proxy.html
similarity index 100%
rename from chrome/browser/resources/settings/people_page/change_picture_browser_proxy.html
rename to chrome/browser/resources/settings/chromeos/personalization_page/change_picture_browser_proxy.html
diff --git a/chrome/browser/resources/settings/people_page/change_picture_browser_proxy.js b/chrome/browser/resources/settings/chromeos/personalization_page/change_picture_browser_proxy.js
similarity index 100%
rename from chrome/browser/resources/settings/people_page/change_picture_browser_proxy.js
rename to chrome/browser/resources/settings/chromeos/personalization_page/change_picture_browser_proxy.js
diff --git a/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html b/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html
index 4e95594..59fb5dd9 100644
--- a/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html
+++ b/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html
@@ -1,7 +1,7 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
 <link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html">
-<link rel="import" href="../../people_page/change_picture.html">
+<link rel="import" href="change_picture.html">
 <link rel="import" href="../../route.html">
 <link rel="import" href="../../settings_page/settings_animated_pages.html">
 <link rel="import" href="../../settings_page/settings_subpage.html">
diff --git a/chrome/browser/resources/settings/os_settings_resources.grd b/chrome/browser/resources/settings/os_settings_resources.grd
index 519f15f2..60ba615 100644
--- a/chrome/browser/resources/settings/os_settings_resources.grd
+++ b/chrome/browser/resources/settings/os_settings_resources.grd
@@ -1061,17 +1061,17 @@
       <structure name="IDR_OS_SETTINGS_TETHER_CONNECTION_DIALOG_JS"
                  file="chromeos/internet_page/tether_connection_dialog.js"
                  type="chrome_html" />
-      <structure name="IDR_SETTINGS_PARENTAL_CONTROLS_BROWSER_PROXY_HTML"
-                 file="parental_controls_page/parental_controls_browser_proxy.html"
+      <structure name="IDR_OS_SETTINGS_PARENTAL_CONTROLS_BROWSER_PROXY_HTML"
+                 file="chromeos/parental_controls_page/parental_controls_browser_proxy.html"
                  type="chrome_html" />
-      <structure name="IDR_SETTINGS_PARENTAL_CONTROLS_BROWSER_PROXY_JS"
-                 file="parental_controls_page/parental_controls_browser_proxy.js"
+      <structure name="IDR_OS_SETTINGS_PARENTAL_CONTROLS_BROWSER_PROXY_JS"
+                 file="chromeos/parental_controls_page/parental_controls_browser_proxy.js"
                  type="chrome_html" />
       <structure name="IDR_OS_SETTINGS_PARENTAL_CONTROLS_PAGE_HTML"
-                 file="parental_controls_page/parental_controls_page.html"
+                 file="chromeos/parental_controls_page/parental_controls_page.html"
                  type="chrome_html" />
       <structure name="IDR_OS_SETTINGS_PARENTAL_CONTROLS_PAGE_JS"
-                 file="parental_controls_page/parental_controls_page.js"
+                 file="chromeos/parental_controls_page/parental_controls_page.js"
                  type="chrome_html" />
       <structure name="IDR_OS_SETTINGS_PEOPLE_PAGE_ACCOUNT_MANAGER_HTML"
                  file="chromeos/os_people_page/account_manager.html"
@@ -1085,18 +1085,18 @@
       <structure name="IDR_OS_SETTINGS_PEOPLE_PAGE_ACCOUNT_MANAGER_BROWSER_PROXY_JS"
                  file="people_page/account_manager_browser_proxy.js"
                  type="chrome_html"/>
-      <structure name="IDR_OS_SETTINGS_PEOPLE_PAGE_CHANGE_PICTURE_HTML"
-                 file="people_page/change_picture.html"
+      <structure name="IDR_OS_SETTINGS_PERSONALIZATION_PAGE_CHANGE_PICTURE_HTML"
+                 file="chromeos/personalization_page/change_picture.html"
                  type="chrome_html"
                  preprocess="true" />
-      <structure name="IDR_OS_SETTINGS_PEOPLE_PAGE_CHANGE_PICTURE_JS"
-                 file="people_page/change_picture.js"
+      <structure name="IDR_OS_SETTINGS_PERSONALIZATION_PAGE_CHANGE_PICTURE_JS"
+                 file="chromeos/personalization_page/change_picture.js"
                  type="chrome_html" />
-      <structure name="IDR_OS_SETTINGS_PEOPLE_CHANGE_PICTURE_BROWSER_PROXY_JS"
-                 file="people_page/change_picture_browser_proxy.js"
+      <structure name="IDR_OS_SETTINGS_PERSONALIZATION_PAGE_CHANGE_PICTURE_BROWSER_PROXY_JS"
+                 file="chromeos/personalization_page/change_picture_browser_proxy.js"
                  type="chrome_html" />
-      <structure name="IDR_OS_SETTINGS_PEOPLE_CHANGE_PICTURE_BROWSER_PROXY_HTML"
-                 file="people_page/change_picture_browser_proxy.html"
+      <structure name="IDR_OS_SETTINGS_PERSONALIZATION_PAGE_CHANGE_PICTURE_BROWSER_PROXY_HTML"
+                 file="chromeos/personalization_page/change_picture_browser_proxy.html"
                  type="chrome_html"
                  preprocess="true" />
       <structure name="IDR_OS_SETTINGS_PEOPLE_PAGE_KERBEROS_ACCOUNTS_HTML"
diff --git a/chrome/browser/resources/settings/people_page/BUILD.gn b/chrome/browser/resources/settings/people_page/BUILD.gn
index a394ab3..78ed0b375 100644
--- a/chrome/browser/resources/settings/people_page/BUILD.gn
+++ b/chrome/browser/resources/settings/people_page/BUILD.gn
@@ -24,11 +24,7 @@
   }
 
   if (is_chromeos) {
-    deps += [
-      ":account_manager_browser_proxy",
-      ":change_picture",
-      ":change_picture_browser_proxy",
-    ]
+    deps += [ ":account_manager_browser_proxy" ]
   }
 }
 
@@ -38,27 +34,6 @@
   ]
 }
 
-js_library("change_picture") {
-  deps = [
-    ":change_picture_browser_proxy",
-    "..:route",
-    "//third_party/polymer/v1_0/components-chromium/iron-selector:iron-selector-extracted",
-    "//ui/webui/resources/cr_elements/chromeos/cr_picture:cr_picture_list",
-    "//ui/webui/resources/cr_elements/chromeos/cr_picture:cr_picture_pane",
-    "//ui/webui/resources/cr_elements/chromeos/cr_picture:cr_picture_types",
-    "//ui/webui/resources/js:i18n_behavior",
-    "//ui/webui/resources/js:load_time_data",
-    "//ui/webui/resources/js:util",
-    "//ui/webui/resources/js:web_ui_listener_behavior",
-  ]
-}
-
-js_library("change_picture_browser_proxy") {
-  deps = [
-    "//ui/webui/resources/js:cr",
-  ]
-}
-
 js_library("import_data_browser_proxy") {
   deps = [
     "//ui/webui/resources/js:cr",
diff --git a/chrome/browser/resources/settings/people_page/people_page.html b/chrome/browser/resources/settings/people_page/people_page.html
index 22d2e8da3..34f9223f 100644
--- a/chrome/browser/resources/settings/people_page/people_page.html
+++ b/chrome/browser/resources/settings/people_page/people_page.html
@@ -28,9 +28,7 @@
 
 <if expr="chromeos">
 <link rel="import" href="account_manager_browser_proxy.html">
-<link rel="import" href="change_picture.html">
 <link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_png_behavior.html">
-<link rel="import" href="../parental_controls_page/parental_controls_page.html">
 </if>
 <if expr="not chromeos">
 <link rel="import" href="chrome://resources/cr_elements/cr_toast/cr_toast.html">
@@ -218,13 +216,6 @@
         </template>
 </if>
 
-<if expr="chromeos">
-        <template is="dom-if" if="[[showParentalControls_]]">
-          <settings-parental-controls-page>
-          </settings-parental-controls-page>
-        </template>
-</if>
-
 <if expr="not chromeos">
         <cr-link-row id="importDataDialogTrigger"
             label="$i18n{importTitle}"
@@ -256,15 +247,6 @@
         </settings-subpage>
       </template>
 
-<if expr="chromeos">
-      <template is="dom-if" route-path="/changePicture">
-        <settings-subpage
-          associated-control="[[$$('#picture-subpage-trigger')]]"
-          page-title="$i18n{changePictureTitle}">
-          <settings-change-picture></settings-change-picture>
-        </settings-subpage>
-      </template>
-</if>
 <if expr="not chromeos">
       <template is="dom-if" route-path="/manageProfile">
         <settings-subpage
diff --git a/chrome/browser/resources/settings/people_page/people_page.js b/chrome/browser/resources/settings/people_page/people_page.js
index 37189497..c923a03 100644
--- a/chrome/browser/resources/settings/people_page/people_page.js
+++ b/chrome/browser/resources/settings/people_page/people_page.js
@@ -117,17 +117,6 @@
     /** @private */
     showSignoutDialog_: Boolean,
 
-    // <if expr="chromeos">
-    /** @private */
-    showParentalControls_: {
-      type: Boolean,
-      value: function() {
-        return loadTimeData.valueExists('showParentalControls') &&
-            loadTimeData.getBoolean('showParentalControls');
-      },
-    },
-    // </if>
-
     /** @private {!Map<string, string>} */
     focusConfig_: {
       type: Object,
@@ -145,13 +134,6 @@
                   '#picture-subpage-trigger .subpage-arrow');
         }
         // </if>
-        // <if expr="chromeos">
-        if (settings.routes.CHANGE_PICTURE) {
-          map.set(
-              settings.routes.CHANGE_PICTURE.path,
-              '#picture-subpage-trigger .subpage-arrow');
-        }
-        // </if>
         return map;
       },
     },
diff --git a/chrome/browser/resources/settings/settings_resources.grd b/chrome/browser/resources/settings/settings_resources.grd
index 152d81e0..14656a2 100644
--- a/chrome/browser/resources/settings/settings_resources.grd
+++ b/chrome/browser/resources/settings/settings_resources.grd
@@ -1056,38 +1056,12 @@
                  file="site_settings/zoom_levels.js"
                  type="chrome_html" />
       <if expr="chromeos">
-        <structure name="IDR_SETTINGS_PARENTAL_CONTROLS_BROWSER_PROXY_HTML"
-                   file="parental_controls_page/parental_controls_browser_proxy.html"
-                   type="chrome_html" />
-        <structure name="IDR_SETTINGS_PARENTAL_CONTROLS_BROWSER_PROXY_JS"
-                   file="parental_controls_page/parental_controls_browser_proxy.js"
-                   type="chrome_html" />
-        <structure name="IDR_SETTINGS_PARENTAL_CONTROLS_HTML"
-                   file="parental_controls_page/parental_controls_page.html"
-                   type="chrome_html" />
-        <structure name="IDR_SETTINGS_PARENTAL_CONTROLS_PAGE_JS"
-                   file="parental_controls_page/parental_controls_page.js"
-                   type="chrome_html" />
         <structure name="IDR_SETTINGS_PEOPLE_PAGE_ACCOUNT_MANAGER_BROWSER_PROXY_HTML"
                    file="people_page/account_manager_browser_proxy.html"
                    type="chrome_html"/>
         <structure name="IDR_SETTINGS_PEOPLE_PAGE_ACCOUNT_MANAGER_BROWSER_PROXY_JS"
                    file="people_page/account_manager_browser_proxy.js"
                    type="chrome_html"/>
-        <structure name="IDR_SETTINGS_PEOPLE_PAGE_CHANGE_PICTURE_HTML"
-                   file="people_page/change_picture.html"
-                   type="chrome_html"
-                   preprocess="true" />
-        <structure name="IDR_SETTINGS_PEOPLE_PAGE_CHANGE_PICTURE_JS"
-                   file="people_page/change_picture.js"
-                   type="chrome_html" />
-        <structure name="IDR_SETTINGS_PEOPLE_CHANGE_PICTURE_BROWSER_PROXY_JS"
-                   file="people_page/change_picture_browser_proxy.js"
-                   type="chrome_html" />
-        <structure name="IDR_SETTINGS_PEOPLE_CHANGE_PICTURE_BROWSER_PROXY_HTML"
-                   file="people_page/change_picture_browser_proxy.html"
-                   type="chrome_html"
-                   preprocess="true" />
       </if>
     </structures>
   </release>
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
index a85d4aa..7b5e874 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
@@ -1882,6 +1882,10 @@
 
 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageIDNTest,
                        SafeBrowsingBlockingPageDecodesIDN) {
+  // TODO(crbug.com/1039367): VerifyIDNDecoded does not work with committed
+  // interstitials, this test should be re-enabled once it is adapted.
+  if (AreCommittedInterstitialsEnabled())
+    return;
   EXPECT_TRUE(VerifyIDNDecoded());
 }
 
diff --git a/chrome/browser/themes/theme_properties.cc b/chrome/browser/themes/theme_properties.cc
index 4aaea7b..66f456ec 100644
--- a/chrome/browser/themes/theme_properties.cc
+++ b/chrome/browser/themes/theme_properties.cc
@@ -109,10 +109,6 @@
       return SK_ColorWHITE;
     case ThemeProperties::COLOR_FEATURE_PROMO_BUBBLE_BACKGROUND:
       return gfx::kGoogleBlue700;
-    case ThemeProperties::COLOR_OMNIBOX_TEXT:
-      return gfx::kGoogleGrey900;
-    case ThemeProperties::COLOR_OMNIBOX_BACKGROUND:
-      return gfx::kGoogleGrey100;
 
     case ThemeProperties::COLOR_FRAME_INCOGNITO:
     case ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE:
@@ -172,10 +168,6 @@
       return SkColorSetRGB(0x28, 0x28, 0x28);
     case ThemeProperties::COLOR_NTP_LINK:
       return gfx::kGoogleBlue300;
-    case ThemeProperties::COLOR_OMNIBOX_TEXT:
-      return SK_ColorWHITE;
-    case ThemeProperties::COLOR_OMNIBOX_BACKGROUND:
-      return gfx::kGoogleGrey900;
     default:
       return base::nullopt;
   }
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index 92bc764..a8f71ec 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -605,6 +605,23 @@
   // For backward compat with older themes, some newer colors are generated from
   // older ones if they are missing.
   switch (id) {
+    case TP::COLOR_OMNIBOX_BACKGROUND: {
+      constexpr float kMinOmniboxToolbarContrast = 1.3f;
+      const SkColor toolbar_color = GetColor(TP::COLOR_TOOLBAR, incognito);
+      const SkColor darkest_color = color_utils::GetDarkestColor();
+      const SkColor blend_target =
+          (color_utils::GetContrastRatio(toolbar_color, darkest_color) >=
+           kMinOmniboxToolbarContrast)
+              ? darkest_color
+              : color_utils::GetColorWithMaxContrast(darkest_color);
+      return color_utils::BlendForMinContrast(toolbar_color, toolbar_color,
+                                              blend_target,
+                                              kMinOmniboxToolbarContrast)
+          .color;
+    }
+    case TP::COLOR_OMNIBOX_TEXT:
+      return color_utils::GetColorWithMaxContrast(
+          GetColor(TP::COLOR_OMNIBOX_BACKGROUND, incognito));
     case TP::COLOR_TOOLBAR_BUTTON_ICON:
       return color_utils::HSLShift(gfx::kChromeIconGrey,
                                    GetTint(TP::TINT_BUTTONS, incognito));
@@ -1147,6 +1164,11 @@
   OmniboxColor bg = get_resulting_paint_color(
       get_base_color(TP::COLOR_OMNIBOX_BACKGROUND),
       {GetColor(TP::COLOR_TOOLBAR, incognito, nullptr), false});
+  // Returning early here avoids an infinite loop in computing |fg|, caused by
+  // the default color for COLOR_OMNIBOX_TEXT being based on
+  // COLOR_OMNIBOX_BACKGROUND.
+  if (id == TP::COLOR_OMNIBOX_BACKGROUND)
+    return bg;
   OmniboxColor fg =
       get_resulting_paint_color(get_base_color(TP::COLOR_OMNIBOX_TEXT), bg);
 
@@ -1235,8 +1257,6 @@
     case TP::COLOR_OMNIBOX_TEXT:
     case TP::COLOR_OMNIBOX_RESULTS_TEXT_SELECTED:
       return fg;
-    case TP::COLOR_OMNIBOX_BACKGROUND:
-      return bg;
     case TP::COLOR_OMNIBOX_BACKGROUND_HOVERED:
       return bg_hovered_color();
     case TP::COLOR_OMNIBOX_RESULTS_BG:
diff --git a/chrome/browser/ui/color/chrome_color_mixers.cc b/chrome/browser/ui/color/chrome_color_mixers.cc
index dd41a85f1..4ac91d26 100644
--- a/chrome/browser/ui/color/chrome_color_mixers.cc
+++ b/chrome/browser/ui/color/chrome_color_mixers.cc
@@ -4,18 +4,39 @@
 
 #include "chrome/browser/ui/color/chrome_color_mixers.h"
 
+#include "base/bind.h"
 #include "chrome/browser/ui/color/chrome_color_id.h"
 #include "ui/color/color_id.h"
 #include "ui/color/color_mixer.h"
 #include "ui/color/color_provider.h"
 #include "ui/color/color_recipe.h"
 
+namespace {
+
+constexpr float kMinOmniboxToolbarContrast = 1.3f;
+
+ui::ColorTransform ChooseOmniboxBgBlendTarget() {
+  return base::BindRepeating(
+      [](SkColor input_color, const ui::ColorMixer& mixer) {
+        const SkColor toolbar_color = mixer.GetResultColor(kColorToolbar);
+        const SkColor darkest_color = color_utils::GetDarkestColor();
+        return (color_utils::GetContrastRatio(toolbar_color, darkest_color) >=
+                kMinOmniboxToolbarContrast)
+                   ? darkest_color
+                   : color_utils::GetColorWithMaxContrast(darkest_color);
+      });
+}
+
+}  // namespace
+
 void AddChromeColorMixers(ui::ColorProvider* provider) {
   ui::ColorMixer& mixer = provider->AddMixer();
 
   mixer[kColorOmniboxBackground] = ui::BlendForMinContrast(
-      ui::kColorTextfieldBackground, kColorToolbar, base::nullopt, 1.11f);
-  mixer[kColorOmniboxText] = {ui::kColorTextfieldForeground};
+      kColorToolbar, kColorToolbar, ChooseOmniboxBgBlendTarget(),
+      kMinOmniboxToolbarContrast);
+  mixer[kColorOmniboxText] =
+      ui::GetColorWithMaxContrast(kColorOmniboxBackground);
   // TODO(tluk) Behavior change for dark mode to a darker toolbar color for
   // better color semantics. Follow up with UX team before landing change.
   mixer[kColorToolbar] = {ui::kColorPrimaryBackground};
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
index ee9c48de..ef29e53 100644
--- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
+++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
@@ -63,7 +63,6 @@
 #include "components/sync/test/fake_server/fake_server_network_resources.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/web_contents_observer.h"
-#include "content/public/test/back_forward_cache_util.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
@@ -190,8 +189,6 @@
         browser()->profile(), username, "password",
         ProfileSyncServiceHarness::SigninType::FAKE_SIGNIN);
 
-    content::BackForwardCacheDisabledTester back_forward_cache_disabled_tester;
-
     // Set up the URL loader factory for the payments client so we can intercept
     // those network requests too.
     test_shared_loader_factory_ =
@@ -204,11 +201,6 @@
         ->GetPaymentsClient()
         ->set_url_loader_factory_for_testing(test_shared_loader_factory_);
 
-    EXPECT_TRUE(back_forward_cache_disabled_tester.IsDisabledForFrameWithReason(
-        GetActiveWebContents()->GetMainFrame()->GetProcess()->GetID(),
-        GetActiveWebContents()->GetMainFrame()->GetRoutingID(),
-        "autofill::ContentAutofillDriver"));
-
     // Set up this class as the ObserverForTest implementation.
     credit_card_save_manager_ = ContentAutofillDriver::GetForRenderFrameHost(
                                     GetActiveWebContents()->GetMainFrame())
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
index 36bd9c4..8de6874 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
@@ -197,8 +197,8 @@
 
 void BookmarkBubbleView::Init() {
   SetLayoutManager(std::make_unique<views::FillLayout>());
-  bookmark_contents_view_ = new views::View();
-  views::GridLayout* layout = bookmark_contents_view_->SetLayoutManager(
+  auto bookmark_contents_view = std::make_unique<views::View>();
+  views::GridLayout* layout = bookmark_contents_view->SetLayoutManager(
       std::make_unique<views::GridLayout>());
 
   constexpr int kColumnId = 0;
@@ -221,7 +221,7 @@
   parent_combobox_->SetAccessibleName(
       l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_FOLDER_LABEL));
 
-  AddChildView(bookmark_contents_view_);
+  bookmark_contents_view_ = AddChildView(std::move(bookmark_contents_view));
 }
 
 // Private methods -------------------------------------------------------------
diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc
index aca4798..def137d 100644
--- a/chrome/browser/ui/views/hung_renderer_view.cc
+++ b/chrome/browser/ui/views/hung_renderer_view.cc
@@ -268,8 +268,7 @@
   return platform_util::IsWindowActive(window);
 }
 
-HungRendererDialogView::HungRendererDialogView()
-    : info_label_(nullptr), hung_pages_table_(nullptr), initialized_(false) {
+HungRendererDialogView::HungRendererDialogView() {
 #if defined(OS_WIN)
   // Never use the custom frame when Aero Glass is disabled. See
   // https://crbug.com/323278
@@ -277,6 +276,48 @@
 #endif
   set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType(
       views::TEXT, views::CONTROL));
+  auto info_label = std::make_unique<views::Label>(
+      base::string16(), CONTEXT_BODY_TEXT_LARGE, views::style::STYLE_SECONDARY);
+  info_label->SetMultiLine(true);
+  info_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+
+  hung_pages_table_model_ = std::make_unique<HungPagesTableModel>(this);
+  const std::vector<ui::TableColumn> columns = {ui::TableColumn()};
+  auto hung_pages_table = std::make_unique<views::TableView>(
+      hung_pages_table_model_.get(), columns, views::ICON_AND_TEXT, true);
+  hung_pages_table_ = hung_pages_table.get();
+
+  DialogDelegate::set_button_label(
+      ui::DIALOG_BUTTON_CANCEL,
+      l10n_util::GetPluralStringFUTF16(IDS_BROWSER_HANGMONITOR_RENDERER_END,
+                                       hung_pages_table_model_->RowCount()));
+  DialogDelegate::set_button_label(
+      ui::DIALOG_BUTTON_OK,
+      l10n_util::GetStringUTF16(IDS_BROWSER_HANGMONITOR_RENDERER_WAIT));
+  DialogModelChanged();
+
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>());
+  ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
+
+  constexpr int kColumnSetId = 0;
+  views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
+  column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1.0,
+                        views::GridLayout::USE_PREF, 0, 0);
+
+  layout->StartRow(views::GridLayout::kFixedSize, kColumnSetId);
+  info_label_ = layout->AddView(std::move(info_label));
+
+  layout->AddPaddingRow(
+      views::GridLayout::kFixedSize,
+      provider->GetDistanceMetric(views::DISTANCE_UNRELATED_CONTROL_VERTICAL));
+
+  layout->StartRow(1.0, kColumnSetId);
+  layout->AddView(
+      views::TableView::CreateScrollViewWithTable(std::move(hung_pages_table)),
+      1, 1, views::GridLayout::FILL, views::GridLayout::FILL, kTableViewWidth,
+      kTableViewHeight);
+
   chrome::RecordDialogCreation(chrome::DialogIdentifier::HUNG_RENDERER);
 }
 
@@ -352,9 +393,6 @@
 // HungRendererDialogView, views::DialogDelegate implementation:
 
 base::string16 HungRendererDialogView::GetWindowTitle() const {
-  if (!initialized_)
-    return base::string16();
-
   return l10n_util::GetPluralStringFUTF16(
       IDS_BROWSER_HANGMONITOR_RENDERER_TITLE,
       hung_pages_table_model_->RowCount());
@@ -415,63 +453,9 @@
 ///////////////////////////////////////////////////////////////////////////////
 // HungRendererDialogView, views::View overrides:
 
-void HungRendererDialogView::ViewHierarchyChanged(
-    const views::ViewHierarchyChangedDetails& details) {
-  views::DialogDelegateView::ViewHierarchyChanged(details);
-  if (!initialized_ && details.is_add && details.child == this && GetWidget())
-    Init();
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 // HungRendererDialogView, private:
 
-void HungRendererDialogView::Init() {
-  auto info_label = std::make_unique<views::Label>(
-      base::string16(), CONTEXT_BODY_TEXT_LARGE, views::style::STYLE_SECONDARY);
-  info_label->SetMultiLine(true);
-  info_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-
-  hung_pages_table_model_ = std::make_unique<HungPagesTableModel>(this);
-  std::vector<ui::TableColumn> columns;
-  columns.push_back(ui::TableColumn());
-  auto hung_pages_table = std::make_unique<views::TableView>(
-      hung_pages_table_model_.get(), columns, views::ICON_AND_TEXT, true);
-  hung_pages_table_ = hung_pages_table.get();
-
-  DialogDelegate::set_button_label(
-      ui::DIALOG_BUTTON_CANCEL,
-      l10n_util::GetPluralStringFUTF16(IDS_BROWSER_HANGMONITOR_RENDERER_END,
-                                       hung_pages_table_model_->RowCount()));
-  DialogDelegate::set_button_label(
-      ui::DIALOG_BUTTON_OK,
-      l10n_util::GetStringUTF16(IDS_BROWSER_HANGMONITOR_RENDERER_WAIT));
-  DialogModelChanged();
-
-  views::GridLayout* layout =
-      SetLayoutManager(std::make_unique<views::GridLayout>());
-  ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
-
-  constexpr int kColumnSetId = 0;
-  views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
-  column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1.0,
-                        views::GridLayout::USE_PREF, 0, 0);
-
-  layout->StartRow(views::GridLayout::kFixedSize, kColumnSetId);
-  info_label_ = layout->AddView(std::move(info_label));
-
-  layout->AddPaddingRow(
-      views::GridLayout::kFixedSize,
-      provider->GetDistanceMetric(views::DISTANCE_UNRELATED_CONTROL_VERTICAL));
-
-  layout->StartRow(1.0, kColumnSetId);
-  layout->AddView(
-      views::TableView::CreateScrollViewWithTable(std::move(hung_pages_table)),
-      1, 1, views::GridLayout::FILL, views::GridLayout::FILL, kTableViewWidth,
-      kTableViewHeight);
-
-  initialized_ = true;
-}
-
 void HungRendererDialogView::RestartHangTimer() {
   // Start waiting again for responsiveness.
   hung_pages_table_model_->RestartHangMonitorTimeout();
diff --git a/chrome/browser/ui/views/hung_renderer_view.h b/chrome/browser/ui/views/hung_renderer_view.h
index 29a7e34..8a6462b0c 100644
--- a/chrome/browser/ui/views/hung_renderer_view.h
+++ b/chrome/browser/ui/views/hung_renderer_view.h
@@ -178,18 +178,11 @@
   HungRendererDialogView();
   ~HungRendererDialogView() override;
 
-  // views::View overrides:
-  void ViewHierarchyChanged(
-      const views::ViewHierarchyChangedDetails& details) override;
-
   static HungRendererDialogView* g_instance_;
 
  private:
   friend class HungRendererDialogViewBrowserTest;
 
-  // Initialize the controls in this dialog.
-  void Init();
-
   // Restart the hang timer, giving the page more time.
   void RestartHangTimer();
 
@@ -207,9 +200,6 @@
   // pages affected by the hang.
   std::unique_ptr<HungPagesTableModel> hung_pages_table_model_;
 
-  // Whether or not we've created controls for ourself.
-  bool initialized_;
-
   DISALLOW_COPY_AND_ASSIGN(HungRendererDialogView);
 };
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
index 0bc6ffa..cbda625 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
@@ -135,10 +135,12 @@
 OmniboxPopupContentsView::OmniboxPopupContentsView(
     OmniboxViewViews* omnibox_view,
     OmniboxEditModel* edit_model,
-    LocationBarView* location_bar_view)
+    LocationBarView* location_bar_view,
+    const ui::ThemeProvider* theme_provider)
     : model_(new OmniboxPopupModel(this, edit_model)),
       omnibox_view_(omnibox_view),
-      location_bar_view_(location_bar_view) {
+      location_bar_view_(location_bar_view),
+      theme_provider_(theme_provider) {
   // The contents is owned by the LocationBarView.
   set_owned_by_client();
 
@@ -243,7 +245,8 @@
     // expensive to create due to loading font data, this saves time and memory
     // during browser startup.
     if (children().size() == i) {
-      AddChildView(std::make_unique<OmniboxResultView>(this, i));
+      AddChildView(
+          std::make_unique<OmniboxResultView>(this, i, theme_provider_));
     }
 
     OmniboxResultView* view = result_view_at(i);
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h
index 8f59663..29c4ebc7 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h
@@ -30,7 +30,8 @@
  public:
   OmniboxPopupContentsView(OmniboxViewViews* omnibox_view,
                            OmniboxEditModel* edit_model,
-                           LocationBarView* location_bar_view);
+                           LocationBarView* location_bar_view,
+                           const ui::ThemeProvider* theme_provider);
   ~OmniboxPopupContentsView() override;
 
   OmniboxPopupModel* model() const { return model_.get(); }
@@ -124,6 +125,8 @@
 
   LocationBarView* location_bar_view_;
 
+  const ui::ThemeProvider* theme_provider_;
+
   DISALLOW_COPY_AND_ASSIGN(OmniboxPopupContentsView);
 };
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
index 77c8a50..4215333 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -48,10 +48,12 @@
 
 OmniboxResultView::OmniboxResultView(
     OmniboxPopupContentsView* popup_contents_view,
-    size_t model_index)
+    size_t model_index,
+    const ui::ThemeProvider* theme_provider)
     : AnimationDelegateViews(this),
       popup_contents_view_(popup_contents_view),
       model_index_(model_index),
+      theme_provider_(theme_provider),
       animation_(new gfx::SlideAnimation(this)) {
   CHECK_GE(model_index, 0u);
 
@@ -62,7 +64,7 @@
           popup_contents_view_, this,
           l10n_util::GetStringUTF16(IDS_OMNIBOX_TAB_SUGGEST_HINT),
           l10n_util::GetStringUTF16(IDS_OMNIBOX_TAB_SUGGEST_SHORT_HINT),
-          omnibox::kSwitchIcon));
+          omnibox::kSwitchIcon, theme_provider_));
 
   // This is intentionally not in the tab order by default, but should be if the
   // user has full-acessibility mode on. This is because this is a tertiary
@@ -72,6 +74,11 @@
   remove_suggestion_button_ =
       AddChildView(views::CreateVectorImageButton(this));
   views::InstallCircleHighlightPathGenerator(remove_suggestion_button_);
+  // TODO(tommycli): We may need to update the color for theme changes.
+  int icon_size = GetLayoutConstant(LOCATION_BAR_ICON_SIZE);
+  views::SetImageFromVectorIcon(remove_suggestion_button_,
+                                vector_icons::kCloseRoundedIcon, icon_size,
+                                GetColor(OmniboxPart::RESULTS_ICON));
   remove_suggestion_button_->SetTooltipText(
       l10n_util::GetStringUTF16(IDS_OMNIBOX_REMOVE_SUGGESTION));
   remove_suggestion_focus_ring_ =
@@ -83,6 +90,9 @@
 
   keyword_view_ = AddChildView(std::make_unique<OmniboxMatchCellView>(this));
   keyword_view_->icon()->EnableCanvasFlippingForRTLUI(true);
+  keyword_view_->icon()->SetImage(
+      gfx::CreateVectorIcon(omnibox::kKeywordSearchIcon, icon_size,
+                            GetColor(OmniboxPart::RESULTS_ICON)));
   keyword_view_->icon()->SizeToPreferredSize();
 
   // Calling SetMatch() will result in the child OmniboxMatchCellViews
@@ -95,7 +105,7 @@
 OmniboxResultView::~OmniboxResultView() {}
 
 SkColor OmniboxResultView::GetColor(OmniboxPart part) const {
-  return GetOmniboxColor(GetThemeProvider(), part, GetThemeState());
+  return GetOmniboxColor(theme_provider_, part, GetThemeState());
 }
 
 void OmniboxResultView::SetMatch(const AutocompleteMatch& match) {
@@ -129,12 +139,8 @@
                                           keyword_match->description_class);
   }
 
-  // There is no need to invalidate the views hierarchy in the absence of a
-  // widget.
-  if (GetWidget()) {
-    Invalidate();
-    InvalidateLayout();
-  }
+  Invalidate();
+  InvalidateLayout();
 }
 
 void OmniboxResultView::ShowKeyword(bool show_keyword) {
@@ -480,10 +486,6 @@
 }
 
 void OmniboxResultView::OnThemeChanged() {
-  views::SetImageFromVectorIcon(remove_suggestion_button_,
-                                vector_icons::kCloseRoundedIcon,
-                                GetLayoutConstant(LOCATION_BAR_ICON_SIZE),
-                                GetColor(OmniboxPart::RESULTS_ICON));
   Invalidate(true);
 }
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.h b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
index ffa1002..9edb1b54 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
@@ -39,12 +39,17 @@
 class FocusRing;
 }  // namespace views
 
+namespace ui {
+class ThemeProvider;
+}
+
 class OmniboxResultView : public views::View,
                           public views::AnimationDelegateViews,
                           public views::ButtonListener {
  public:
   OmniboxResultView(OmniboxPopupContentsView* popup_contents_view,
-                    size_t model_index);
+                    size_t model_index,
+                    const ui::ThemeProvider* theme_provider);
   ~OmniboxResultView() override;
 
   // Helper to get the color for |part| using the current state.
@@ -146,6 +151,9 @@
   // This result's model index.
   size_t model_index_;
 
+  // The theme provider associated with this view.
+  const ui::ThemeProvider* theme_provider_;
+
   // The data this class is built to display (the "Omnibox Result").
   AutocompleteMatch match_;
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc
index 7d86dbb..7222b3b 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc
@@ -30,11 +30,13 @@
 
 class TestOmniboxPopupContentsView : public OmniboxPopupContentsView {
  public:
-  explicit TestOmniboxPopupContentsView(OmniboxEditModel* edit_model)
+  explicit TestOmniboxPopupContentsView(OmniboxEditModel* edit_model,
+                                        const ui::ThemeProvider* theme_provider)
       : OmniboxPopupContentsView(
             /*omnibox_view=*/nullptr,
             edit_model,
-            /*location_bar_view=*/nullptr),
+            /*location_bar_view=*/nullptr,
+            theme_provider),
         selected_index_(0) {}
 
   void SetSelectedLine(size_t index) override { selected_index_ = index; }
@@ -64,12 +66,13 @@
         views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
     widget_->Init(std::move(init_params));
 
+    const ui::ThemeProvider* theme_provider = widget_->GetThemeProvider();
     edit_model_ = std::make_unique<OmniboxEditModel>(
         nullptr, nullptr, std::make_unique<TestOmniboxClient>());
-    popup_view_ =
-        std::make_unique<TestOmniboxPopupContentsView>(edit_model_.get());
-    result_view_ =
-        new OmniboxResultView(popup_view_.get(), kTestResultViewIndex);
+    popup_view_ = std::make_unique<TestOmniboxPopupContentsView>(
+        edit_model_.get(), theme_provider);
+    result_view_ = new OmniboxResultView(popup_view_.get(),
+                                         kTestResultViewIndex, theme_provider);
 
     views::View* root_view = widget_->GetRootView();
     root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500));
diff --git a/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.cc b/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.cc
index 982b4bc..4826b06 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.cc
@@ -33,13 +33,16 @@
     OmniboxResultView* result_view,
     const base::string16& hint,
     const base::string16& hint_short,
-    const gfx::VectorIcon& icon)
+    const gfx::VectorIcon& icon,
+    const ui::ThemeProvider* theme_provider)
     : MdTextButton(result_view, views::style::CONTEXT_BUTTON_MD),
       popup_contents_view_(popup_contents_view),
       result_view_(result_view),
       hint_(hint),
-      hint_short_(hint_short) {
+      hint_short_(hint_short),
+      theme_provider_(theme_provider) {
   views::InstallPillHighlightPathGenerator(this);
+  SetBgColorOverride(GetBackgroundColor());
   SetImage(STATE_NORMAL, gfx::CreateVectorIcon(
                              icon, GetLayoutConstant(LOCATION_BAR_ICON_SIZE),
                              gfx::kChromeIconGrey));
@@ -96,10 +99,6 @@
   SetBgColorOverride(GetBackgroundColor());
 }
 
-void OmniboxTabSwitchButton::OnThemeChanged() {
-  SetBgColorOverride(GetBackgroundColor());
-}
-
 void OmniboxTabSwitchButton::ProvideWidthHint(int parent_width) {
   base::string16 text;
   int preferred_width = CalculateGoalWidth(parent_width, &text);
@@ -126,14 +125,14 @@
 }
 
 SkColor OmniboxTabSwitchButton::GetBackgroundColor() const {
-  return GetOmniboxColor(GetThemeProvider(), OmniboxPart::RESULTS_BACKGROUND,
+  return GetOmniboxColor(theme_provider_, OmniboxPart::RESULTS_BACKGROUND,
                          state() == STATE_HOVERED ? OmniboxPartState::HOVERED
                                                   : OmniboxPartState::NORMAL);
 }
 
 void OmniboxTabSwitchButton::SetPressed() {
   SetBgColorOverride(color_utils::AlphaBlend(
-      GetOmniboxColor(GetThemeProvider(), OmniboxPart::RESULTS_BACKGROUND,
+      GetOmniboxColor(theme_provider_, OmniboxPart::RESULTS_BACKGROUND,
                       OmniboxPartState::SELECTED),
       SK_ColorBLACK, 0.8f));
 }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.h b/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.h
index 6e9d420..7afcbefd 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.h
@@ -16,16 +16,14 @@
                          OmniboxResultView* result_view,
                          const base::string16& hint,
                          const base::string16& hint_short,
-                         const gfx::VectorIcon& icon);
+                         const gfx::VectorIcon& icon,
+                         const ui::ThemeProvider* theme_provider);
 
   ~OmniboxTabSwitchButton() override;
 
   // views::MdTextButton:
   void StateChanged(ButtonState old_state) override;
 
-  // views::View:
-  void OnThemeChanged() override;
-
   // Called by parent views to change background on external (not mouse related)
   // event (tab key).
   void UpdateBackground();
@@ -71,6 +69,8 @@
   base::string16 hint_;
   base::string16 hint_short_;
 
+  const ui::ThemeProvider* theme_provider_;
+
   DISALLOW_COPY_AND_ASSIGN(OmniboxTabSwitchButton);
 };
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_text_view.cc b/chrome/browser/ui/views/omnibox/omnibox_text_view.cc
index ece64f46..8bae7fb 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_text_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_text_view.cc
@@ -260,10 +260,7 @@
                ACMatchClassification::DIM) {
       part = OmniboxPart::RESULTS_TEXT_DIMMED;
     }
-
-    // In the absence of a widget there is no need to update the text color.
-    if (GetWidget())
-      render_text_->ApplyColor(result_view_->GetColor(part), current_range);
+    render_text_->ApplyColor(result_view_->GetColor(part), current_range);
   }
 
   OnStyleChanged();
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
index c8cd918..2ce7149 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -232,7 +232,9 @@
   if (location_bar_view_) {
     // Initialize the popup view using the same font.
     popup_view_.reset(
-        new OmniboxPopupContentsView(this, model(), location_bar_view_));
+        new OmniboxPopupContentsView(this, model(), location_bar_view_,
+                                     &ThemeService::GetThemeProviderForProfile(
+                                         location_bar_view_->profile())));
   }
 
   // Override the default FocusableBorder from Textfield, since the
diff --git a/chrome/browser/ui/views/theme_copying_widget.cc b/chrome/browser/ui/views/theme_copying_widget.cc
index b5a8044..a9e2d19 100644
--- a/chrome/browser/ui/views/theme_copying_widget.cc
+++ b/chrome/browser/ui/views/theme_copying_widget.cc
@@ -12,7 +12,3 @@
 const ui::NativeTheme* ThemeCopyingWidget::GetNativeTheme() const {
   return role_model_->GetNativeTheme();
 }
-
-const ui::ThemeProvider* ThemeCopyingWidget::GetThemeProvider() const {
-  return role_model_->GetThemeProvider();
-}
diff --git a/chrome/browser/ui/views/theme_copying_widget.h b/chrome/browser/ui/views/theme_copying_widget.h
index 2e9aebf3..a868e362 100644
--- a/chrome/browser/ui/views/theme_copying_widget.h
+++ b/chrome/browser/ui/views/theme_copying_widget.h
@@ -7,8 +7,8 @@
 
 #include "ui/views/widget/widget.h"
 
-// This widget uses a reference widget to provide its NativeTheme and
-// ThemeProvider. The reference widget is assumed to outlive |this|.
+// This widget uses a reference widget to provide its NativeTheme. The
+// reference widget is assumed to outlive |this|.
 class ThemeCopyingWidget : public views::Widget {
  public:
   explicit ThemeCopyingWidget(views::Widget* role_model);
@@ -16,7 +16,6 @@
 
   // views::Widget
   const ui::NativeTheme* GetNativeTheme() const override;
-  const ui::ThemeProvider* GetThemeProvider() const override;
 
  private:
   // The widget we'll copy our theme from.
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 79cac9ab..fa641896 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -685,8 +685,7 @@
   }
 #endif
 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
-  if (url.host_piece() == chrome::kChromeUIDevicesHost &&
-      profile->GetPrefs()->GetBoolean(prefs::kLocalDiscoveryEnabled)) {
+  if (url.host_piece() == chrome::kChromeUIDevicesHost) {
     return &NewWebUI<LocalDiscoveryUI>;
   }
 #endif
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
index 1a90506..2197f9a 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
@@ -211,6 +211,11 @@
 
 void LocalDiscoveryUIHandler::HandleRegisterDevice(
     const base::ListValue* args) {
+  if (IsUserProfileRestricted()) {
+    OnSetupError();
+    return;
+  }
+
   std::string device;
   bool rv = args->GetString(0, &device);
   DCHECK(rv);
@@ -221,15 +226,16 @@
     return;
   }
 
-  if (it->second.version < kCloudDevicesPrivetVersion) {
-    privet_resolution_ = privet_http_factory_->CreatePrivetHTTP(device);
-    privet_resolution_->Start(
-        it->second.address,
-        base::Bind(&LocalDiscoveryUIHandler::StartRegisterHTTP,
-                   base::Unretained(this)));
-  } else {
+  if (it->second.version >= kCloudDevicesPrivetVersion) {
     OnSetupError();
+    return;
   }
+
+  privet_resolution_ = privet_http_factory_->CreatePrivetHTTP(device);
+  privet_resolution_->Start(
+      it->second.address,
+      base::Bind(&LocalDiscoveryUIHandler::StartRegisterHTTP,
+                 base::Unretained(this)));
 }
 
 void LocalDiscoveryUIHandler::HandleCancelRegistration(
@@ -255,6 +261,11 @@
 
 void LocalDiscoveryUIHandler::HandleOpenCloudPrintURL(
     const base::ListValue* args) {
+  // Opening of the Cloud Print URL should be disabled if the profile is
+  // restricted.
+  if (IsUserProfileRestricted())
+    return;
+
   std::string id;
   bool rv = args->GetString(0, &id);
   DCHECK(rv);
@@ -481,9 +492,9 @@
 
 void LocalDiscoveryUIHandler::CheckUserLoggedIn() {
   base::Value logged_in_value(!GetSyncAccount().empty());
-  base::Value is_supervised_value(IsUserSupervisedOrOffTheRecord());
+  base::Value is_restricted_value(IsUserProfileRestricted());
   web_ui()->CallJavascriptFunctionUnsafe("local_discovery.setUserLoggedIn",
-                                         logged_in_value, is_supervised_value);
+                                         logged_in_value, is_restricted_value);
 }
 
 void LocalDiscoveryUIHandler::CheckListingDone() {
@@ -528,9 +539,10 @@
   return GCDApiFlow::Create(url_loader_factory, identity_manager);
 }
 
-bool LocalDiscoveryUIHandler::IsUserSupervisedOrOffTheRecord() {
+bool LocalDiscoveryUIHandler::IsUserProfileRestricted() {
   Profile* profile = Profile::FromWebUI(web_ui());
-  return profile->IsSupervised() || profile->IsOffTheRecord();
+  return profile->IsSupervised() || profile->IsOffTheRecord() ||
+         !profile->GetPrefs()->GetBoolean(prefs::kLocalDiscoveryEnabled);
 }
 
 #if defined(CLOUD_PRINT_CONNECTOR_UI_AVAILABLE)
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h
index caf5a5b..952bd62 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h
@@ -156,7 +156,7 @@
 
   void CheckListingDone();
 
-  bool IsUserSupervisedOrOffTheRecord();
+  bool IsUserProfileRestricted();
 
 #if defined(CLOUD_PRINT_CONNECTOR_UI_AVAILABLE)
   void StartCloudPrintConnector();
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
index 1cd72ab..ea9f5cee 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -5,6 +5,8 @@
 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h"
 
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/search/instant_service.h"
+#include "chrome/browser/search/instant_service_factory.h"
 #include "chrome/browser/ui/webui/favicon_source.h"
 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h"
 #include "chrome/browser/ui/webui/webui_util.h"
@@ -85,19 +87,30 @@
 }  // namespace
 
 NewTabPageUI::NewTabPageUI(content::WebUI* web_ui)
-    : ui::MojoWebUIController(web_ui, true), page_factory_receiver_(this) {
-  profile_ = Profile::FromWebUI(web_ui);
-
+    : ui::MojoWebUIController(web_ui, true),
+      page_factory_receiver_(this),
+      profile_(Profile::FromWebUI(web_ui)),
+      instant_service_(InstantServiceFactory::GetForProfile(profile_)) {
   content::WebUIDataSource::Add(profile_, CreateNewTabPageUiHtmlSource());
 
   content::URLDataSource::Add(
       profile_, std::make_unique<FaviconSource>(
                     profile_, chrome::FaviconUrlFormat::kFavicon2));
+
+  UpdateBackgroundColor(*instant_service_->GetInitializedNtpTheme());
+  instant_service_->AddObserver(this);
 }
 
 WEB_UI_CONTROLLER_TYPE_IMPL(NewTabPageUI)
 
-NewTabPageUI::~NewTabPageUI() = default;
+NewTabPageUI::~NewTabPageUI() {
+  instant_service_->RemoveObserver(this);
+}
+
+// static
+bool NewTabPageUI::IsNewTabPageOrigin(const GURL& url) {
+  return url.GetOrigin() == GURL(chrome::kChromeUINewTabPageURL).GetOrigin();
+}
 
 void NewTabPageUI::BindInterface(
     mojo::PendingReceiver<new_tab_page::mojom::PageHandlerFactory>
@@ -118,7 +131,22 @@
       std::move(pending_page_handler), std::move(pending_page), profile_);
 }
 
-// static
-bool NewTabPageUI::IsNewTabPageOrigin(const GURL& url) {
-  return url.GetOrigin() == GURL(chrome::kChromeUINewTabPageURL).GetOrigin();
+void NewTabPageUI::NtpThemeChanged(const NtpTheme& theme) {
+  // Load time data is cached across page reloads. Update the background color
+  // here to prevent a white flicker on page reload.
+  UpdateBackgroundColor(theme);
+}
+
+void NewTabPageUI::MostVisitedInfoChanged(const InstantMostVisitedInfo& info) {}
+
+void NewTabPageUI::UpdateBackgroundColor(const NtpTheme& theme) {
+  std::unique_ptr<base::DictionaryValue> update(new base::DictionaryValue);
+  auto background_color = theme.background_color;
+  update->SetString(
+      "backgroundColor",
+      base::StringPrintf("#%02X%02X%02X", SkColorGetR(background_color),
+                         SkColorGetG(background_color),
+                         SkColorGetB(background_color)));
+  content::WebUIDataSource::Update(profile_, chrome::kChromeUINewTabPageHost,
+                                   std::move(update));
 }
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h
index a99acc7..e065ead 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_UI_WEBUI_NEW_TAB_PAGE_NEW_TAB_PAGE_UI_H_
 
 #include "base/macros.h"
+#include "chrome/browser/search/instant_service_observer.h"
 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -16,11 +17,13 @@
 class WebUI;
 }
 class GURL;
+class InstantService;
 class NewTabPageHandler;
 class Profile;
 
 class NewTabPageUI : public ui::MojoWebUIController,
-                     public new_tab_page::mojom::PageHandlerFactory {
+                     public new_tab_page::mojom::PageHandlerFactory,
+                     public InstantServiceObserver {
  public:
   explicit NewTabPageUI(content::WebUI* web_ui);
   ~NewTabPageUI() override;
@@ -40,12 +43,20 @@
       mojo::PendingReceiver<new_tab_page::mojom::PageHandler>
           pending_page_handler) override;
 
-  std::unique_ptr<NewTabPageHandler> page_handler_;
+  // InstantServiceObserver:
+  void NtpThemeChanged(const NtpTheme& theme) override;
+  void MostVisitedInfoChanged(const InstantMostVisitedInfo& info) override;
 
+  // Updates the load time data with the current theme's background color. That
+  // way the background color is available as soon as the page loads and we
+  // prevent a potential white flicker.
+  void UpdateBackgroundColor(const NtpTheme& theme);
+
+  std::unique_ptr<NewTabPageHandler> page_handler_;
   mojo::Receiver<new_tab_page::mojom::PageHandlerFactory>
       page_factory_receiver_;
-
   Profile* profile_;
+  InstantService* instant_service_;
 
   WEB_UI_CONTROLLER_TYPE_DECL();
 
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 1864519e..3205520d 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -99,7 +99,6 @@
 #include "chrome/common/webui_url_constants.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_switches.h"
-#include "chromeos/dbus/power/power_manager_client.h"
 #include "chromeos/services/assistant/public/features.h"
 #include "chromeos/services/multidevice_setup/public/cpp/url_provider.h"
 #include "chromeos/strings/grit/chromeos_strings.h"
@@ -1091,10 +1090,8 @@
   html_source->AddBoolean("listAllDisplayModes",
                           display::features::IsListAllDisplayModesEnabled());
 
-  const bool ambient_eq_supported =
-      ash::features::IsAllowAmbientEQEnabled() &&
-      chromeos::PowerManagerClient::Get()->SupportsAmbientColor();
-  html_source->AddBoolean("deviceSupportsAmbientColor", ambient_eq_supported);
+  html_source->AddBoolean("deviceSupportsAmbientColor",
+                          ash::features::IsAllowAmbientEQEnabled());
 
   html_source->AddBoolean(
       "enableTouchCalibrationSetting",
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc
index c2817c4..3f7e5fdb 100644
--- a/chrome/browser/ui/webui/settings/settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -92,7 +92,6 @@
 #include "chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h"
 #include "chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h"
 #include "chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h"
-#include "chrome/browser/ui/webui/settings/chromeos/parental_controls_handler.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/grit/browser_resources.h"
 #include "chromeos/components/account_manager/account_manager.h"
@@ -240,9 +239,6 @@
       base::FeatureList::IsEnabled(features::kSyncSetupFriendlySettings));
 
 #if defined(OS_CHROMEOS)
-  html_source->AddBoolean(
-      "showParentalControls",
-      chromeos::settings::ShouldShowParentalControls(profile));
   html_source->AddBoolean("splitSettingsSyncEnabled",
                           chromeos::features::IsSplitSettingsSyncEnabled());
 #endif
@@ -326,11 +322,6 @@
                 : nullptr,
             android_sms_service ? android_sms_service->android_sms_app_manager()
                                 : nullptr));
-    if (chromeos::settings::ShouldShowParentalControls(profile)) {
-      web_ui->AddMessageHandler(
-          std::make_unique<chromeos::settings::ParentalControlsHandler>(
-              profile));
-    }
   }
 
   web_ui->AddMessageHandler(
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 8f4b178..8aeaf07 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -1414,8 +1414,10 @@
 // platforms.
 const char kFullscreenAllowed[] = "fullscreen.allowed";
 
-// Enable the local discovery UI (chrome://devices) which shows discoverable
-// devices near the user as well as cloud devices registered to them.
+// Enable controllable features in the local discovery UI (chrome://devices).
+// The UI shows discoverable devices near the user and registered cloud devices,
+// and allow users to add printers to cloud print when not on Chrome OS
+// devices .
 const char kLocalDiscoveryEnabled[] = "local_discovery.enabled";
 
 // Enable notifications for new devices on the local network that can be
diff --git a/chrome/installer/linux/BUILD.gn b/chrome/installer/linux/BUILD.gn
index 223b0e0..46eaeb4 100644
--- a/chrome/installer/linux/BUILD.gn
+++ b/chrome/installer/linux/BUILD.gn
@@ -76,6 +76,7 @@
     "debian/deb_version.py",
     "debian/dist_package_versions.json",
     "debian/package_version_interval.py",
+    "//third_party/dpkg-shlibdeps/dpkg-shlibdeps.pl",
   ]
   outputs = [
     "$root_out_dir/deb_{{source_name_part}}.deps",
diff --git a/chrome/installer/linux/debian/calculate_package_deps.py b/chrome/installer/linux/debian/calculate_package_deps.py
index 84fdc25..3efcc4c 100755
--- a/chrome/installer/linux/debian/calculate_package_deps.py
+++ b/chrome/installer/linux/debian/calculate_package_deps.py
@@ -31,7 +31,11 @@
 dep_filename = os.path.abspath(args.dep_filename)
 distro_check = args.distro_check
 
-cmd = ['dpkg-shlibdeps']
+script_dir = os.path.dirname(os.path.realpath(__file__))
+dpkg_shlibdeps = os.path.join(script_dir, '..', '..', '..', '..', 'third_party',
+                              'dpkg-shlibdeps', 'dpkg-shlibdeps.pl')
+
+cmd = [dpkg_shlibdeps, '--ignore-weak-undefined']
 if arch == 'x64':
   cmd.extend(['-l%s/usr/lib/x86_64-linux-gnu' % sysroot,
               '-l%s/lib/x86_64-linux-gnu' % sysroot])
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 30b0dc4..5b7c4987 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2604,8 +2604,6 @@
         "../browser/process_singleton_browsertest.cc",
       ]
 
-      data += [ "//testing/buildbot/filters/mac_window_server_killers.browser_tests.filter" ]
-
       if (safe_browsing_mode == 1) {
         sources -= [
           # single-process mode hangs on Mac sometimes because of multiple UI
@@ -3781,6 +3779,7 @@
       "../browser/metrics/chrome_android_metrics_provider_unittest.cc",
       "../browser/notifications/notification_platform_bridge_android_unittest.cc",
       "../browser/page_load_metrics/observers/android_page_load_metrics_observer_unittest.cc",
+      "../browser/partnercustomizations/partner_browser_customizations_unittest.cc",
       "../browser/password_manager/account_chooser_dialog_android_unittest.cc",
       "../browser/password_manager/auto_signin_first_run_dialog_android_unittest.cc",
       "../browser/password_manager/credential_leak_controller_android_unittest.cc",
@@ -3788,6 +3787,7 @@
       "../browser/password_manager/password_generation_controller_impl_unittest.cc",
       "../browser/password_manager/save_password_infobar_delegate_android_unittest.cc",
       "../browser/password_manager/update_password_infobar_delegate_android_unittest.cc",
+      "../browser/payments/android/android_payment_app_finder_unittest.cc",
       "../browser/permissions/permission_prompt_android_unittest.cc",
       "../browser/permissions/permission_request_notification_android_unittest.cc",
       "../browser/permissions/permission_request_notification_handler_unittest.cc",
diff --git a/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js b/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js
index 54cb893a..40755c7d 100644
--- a/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js
+++ b/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js
@@ -108,20 +108,17 @@
     search('c');
     assertEquals(1, getList().length);
     assertEquals('cat', getList()[0].textContent.trim());
-    assertTrue(dropDown.invalid);
 
     search('at');
     assertEquals(3, getList().length);
     assertEquals('cat', getList()[0].textContent.trim());
     assertEquals('hat', getList()[1].textContent.trim());
     assertEquals('rat', getList()[2].textContent.trim());
-    assertTrue(dropDown.invalid);
 
     search('ra');
     assertEquals(2, getList().length);
     assertEquals('rat', getList()[0].textContent.trim());
     assertEquals('rake', getList()[1].textContent.trim());
-    assertTrue(dropDown.invalid);
   });
 
   test('value is set on click', function() {
@@ -136,7 +133,6 @@
     // Make sure final value does not change while searching.
     search('ta');
     assertEquals('dog', dropDown.value);
-    assertTrue(dropDown.invalid);
   });
 
   // If the update-value-on-input flag is passed, final value should be whatever
@@ -154,7 +150,6 @@
     // Make sure final value does change while searching.
     search('ta');
     assertEquals('ta', dropDown.value);
-    assertFalse(dropDown.invalid);
   });
 
   test('click closes dropdown', function() {
@@ -358,15 +353,11 @@
 
     getList()[0].click();
     assertEquals('dog', searchInput.value);
-    assertFalse(dropDown.invalid);
 
     // Make sure the search box value changes back to dog
     search('ta');
-    assertTrue(dropDown.invalid);
-
     blur();
     assertEquals('dog', searchInput.value);
-    assertFalse(dropDown.invalid);
   });
 
   // When a user types in the dropdown but does not choose a valid option, the
@@ -378,14 +369,10 @@
 
     getList()[0].click();
     assertEquals('dog', searchInput.value);
-    assertFalse(dropDown.invalid);
 
     // Make sure the search box value keeps the same text
     search('ta');
-    assertFalse(dropDown.invalid);
-
     blur();
     assertEquals('ta', searchInput.value);
-    assertFalse(dropDown.invalid);
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/os_people_page_test.js b/chrome/test/data/webui/settings/chromeos/os_people_page_test.js
index 9569b9d..c48f6a7 100644
--- a/chrome/test/data/webui/settings/chromeos/os_people_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/os_people_page_test.js
@@ -144,6 +144,20 @@
       assertTrue(peoplePage.$$('#account-manager-subpage-trigger').hidden);
     });
 
+    test('parental controls page is shown when enabled', () => {
+      loadTimeData.overrideValues({
+        // Simulate parental controls.
+        showParentalControls: true,
+      });
+
+      peoplePage = document.createElement('os-settings-people-page');
+      document.body.appendChild(peoplePage);
+      Polymer.dom.flush();
+
+      // Setup button is shown and enabled.
+      assert(peoplePage.$$('settings-parental-controls-page'));
+    });
+
     test('GAIA name and picture, account manager enabled', async () => {
       loadTimeData.overrideValues({
         isAccountManagerEnabled: true,
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
index e0e9eff..a9b3f4a 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
@@ -579,6 +579,12 @@
 // eslint-disable-next-line no-var
 var OSSettingsMenuTest = class extends OSSettingsBrowserTest {
   /** @override */
+  get browsePreload() {
+    return super.browsePreload +
+        'chromeos/os_settings_menu/os_settings_menu.html';
+  }
+
+  /** @override */
   get extraLibraries() {
     return super.extraLibraries.concat([
       BROWSER_SETTINGS_PATH + '../test_util.js',
@@ -847,6 +853,12 @@
 // eslint-disable-next-line no-var
 var OSSettingsPeoplePageSyncControlsTest = class extends OSSettingsBrowserTest {
   /** @override */
+  get browsePreload() {
+    return super.browsePreload +
+        'chromeos/os_people_page/os_sync_controls.html';
+  }
+
+  /** @override */
   get featureList() {
     return {enabled: ['chromeos::features::kSplitSettingsSync']};
   }
@@ -868,6 +880,11 @@
 // eslint-disable-next-line no-var
 var OSSettingsPeoplePageTest = class extends OSSettingsBrowserTest {
   /** @override */
+  get browsePreload() {
+    return super.browsePreload + 'chromeos/os_people_page/os_people_page.html';
+  }
+
+  /** @override */
   get extraLibraries() {
     return super.extraLibraries.concat([
       BROWSER_SETTINGS_PATH + '../test_browser_proxy.js',
@@ -883,10 +900,37 @@
   mocha.run();
 });
 
+// eslint-disable-next-line no-var
+var OSSettingsParentalControlsPageTest = class extends OSSettingsBrowserTest {
+  /** @override */
+  get browsePreload() {
+    return super.browsePreload +
+        'chromeos/parental_controls_page/parental_controls_page.html';
+  }
+
+  /** @override */
+  get extraLibraries() {
+    return super.extraLibraries.concat([
+      BROWSER_SETTINGS_PATH + '../test_browser_proxy.js',
+      'parental_controls_page_test.js',
+    ]);
+  }
+};
+
+TEST_F('OSSettingsParentalControlsPageTest', 'AllJsTests', () => {
+  mocha.run();
+});
+
 // Tests for the Personalization section.
 // eslint-disable-next-line no-var
 var OSSettingsPersonalizationPageTest = class extends OSSettingsBrowserTest {
   /** @override */
+  get browsePreload() {
+    return super.browsePreload +
+        'chromeos/personalization_page/personalization_page.html';
+  }
+
+  /** @override */
   get extraLibraries() {
     return super.extraLibraries.concat([
       '//ui/webui/resources/js/promise_resolver.js',
diff --git a/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.js b/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.js
new file mode 100644
index 0000000..8ef0d5b
--- /dev/null
+++ b/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.js
@@ -0,0 +1,144 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/** @implements {parental_controls.ParentalControlsBrowserProxy} */
+class TestParentalControlsBrowserProxy extends TestBrowserProxy {
+  constructor() {
+    super([
+      'showAddSupervisionDialog',
+      'launchFamilyLinkSettings',
+    ]);
+  }
+
+  /** @override */
+  launchFamilyLinkSettings() {
+    this.methodCalled('launchFamilyLinkSettings');
+  }
+
+  /** @override */
+  showAddSupervisionDialog() {
+    this.methodCalled('showAddSupervisionDialog');
+  }
+}
+
+suite('Chrome OS parental controls page setup item tests', function() {
+  /** @type {ParentalControlsPage} */
+  let parentalControlsPage = null;
+
+  /** @type {TestParentalControlsBrowserProxy} */
+  let parentalControlsBrowserProxy = null;
+
+  suiteSetup(function() {
+    loadTimeData.overrideValues({
+      // Simulate parental controls.
+      showParentalControls: true,
+    });
+  });
+
+  setup(function() {
+    parentalControlsBrowserProxy = new TestParentalControlsBrowserProxy();
+    parental_controls.BrowserProxyImpl.instance_ = parentalControlsBrowserProxy;
+
+    PolymerTest.clearBody();
+    parentalControlsPage =
+        document.createElement('settings-parental-controls-page');
+    parentalControlsPage.pageVisibility = settings.pageVisibility;
+    document.body.appendChild(parentalControlsPage);
+    Polymer.dom.flush();
+  });
+
+  teardown(function() {
+    parentalControlsPage.remove();
+  });
+
+  test('parental controls page enabled when online', () => {
+    // Setup button is shown and enabled.
+    const setupButton =
+        assert(parentalControlsPage.$$('#parental-controls-item cr-button'));
+
+    setupButton.click();
+
+    // Ensure that the request to launch the add supervision flow went
+    // through.
+    assertEquals(
+        parentalControlsBrowserProxy.getCallCount('showAddSupervisionDialog'),
+        1);
+  });
+
+  test('parental controls page disabled when offline', () => {
+    // Simulate going offline
+    window.dispatchEvent(new CustomEvent('offline'));
+    // Setup button is shown but disabled.
+    const setupButton =
+        assert(parentalControlsPage.$$('#parental-controls-item cr-button'));
+    assertTrue(setupButton.disabled);
+
+    setupButton.click();
+
+    // Ensure that the request to launch the add supervision flow does not
+    // go through.
+    assertEquals(
+        parentalControlsBrowserProxy.getCallCount('showAddSupervisionDialog'),
+        0);
+  });
+
+  test('parental controls page re-enabled when it comes back online', () => {
+    // Simulate going offline
+    window.dispatchEvent(new CustomEvent('offline'));
+    // Setup button is shown but disabled.
+    const setupButton =
+        assert(parentalControlsPage.$$('#parental-controls-item cr-button'));
+    assertTrue(setupButton.disabled);
+
+    // Come back online.
+    window.dispatchEvent(new CustomEvent('online'));
+    // Setup button is shown and re-enabled.
+    assertFalse(setupButton.disabled);
+  });
+});
+
+suite('Chrome OS parental controls page child account tests', function() {
+  /** @type {ParentalControlsPage} */
+  let parentalControlsPage = null;
+
+  /** @type {TestParentalControlsBrowserProxy} */
+  let parentalControlsBrowserProxy = null;
+
+  suiteSetup(function() {
+    loadTimeData.overrideValues({
+      // Simulate parental controls.
+      showParentalControls: true,
+      // Simulate child account.
+      isChild: true,
+    });
+  });
+
+  setup(async function() {
+    parentalControlsBrowserProxy = new TestParentalControlsBrowserProxy();
+    parental_controls.BrowserProxyImpl.instance_ = parentalControlsBrowserProxy;
+
+    PolymerTest.clearBody();
+    parentalControlsPage =
+        document.createElement('settings-parental-controls-page');
+    parentalControlsPage.pageVisibility = settings.pageVisibility;
+    document.body.appendChild(parentalControlsPage);
+    Polymer.dom.flush();
+  });
+
+  teardown(function() {
+    parentalControlsPage.remove();
+  });
+
+  test('parental controls page child view shown to child account', () => {
+    // Get the link row.
+    const linkRow =
+        assert(parentalControlsPage.$$('#parental-controls-item cr-link-row'));
+
+    linkRow.click();
+    // Ensure that the request to launch FLH went through.
+    assertEquals(
+        parentalControlsBrowserProxy.getCallCount('launchFamilyLinkSettings'),
+        1);
+  });
+});
diff --git a/chrome/test/data/webui/settings/people_page_test.js b/chrome/test/data/webui/settings/people_page_test.js
index ab94040..680f09e08b 100644
--- a/chrome/test/data/webui/settings/people_page_test.js
+++ b/chrome/test/data/webui/settings/people_page_test.js
@@ -562,8 +562,6 @@
           showOSSettings: false,
           // Simulate ChromeOSAccountManager (Google Accounts support).
           isAccountManagerEnabled: true,
-          // Simulate parental controls.
-          showParentalControls: true,
         });
       });
 
@@ -623,12 +621,6 @@
         const subpageArrow = assert(peoplePage.$$('#profile-subpage-arrow'));
         assertFalse(subpageArrow.hidden);
       });
-
-      test('parental controls page is shown when enabled', () => {
-        // Setup button is shown and enabled.
-        const parentalControlsItem =
-            assert(peoplePage.$$('settings-parental-controls-page'));
-      });
     });
 
     suite('Chrome OS with account manager disabled', function() {
@@ -693,153 +685,5 @@
         assertEquals(oldRoute, settings.getCurrentRoute());
       });
     });
-
-    /** @implements {parental_controls.ParentalControlsBrowserProxy} */
-    class TestParentalControlsBrowserProxy extends TestBrowserProxy {
-      constructor() {
-        super([
-          'showAddSupervisionDialog',
-          'launchFamilyLinkSettings',
-        ]);
-      }
-
-      /** @override */
-      launchFamilyLinkSettings() {
-        this.methodCalled('launchFamilyLinkSettings');
-      }
-
-      /** @override */
-      showAddSupervisionDialog() {
-        this.methodCalled('showAddSupervisionDialog');
-      }
-    }
-
-    suite('Chrome OS parental controls page setup item tests', function() {
-      /** @type {ParentalControlsPage} */
-      let parentalControlsPage = null;
-
-      /** @type {TestParentalControlsBrowserProxy} */
-      let parentalControlsBrowserProxy = null;
-
-      suiteSetup(function() {
-        loadTimeData.overrideValues({
-          // Simulate parental controls.
-          showParentalControls: true,
-        });
-      });
-
-      setup(function() {
-        parentalControlsBrowserProxy = new TestParentalControlsBrowserProxy();
-        parental_controls.BrowserProxyImpl.instance_ =
-            parentalControlsBrowserProxy;
-
-        PolymerTest.clearBody();
-        parentalControlsPage =
-            document.createElement('settings-parental-controls-page');
-        parentalControlsPage.pageVisibility = settings.pageVisibility;
-        document.body.appendChild(parentalControlsPage);
-        Polymer.dom.flush();
-      });
-
-      teardown(function() {
-        parentalControlsPage.remove();
-      });
-
-      test('parental controls page enabled when online', () => {
-        // Setup button is shown and enabled.
-        const setupButton = assert(
-            parentalControlsPage.$$('#parental-controls-item cr-button'));
-
-        setupButton.click();
-
-        // Ensure that the request to launch the add supervision flow went
-        // through.
-        assertEquals(
-            parentalControlsBrowserProxy.getCallCount(
-                'showAddSupervisionDialog'),
-            1);
-      });
-
-      test('parental controls page disabled when offline', () => {
-        // Simulate going offline
-        window.dispatchEvent(new CustomEvent('offline'));
-        // Setup button is shown but disabled.
-        const setupButton = assert(
-            parentalControlsPage.$$('#parental-controls-item cr-button'));
-        assertTrue(setupButton.disabled);
-
-        setupButton.click();
-
-        // Ensure that the request to launch the add supervision flow does not
-        // go through.
-        assertEquals(
-            parentalControlsBrowserProxy.getCallCount(
-                'showAddSupervisionDialog'),
-            0);
-      });
-
-      test(
-          'parental controls page re-enabled when it comes back online', () => {
-            // Simulate going offline
-            window.dispatchEvent(new CustomEvent('offline'));
-            // Setup button is shown but disabled.
-            const setupButton = assert(
-                parentalControlsPage.$$('#parental-controls-item cr-button'));
-            assertTrue(setupButton.disabled);
-
-            // Come back online.
-            window.dispatchEvent(new CustomEvent('online'));
-            // Setup button is shown and re-enabled.
-            assertFalse(setupButton.disabled);
-          });
-    });
-
-
-    suite('Chrome OS parental controls page child account tests', function() {
-      /** @type {ParentalControlsPage} */
-      let parentalControlsPage = null;
-
-      /** @type {TestParentalControlsBrowserProxy} */
-      let parentalControlsBrowserProxy = null;
-
-      suiteSetup(function() {
-        loadTimeData.overrideValues({
-          // Simulate parental controls.
-          showParentalControls: true,
-          // Simulate child account.
-          isChild: true,
-        });
-      });
-
-      setup(async function() {
-        parentalControlsBrowserProxy = new TestParentalControlsBrowserProxy();
-        parental_controls.BrowserProxyImpl.instance_ =
-            parentalControlsBrowserProxy;
-
-        PolymerTest.clearBody();
-        parentalControlsPage =
-            document.createElement('settings-parental-controls-page');
-        parentalControlsPage.pageVisibility = settings.pageVisibility;
-        document.body.appendChild(parentalControlsPage);
-        Polymer.dom.flush();
-      });
-
-      teardown(function() {
-        parentalControlsPage.remove();
-      });
-
-      test('parental controls page child view shown to child account', () => {
-        // Get the link row.
-        const linkRow = assert(
-            parentalControlsPage.$$('#parental-controls-item cr-link-row'));
-
-        linkRow.click();
-        // Ensure that the request to launch FLH went through.
-        assertEquals(
-            parentalControlsBrowserProxy.getCallCount(
-                'launchFamilyLinkSettings'),
-            1);
-      });
-    });
   }
 });
diff --git a/chromecast/public/avsettings.h b/chromecast/public/avsettings.h
index 72a7afa..637f5cf 100644
--- a/chromecast/public/avsettings.h
+++ b/chromecast/public/avsettings.h
@@ -246,6 +246,10 @@
   // This function should only be implemented on HDMI platforms.
   static CHROMECAST_EXPORT int GetHdmiLatencyUs() __attribute__((weak));
 
+  // Returns true if this is an HDMI platform.
+  // This function should only be implemented on HDMI platforms.
+  static CHROMECAST_EXPORT bool IsHdmiPlatform() __attribute__((weak));
+
   // Returns the type of volume control, i.e. MASTER_VOLUME, FIXED_VOLUME or
   // ATTENUATION_VOLUME. For example, normal TVs, devices of CEC audio
   // controls, and audio devices are master volume systems. The counter
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc
index d37b540..df274c3 100644
--- a/components/autofill/content/browser/content_autofill_driver.cc
+++ b/components/autofill/content/browser/content_autofill_driver.cc
@@ -20,6 +20,7 @@
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/render_widget_host_view.h"
@@ -63,14 +64,6 @@
 // static
 ContentAutofillDriver* ContentAutofillDriver::GetForRenderFrameHost(
     content::RenderFrameHost* render_frame_host) {
-  // With back-forward cache, the page stays alive and its mojo connections are
-  // not closed. The page would be frozen and would eventually stop doing work,
-  // but the messages can still arrive when the frame is not active. Given that
-  // autofill logic can show popups, it's problematic - prevent pages using
-  // autofill from entering back-forward cache for now to avoid it.
-  content::BackForwardCache::DisableForRenderFrameHost(
-      render_frame_host, "autofill::ContentAutofillDriver");
-
   ContentAutofillDriverFactory* factory =
       ContentAutofillDriverFactory::FromWebContents(
           content::WebContents::FromRenderFrameHost(render_frame_host));
@@ -92,6 +85,14 @@
   return render_frame_host_->GetParent() == nullptr;
 }
 
+bool ContentAutofillDriver::CanShowAutofillUi() const {
+  // TODO(crbug.com/1041021): Use RenderFrameHost::IsActive here when available.
+  return !content::BackForwardCache::EvictIfCached(
+      {render_frame_host_->GetProcess()->GetID(),
+       render_frame_host_->GetRoutingID()},
+      "ContentAutofillDriver::CanShowAutofillUi");
+}
+
 ui::AXTreeID ContentAutofillDriver::GetAxTreeId() const {
   return render_frame_host_->GetAXTreeID();
 }
diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h
index e5868ce..9597492 100644
--- a/components/autofill/content/browser/content_autofill_driver.h
+++ b/components/autofill/content/browser/content_autofill_driver.h
@@ -58,6 +58,7 @@
   // AutofillDriver:
   bool IsIncognito() const override;
   bool IsInMainFrame() const override;
+  bool CanShowAutofillUi() const override;
   ui::AXTreeID GetAxTreeId() const override;
   scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override;
   bool RendererIsAvailable() override;
diff --git a/components/autofill/core/browser/autofill_driver.h b/components/autofill/core/browser/autofill_driver.h
index 2e663dd..641f0a7 100644
--- a/components/autofill/core/browser/autofill_driver.h
+++ b/components/autofill/core/browser/autofill_driver.h
@@ -54,6 +54,10 @@
   // Returns whether AutofillDriver instance is associated to the main frame.
   virtual bool IsInMainFrame() const = 0;
 
+  // Returns true iff a popup can be shown on the behalf of the associated
+  // frame.
+  virtual bool CanShowAutofillUi() const = 0;
+
   // Returns the ax tree id associated with this driver.
   virtual ui::AXTreeID GetAxTreeId() const = 0;
 
diff --git a/components/autofill/core/browser/autofill_external_delegate.cc b/components/autofill/core/browser/autofill_external_delegate.cc
index f4f4c248..5dc59ba 100644
--- a/components/autofill/core/browser/autofill_external_delegate.cc
+++ b/components/autofill/core/browser/autofill_external_delegate.cc
@@ -155,7 +155,7 @@
   }
 
   // Send to display.
-  if (query_field_.is_focusable) {
+  if (query_field_.is_focusable && GetAutofillDriver()->CanShowAutofillUi()) {
     manager_->client()->ShowAutofillPopup(
         element_bounds_, query_field_.text_direction, suggestions,
         autoselect_first_suggestion, popup_type_, GetWeakPtr());
diff --git a/components/autofill/core/browser/test_autofill_driver.cc b/components/autofill/core/browser/test_autofill_driver.cc
index dedc8f2..0c5348dd 100644
--- a/components/autofill/core/browser/test_autofill_driver.cc
+++ b/components/autofill/core/browser/test_autofill_driver.cc
@@ -29,6 +29,10 @@
   return is_in_main_frame_;
 }
 
+bool TestAutofillDriver::CanShowAutofillUi() const {
+  return true;
+}
+
 ui::AXTreeID TestAutofillDriver::GetAxTreeId() const {
   NOTIMPLEMENTED() << "See https://crbug.com/985933";
   return ui::AXTreeIDUnknown();
diff --git a/components/autofill/core/browser/test_autofill_driver.h b/components/autofill/core/browser/test_autofill_driver.h
index 0e261e7d..aff0ea1 100644
--- a/components/autofill/core/browser/test_autofill_driver.h
+++ b/components/autofill/core/browser/test_autofill_driver.h
@@ -24,6 +24,7 @@
   // AutofillDriver implementation overrides.
   bool IsIncognito() const override;
   bool IsInMainFrame() const override;
+  bool CanShowAutofillUi() const override;
   ui::AXTreeID GetAxTreeId() const override;
   scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override;
   bool RendererIsAvailable() override;
diff --git a/components/autofill/ios/browser/autofill_driver_ios.h b/components/autofill/ios/browser/autofill_driver_ios.h
index 4a67ff5b..262fe21 100644
--- a/components/autofill/ios/browser/autofill_driver_ios.h
+++ b/components/autofill/ios/browser/autofill_driver_ios.h
@@ -40,6 +40,7 @@
   // AutofillDriver:
   bool IsIncognito() const override;
   bool IsInMainFrame() const override;
+  bool CanShowAutofillUi() const override;
   ui::AXTreeID GetAxTreeId() const override;
   scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override;
   bool RendererIsAvailable() override;
diff --git a/components/autofill/ios/browser/autofill_driver_ios.mm b/components/autofill/ios/browser/autofill_driver_ios.mm
index c1bc51a2..810f400 100644
--- a/components/autofill/ios/browser/autofill_driver_ios.mm
+++ b/components/autofill/ios/browser/autofill_driver_ios.mm
@@ -71,6 +71,10 @@
   return web_frame ? web_frame->IsMainFrame() : true;
 }
 
+bool AutofillDriverIOS::CanShowAutofillUi() const {
+  return true;
+}
+
 ui::AXTreeID AutofillDriverIOS::GetAxTreeId() const {
   NOTIMPLEMENTED() << "See https://crbug.com/985933";
   return ui::AXTreeIDUnknown();
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc
index fac4ab6..f55bc8f 100644
--- a/components/omnibox/browser/omnibox_edit_model.cc
+++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -1535,9 +1535,18 @@
   }
 
   if (!found_match_for_text) {
+    // For match generation, we use the unelided |url_for_editing_|, unless the
+    // user input is in progress or Query in Omnibox is active.
+    LocationBarModel* location_bar_model = controller()->GetLocationBarModel();
+    base::string16 text_for_match_generation = url_for_editing_;
+    if (user_input_in_progress() ||
+        location_bar_model->GetDisplaySearchTerms(nullptr)) {
+      text_for_match_generation = view_->GetText();
+    }
+
     client_->GetAutocompleteClassifier()->Classify(
-        MaybePrependKeyword(view_->GetText()), is_keyword_selected(), true,
-        GetPageClassification(), match, alternate_nav_url);
+        MaybePrependKeyword(text_for_match_generation), is_keyword_selected(),
+        true, GetPageClassification(), match, alternate_nav_url);
   }
 }
 
diff --git a/components/omnibox/browser/omnibox_edit_model_unittest.cc b/components/omnibox/browser/omnibox_edit_model_unittest.cc
index 177305b..6f35911 100644
--- a/components/omnibox/browser/omnibox_edit_model_unittest.cc
+++ b/components/omnibox/browser/omnibox_edit_model_unittest.cc
@@ -338,26 +338,58 @@
 }
 
 TEST_F(OmniboxEditModelTest, CurrentMatch) {
-  location_bar_model()->set_url(GURL("http://localhost/"));
-  location_bar_model()->set_url_for_display(base::ASCIIToUTF16("localhost"));
-  model()->ResetDisplayTexts();
-  model()->Revert();
-
-  // Tests that we use the formatted full URL instead of the elided URL to
-  // generate matches.
+  // Test the HTTP case.
   {
+    location_bar_model()->set_url(GURL("http://www.example.com/"));
+    location_bar_model()->set_url_for_display(
+        base::ASCIIToUTF16("example.com"));
+    model()->ResetDisplayTexts();
+    model()->Revert();
+
+    // iOS doesn't do elision in the textfield view.
+#if defined(OS_IOS)
+    EXPECT_EQ(base::ASCIIToUTF16("http://www.example.com/"), view()->GetText());
+#else
+    EXPECT_EQ(base::ASCIIToUTF16("example.com"), view()->GetText());
+#endif
+
     AutocompleteMatch match = model()->CurrentMatch(nullptr);
     EXPECT_EQ(AutocompleteMatchType::URL_WHAT_YOU_TYPED, match.type);
     EXPECT_TRUE(model()->CurrentTextIsURL());
+    EXPECT_EQ("http://www.example.com/", match.destination_url.spec());
+  }
+
+  // Test that generating a match from an elided HTTPS URL doesn't drop the
+  // secure scheme.
+  {
+    location_bar_model()->set_url(GURL("https://www.google.com/"));
+    location_bar_model()->set_url_for_display(base::ASCIIToUTF16("google.com"));
+    model()->ResetDisplayTexts();
+    model()->Revert();
+
+    // iOS doesn't do elision in the textfield view.
+#if defined(OS_IOS)
+    EXPECT_EQ(base::ASCIIToUTF16("https://www.google.com/"), view()->GetText());
+#else
+    EXPECT_EQ(base::ASCIIToUTF16("google.com"), view()->GetText());
+#endif
+
+    AutocompleteMatch match = model()->CurrentMatch(nullptr);
+    EXPECT_EQ(AutocompleteMatchType::URL_WHAT_YOU_TYPED, match.type);
+    EXPECT_TRUE(model()->CurrentTextIsURL());
+
+    // Additionally verify we aren't accidentally dropping the HTTPS scheme.
+    EXPECT_EQ("https://www.google.com/", match.destination_url.spec());
   }
 
   // Tests that when there is a Query in Omnibox, generate matches from the
   // query, instead of the full formatted URL.
-  location_bar_model()->set_display_search_terms(base::ASCIIToUTF16("foobar"));
-  model()->ResetDisplayTexts();
-  model()->Revert();
-
   {
+    location_bar_model()->set_display_search_terms(
+        base::ASCIIToUTF16("foobar"));
+    model()->ResetDisplayTexts();
+    model()->Revert();
+
     AutocompleteMatch match = model()->CurrentMatch(nullptr);
     EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, match.type);
     EXPECT_FALSE(model()->CurrentTextIsURL());
diff --git a/components/optimization_guide/hint_cache.cc b/components/optimization_guide/hint_cache.cc
index 1979232..8d3bf54 100644
--- a/components/optimization_guide/hint_cache.cc
+++ b/components/optimization_guide/hint_cache.cc
@@ -57,11 +57,10 @@
 }
 
 std::unique_ptr<StoreUpdateData> HintCache::CreateUpdateDataForFetchedHints(
-    base::Time update_time,
-    base::Time expiry_time) const {
+    base::Time update_time) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return optimization_guide_store_->CreateUpdateDataForFetchedHints(
-      update_time, expiry_time);
+      update_time);
 }
 
 void HintCache::UpdateComponentHints(
@@ -82,21 +81,21 @@
     std::unique_ptr<proto::GetHintsResponse> get_hints_response,
     base::Time update_time,
     base::OnceClosure callback) {
-  base::Time expiry_time = update_time;
-  if (get_hints_response->has_max_cache_duration()) {
-    expiry_time += base::TimeDelta().FromSeconds(
-        get_hints_response->max_cache_duration().seconds());
-  } else {
-    expiry_time += features::StoredFetchedHintsFreshnessDuration();
-  }
   std::unique_ptr<StoreUpdateData> fetched_hints_update_data =
-      CreateUpdateDataForFetchedHints(update_time, expiry_time);
+      CreateUpdateDataForFetchedHints(update_time);
   ProcessAndCacheHints(get_hints_response.get()->mutable_hints(),
                        fetched_hints_update_data.get());
   optimization_guide_store_->UpdateFetchedHints(
       std::move(fetched_hints_update_data), std::move(callback));
 }
 
+void HintCache::PurgeExpiredFetchedHints() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(optimization_guide_store_);
+
+  optimization_guide_store_->PurgeExpiredFetchedHints();
+}
+
 void HintCache::ClearFetchedHints() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(optimization_guide_store_);
diff --git a/components/optimization_guide/hint_cache.h b/components/optimization_guide/hint_cache.h
index e600fa8..1cfe81f 100644
--- a/components/optimization_guide/hint_cache.h
+++ b/components/optimization_guide/hint_cache.h
@@ -62,12 +62,9 @@
   // processing of the GetHintsResponse, hints are moved into the update data.
   // After processing is complete, the update data is provided to the backing
   // store to update hints. |update_time| specifies when the hints within the
-  // created update data will be scheduled to be updated. |expiry_time|
-  // specifies when the hints within the created update data will be expired
-  // from the store.
+  // created update data will be scheduled to be updated.
   std::unique_ptr<StoreUpdateData> CreateUpdateDataForFetchedHints(
-      base::Time update_time,
-      base::Time expiry_time) const;
+      base::Time update_time) const;
 
   // Updates the store's component data using the provided StoreUpdateData
   // and asynchronously runs the provided callback after the update finishes.
@@ -83,6 +80,10 @@
       base::Time update_time,
       base::OnceClosure callback);
 
+  // Purges fetched hints from the owned |optimization_guide_store| that have
+  // expired.
+  void PurgeExpiredFetchedHints();
+
   // Purges fetched hints from the owned |optimization_guide_store_| and resets
   // the host-keyed cache.
   void ClearFetchedHints();
diff --git a/components/optimization_guide/hint_cache_unittest.cc b/components/optimization_guide/hint_cache_unittest.cc
index 95c61cca..5d70a48 100644
--- a/components/optimization_guide/hint_cache_unittest.cc
+++ b/components/optimization_guide/hint_cache_unittest.cc
@@ -142,12 +142,12 @@
     RunUntilIdle();
   }
 
- private:
   void RunUntilIdle() {
     task_environment_.RunUntilIdle();
     base::RunLoop().RunUntilIdle();
   }
 
+ private:
   void OnStoreInitialized() { is_store_initialized_ = true; }
   void OnUpdateComponentHints() { are_component_hints_updated_ = true; }
   void OnLoadHint(const proto::Hint* hint) {
@@ -577,12 +577,10 @@
       std::make_unique<proto::GetHintsResponse>();
 
   // Set server-provided expiration time.
-  get_hints_response->mutable_max_cache_duration()->set_seconds(
-      kFetchedHintExpirationSecs);
-
   proto::Hint* hint = get_hints_response->add_hints();
   hint->set_key_representation(proto::HOST_SUFFIX);
   hint->set_key("host.domain.org");
+  hint->mutable_max_cache_duration()->set_seconds(kFetchedHintExpirationSecs);
   proto::PageHint* page_hint = hint->add_page_hints();
   page_hint->set_page_pattern("page pattern");
 
@@ -635,7 +633,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   std::unique_ptr<StoreUpdateData> update_data =
-      hint_cache()->CreateUpdateDataForFetchedHints(base::Time(), base::Time());
+      hint_cache()->CreateUpdateDataForFetchedHints(base::Time());
   ASSERT_TRUE(update_data);
 
   GURL url("https://whatever.com/r/werd");
@@ -655,7 +653,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   std::unique_ptr<StoreUpdateData> update_data =
-      hint_cache()->CreateUpdateDataForFetchedHints(base::Time(), base::Time());
+      hint_cache()->CreateUpdateDataForFetchedHints(base::Time());
   ASSERT_TRUE(update_data);
 
   GURL url("https://whatever.com/r/werd");
@@ -674,12 +672,55 @@
   EXPECT_FALSE(hint_cache()->GetURLKeyedHint(url));
 }
 
+TEST_F(HintCacheTest, PurgeExpiredFetchedHints) {
+  const int kMemoryCacheSize = 5;
+  CreateAndInitializeHintCache(kMemoryCacheSize);
+
+  std::unique_ptr<StoreUpdateData> update_data =
+      hint_cache()->CreateUpdateDataForFetchedHints(base::Time());
+  ASSERT_TRUE(update_data);
+
+  int cache_duration_in_secs = 60;
+
+  std::unique_ptr<proto::GetHintsResponse> get_hints_response =
+      std::make_unique<proto::GetHintsResponse>();
+
+  std::string host = "shouldpurge.com";
+  proto::Hint* hint1 = get_hints_response->add_hints();
+  hint1->set_key_representation(proto::HOST_SUFFIX);
+  hint1->set_key(host);
+  hint1->mutable_max_cache_duration()->set_seconds(cache_duration_in_secs);
+  proto::PageHint* page_hint1 = hint1->add_page_hints();
+  page_hint1->set_page_pattern("page pattern");
+  std::string host2 = "notpurged.com";
+  proto::Hint* hint2 = get_hints_response->add_hints();
+  hint2->set_key_representation(proto::HOST_SUFFIX);
+  hint2->set_key(host2);
+  hint2->mutable_max_cache_duration()->set_seconds(cache_duration_in_secs * 2);
+  proto::PageHint* page_hint2 = hint2->add_page_hints();
+  page_hint2->set_page_pattern("page pattern");
+
+  base::Time stored_time = base::Time().Now();
+  UpdateFetchedHintsAndWait(std::move(get_hints_response), stored_time);
+  EXPECT_TRUE(are_fetched_hints_updated());
+  EXPECT_TRUE(hint_cache()->HasHint("shouldpurge.com"));
+  EXPECT_TRUE(hint_cache()->HasHint("notpurged.com"));
+
+  MoveClockForwardBy(base::TimeDelta().FromSeconds(cache_duration_in_secs + 1));
+
+  hint_cache()->PurgeExpiredFetchedHints();
+  RunUntilIdle();
+
+  EXPECT_FALSE(hint_cache()->HasHint("shouldpurge.com"));
+  EXPECT_TRUE(hint_cache()->HasHint("notpurged.com"));
+}
+
 TEST_F(HintCacheTest, ClearFetchedHints) {
   const int kMemoryCacheSize = 5;
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   std::unique_ptr<StoreUpdateData> update_data =
-      hint_cache()->CreateUpdateDataForFetchedHints(base::Time(), base::Time());
+      hint_cache()->CreateUpdateDataForFetchedHints(base::Time());
   ASSERT_TRUE(update_data);
 
   GURL url("https://whatever.com/r/werd");
@@ -720,7 +761,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   std::unique_ptr<StoreUpdateData> update_data =
-      hint_cache()->CreateUpdateDataForFetchedHints(base::Time(), base::Time());
+      hint_cache()->CreateUpdateDataForFetchedHints(base::Time());
   ASSERT_TRUE(update_data);
 
   GURL https_url("https://whatever.com/r/werd");
diff --git a/components/optimization_guide/optimization_guide_store.cc b/components/optimization_guide/optimization_guide_store.cc
index 7bfc4758..533b59e 100644
--- a/components/optimization_guide/optimization_guide_store.cc
+++ b/components/optimization_guide/optimization_guide_store.cc
@@ -165,13 +165,11 @@
 
 std::unique_ptr<StoreUpdateData>
 OptimizationGuideStore::CreateUpdateDataForFetchedHints(
-    base::Time update_time,
-    base::Time expiry_time) const {
+    base::Time update_time) const {
   // Create and returns a StoreUpdateData object. This object has has hints
   // from the GetHintsResponse moved into and organizes them in a format
   // usable by the store. The object will be store with UpdateFetchedData().
-  return StoreUpdateData::CreateFetchedStoreUpdateData(update_time,
-                                                       expiry_time);
+  return StoreUpdateData::CreateFetchedStoreUpdateData(update_time);
 }
 
 void OptimizationGuideStore::UpdateComponentHints(
diff --git a/components/optimization_guide/optimization_guide_store.h b/components/optimization_guide/optimization_guide_store.h
index 7a82002..42978f6 100644
--- a/components/optimization_guide/optimization_guide_store.h
+++ b/components/optimization_guide/optimization_guide_store.h
@@ -127,8 +127,7 @@
   // Service so the store can expire old hints, remove hints specified by the
   // server, and store the fresh hints.
   std::unique_ptr<StoreUpdateData> CreateUpdateDataForFetchedHints(
-      base::Time update_time,
-      base::Time expiry_time) const;
+      base::Time update_time) const;
 
   // Updates the component hints and version contained within the store. When
   // this is called, all pre-existing component hints within the store is purged
diff --git a/components/optimization_guide/optimization_guide_store_unittest.cc b/components/optimization_guide/optimization_guide_store_unittest.cc
index c468415..a632bd16 100644
--- a/components/optimization_guide/optimization_guide_store_unittest.cc
+++ b/components/optimization_guide/optimization_guide_store_unittest.cc
@@ -1418,9 +1418,7 @@
   InitializeStore(schema_state);
 
   std::unique_ptr<StoreUpdateData> update_data =
-      guide_store()->CreateUpdateDataForFetchedHints(
-          update_time, update_time + optimization_guide::features::
-                                         StoredFetchedHintsFreshnessDuration());
+      guide_store()->CreateUpdateDataForFetchedHints(update_time);
   ASSERT_TRUE(update_data);
   SeedFetchedUpdateData(update_data.get(), update_hint_count);
   UpdateFetchedHints(std::move(update_data));
@@ -1463,10 +1461,7 @@
 
   // Add fetched hints to the store that overlap with the same hosts as the
   // initial set.
-  update_data = guide_store()->CreateUpdateDataForFetchedHints(
-      update_time,
-      update_time +
-          optimization_guide::features::StoredFetchedHintsFreshnessDuration());
+  update_data = guide_store()->CreateUpdateDataForFetchedHints(update_time);
 
   proto::Hint hint;
   hint.set_key("domain2.org");
@@ -1522,8 +1517,7 @@
 
   // Add fetched hints to the store that overlap with the same hosts as the
   // initial set.
-  update_data = guide_store()->CreateUpdateDataForFetchedHints(
-      update_time, update_time + base::TimeDelta().FromDays(7));
+  update_data = guide_store()->CreateUpdateDataForFetchedHints(update_time);
 
   proto::Hint fetched_hint1;
   fetched_hint1.set_key("domain2.org");
@@ -1584,10 +1578,7 @@
   host_suffix = "host.domain2.org";
   EXPECT_TRUE(guide_store()->FindHintEntryKey(host_suffix, &hint_entry_key));
 
-  update_data = guide_store()->CreateUpdateDataForFetchedHints(
-      update_time,
-      update_time +
-          optimization_guide::features::StoredFetchedHintsFreshnessDuration());
+  update_data = guide_store()->CreateUpdateDataForFetchedHints(update_time);
   proto::Hint new_hint;
   new_hint.set_key("domain1.org");
   new_hint.set_key_representation(proto::HOST_SUFFIX);
@@ -1634,31 +1625,37 @@
 
   // Add fetched hints to the store that overlap with the same hosts as the
   // initial set.
-  update_data = guide_store()->CreateUpdateDataForFetchedHints(
-      update_time, update_time + base::TimeDelta().FromDays(7));
+  update_data = guide_store()->CreateUpdateDataForFetchedHints(update_time);
 
   proto::Hint fetched_hint1;
   fetched_hint1.set_key("domain2.org");
   fetched_hint1.set_key_representation(proto::HOST_SUFFIX);
+  fetched_hint1.mutable_max_cache_duration()->set_seconds(
+      base::TimeDelta::FromDays(7).InSeconds());
   update_data->MoveHintIntoUpdateData(std::move(fetched_hint1));
   proto::Hint fetched_hint2;
   fetched_hint2.set_key("domain3.org");
   fetched_hint2.set_key_representation(proto::HOST_SUFFIX);
+  fetched_hint1.mutable_max_cache_duration()->set_seconds(
+      base::TimeDelta::FromDays(7).InSeconds());
   update_data->MoveHintIntoUpdateData(std::move(fetched_hint2));
 
   UpdateFetchedHints(std::move(update_data));
 
   // Add expired fetched hints to the store.
-  update_data = guide_store()->CreateUpdateDataForFetchedHints(
-      update_time, update_time - base::TimeDelta().FromDays(7));
+  update_data = guide_store()->CreateUpdateDataForFetchedHints(update_time);
 
   proto::Hint fetched_hint3;
   fetched_hint1.set_key("domain4.org");
   fetched_hint1.set_key_representation(proto::HOST_SUFFIX);
+  fetched_hint1.mutable_max_cache_duration()->set_seconds(
+      base::TimeDelta::FromDays(-7).InSeconds());
   update_data->MoveHintIntoUpdateData(std::move(fetched_hint1));
   proto::Hint fetched_hint4;
   fetched_hint2.set_key("domain5.org");
   fetched_hint2.set_key_representation(proto::HOST_SUFFIX);
+  fetched_hint2.mutable_max_cache_duration()->set_seconds(
+      base::TimeDelta::FromDays(-7).InSeconds());
   update_data->MoveHintIntoUpdateData(std::move(fetched_hint2));
 
   UpdateFetchedHints(std::move(update_data));
@@ -1699,12 +1696,13 @@
   UpdateComponentHints(std::move(update_data));
 
   // Add fetched hints to the store that expired.
-  update_data = guide_store()->CreateUpdateDataForFetchedHints(
-      update_time, update_time - base::TimeDelta().FromDays(10));
+  update_data = guide_store()->CreateUpdateDataForFetchedHints(update_time);
 
   proto::Hint fetched_hint1;
   fetched_hint1.set_key("domain2.org");
   fetched_hint1.set_key_representation(proto::HOST_SUFFIX);
+  fetched_hint1.mutable_max_cache_duration()->set_seconds(
+      base::TimeDelta().FromDays(-10).InSeconds());
   update_data->MoveHintIntoUpdateData(std::move(fetched_hint1));
   proto::Hint fetched_hint2;
   fetched_hint2.set_key("domain3.org");
diff --git a/components/optimization_guide/store_update_data.cc b/components/optimization_guide/store_update_data.cc
index 6bdd5f9..026743d 100644
--- a/components/optimization_guide/store_update_data.cc
+++ b/components/optimization_guide/store_update_data.cc
@@ -5,6 +5,7 @@
 #include "components/optimization_guide/store_update_data.h"
 
 #include "base/strings/string_number_conversions.h"
+#include "components/optimization_guide/optimization_guide_features.h"
 #include "components/optimization_guide/optimization_guide_store.h"
 #include "components/optimization_guide/proto/hint_cache.pb.h"
 #include "components/optimization_guide/proto/hints.pb.h"
@@ -24,12 +25,11 @@
 
 // static
 std::unique_ptr<StoreUpdateData> StoreUpdateData::CreateFetchedStoreUpdateData(
-    base::Time fetch_update_time,
-    base::Time expiry_time) {
+    base::Time fetch_update_time) {
   std::unique_ptr<StoreUpdateData> update_data(
       new StoreUpdateData(base::Optional<base::Version>(),
                           base::Optional<base::Time>(fetch_update_time),
-                          base::Optional<base::Time>(expiry_time)));
+                          base::Optional<base::Time>()));
   return update_data;
 }
 
@@ -146,9 +146,16 @@
     entry_proto.set_entry_type(static_cast<proto::StoreEntryType>(
         OptimizationGuideStore::StoreEntryType::kComponentHint));
   } else if (update_time()) {
-    DCHECK(expiry_time());
-    entry_proto.set_expiry_time_secs(
-        expiry_time_->ToDeltaSinceWindowsEpoch().InSeconds());
+    base::TimeDelta expiry_duration;
+    if (hint.has_max_cache_duration()) {
+      expiry_duration =
+          base::TimeDelta().FromSeconds(hint.max_cache_duration().seconds());
+    } else {
+      expiry_duration = features::StoredFetchedHintsFreshnessDuration();
+    }
+    entry_proto.set_expiry_time_secs((base::Time::Now() + expiry_duration)
+                                         .ToDeltaSinceWindowsEpoch()
+                                         .InSeconds());
     entry_proto.set_entry_type(static_cast<proto::StoreEntryType>(
         OptimizationGuideStore::StoreEntryType::kFetchedHint));
   }
diff --git a/components/optimization_guide/store_update_data.h b/components/optimization_guide/store_update_data.h
index c175fbbc..e1d948b 100644
--- a/components/optimization_guide/store_update_data.h
+++ b/components/optimization_guide/store_update_data.h
@@ -37,8 +37,7 @@
 
   // Creates an update data object for a fetched hint update.
   static std::unique_ptr<StoreUpdateData> CreateFetchedStoreUpdateData(
-      base::Time fetch_update_time,
-      base::Time expiry_time);
+      base::Time fetch_update_time);
 
   // Creates an update data object for a prediction model update.
   static std::unique_ptr<StoreUpdateData>
diff --git a/components/optimization_guide/store_update_data_unittest.cc b/components/optimization_guide/store_update_data_unittest.cc
index 2d2b91f..682209c 100644
--- a/components/optimization_guide/store_update_data_unittest.cc
+++ b/components/optimization_guide/store_update_data_unittest.cc
@@ -45,7 +45,7 @@
   EXPECT_EQ(3ul, component_update->TakeUpdateEntries()->size());
 }
 
-TEST(StoreUpdateDataTest, BuildFetchUpdateData) {
+TEST(StoreUpdateDataTest, BuildFetchUpdateDataUsesDefaultCacheDuration) {
   // Verify creating a Fetched Hint update package.
   base::Time update_time = base::Time::Now();
   proto::Hint hint1;
@@ -55,16 +55,64 @@
   page_hint1->set_page_pattern("slowpage");
 
   std::unique_ptr<StoreUpdateData> fetch_update =
-      StoreUpdateData::CreateFetchedStoreUpdateData(
-          update_time, update_time + optimization_guide::features::
-                                         StoredFetchedHintsFreshnessDuration());
+      StoreUpdateData::CreateFetchedStoreUpdateData(update_time);
   fetch_update->MoveHintIntoUpdateData(std::move(hint1));
   EXPECT_FALSE(fetch_update->component_version().has_value());
   EXPECT_TRUE(fetch_update->update_time().has_value());
   EXPECT_EQ(update_time, *fetch_update->update_time());
   // Verify there are 2 store entries: 1 for the metadata entry plus
   // the 1 added hint entries.
-  EXPECT_EQ(2ul, fetch_update->TakeUpdateEntries()->size());
+  const auto update_entries = fetch_update->TakeUpdateEntries();
+  EXPECT_EQ(2ul, update_entries->size());
+  // Verify expiry time taken from hint rather than the default expiry time of
+  // the store update data.
+  for (const auto& entry : *update_entries) {
+    proto::StoreEntry store_entry = entry.second;
+    if (store_entry.entry_type() == proto::FETCHED_HINT) {
+      base::Time expected_expiry_time =
+          base::Time::Now() + features::StoredFetchedHintsFreshnessDuration();
+      EXPECT_EQ(expected_expiry_time.ToDeltaSinceWindowsEpoch().InSeconds(),
+                store_entry.expiry_time_secs());
+      break;
+    }
+  }
+}
+
+TEST(StoreUpdateDataTest,
+     BuildFetchUpdateDataUsesCacheDurationFromHintIfAvailable) {
+  // Verify creating a Fetched Hint update package.
+  int max_cache_duration_secs = 60;
+  base::Time update_time = base::Time::Now();
+  proto::Hint hint1;
+  hint1.set_key("foo.org");
+  hint1.set_key_representation(proto::HOST_SUFFIX);
+  hint1.mutable_max_cache_duration()->set_seconds(max_cache_duration_secs);
+  proto::PageHint* page_hint1 = hint1.add_page_hints();
+  page_hint1->set_page_pattern("slowpage");
+
+  std::unique_ptr<StoreUpdateData> fetch_update =
+      StoreUpdateData::CreateFetchedStoreUpdateData(update_time);
+  fetch_update->MoveHintIntoUpdateData(std::move(hint1));
+  EXPECT_FALSE(fetch_update->component_version().has_value());
+  EXPECT_TRUE(fetch_update->update_time().has_value());
+  EXPECT_EQ(update_time, *fetch_update->update_time());
+  // Verify there are 2 store entries: 1 for the metadata entry plus
+  // the 1 added hint entries.
+  const auto update_entries = fetch_update->TakeUpdateEntries();
+  EXPECT_EQ(2ul, update_entries->size());
+  // Verify expiry time taken from hint rather than the default expiry time of
+  // the store update data.
+  for (const auto& entry : *update_entries) {
+    proto::StoreEntry store_entry = entry.second;
+    if (store_entry.entry_type() == proto::FETCHED_HINT) {
+      base::Time expected_expiry_time =
+          base::Time::Now() +
+          base::TimeDelta::FromSeconds(max_cache_duration_secs);
+      EXPECT_EQ(expected_expiry_time.ToDeltaSinceWindowsEpoch().InSeconds(),
+                store_entry.expiry_time_secs());
+      break;
+    }
+  }
 }
 
 TEST(StoreUpdateDataTest, BuildPredictionModelUpdateData) {
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc
index 0bfbe610..1fbbdda 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -22,6 +22,7 @@
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/ssl_status.h"
 #include "content/public/browser/web_contents.h"
@@ -87,14 +88,6 @@
 ContentPasswordManagerDriver*
 ContentPasswordManagerDriver::GetForRenderFrameHost(
     content::RenderFrameHost* render_frame_host) {
-  // With back-forward cache, the page stays alive and its mojo connections are
-  // not closed. The page would be frozen and would eventually stop doing work,
-  // but the messages can still arrive when the frame is not active. Given that
-  // autofill logic can show popups, it's problematic - prevent pages using
-  // autofill from entering back-forward cache for now to avoid it.
-  content::BackForwardCache::DisableForRenderFrameHost(
-      render_frame_host, "password_manager::ContentPasswordManagerDriver");
-
   ContentPasswordManagerDriverFactory* factory =
       ContentPasswordManagerDriverFactory::FromWebContents(
           content::WebContents::FromRenderFrameHost(render_frame_host));
@@ -198,6 +191,14 @@
   return is_main_frame_;
 }
 
+bool ContentPasswordManagerDriver::CanShowAutofillUi() const {
+  // TODO(crbug.com/1041021): Use RenderFrameHost::IsActive here when available.
+  return !content::BackForwardCache::EvictIfCached(
+      {render_frame_host_->GetProcess()->GetID(),
+       render_frame_host_->GetRoutingID()},
+      "ContentPasswordManagerDriver::CanShowAutofillUi");
+}
+
 const GURL& ContentPasswordManagerDriver::GetLastCommittedURL() const {
   return render_frame_host_->GetLastCommittedURL();
 }
diff --git a/components/password_manager/content/browser/content_password_manager_driver.h b/components/password_manager/content/browser/content_password_manager_driver.h
index ed2ab85..e8b2cef 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.h
+++ b/components/password_manager/content/browser/content_password_manager_driver.h
@@ -77,6 +77,7 @@
   void SendLoggingAvailability() override;
   autofill::AutofillDriver* GetAutofillDriver() override;
   bool IsMainFrame() const override;
+  bool CanShowAutofillUi() const override;
   const GURL& GetLastCommittedURL() const override;
   void AnnotateFieldsWithParsingResult(
       const autofill::ParsingResult& parsing_result) override;
diff --git a/components/password_manager/core/browser/password_autofill_manager.cc b/components/password_manager/core/browser/password_autofill_manager.cc
index d53f3e6..06bd330 100644
--- a/components/password_manager/core/browser/password_autofill_manager.cc
+++ b/components/password_manager/core/browser/password_autofill_manager.cc
@@ -357,6 +357,9 @@
     suggestions.push_back(suggestion);
   }
 
+  if (!password_manager_driver_->CanShowAutofillUi())
+    return;
+
   metrics_util::LogPasswordDropdownShown(
       metrics_util::PasswordDropdownState::kStandard,
       password_client_->IsIncognito());
@@ -408,6 +411,9 @@
         metrics_util::SHOW_ALL_SAVED_PASSWORDS_CONTEXT_PASSWORD);
   }
 
+  if (!password_manager_driver_->CanShowAutofillUi())
+    return false;
+
   metrics_util::LogPasswordDropdownShown(
       metrics_util::PasswordDropdownState::kStandardGenerate,
       password_client_->IsIncognito());
diff --git a/components/password_manager/core/browser/password_manager_driver.h b/components/password_manager/core/browser/password_manager_driver.h
index 74f28d9..e1d81074 100644
--- a/components/password_manager/core/browser/password_manager_driver.h
+++ b/components/password_manager/core/browser/password_manager_driver.h
@@ -105,6 +105,10 @@
   // Return true iff the driver corresponds to the main frame.
   virtual bool IsMainFrame() const = 0;
 
+  // Returns true iff a popup can be shown on the behalf of the associated
+  // frame.
+  virtual bool CanShowAutofillUi() const = 0;
+
   // Returns the last committed URL of the frame.
   virtual const GURL& GetLastCommittedURL() const = 0;
 
diff --git a/components/password_manager/core/browser/stub_password_manager_driver.cc b/components/password_manager/core/browser/stub_password_manager_driver.cc
index 9ee8b0cc..d0c05db 100644
--- a/components/password_manager/core/browser/stub_password_manager_driver.cc
+++ b/components/password_manager/core/browser/stub_password_manager_driver.cc
@@ -55,6 +55,10 @@
   return true;
 }
 
+bool StubPasswordManagerDriver::CanShowAutofillUi() const {
+  return true;
+}
+
 const GURL& StubPasswordManagerDriver::GetLastCommittedURL() const {
   return GURL::EmptyGURL();
 }
diff --git a/components/password_manager/core/browser/stub_password_manager_driver.h b/components/password_manager/core/browser/stub_password_manager_driver.h
index 6964f40..5ce5abeb 100644
--- a/components/password_manager/core/browser/stub_password_manager_driver.h
+++ b/components/password_manager/core/browser/stub_password_manager_driver.h
@@ -33,6 +33,7 @@
   PasswordAutofillManager* GetPasswordAutofillManager() override;
   autofill::AutofillDriver* GetAutofillDriver() override;
   bool IsMainFrame() const override;
+  bool CanShowAutofillUi() const override;
   const GURL& GetLastCommittedURL() const override;
 
  private:
diff --git a/components/safe_browsing/core/browser/safe_browsing_network_context.cc b/components/safe_browsing/core/browser/safe_browsing_network_context.cc
index ca31d367..228ab03 100644
--- a/components/safe_browsing/core/browser/safe_browsing_network_context.cc
+++ b/components/safe_browsing/core/browser/safe_browsing_network_context.cc
@@ -96,6 +96,7 @@
   network::mojom::URLLoaderFactory* GetURLLoaderFactory() {
     DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     if (!url_loader_factory_ || !url_loader_factory_.is_connected()) {
+      url_loader_factory_.reset();
       network::mojom::URLLoaderFactoryParamsPtr params =
           network::mojom::URLLoaderFactoryParams::New();
       params->process_id = network::mojom::kBrowserProcessId;
diff --git a/components/security_interstitials/core/common/resources/BUILD.gn b/components/security_interstitials/core/common/resources/BUILD.gn
index 42e99e6..087b931 100644
--- a/components/security_interstitials/core/common/resources/BUILD.gn
+++ b/components/security_interstitials/core/common/resources/BUILD.gn
@@ -13,9 +13,13 @@
 
 js_library("interstitial_common") {
   deps = [
+    "//ui/webui/resources/js:load_time_data",
     "//ui/webui/resources/js:util",
     "//ui/webui/resources/js:webui_resource_test",
   ]
+  if (is_ios) {
+    deps += [ "//ui/webui/resources/js/ios:web_ui" ]
+  }
 }
 
 js_library("interstitial_mobile_nav") {
diff --git a/components/security_interstitials/core/common/resources/interstitial_common.js b/components/security_interstitials/core/common/resources/interstitial_common.js
index 240aad20..11f087d 100644
--- a/components/security_interstitials/core/common/resources/interstitial_common.js
+++ b/components/security_interstitials/core/common/resources/interstitial_common.js
@@ -98,16 +98,25 @@
     }
     return;
   }
-// <if expr="not is_ios">
+  // <if expr="not is_ios">
   window.domAutomationController.send(cmd);
-// </if>
-// <if expr="is_ios">
-  // TODO(crbug.com/565877): Revisit message passing for WKWebView.
-  const iframe = document.createElement('IFRAME');
-  iframe.setAttribute('src', 'js-command:' + cmd);
-  document.documentElement.appendChild(iframe);
-  iframe.parentNode.removeChild(iframe);
-// </if>
+  // </if>
+  // <if expr="is_ios">
+  // TODO(crbug.com/987407): Used to send commands for non-committed
+  // interstitials on iOS. Should be deleted after committed interstitials are
+  // fully launched.
+  if (!loadTimeData.getBoolean('committed_interstitials_enabled')) {
+    const iframe = document.createElement('IFRAME');
+    iframe.setAttribute('src', 'js-command:' + cmd);
+    document.documentElement.appendChild(iframe);
+    iframe.parentNode.removeChild(iframe);
+  } else {
+    // Used to send commands for iOS committed interstitials.
+    /** @suppress {undefinedVars|missingProperties} */ (function() {
+      __gCrWeb.message.invokeOnHost({'command': 'blockingPage.' + cmd});
+    })();
+  }
+  // </if>
 }
 
 /**
diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
index 2ba6edf..17db64b 100644
--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
@@ -94,6 +94,7 @@
   ]
 
   deps = [
+    "//base",
     "//net",
   ]
 }
diff --git a/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc b/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc
index 6e6c393..3a552ae 100644
--- a/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc
+++ b/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc
@@ -130,10 +130,8 @@
     }
 
     if (keywords.size() < kTopN) {
-      std::string keywords_for_current_line;
-      base::TrimString(
-          url_formatter::top_domains::HostnameWithoutRegistry(line), ".",
-          &keywords_for_current_line);
+      std::string keywords_for_current_line =
+          url_formatter::top_domains::HostnameWithoutRegistry(line);
       CHECK(keywords_for_current_line.find('.') == std::string::npos);
 
       for (const std::string& keyword : base::SplitString(
diff --git a/components/url_formatter/spoof_checks/top_domains/top_domain_util.cc b/components/url_formatter/spoof_checks/top_domains/top_domain_util.cc
index 6515bf2..3559e26 100644
--- a/components/url_formatter/spoof_checks/top_domains/top_domain_util.cc
+++ b/components/url_formatter/spoof_checks/top_domains/top_domain_util.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/url_formatter/spoof_checks/top_domains/top_domain_util.h"
+#include "base/strings/string_util.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 
 namespace url_formatter {
@@ -13,9 +14,9 @@
 
 // Minimum length of the e2LD (the registered domain name without the registry)
 // to be considered for an edit distance comparison, including a trailing dot.
-// Thus: 'google.com' has of length 7 ("google.") and is long enough, while
-//       'abc.co.uk' has a length of 4 ("abc."), and will not be considered.
-const size_t kMinLengthForEditDistance = 6u;
+// Thus: 'google.com' has of length 6 ("google") and is long enough, while
+//       'abc.co.uk' has a length of 3 ("abc"), and will not be considered.
+const size_t kMinLengthForEditDistance = 5u;
 
 }  // namespace
 
@@ -31,7 +32,9 @@
           hostname.c_str(),
           net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
           net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
-  return hostname.substr(0, hostname.size() - registry_size);
+  std::string out = hostname.substr(0, hostname.size() - registry_size);
+  base::TrimString(out, ".", &out);
+  return out;
 }
 
 }  // namespace top_domains
diff --git a/components/url_formatter/spoof_checks/top_domains/top_domain_util.h b/components/url_formatter/spoof_checks/top_domains/top_domain_util.h
index 3f47fd0..bff3bd38 100644
--- a/components/url_formatter/spoof_checks/top_domains/top_domain_util.h
+++ b/components/url_formatter/spoof_checks/top_domains/top_domain_util.h
@@ -17,10 +17,7 @@
 
 // Returns the portion of hostname without the registry part.
 // E.g. For hostname = "google.com", the registry is "com", and the return value
-// will be "google.". Note that the return value contains a trailing dot. This
-// doesn't affect the result when comparing two different domains excluding
-// their registries (e.g. when checking google.com.tr and google.com.tw likely
-// belong to the same organization).
+// will be "google".
 std::string HostnameWithoutRegistry(const std::string& hostname);
 
 }  // namespace top_domains
diff --git a/components/url_formatter/spoof_checks/top_domains/top_domain_util_unittest.cc b/components/url_formatter/spoof_checks/top_domains/top_domain_util_unittest.cc
index 5def1d5..03ec5ec 100644
--- a/components/url_formatter/spoof_checks/top_domains/top_domain_util_unittest.cc
+++ b/components/url_formatter/spoof_checks/top_domains/top_domain_util_unittest.cc
@@ -15,14 +15,18 @@
   // Domain label ("abc") is too short, even though the whole string is long
   // enough.
   EXPECT_FALSE(IsEditDistanceCandidate("abc.com.tr"));
+  // Also too short.
+  EXPECT_FALSE(IsEditDistanceCandidate("abcd.com.tr"));
+  // Label has 5 characters, which is sufficient.
+  EXPECT_TRUE(IsEditDistanceCandidate("abcde.com.tr"));
 }
 
 TEST(TopDomainUtilTest, HostnameWithoutRegistry) {
   EXPECT_EQ("google", HostnameWithoutRegistry("google"));
-  EXPECT_EQ("google.", HostnameWithoutRegistry("google."));
-  EXPECT_EQ("google..", HostnameWithoutRegistry("google.."));
-  EXPECT_EQ("google.", HostnameWithoutRegistry("google.com"));
-  EXPECT_EQ("google.", HostnameWithoutRegistry("google.com.tr"));
+  EXPECT_EQ("google", HostnameWithoutRegistry("google."));
+  EXPECT_EQ("google", HostnameWithoutRegistry("google.."));
+  EXPECT_EQ("google", HostnameWithoutRegistry("google.com"));
+  EXPECT_EQ("google", HostnameWithoutRegistry("google.com.tr"));
   // blogspot.com is a private registry.
-  EXPECT_EQ("blogspot.", HostnameWithoutRegistry("blogspot.com"));
+  EXPECT_EQ("blogspot", HostnameWithoutRegistry("blogspot.com"));
 }
diff --git a/components/viz/BUILD.gn b/components/viz/BUILD.gn
index e8464da..b71518b 100644
--- a/components/viz/BUILD.gn
+++ b/components/viz/BUILD.gn
@@ -27,6 +27,7 @@
   ]
 
   data_deps = [
+    "//testing/buildbot/filters:viz_unittests_filters",
     "//third_party/mesa_headers",
   ]
 
diff --git a/components/viz/service/display/software_renderer.cc b/components/viz/service/display/software_renderer.cc
index ae25633..b7709d9 100644
--- a/components/viz/service/display/software_renderer.cc
+++ b/components/viz/service/display/software_renderer.cc
@@ -4,6 +4,7 @@
 
 #include "components/viz/service/display/software_renderer.h"
 
+#include "base/process/memory.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
 #include "cc/paint/image_provider.h"
@@ -617,9 +618,12 @@
                 geometry.result_selection.right(),
                 geometry.result_selection.bottom()});
   } else /* if (!request->is_scaled()) */ {
-    bitmap.allocPixels(SkImageInfo::MakeN32Premul(
+    SkImageInfo info = SkImageInfo::MakeN32Premul(
         geometry.result_selection.width(), geometry.result_selection.height(),
-        std::move(color_space)));
+        std::move(color_space));
+    if (!bitmap.tryAllocPixels(info))
+      return;
+
     if (!current_canvas_->readPixels(bitmap, geometry.readback_offset.x(),
                                      geometry.readback_offset.y()))
       return;
@@ -715,9 +719,12 @@
 
 SkBitmap SoftwareRenderer::GetBackdropBitmap(
     const gfx::Rect& bounding_rect) const {
+  SkImageInfo info =
+      SkImageInfo::MakeN32Premul(bounding_rect.width(), bounding_rect.height());
   SkBitmap bitmap;
-  bitmap.allocPixels(SkImageInfo::MakeN32Premul(bounding_rect.width(),
-                                                bounding_rect.height()));
+  if (!bitmap.tryAllocPixels(info))
+    base::TerminateBecauseOutOfMemory(info.computeMinByteSize());
+
   if (!current_canvas_->readPixels(bitmap, bounding_rect.x(),
                                    bounding_rect.y()))
     bitmap.reset();
@@ -846,7 +853,9 @@
   SkImageInfo info =
       SkImageInfo::MakeN32Premul(backdrop_rect.width(), backdrop_rect.height());
   SkBitmap bitmap;
-  bitmap.allocPixels(info, info.minRowBytes());
+  if (!bitmap.tryAllocPixels(info))
+    base::TerminateBecauseOutOfMemory(info.computeMinByteSize());
+
   SkCanvas canvas(bitmap);
 
   // Clip the filtered image to the (rounded) bounding box of the element.
@@ -922,7 +931,9 @@
       SkImageInfo::MakeN32(requirements.size.width(),
                            requirements.size.height(), kPremul_SkAlphaType);
   SkBitmap bitmap;
-  bitmap.allocPixels(info);
+  if (!bitmap.tryAllocPixels(info))
+    base::TerminateBecauseOutOfMemory(info.computeMinByteSize());
+
   render_pass_bitmaps_.emplace(render_pass_id, std::move(bitmap));
 }
 
diff --git a/components/viz/service/display_embedder/image_context_impl.cc b/components/viz/service/display_embedder/image_context_impl.cc
index e38ce38b..f4e05e5 100644
--- a/components/viz/service/display_embedder/image_context_impl.cc
+++ b/components/viz/service/display_embedder/image_context_impl.cc
@@ -50,7 +50,8 @@
 void ImageContextImpl::OnContextLost() {
   if (representation_) {
     representation_->OnContextLost();
-    representation_ = nullptr;
+    representation_scoped_read_access_.reset();
+    representation_.reset();
   }
 
   if (fallback_context_state_) {
diff --git a/components/viz/service/frame_sinks/begin_frame_tracker.cc b/components/viz/service/frame_sinks/begin_frame_tracker.cc
index 0a8bcf4..9df2df9 100644
--- a/components/viz/service/frame_sinks/begin_frame_tracker.cc
+++ b/components/viz/service/frame_sinks/begin_frame_tracker.cc
@@ -6,12 +6,22 @@
 
 namespace viz {
 
+BeginFrameTracker::BeginFrameTracker() = default;
+
+BeginFrameTracker::~BeginFrameTracker() = default;
+
 void BeginFrameTracker::SentBeginFrame(const BeginFrameArgs& args) {
+  ++total_begin_frames_sent_;
+  recent_begin_frames_sent_.SaveToBuffer(args.frame_id);
+
   ++outstanding_begin_frames_;
   last_frame_id_ = args.frame_id;
 }
 
 void BeginFrameTracker::ReceivedAck(const BeginFrameAck& ack) {
+  ++total_acks_received_;
+  recent_acks_received_.SaveToBuffer(ack.frame_id);
+
   if (MatchesLastSent(ack)) {
     // If the BeginFrameAck matches the last sent BeginFrameArgs then we know
     // the client has read every message from the pipe. While the client
diff --git a/components/viz/service/frame_sinks/begin_frame_tracker.h b/components/viz/service/frame_sinks/begin_frame_tracker.h
index 6b1e77e..1acebd8 100644
--- a/components/viz/service/frame_sinks/begin_frame_tracker.h
+++ b/components/viz/service/frame_sinks/begin_frame_tracker.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_VIZ_SERVICE_FRAME_SINKS_BEGIN_FRAME_TRACKER_H_
 #define COMPONENTS_VIZ_SERVICE_FRAME_SINKS_BEGIN_FRAME_TRACKER_H_
 
+#include "base/containers/ring_buffer.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
 #include "components/viz/service/viz_service_export.h"
 
@@ -23,6 +24,9 @@
   static constexpr int kLimitStop = 100;
   static constexpr int kLimitThrottle = 10;
 
+  BeginFrameTracker();
+  ~BeginFrameTracker();
+
   // To be called every time OnBeginFrame() is sent.
   void SentBeginFrame(const BeginFrameArgs& args);
 
@@ -38,6 +42,15 @@
   int outstanding_begin_frames_ = 0;
 
   BeginFrameId last_frame_id_;
+
+  // The following variables are keeping track of some information about sent
+  // and received BeginFrameIds. This information is just being tracked only so
+  // it's available in crash minidumps to help debug https://crbug.com/1011441.
+  // TODO(crbug.com/1011441): Remove this before it hits stable channel!
+  int total_begin_frames_sent_ = 0;
+  int total_acks_received_ = 0;
+  base::RingBuffer<BeginFrameId, 10> recent_begin_frames_sent_;
+  base::RingBuffer<BeginFrameId, 10> recent_acks_received_;
 };
 
 }  // namespace viz
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index c4bc9e5d..fc5bf567 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -367,6 +367,7 @@
     "android/java_interfaces_impl.h",
     "android/launcher_thread.cc",
     "android/launcher_thread.h",
+    "android/message_port_descriptor.cc",
     "android/scoped_surface_request_manager.cc",
     "android/scoped_surface_request_manager.h",
     "android/text_suggestion_host_android.cc",
diff --git a/content/browser/android/message_port_descriptor.cc b/content/browser/android/message_port_descriptor.cc
new file mode 100644
index 0000000..2cb32fc
--- /dev/null
+++ b/content/browser/android/message_port_descriptor.cc
@@ -0,0 +1,182 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This file contains the native implementation of MessagePortDescriptor.java,
+// which wraps blink::MessagePortDescriptor from
+// /third_party/blink/public/common/messaging/message_port_descriptor.h.
+
+#include "third_party/blink/public/common/messaging/message_port_descriptor.h"
+
+#include "base/android/jni_android.h"
+#include "base/android/jni_array.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/stl_util.h"
+#include "base/unguessable_token.h"
+#include "content/public/android/content_jni_headers/AppWebMessagePortDescriptor_jni.h"
+#include "mojo/public/cpp/system/message_pipe.h"
+
+using base::android::JavaRef;
+using base::android::ScopedJavaLocalRef;
+
+namespace blink {
+
+// Helper that provides access to protected member functions of
+// blink::MessagePortDescriptor.
+class MessagePortJavaAccess {
+ public:
+  static MessagePortDescriptor::InstrumentationDelegate* GetDelegate() {
+    return MessagePortDescriptor::GetInstrumentationDelegate();
+  }
+
+  static mojo::ScopedMessagePipeHandle TakeHandleToEntangleWithEmbedder(
+      blink::MessagePortDescriptor* message_port_descriptor) {
+    return message_port_descriptor->TakeHandleToEntangleWithEmbedder();
+  }
+
+  static void GiveDisentangledHandle(
+      blink::MessagePortDescriptor* message_port_descriptor,
+      mojo::ScopedMessagePipeHandle handle) {
+    message_port_descriptor->GiveDisentangledHandle(std::move(handle));
+  }
+
+  static void Init(blink::MessagePortDescriptor* message_port_descriptor,
+                   mojo::ScopedMessagePipeHandle handle,
+                   const base::UnguessableToken& id,
+                   uint64_t sequence_number) {
+    message_port_descriptor->Init(std::move(handle), id, sequence_number);
+  }
+
+  static mojo::ScopedMessagePipeHandle TakeHandle(
+      blink::MessagePortDescriptor* message_port_descriptor) {
+    return message_port_descriptor->TakeHandle();
+  }
+
+  static base::UnguessableToken TakeId(
+      blink::MessagePortDescriptor* message_port_descriptor) {
+    return message_port_descriptor->TakeId();
+  }
+
+  static uint64_t TakeSequenceNumber(
+      blink::MessagePortDescriptor* message_port_descriptor) {
+    return message_port_descriptor->TakeSequenceNumber();
+  }
+};
+
+}  // namespace blink
+
+namespace {
+
+mojo::ScopedMessagePipeHandle WrapNativeHandle(jint native_handle) {
+  MojoHandle raw_handle = static_cast<MojoHandle>(native_handle);
+  DCHECK_NE(MOJO_HANDLE_INVALID, raw_handle);
+  return mojo::ScopedMessagePipeHandle(mojo::MessagePipeHandle(raw_handle));
+}
+
+}  // namespace
+
+JNI_EXPORT ScopedJavaLocalRef<jlongArray>
+JNI_AppWebMessagePortDescriptor_CreatePair(JNIEnv* env) {
+  // Ownership is passed to the Java code. These are cleaned up when
+  // CloseAndDestroy is called.
+  blink::MessagePortDescriptor* port0 = new blink::MessagePortDescriptor();
+  blink::MessagePortDescriptor* port1 = new blink::MessagePortDescriptor();
+
+  blink::MessagePortDescriptorPair pipe;
+  *port0 = pipe.TakePort0();
+  *port1 = pipe.TakePort1();
+
+  uint64_t pointers[2] = {reinterpret_cast<uint64_t>(port0),
+                          reinterpret_cast<uint64_t>(port1)};
+  return base::android::ToJavaLongArray(
+      env, reinterpret_cast<const int64_t*>(pointers), base::size(pointers));
+}
+
+JNI_EXPORT jlong JNI_AppWebMessagePortDescriptor_Create(JNIEnv* env,
+                                                        jint native_handle,
+                                                        jlong id_low,
+                                                        jlong id_high,
+                                                        jlong sequence_number) {
+  base::UnguessableToken id = base::UnguessableToken::Deserialize(
+      static_cast<uint64_t>(id_high), static_cast<uint64_t>(id_low));
+
+  // Ownership is passed to the Java code. This is cleaned up when
+  // CloseAndDestroy is called.
+  blink::MessagePortDescriptor* port = new blink::MessagePortDescriptor();
+  blink::MessagePortJavaAccess::Init(port, WrapNativeHandle(native_handle), id,
+                                     sequence_number);
+
+  return reinterpret_cast<jlong>(port);
+}
+
+JNI_EXPORT jint JNI_AppWebMessagePortDescriptor_TakeHandleToEntangle(
+    JNIEnv* env,
+    jlong native_message_port_decriptor) {
+  blink::MessagePortDescriptor* message_port_descriptor =
+      reinterpret_cast<blink::MessagePortDescriptor*>(
+          native_message_port_decriptor);
+  DCHECK(message_port_descriptor->IsValid());
+  DCHECK(!message_port_descriptor->IsEntangled());
+
+  // Ownership of the underlying native handle is passed to Java. It is returned
+  // before tear-down via GiveDisentangledHandle.
+  mojo::ScopedMessagePipeHandle handle =
+      blink::MessagePortJavaAccess::TakeHandleToEntangleWithEmbedder(
+          message_port_descriptor);
+
+  return static_cast<jint>(handle.release().value());
+}
+
+JNI_EXPORT void JNI_AppWebMessagePortDescriptor_GiveDisentangledHandle(
+    JNIEnv* env,
+    jlong native_message_port_decriptor,
+    jint native_handle) {
+  blink::MessagePortDescriptor* message_port_descriptor =
+      reinterpret_cast<blink::MessagePortDescriptor*>(
+          native_message_port_decriptor);
+  DCHECK(message_port_descriptor->IsValid());
+  DCHECK(message_port_descriptor->IsEntangled());
+
+  blink::MessagePortJavaAccess::GiveDisentangledHandle(
+      message_port_descriptor, WrapNativeHandle(native_handle));
+}
+
+JNI_EXPORT ScopedJavaLocalRef<jlongArray>
+JNI_AppWebMessagePortDescriptor_PassSerialized(
+    JNIEnv* env,
+    jlong native_message_port_decriptor) {
+  blink::MessagePortDescriptor* message_port_descriptor =
+      reinterpret_cast<blink::MessagePortDescriptor*>(
+          native_message_port_decriptor);
+  DCHECK(message_port_descriptor->IsValid());
+  DCHECK(!message_port_descriptor->IsEntangled());
+
+  // Tear down and free the native object.
+  mojo::ScopedMessagePipeHandle handle =
+      blink::MessagePortJavaAccess::TakeHandle(message_port_descriptor);
+  base::UnguessableToken id =
+      blink::MessagePortJavaAccess::TakeId(message_port_descriptor);
+  uint64_t sequence_number =
+      blink::MessagePortJavaAccess::TakeSequenceNumber(message_port_descriptor);
+  delete message_port_descriptor;
+
+  // Serialize its contents and pass to the Java implementation.
+  uint64_t serialized[4] = {handle.release().value(),
+                            id.GetLowForSerialization(),
+                            id.GetHighForSerialization(), sequence_number};
+  return base::android::ToJavaLongArray(
+      env, reinterpret_cast<const int64_t*>(serialized),
+      base::size(serialized));
+}
+
+JNI_EXPORT void JNI_AppWebMessagePortDescriptor_CloseAndDestroy(
+    JNIEnv* env,
+    jlong native_message_port_decriptor) {
+  blink::MessagePortDescriptor* message_port_descriptor =
+      reinterpret_cast<blink::MessagePortDescriptor*>(
+          native_message_port_decriptor);
+  DCHECK(message_port_descriptor->IsValid());
+  DCHECK(!message_port_descriptor->IsEntangled());
+  message_port_descriptor->Reset();
+  delete message_port_descriptor;
+}
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index 7ec27de..eebc94c 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -3018,7 +3018,7 @@
 
   // If something else modifies the contents of the about:blank page, then
   // we must revert to showing about:blank to avoid a URL spoof.
-  main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0));
+  main_test_rfh()->DidAccessInitialDocument();
   EXPECT_TRUE(contents()->HasAccessedInitialDocument());
   EXPECT_FALSE(controller.GetVisibleEntry());
   EXPECT_EQ(url, controller.GetPendingEntry()->GetURL());
@@ -3062,7 +3062,7 @@
 
   // If something else later modifies the contents of the about:blank page, then
   // we must revert to showing about:blank to avoid a URL spoof.
-  main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0));
+  main_test_rfh()->DidAccessInitialDocument();
   EXPECT_TRUE(contents()->HasAccessedInitialDocument());
   EXPECT_FALSE(controller.GetVisibleEntry());
   EXPECT_FALSE(controller.GetPendingEntry());
@@ -3100,7 +3100,7 @@
 
   // If something else later modifies the contents of the about:blank page, then
   // we must revert to showing about:blank to avoid a URL spoof.
-  main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0));
+  main_test_rfh()->DidAccessInitialDocument();
   EXPECT_TRUE(contents()->HasAccessedInitialDocument());
   EXPECT_FALSE(controller.GetVisibleEntry());
   EXPECT_EQ(url, controller.GetPendingEntry()->GetURL());
@@ -3140,7 +3140,7 @@
   // we must revert to showing about:blank to avoid a URL spoof.
   // Pending entry should also be discarded, because renderer doesn't want to
   // show this page anymore.
-  main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0));
+  main_test_rfh()->DidAccessInitialDocument();
   EXPECT_TRUE(contents()->HasAccessedInitialDocument());
   EXPECT_FALSE(controller.GetVisibleEntry());
   EXPECT_FALSE(controller.GetPendingEntry());
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index 8ea8cfe..087edf5 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -296,6 +296,17 @@
     headers->SetHeader(net::HttpRequestHeaders::kOrigin,
                        origin_header_value.Serialize());
   }
+
+  if (base::FeatureList::IsEnabled(features::kDocumentPolicy)) {
+    const blink::DocumentPolicy::FeatureState& required_policy =
+        frame_tree_node->effective_frame_policy().required_document_policy;
+    if (!required_policy.empty()) {
+      base::Optional<std::string> policy_header =
+          blink::DocumentPolicy::Serialize(required_policy);
+      DCHECK(policy_header);
+      headers->SetHeader("Sec-Required-Document-Policy", policy_header.value());
+    }
+  }
 }
 
 // Should match the definition of
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index bc110d4..093e7f1 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1675,8 +1675,6 @@
                                     OnRunJavaScriptDialog)
     IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_RunBeforeUnloadConfirm,
                                     OnRunBeforeUnloadConfirm)
-    IPC_MESSAGE_HANDLER(FrameHostMsg_DidAccessInitialDocument,
-                        OnDidAccessInitialDocument)
     IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeOpener, OnDidChangeOpener)
     IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeFramePolicy,
                         OnDidChangeFramePolicy)
@@ -2096,7 +2094,7 @@
     params->widget_params->routing_id =
         GetLocalRenderWidgetHost()->GetRoutingID();
     params->widget_params->visual_properties =
-        GetLocalRenderWidgetHost()->GetVisualProperties();
+        GetLocalRenderWidgetHost()->GetInitialVisualProperties();
   }
 
   GetProcess()->GetRendererInterface()->CreateFrame(std::move(params));
@@ -3354,7 +3352,7 @@
   return frame_tree_node_->HasTransientUserActivation();
 }
 
-void RenderFrameHostImpl::OnDidAccessInitialDocument() {
+void RenderFrameHostImpl::DidAccessInitialDocument() {
   delegate_->DidAccessInitialDocument();
 }
 
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 2b4cc6c..425f750 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -1299,6 +1299,7 @@
   void BubbleLogicalScrollInParentFrame(
       blink::mojom::ScrollDirection direction,
       ui::input_types::ScrollGranularity granularity) override;
+  void DidAccessInitialDocument() override;
 
  protected:
   friend class RenderFrameHostFactory;
@@ -1454,7 +1455,6 @@
                              JavaScriptDialogType dialog_type,
                              IPC::Message* reply_msg);
   void OnRunBeforeUnloadConfirm(bool is_reload, IPC::Message* reply_msg);
-  void OnDidAccessInitialDocument();
   void OnDidChangeOpener(int32_t opener_routing_id);
 
   void OnDidChangeFramePolicy(int32_t frame_routing_id,
diff --git a/content/browser/frame_host/render_frame_host_impl_browsertest.cc b/content/browser/frame_host/render_frame_host_impl_browsertest.cc
index bc9bc16..6cd3d42 100644
--- a/content/browser/frame_host/render_frame_host_impl_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_impl_browsertest.cc
@@ -12,6 +12,7 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
+#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -60,9 +61,11 @@
 #include "services/network/public/cpp/simple_url_loader.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "services/network/test/test_url_loader_factory.h"
+#include "services/service_manager/public/cpp/interface_provider.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/blink/public/mojom/browser_interface_broker.mojom-test-utils.h"
 #include "third_party/blink/public/mojom/choosers/file_chooser.mojom.h"
+#include "third_party/blink/public/mojom/remote_objects/remote_objects.mojom.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
@@ -3635,4 +3638,108 @@
   EXPECT_TRUE(web_contents->IsDocumentOnLoadCompletedInMainFrame());
 }
 
+// TODO(crbug.com/794320): the code below is temporary and will be removed when
+// Java Bridge is mojofied.
+#if defined(OS_ANDROID)
+const int32_t kObjectId = 5;
+const char* const kMethods[] = {"b", "c", "d"};
+
+class MockObject : public blink::mojom::RemoteObject {
+ public:
+  void HasMethod(const std::string& name, HasMethodCallback callback) override {
+    // TODO(crbug.com/794320): implement this.
+  }
+
+  void GetMethods(GetMethodsCallback callback) override {
+    std::move(callback).Run(
+        std::vector<std::string>(std::begin(kMethods), std::end(kMethods)));
+  }
+  void InvokeMethod(
+      const std::string& name,
+      std::vector<blink::mojom::RemoteInvocationArgumentPtr> arguments,
+      InvokeMethodCallback callback) override {
+    // TODO(crbug.com/794320): implement this.
+  }
+};
+
+class MockObjectHost : public blink::mojom::RemoteObjectHost {
+ public:
+  void GetObject(
+      int32_t object_id,
+      mojo::PendingReceiver<blink::mojom::RemoteObject> receiver) override {
+    EXPECT_EQ(kObjectId, object_id);
+    mojo::MakeSelfOwnedReceiver(std::make_unique<MockObject>(),
+                                std::move(receiver));
+  }
+
+  void ReleaseObject(int32_t) override {
+    // TODO(crbug.com/794320): implement this.
+  }
+
+  mojo::PendingRemote<blink::mojom::RemoteObjectHost> GetRemote() {
+    return receiver_.BindNewPipeAndPassRemote();
+  }
+
+ private:
+  mojo::Receiver<blink::mojom::RemoteObjectHost> receiver_{this};
+};
+
+class RenderFrameHostObserver : public WebContentsObserver {
+ public:
+  explicit RenderFrameHostObserver(WebContents* web_contents)
+      : WebContentsObserver(web_contents) {}
+
+ private:
+  void RenderFrameCreated(RenderFrameHost* render_frame_host) override {
+    mojo::Remote<blink::mojom::RemoteObjectGateway> gateway;
+    mojo::Remote<blink::mojom::RemoteObjectGatewayFactory> factory;
+    static_cast<RenderFrameHostImpl*>(render_frame_host)
+        ->GetRemoteInterfaces()
+        ->GetInterface(factory.BindNewPipeAndPassReceiver());
+    factory->CreateRemoteObjectGateway(host_.GetRemote(),
+                                       gateway.BindNewPipeAndPassReceiver());
+    gateway->AddNamedObject("testObject", kObjectId);
+  }
+
+  MockObjectHost host_;
+
+  DISALLOW_COPY_AND_ASSIGN(RenderFrameHostObserver);
+};
+
+// TODO(crbug.com/794320): Remove this when the new Java Bridge code is
+// integrated into WebView.
+// This test is a temporary way of verifying that the renderer part
+// works as expected.
+IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest,
+                       RemoteObjectEnumerateProperties) {
+  GURL url1(embedded_test_server()->GetURL("/empty.html"));
+
+  WebContents* web_contents = shell()->web_contents();
+  RenderFrameHostObserver rfh_observer(web_contents);
+
+  {
+    // The first load triggers RenderFrameCreated on |rfh_observer|, where the
+    // object injection happens.
+    TestNavigationObserver observer(web_contents);
+    shell()->LoadURL(url1);
+    observer.Wait();
+  }
+
+  {
+    // Injected objects become visible only after reload
+    // (see JavaBridgeBasicsTest#testEnumerateMembers in
+    // JavaBridgeBasicsTest.java).
+    TestNavigationObserver observer(web_contents);
+    web_contents->GetController().Reload(ReloadType::NORMAL, false);
+    observer.Wait();
+  }
+
+  const std::string kScript = "Object.keys(testObject).join(' ');";
+  auto result = EvalJs(web_contents, kScript);
+  EXPECT_EQ(base::JoinString(std::vector<std::string>(std::begin(kMethods),
+                                                      std::end(kMethods)),
+                             " "),
+            result.value.GetString());
+}
+#endif  // OS_ANDROID
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc
index 7790292..4a5f6821 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store.cc
@@ -268,16 +268,16 @@
 //     (for Files only) fileName [string-with-length]
 //   }
 // There is no length field; just read until you run out of data.
-std::string EncodeBlobInfos(const std::vector<IndexedDBBlobInfo*>& blob_info) {
+std::string EncodeBlobInfos(const std::vector<IndexedDBBlobInfo>& blob_info) {
   std::string ret;
-  for (const auto* info : blob_info) {
-    EncodeBool(info->is_file(), &ret);
-    EncodeVarInt(info->blob_number(), &ret);
-    EncodeStringWithLength(info->type(), &ret);
-    if (info->is_file())
-      EncodeStringWithLength(info->file_name(), &ret);
+  for (const auto& info : blob_info) {
+    EncodeBool(info.is_file(), &ret);
+    EncodeVarInt(info.blob_number(), &ret);
+    EncodeStringWithLength(info.type(), &ret);
+    if (info.is_file())
+      EncodeStringWithLength(info.file_name(), &ret);
     else
-      EncodeVarInt(info->size(), &ret);
+      EncodeVarInt(info.size(), &ret);
   }
   return ret;
 }
@@ -3005,14 +3005,12 @@
 }
 
 Status IndexedDBBackingStore::Transaction::HandleBlobPreTransaction(
-    BlobEntryKeyValuePairVec* new_blob_entries,
     WriteDescriptorVec* new_files_to_write) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(idb_sequence_checker_);
   DCHECK(backing_store_);
   if (backing_store_->is_incognito())
     return Status::OK();
 
-  DCHECK(new_blob_entries->empty());
   DCHECK(new_files_to_write->empty());
   DCHECK(blobs_to_write_.empty());
 
@@ -3039,7 +3037,6 @@
   }
 
   for (auto& iter : blob_change_map_) {
-    std::vector<IndexedDBBlobInfo*> new_blob_numbers;
     for (auto& entry : iter.second->mutable_blob_info()) {
       blobs_to_write_.push_back({database_id_, next_blob_number});
       if (entry.is_file() && !entry.file_path().empty()) {
@@ -3052,7 +3049,6 @@
                             entry.last_modified()));
       }
       entry.set_blob_number(next_blob_number);
-      new_blob_numbers.push_back(&entry);
       ++next_blob_number;
       result = indexed_db::UpdateBlobNumberGeneratorCurrentNumber(
           direct_txn.get(), database_id_, next_blob_number);
@@ -3065,8 +3061,6 @@
       NOTREACHED();
       return InternalInconsistencyStatus();
     }
-    new_blob_entries->push_back(
-        {blob_entry_key, EncodeBlobInfos(new_blob_numbers)});
   }
 
   AppendBlobsToRecoveryBlobJournal(direct_txn.get(), blobs_to_write_);
@@ -3146,9 +3140,8 @@
 
   Status s;
 
-  BlobEntryKeyValuePairVec new_blob_entries;
   WriteDescriptorVec new_files_to_write;
-  s = HandleBlobPreTransaction(&new_blob_entries, &new_files_to_write);
+  s = HandleBlobPreTransaction(&new_files_to_write);
   if (!s.ok()) {
     INTERNAL_WRITE_ERROR_UNTESTED(TRANSACTION_COMMIT_METHOD);
     transaction_ = nullptr;
@@ -3168,9 +3161,8 @@
 
   if (!new_files_to_write.empty()) {
     // This kicks off the writes of the new blobs, if any.
-    // This call will zero out new_blob_entries and new_files_to_write.
-    return WriteNewBlobs(&new_blob_entries, &new_files_to_write,
-                         std::move(callback));
+    // This call will zero out new_files_to_write.
+    return WriteNewBlobs(&new_files_to_write, std::move(callback));
   } else {
     return std::move(callback).Run(
         BlobWriteResult::kRunPhaseTwoAndReturnResult);
@@ -3191,6 +3183,28 @@
   BlobJournalType recovery_journal, active_journal, saved_recovery_journal,
       inactive_blobs;
   if (!blob_change_map_.empty()) {
+    if (!backing_store_->is_incognito()) {
+      for (auto& iter : blob_change_map_) {
+        BlobEntryKey blob_entry_key;
+        StringPiece key_piece(iter.second->object_store_data_key());
+        if (!BlobEntryKey::FromObjectStoreDataKey(&key_piece,
+                                                  &blob_entry_key)) {
+          NOTREACHED();
+          return InternalInconsistencyStatus();
+        }
+        // Add the new blob-table entry for each blob to the main transaction,
+        // or remove any entry that may exist if there's no new one.
+        if (iter.second->blob_info().empty()) {
+          s = transaction_->Remove(blob_entry_key.Encode());
+        } else {
+          std::string tmp = EncodeBlobInfos(iter.second->blob_info());
+          s = transaction_->Put(blob_entry_key.Encode(), &tmp);
+        }
+        if (!s.ok())
+          return s;
+      }
+    }
+
     IDB_TRACE("IndexedDBBackingStore::Transaction.BlobJournal");
     // Read the persisted states of the recovery/live blob journals,
     // so that they can be updated correctly by the transaction.
@@ -3280,7 +3294,6 @@
 }
 
 leveldb::Status IndexedDBBackingStore::Transaction::WriteNewBlobs(
-    BlobEntryKeyValuePairVec* new_blob_entries,
     WriteDescriptorVec* new_files_to_write,
     BlobWriteCallback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(idb_sequence_checker_);
@@ -3289,19 +3302,7 @@
   DCHECK(backing_store_);
   DCHECK(!new_files_to_write->empty());
   DCHECK_GT(database_id_, 0);
-  leveldb::Status s;
-  for (auto& blob_entry_iter : *new_blob_entries) {
-    // Add the new blob-table entry for each blob to the main transaction, or
-    // remove any entry that may exist if there's no new one.
-    if (blob_entry_iter.second.empty()) {
-      s = transaction_->Remove(blob_entry_iter.first.Encode());
-    } else {
-      s = transaction_->Put(blob_entry_iter.first.Encode(),
-                            &blob_entry_iter.second);
-    }
-    if (!s.ok())
-      return s;
-  }
+
   // Creating the writer will start it going asynchronously. The transaction
   // can be destructed before the callback is triggered.
 
diff --git a/content/browser/indexed_db/indexed_db_backing_store.h b/content/browser/indexed_db/indexed_db_backing_store.h
index 9a5c792c..024215a 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.h
+++ b/content/browser/indexed_db/indexed_db_backing_store.h
@@ -149,7 +149,6 @@
     // them to the recovery blob journal directly (i.e. not as part of the
     // transaction). Populates blobs_to_write_.
     leveldb::Status HandleBlobPreTransaction(
-        BlobEntryKeyValuePairVec* new_blob_entries,
         WriteDescriptorVec* new_files_to_write);
 
     // Called by CommitPhaseOne: Populates blob_files_to_remove_ by
@@ -161,8 +160,7 @@
     // Called by CommitPhaseOne: Kicks off the asynchronous writes of blobs
     // identified in HandleBlobPreTransaction. The callback will be called
     // eventually on success or failure.
-    leveldb::Status WriteNewBlobs(BlobEntryKeyValuePairVec* new_blob_entries,
-                                  WriteDescriptorVec* new_files_to_write,
+    leveldb::Status WriteNewBlobs(WriteDescriptorVec* new_files_to_write,
                                   BlobWriteCallback callback);
 
     // Called by CommitPhaseTwo: Partition blob references in blobs_to_remove_
diff --git a/content/browser/indexed_db/indexed_db_blob_storage.h b/content/browser/indexed_db/indexed_db_blob_storage.h
index 9612fb58..2a26794 100644
--- a/content/browser/indexed_db/indexed_db_blob_storage.h
+++ b/content/browser/indexed_db/indexed_db_blob_storage.h
@@ -129,11 +129,6 @@
   virtual ~ChainedBlobWriter() {}
 };
 
-// This holds a BlobEntryKey and the encoded IndexedDBBlobInfo vector stored
-// under that key.
-typedef std::vector<std::pair<BlobEntryKey, std::string>>
-    BlobEntryKeyValuePairVec;
-
 // Reports that the recovery and/or active journals have been processed, and
 // blob files have been deleted.
 using BlobFilesCleanedCallback = base::RepeatingClosure;
diff --git a/content/browser/renderer_host/mock_render_widget_host.h b/content/browser/renderer_host/mock_render_widget_host.h
index 0f22b62..9ca0631 100644
--- a/content/browser/renderer_host/mock_render_widget_host.h
+++ b/content/browser/renderer_host/mock_render_widget_host.h
@@ -23,12 +23,12 @@
  public:
   // Allow poking at a few private members.
   using RenderWidgetHostImpl::frame_token_message_queue_;
+  using RenderWidgetHostImpl::GetInitialVisualProperties;
   using RenderWidgetHostImpl::GetVisualProperties;
   using RenderWidgetHostImpl::input_router_;
   using RenderWidgetHostImpl::is_hidden_;
   using RenderWidgetHostImpl::old_visual_properties_;
   using RenderWidgetHostImpl::RendererExited;
-  using RenderWidgetHostImpl::SetInitialVisualProperties;
   using RenderWidgetHostImpl::visual_properties_ack_pending_;
 
   ~MockRenderWidgetHost() override;
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 25fb8b4e..ad39a957 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -374,8 +374,7 @@
 
   // TODO(danakj): Make the visual_properties optional in the message.
   if (proxy_route_id == MSG_ROUTING_NONE) {
-    params->visual_properties = GetWidget()->GetVisualProperties();
-    GetWidget()->SetInitialVisualProperties(params->visual_properties);
+    params->visual_properties = GetWidget()->GetInitialVisualProperties();
   }
 
   // The RenderView is owned by this process. This call must be accompanied by a
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index c6df5dee..4058979 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -414,7 +414,9 @@
       continue;
     }
 
-    // If the widget is for a main frame, only add if it's not swapped out.
+    // If the widget is for a main frame, only add if there is a RenderWidget in
+    // the renderer process. When this is false, there is no main RenderFrame
+    // and so no RenderWidget for this RenderWidgetHost.
     if (owner_delegate->IsMainFrameActive())
       hosts->Add(widget);
   }
@@ -469,11 +471,6 @@
   return frame_sink_id_;
 }
 
-void RenderWidgetHostImpl::ResetSentVisualProperties() {
-  visual_properties_ack_pending_ = false;
-  old_visual_properties_.reset();
-}
-
 void RenderWidgetHostImpl::SendScreenRects() {
   if (!renderer_initialized_ || waiting_for_screen_rects_ack_)
     return;
@@ -516,12 +513,6 @@
     process_->UpdateClientPriority(this);
 }
 
-void RenderWidgetHostImpl::DidDestroyRenderWidget() {
-  if (owner_delegate_)
-    DCHECK(!owner_delegate_->IsMainFrameActive());
-  frame_token_message_queue_->Reset();
-}
-
 void RenderWidgetHostImpl::Init() {
   DCHECK(process_->IsInitializedAndNotDead());
 
@@ -724,6 +715,17 @@
 }
 #endif
 
+VisualProperties RenderWidgetHostImpl::GetInitialVisualProperties() {
+  VisualProperties initial_props = GetVisualProperties();
+
+  old_visual_properties_ = nullptr;
+  visual_properties_ack_pending_ =
+      DoesVisualPropertiesNeedAck(old_visual_properties_, initial_props);
+  old_visual_properties_ = std::make_unique<VisualProperties>(initial_props);
+
+  return initial_props;
+}
+
 VisualProperties RenderWidgetHostImpl::GetVisualProperties() {
   // This is only called while the RenderWidgetHost is attached to a delegate
   // still.
@@ -838,14 +840,6 @@
   return visual_properties;
 }
 
-void RenderWidgetHostImpl::SetInitialVisualProperties(
-    const VisualProperties& visual_properties) {
-  visual_properties_ack_pending_ =
-      DoesVisualPropertiesNeedAck(old_visual_properties_, visual_properties);
-  old_visual_properties_ =
-      std::make_unique<VisualProperties>(visual_properties);
-}
-
 bool RenderWidgetHostImpl::SynchronizeVisualProperties() {
   return SynchronizeVisualProperties(false);
 }
@@ -875,13 +869,17 @@
   // inactive, so there is no focused node, or anything to scroll and display.
   if (owner_delegate_ && !owner_delegate_->IsMainFrameActive())
     return false;
+  // This is similar to the above but when the renderer process has crashed, so
+  // more objects are gone than the RenderWidget.
+  if (!renderer_initialized_)
+    return false;
 
-  // Skip if the |delegate_| has already been detached because
-  // it's web contents is being deleted, or if LocalSurfaceIdAllocation is
-  // suppressed, as we are first updating our internal state from a child's
-  // request, before subsequently merging ids to send.
+  // Skip if the |delegate_| has already been detached because it's web contents
+  // is being deleted, or if LocalSurfaceIdAllocation is suppressed, as we are
+  // first updating our internal state from a child's request, before
+  // subsequently merging ids to send.
   if (visual_properties_ack_pending_ || !process_->IsInitializedAndNotDead() ||
-      !view_ || !view_->HasSize() || !renderer_initialized_ || !delegate_ ||
+      !view_ || !view_->HasSize() || !delegate_ ||
       surface_id_allocation_suppressed_ ||
       !view_->CanSynchronizeVisualProperties()) {
     return false;
@@ -1837,11 +1835,6 @@
 
   waiting_for_screen_rects_ack_ = false;
 
-  // Must reset these to ensure that keyboard events work with a new renderer.
-  suppress_events_until_keydown_ = false;
-
-  // Reset some fields in preparation for recovering from a crash.
-  ResetSentVisualProperties();
   // After the renderer crashes, the view is destroyed and so the
   // RenderWidgetHost cannot track its visibility anymore. We assume such
   // RenderWidgetHost to be invisible for the sake of internal accounting - be
@@ -1857,21 +1850,33 @@
       process_->UpdateClientPriority(this);
   }
 
-  // Reset this to ensure the hung renderer mechanism is working properly.
-  in_flight_event_count_ = 0;
-  StopInputEventAckTimeout();
-
   if (view_) {
     view_->RenderProcessGone();
-    view_.reset();  // The View should be deleted by RenderProcessGone.
+    SetView(nullptr);  // The View should be deleted by RenderProcessGone.
   }
 
+  ResetRenderWidgetState();
+}
+
+void RenderWidgetHostImpl::DidDestroyRenderWidget() {
+  if (owner_delegate_)
+    DCHECK(!owner_delegate_->IsMainFrameActive());
+  ResetRenderWidgetState();
+}
+
+void RenderWidgetHostImpl::ResetRenderWidgetState() {
+  // Must reset these to ensure that keyboard events work with a new
+  // RenderWidget.
+  suppress_events_until_keydown_ = false;
+
   // Reconstruct the input router to ensure that it has fresh state for a new
-  // renderer. Otherwise it may be stuck waiting for the old renderer to ack an
-  // event. (In particular, the above call to view_->RenderProcessGone will
+  // RenderWidget. Otherwise it may be stuck waiting for the old renderer to ack
+  // an event. (In particular, the above call to view_->RenderProcessGone() will
   // destroy the aura window, which may dispatch a synthetic mouse move.)
+  //
+  // This also stops the event ack timeout to ensure the hung renderer mechanism
+  // is working properly.
   SetupInputRouter();
-  synthetic_gesture_controller_.reset();
 
   frame_token_message_queue_->Reset();
 }
@@ -2158,11 +2163,11 @@
   Send(new WidgetMsg_SetBounds_ACK(routing_id_));
 }
 
-void RenderWidgetHostImpl::DidUpdateVisualProperties(
+void RenderWidgetHostImpl::OnLocalSurfaceIdChanged(
     const cc::RenderFrameMetadata& metadata) {
   TRACE_EVENT_WITH_FLOW1(
       "renderer_host,disabled-by-default-viz.surface_id_flow",
-      "RenderWidgetHostImpl::DidUpdateVisualProperties",
+      "RenderWidgetHostImpl::OnLocalSurfaceIdChanged",
       metadata.local_surface_id_allocation &&
               metadata.local_surface_id_allocation->IsValid()
           ? metadata.local_surface_id_allocation->local_surface_id()
@@ -2918,6 +2923,10 @@
   // DidDestroyRenderWidget() with data from the destroyed RenderWidget.
   if (owner_delegate_ && !owner_delegate_->IsMainFrameActive())
     return;
+  // This is similar to the above but when the renderer process has crashed, so
+  // more objects are gone than the RenderWidget.
+  if (!renderer_initialized_)
+    return;
 
   frame_token_message_queue_->DidProcessFrame(frame_token);
 }
@@ -3060,11 +3069,6 @@
       metadata.new_vertical_scroll_direction);
 }
 
-void RenderWidgetHostImpl::OnLocalSurfaceIdChanged(
-    const cc::RenderFrameMetadata& metadata) {
-  DidUpdateVisualProperties(metadata);
-}
-
 std::vector<viz::SurfaceId>
 RenderWidgetHostImpl::CollectSurfaceIdsForEviction() {
   RenderViewHostImpl* rvh = RenderViewHostImpl::From(this);
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index f6cda3a..dd9d0ec 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -544,10 +544,6 @@
   // mode.
   void GotResponseToKeyboardLockRequest(bool allowed);
 
-  // Resets state variables related to tracking pending updates to visual
-  // properties.
-  void ResetSentVisualProperties();
-
   // When the WebContents (which acts as the Delegate) is destroyed, this object
   // may still outlive it while the renderer is shutting down. In that case the
   // delegate pointer is removed (since it would be a UAF).
@@ -606,13 +602,12 @@
                      const gfx::Size& min_size,
                      const gfx::Size& max_size);
 
-  // Generates a filled in VisualProperties struct representing the current
-  // properties of this widget.
-  VisualProperties GetVisualProperties();
-
-  // Sets the |visual_properties| that were sent to the renderer bundled with
-  // the request to create a new RenderWidget.
-  void SetInitialVisualProperties(const VisualProperties& visual_properties);
+  // Returns the result of GetVisualProperties(), resetting and storing that
+  // value as what has been sent to the renderer. This should be called when
+  // getting VisualProperties that will be sent in order to create a
+  // RenderWidget, since the creation acts as the initial
+  // SynchronizeVisualProperties().
+  VisualProperties GetInitialVisualProperties();
 
   // Pushes updated visual properties to the renderer as well as whether the
   // focused node should be scrolled into view.
@@ -797,34 +792,18 @@
  private:
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest,
                            DontPostponeInputEventAckTimeout);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest, HideShowMessages);
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest, PendingUserActivationTimeout);
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest, RendererExitedNoDrag);
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest,
                            StopAndStartInputEventAckTimeout);
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest,
                            ShorterDelayInputEventAckTimeout);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest, SynchronizeVisualProperties);
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest,
                            AddAndRemoveInputEventObserver);
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostTest,
                            AddAndRemoveImeInputEventObserver);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest, AutoResizeWithScale);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest,
-                           AutoResizeWithBrowserInitiatedResize);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest,
-                           ChildAllocationAcceptedInParentWhileHidden);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest, Resize);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewChildFrameTest,
-                           ChildFrameAutoResizeUpdate);
   FRIEND_TEST_ALL_PREFIXES(DevToolsManagerTest,
                            NoUnresponsiveDialogInInspectedContents);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest,
-                           ChildAllocationAcceptedInParent);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest,
-                           ConflictingAllocationsResolve);
-  FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewMacTest,
-                           ChildAllocationAcceptedInParent);
   FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewMacTest,
                            ConflictingAllocationsResolve);
   FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest,
@@ -885,8 +864,13 @@
                                          const gfx::Rect& rect_to_zoom);
   void OnZoomToFindInPageRectInMainFrame(const gfx::Rect& rect_to_zoom);
 
-  // Called when visual properties have changed in the renderer.
-  void DidUpdateVisualProperties(const cc::RenderFrameMetadata& metadata);
+  // When the RenderWidget is destroyed, this resets states in the browser
+  // to be ready for a replacement RenderWidget with a clean start.
+  void ResetRenderWidgetState();
+
+  // Generates a filled in VisualProperties struct representing the current
+  // properties of this widget.
+  VisualProperties GetVisualProperties();
 
   // Returns true if the |new_visual_properties| differs from
   // |old_page_visual_properties| in a way that indicates a size changed.
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 6b9bfa4b..87faeb1 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -92,6 +92,7 @@
 using blink::WebTouchPoint;
 
 using testing::_;
+using testing::Return;
 
 namespace content {
 namespace  {
@@ -463,6 +464,7 @@
   MOCK_METHOD1(SetBackgroundOpaque, void(bool opaque));
   MOCK_METHOD1(UpdatePageVisualProperties,
                void(const VisualProperties& visual_properties));
+  MOCK_METHOD0(IsMainFrameActive, bool());
 };
 
 // RenderWidgetHostTest --------------------------------------------------------
@@ -508,12 +510,19 @@
                                              process_->GetNextRoutingID()));
     // Set up the RenderWidgetHost as being for a main frame.
     host_->set_owner_delegate(&mock_owner_delegate_);
-    view_.reset(new TestView(host_.get()));
+    // Act like there is no RenderWidget present in the renderer yet.
+    EXPECT_CALL(mock_owner_delegate_, IsMainFrameActive())
+        .WillRepeatedly(Return(false));
+
+    view_ = std::make_unique<TestView>(host_.get());
     ConfigureView(view_.get());
     host_->SetView(view_.get());
-    SetInitialVisualProperties();
     host_->Init();
     host_->DisableGestureDebounce();
+    // Act like we've created a RenderWidget.
+    host_->GetInitialVisualProperties();
+    EXPECT_CALL(mock_owner_delegate_, IsMainFrameActive())
+        .WillRepeatedly(Return(true));
 
     mojo::PendingRemote<mojom::RenderFrameMetadataObserver>
         renderer_render_frame_metadata_observer_remote;
@@ -556,11 +565,6 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  void SetInitialVisualProperties() {
-    VisualProperties visual_properties = host_->GetVisualProperties();
-    host_->SetInitialVisualProperties(visual_properties);
-  }
-
   virtual void ConfigureView(TestView* view) {
   }
 
@@ -803,7 +807,8 @@
   cc::RenderFrameMetadata metadata;
   metadata.viewport_size_in_pixels = original_size.size();
   metadata.local_surface_id_allocation = base::nullopt;
-  host_->DidUpdateVisualProperties(metadata);
+  static_cast<RenderFrameMetadataProvider::Observer&>(*host_)
+      .OnLocalSurfaceIdChanged(metadata);
   EXPECT_FALSE(host_->visual_properties_ack_pending_);
   EXPECT_EQ(1u, sink_->message_count());
 
@@ -833,7 +838,8 @@
   // immediately send a new resize message for the new size to the renderer.
   metadata.viewport_size_in_pixels = original_size.size();
   metadata.local_surface_id_allocation = base::nullopt;
-  host_->DidUpdateVisualProperties(metadata);
+  static_cast<RenderFrameMetadataProvider::Observer&>(*host_)
+      .OnLocalSurfaceIdChanged(metadata);
   EXPECT_TRUE(host_->visual_properties_ack_pending_);
   EXPECT_EQ(third_size.size(), host_->old_visual_properties_->new_size);
   EXPECT_EQ(1u, sink_->message_count());
@@ -843,7 +849,8 @@
   // Send the visual properties ACK for the latest size.
   metadata.viewport_size_in_pixels = third_size.size();
   metadata.local_surface_id_allocation = base::nullopt;
-  host_->DidUpdateVisualProperties(metadata);
+  static_cast<RenderFrameMetadataProvider::Observer&>(*host_)
+      .OnLocalSurfaceIdChanged(metadata);
   EXPECT_FALSE(host_->visual_properties_ack_pending_);
   EXPECT_EQ(third_size.size(), host_->old_visual_properties_->new_size);
   EXPECT_EQ(0u, sink_->message_count());
@@ -951,37 +958,60 @@
   EXPECT_FALSE(host_->visual_properties_ack_pending_);
 }
 
-// Test for crbug.com/25097. If a renderer crashes between a resize and the
-// corresponding update message, we must be sure to clear the visual properties
-// ACK logic.
-TEST_F(RenderWidgetHostTest, ResizeThenCrash) {
-  sink_->ClearMessages();
-  // Setting the bounds to a "real" rect should send out the notification.
-  view_->SetBounds(gfx::Rect(100, 100));
-  host_->SynchronizeVisualProperties();
-  // WidgetMsg_UpdateVisualProperties is sent to the renderer.
-  ASSERT_EQ(1u, sink_->message_count());
-  {
-    const IPC::Message* msg = sink_->GetMessageAt(0);
-    ASSERT_EQ(WidgetMsg_UpdateVisualProperties::ID, msg->type());
-    WidgetMsg_UpdateVisualProperties::Param params;
-    WidgetMsg_UpdateVisualProperties::Read(msg, &params);
-    VisualProperties visual_properties = std::get<0>(params);
-    // Size sent to the renderer.
-    EXPECT_EQ(gfx::Size(100, 100), visual_properties.new_size);
-  }
-  EXPECT_TRUE(host_->visual_properties_ack_pending_);
+TEST_F(RenderWidgetHostTest, ReceiveFrameTokenFromCrashedRenderer) {
+  // The Renderer sends a monotonically increasing frame token.
+  host_->DidProcessFrame(2);
 
-  // Simulate a renderer crash before an ACK for the UpdateVisualProperties
-  // message arrives. Ensure all the visual properties ACK logic is cleared.
-  // Must clear the view first so it doesn't get deleted.
+  // Simulate a renderer crash.
   host_->SetView(nullptr);
   host_->RendererExited();
-  EXPECT_FALSE(host_->visual_properties_ack_pending_);
-  EXPECT_EQ(nullptr, host_->old_visual_properties_);
 
-  // Reset the view so we can exit the test cleanly.
+  // Receive an in-flight frame token (it needs to monotonically increase)
+  // while the RenderWidget is gone.
+  host_->DidProcessFrame(3);
+
+  // The renderer is recreated.
   host_->SetView(view_.get());
+  // Make a new RenderWidget when the renderer is recreated. This should get
+  // properties that are intended to be sent to the renderer, obsoleting any
+  // previous SynchronizeVisualProperties() calls.
+  VisualProperties props = host_->GetInitialVisualProperties();
+  // The RenderWidget is recreated with the initial VisualProperties.
+  host_->Init();
+
+  // The new RenderWidget sends a frame token, which is lower than what the
+  // previous RenderWidget sent. This should be okay, as the expected token has
+  // been reset.
+  host_->DidProcessFrame(1);
+}
+
+TEST_F(RenderWidgetHostTest, ReceiveFrameTokenFromDeletedRenderWidget) {
+  // The RenderWidget sends a monotonically increasing frame token.
+  host_->DidProcessFrame(2);
+
+  // The RenderWidget is destroyed in the renderer process as the main frame
+  // is removed from this RenderWidgetHost's RenderWidgetView, but the
+  // RenderWidgetView is still kept around for another RenderFrame.
+  EXPECT_CALL(mock_owner_delegate_, IsMainFrameActive())
+      .WillRepeatedly(Return(false));
+  host_->DidDestroyRenderWidget();
+
+  // Receive an in-flight frame token (it needs to monotonically increase)
+  // while the RenderWidget is gone.
+  host_->DidProcessFrame(3);
+
+  // Make a new RenderWidget for the RenderWidget being recreated. This should
+  // get properties that are intended to be sent to the renderer, obsoleting any
+  // previous SynchronizeVisualProperties() calls.
+  VisualProperties props = host_->GetInitialVisualProperties();
+  // The RenderWidget is recreated with the initial VisualProperties.
+  EXPECT_CALL(mock_owner_delegate_, IsMainFrameActive())
+      .WillRepeatedly(Return(true));
+
+  // The new RenderWidget sends a frame token, which is lower than what the
+  // previous RenderWidget sent. This should be okay, as the expected token has
+  // been reset.
+  host_->DidProcessFrame(1);
 }
 
 // Unable to include render_widget_host_view_mac.h and compile.
@@ -1048,7 +1078,8 @@
   cc::RenderFrameMetadata metadata;
   metadata.viewport_size_in_pixels = gfx::Size(100, 100);
   metadata.local_surface_id_allocation = base::nullopt;
-  host_->DidUpdateVisualProperties(metadata);
+  static_cast<RenderFrameMetadataProvider::Observer&>(*host_)
+      .OnLocalSurfaceIdChanged(metadata);
 
   // Now unhide.
   process_->sink().ClearMessages();
@@ -1579,6 +1610,11 @@
 }
 
 TEST_F(RenderWidgetHostTest, RendererExitedResetsInputRouter) {
+  blink::WebMouseWheelEvent event;
+  event.phase = blink::WebMouseWheelEvent::kPhaseBegan;
+  host_->input_router()->SendWheelEvent(MouseWheelEventWithLatencyInfo(event));
+  ASSERT_TRUE(host_->input_router()->HasPendingEvents());
+
   // RendererExited will delete the view.
   host_->SetView(new TestView(host_.get()));
   host_->RendererExited();
@@ -1587,6 +1623,20 @@
   ASSERT_FALSE(host_->input_router()->HasPendingEvents());
 }
 
+TEST_F(RenderWidgetHostTest, DestroyingRenderWidgetResetsInputRouter) {
+  blink::WebMouseWheelEvent event;
+  event.phase = blink::WebMouseWheelEvent::kPhaseBegan;
+  host_->input_router()->SendWheelEvent(MouseWheelEventWithLatencyInfo(event));
+  ASSERT_TRUE(host_->input_router()->HasPendingEvents());
+
+  EXPECT_CALL(mock_owner_delegate_, IsMainFrameActive())
+      .WillRepeatedly(Return(false));
+  host_->DidDestroyRenderWidget();
+
+  // Make sure the input router is in a fresh state.
+  ASSERT_FALSE(host_->input_router()->HasPendingEvents());
+}
+
 // Regression test for http://crbug.com/401859 and http://crbug.com/522795.
 TEST_F(RenderWidgetHostTest, RendererExitedResetsIsHidden) {
   // RendererExited will delete the view.
@@ -1835,52 +1885,6 @@
   EXPECT_EQ(2u, host_->processed_frame_messages_count());
 }
 
-// Check that if the renderer crashes, we drop all queued messages and allow
-// smaller frame tokens to be sent by the renderer.
-TEST_F(RenderWidgetHostTest, FrameToken_RendererCrash) {
-  constexpr uint32_t frame_token1 = 10;
-  constexpr uint32_t frame_token2 = 1;
-  constexpr uint32_t frame_token3 = 1;
-
-  std::vector<IPC::Message> messages1;
-  std::vector<IPC::Message> messages3;
-  messages1.push_back(WidgetHostMsg_DidFirstVisuallyNonEmptyPaint(5));
-  messages3.push_back(WidgetHostMsg_DidFirstVisuallyNonEmptyPaint(6));
-
-  // If we don't do this, then RWHI destroys the view in RendererExited and
-  // then a crash occurs when we attempt to destroy it again in TearDown().
-  host_->SetView(nullptr);
-
-  host_->OnMessageReceived(
-      WidgetHostMsg_FrameSwapMessages(0, frame_token1, messages1));
-  EXPECT_EQ(1u, host_->frame_token_message_queue_->size());
-  EXPECT_EQ(0u, host_->processed_frame_messages_count());
-
-  host_->RendererExited();
-  EXPECT_EQ(0u, host_->frame_token_message_queue_->size());
-  EXPECT_EQ(0u, host_->processed_frame_messages_count());
-  host_->Init();
-
-  view_->OnFrameTokenChanged(frame_token2);
-  EXPECT_EQ(0u, host_->frame_token_message_queue_->size());
-  EXPECT_EQ(0u, host_->processed_frame_messages_count());
-
-  host_->RendererExited();
-  EXPECT_EQ(0u, host_->frame_token_message_queue_->size());
-  EXPECT_EQ(0u, host_->processed_frame_messages_count());
-  host_->SetView(view_.get());
-  host_->Init();
-
-  host_->OnMessageReceived(
-      WidgetHostMsg_FrameSwapMessages(0, frame_token3, messages3));
-  EXPECT_EQ(1u, host_->frame_token_message_queue_->size());
-  EXPECT_EQ(0u, host_->processed_frame_messages_count());
-
-  view_->OnFrameTokenChanged(frame_token3);
-  EXPECT_EQ(0u, host_->frame_token_message_queue_->size());
-  EXPECT_EQ(1u, host_->processed_frame_messages_count());
-}
-
 TEST_F(RenderWidgetHostTest, InflightEventCountResetsAfterRebind) {
   // Simulate a keyboard event.
   SimulateKeyboardEvent(WebInputEvent::kRawKeyDown);
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 9afdb76..4f28042 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -2526,7 +2526,13 @@
               visual_properties.compositor_viewport_pixel_rect.size());
   }
 
-  widget_host_->ResetSentVisualProperties();
+  // Get back the UpdateVisualProperties ack.
+  {
+    cc::RenderFrameMetadata metadata;
+    metadata.viewport_size_in_pixels = gfx::Size(100, 100);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
+  }
   sink_->ClearMessages();
 
   // Device scale factor changes to 2, so the physical pixel sizes should
@@ -2550,7 +2556,13 @@
               visual_properties.compositor_viewport_pixel_rect.size());
   }
 
-  widget_host_->ResetSentVisualProperties();
+  // Get back the UpdateVisualProperties ack.
+  {
+    cc::RenderFrameMetadata metadata;
+    metadata.viewport_size_in_pixels = gfx::Size(200, 200);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
+  }
   sink_->ClearMessages();
 
   aura_test_helper_->test_screen()->SetDeviceScaleFactor(1.0f);
@@ -2623,7 +2635,8 @@
     cc::RenderFrameMetadata metadata;
     metadata.viewport_size_in_pixels = gfx::Size(75, 75);
     metadata.local_surface_id_allocation = renderer_local_surface_id_allocation;
-    widget_host_->DidUpdateVisualProperties(metadata);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
   }
 
   // Changing the device scale factor updates the renderer.
@@ -2700,7 +2713,8 @@
     cc::RenderFrameMetadata metadata;
     metadata.viewport_size_in_pixels = gfx::Size(75, 75);
     metadata.local_surface_id_allocation = renderer_local_surface_id_allocation;
-    widget_host_->DidUpdateVisualProperties(metadata);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
   }
 
   // Do a resize in the browser. It does not apply, but VisualProperties are
@@ -2753,7 +2767,8 @@
     cc::RenderFrameMetadata metadata;
     metadata.viewport_size_in_pixels = gfx::Size(75, 75);
     metadata.local_surface_id_allocation = local_surface_id_allocation2;
-    widget_host_->DidUpdateVisualProperties(metadata);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
   }
 
   viz::LocalSurfaceIdAllocation local_surface_id_allocation3(
@@ -2790,7 +2805,8 @@
     cc::RenderFrameMetadata metadata;
     metadata.viewport_size_in_pixels = gfx::Size(75, 75);
     metadata.local_surface_id_allocation = local_surface_id_allocation2;
-    widget_host_->DidUpdateVisualProperties(metadata);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
   }
 
   viz::LocalSurfaceIdAllocation local_surface_id_allocation3(
@@ -2825,7 +2841,8 @@
     cc::RenderFrameMetadata metadata;
     metadata.viewport_size_in_pixels = gfx::Size(75, 75);
     metadata.local_surface_id_allocation = local_surface_id_allocation2;
-    widget_host_->DidUpdateVisualProperties(metadata);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
   }
 
   // Cause a conflicting viz::LocalSurfaceId allocation
@@ -3068,7 +3085,8 @@
   {
     cc::RenderFrameMetadata metadata;
     metadata.viewport_size_in_pixels = size1;
-    widget_host_->DidUpdateVisualProperties(metadata);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
     EXPECT_FALSE(widget_host_->visual_properties_ack_pending_for_testing());
   }
   sink_->ClearMessages();
@@ -3090,7 +3108,8 @@
   {
     cc::RenderFrameMetadata metadata;
     metadata.viewport_size_in_pixels = size2;
-    widget_host_->DidUpdateVisualProperties(metadata);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
     EXPECT_FALSE(widget_host_->visual_properties_ack_pending_for_testing());
   }
   sink_->ClearMessages();
@@ -3370,9 +3389,15 @@
     EXPECT_EQ(gfx::Size(100, 100), visual_properties.visible_viewport_size);
   }
 
-  widget_host_->ResetSentVisualProperties();
-
+  // Get back the UpdateVisualProperties ack.
+  {
+    cc::RenderFrameMetadata metadata;
+    metadata.viewport_size_in_pixels = gfx::Size(100, 100);
+    static_cast<RenderFrameMetadataProvider::Observer*>(widget_host_)
+        ->OnLocalSurfaceIdChanged(metadata);
+  }
   sink_->ClearMessages();
+
   view_->SetInsets(gfx::Insets(0, 0, 40, 0));
   EXPECT_EQ(60, view_->GetVisibleViewportSize().height());
 
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
index c1cdca9..bec58f9b 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
@@ -148,8 +148,9 @@
   metadata.viewport_size_in_pixels = gfx::Size(75, 75);
   metadata.local_surface_id_allocation =
       viz::LocalSurfaceIdAllocation(local_surface_id, base::TimeTicks::Now());
-  root->current_frame_host()->GetRenderWidgetHost()->DidUpdateVisualProperties(
-      metadata);
+  RenderFrameMetadataProvider::Observer* metadata_receiver =
+      root->current_frame_host()->GetRenderWidgetHost();
+  metadata_receiver->OnLocalSurfaceIdChanged(metadata);
 
   // The child frame's RenderWidgetHostView should now use the auto-resize value
   // for its visible viewport.
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index fd8aea9..42bb1d6 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -2178,7 +2178,8 @@
   metadata.viewport_size_in_pixels = gfx::Size(75, 75);
   metadata.local_surface_id_allocation =
       child_allocator.GetCurrentLocalSurfaceIdAllocation();
-  host_->DidUpdateVisualProperties(metadata);
+  static_cast<RenderFrameMetadataProvider::Observer&>(*host_)
+      .OnLocalSurfaceIdChanged(metadata);
 
   viz::LocalSurfaceId local_surface_id3(
       rwhv_mac_->GetLocalSurfaceIdAllocation().local_surface_id());
@@ -2203,7 +2204,8 @@
   metadata.viewport_size_in_pixels = gfx::Size(75, 75);
   metadata.local_surface_id_allocation =
       child_allocator.GetCurrentLocalSurfaceIdAllocation();
-  host_->DidUpdateVisualProperties(metadata);
+  static_cast<RenderFrameMetadataProvider::Observer&>(*host_)
+      .OnLocalSurfaceIdChanged(metadata);
 
   // Cause a conflicting viz::LocalSurfaceId allocation
   BrowserCompositorMac* browser_compositor = rwhv_mac_->BrowserCompositor();
diff --git a/content/browser/sandbox_parameters_mac.mm b/content/browser/sandbox_parameters_mac.mm
index d83664e..79d46dc 100644
--- a/content/browser/sandbox_parameters_mac.mm
+++ b/content/browser/sandbox_parameters_mac.mm
@@ -219,6 +219,7 @@
                             sandbox::SeatbeltExecClient* client) {
   switch (sandbox_type) {
     case service_manager::SandboxType::kAudio:
+    case service_manager::SandboxType::kSoda:
     case service_manager::SandboxType::kNaClLoader:
     case service_manager::SandboxType::kPdfCompositor:
     case service_manager::SandboxType::kRenderer:
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index ec0c370..c87d192 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -1240,7 +1240,13 @@
     // raise-on-click manually, this may override user settings that prevent
     // focus-stealing.
 #if !defined(USE_X11)
+    // It is possible for the web-contents to be destroyed while it is being
+    // activated. Use a weak-ptr to track whether that happened or not.
+    // More in https://crbug.com/1040725
+    auto weak_this = weak_ptr_factory_.GetWeakPtr();
     web_contents_->GetDelegate()->ActivateContents(web_contents_);
+    if (!weak_this)
+      return;
 #endif
   }
 
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h
index acdba5f..dd0c06b 100644
--- a/content/browser/web_contents/web_contents_view_aura.h
+++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -327,8 +327,6 @@
 
   bool init_rwhv_with_null_parent_for_testing_;
 
-  // Used to ensure that the drag and drop callbacks bound to this
-  // object are canceled when this object is destroyed.
   base::WeakPtrFactory<WebContentsViewAura> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(WebContentsViewAura);
diff --git a/content/browser/web_contents/web_contents_view_aura_unittest.cc b/content/browser/web_contents/web_contents_view_aura_unittest.cc
index 209ba74..3c0bf2a 100644
--- a/content/browser/web_contents/web_contents_view_aura_unittest.cc
+++ b/content/browser/web_contents/web_contents_view_aura_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/web_contents_delegate.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/test_renderer_host.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -26,6 +27,7 @@
 #include "ui/base/dragdrop/drop_target_event.h"
 #include "ui/base/dragdrop/os_exchange_data.h"
 #include "ui/display/display_switches.h"
+#include "ui/events/base_event_utils.h"
 #include "ui/gfx/geometry/rect.h"
 
 #if defined(OS_WIN)
@@ -38,6 +40,26 @@
 constexpr gfx::Rect kBounds = gfx::Rect(0, 0, 20, 20);
 constexpr gfx::PointF kClientPt = {5, 10};
 constexpr gfx::PointF kScreenPt = {17, 3};
+
+// Runs a specified callback when a ui::MouseEvent is received.
+class RunCallbackOnActivation : public WebContentsDelegate {
+ public:
+  explicit RunCallbackOnActivation(base::OnceClosure closure)
+      : closure_(std::move(closure)) {}
+
+  ~RunCallbackOnActivation() override = default;
+
+  // WebContentsDelegate:
+  void ActivateContents(WebContents* contents) override {
+    std::move(closure_).Run();
+  }
+
+ private:
+  base::OnceClosure closure_;
+
+  DISALLOW_COPY_AND_ASSIGN(RunCallbackOnActivation);
+};
+
 }  // namespace
 
 class WebContentsViewAuraTest : public RenderViewHostTestHarness {
@@ -145,6 +167,26 @@
   EXPECT_EQ(web_contents()->GetVisibility(), content::Visibility::VISIBLE);
 }
 
+TEST_F(WebContentsViewAuraTest, WebContentsDestroyedDuringClick) {
+  RunCallbackOnActivation delegate(base::BindOnce(
+      &RenderViewHostTestHarness::DeleteContents, base::Unretained(this)));
+  web_contents()->SetDelegate(&delegate);
+
+  // Simulates the mouse press.
+  ui::MouseEvent mouse_event(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
+                             ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
+                             0);
+  ui::EventHandler* event_handler = GetView();
+  event_handler->OnMouseEvent(&mouse_event);
+#if defined(USE_X11)
+  // The web-content is not activated during mouse-press on X11.
+  // See comment in WebContentsViewAura::OnMouseEvent() for more details.
+  EXPECT_NE(web_contents(), nullptr);
+#else
+  EXPECT_EQ(web_contents(), nullptr);
+#endif
+}
+
 TEST_F(WebContentsViewAuraTest, OccludeView) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(features::kWebContentsOcclusion);
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 1bafaa0..c2c81a00 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -933,11 +933,6 @@
 // Initiates a download based on user actions like 'ALT+click'.
 IPC_MESSAGE_ROUTED1(FrameHostMsg_DownloadUrl, FrameHostMsg_DownloadUrl_Params)
 
-// Notifies that the initial empty document of a view has been accessed.
-// After this, it is no longer safe to show a pending navigation's URL without
-// making a URL spoof possible.
-IPC_MESSAGE_ROUTED0(FrameHostMsg_DidAccessInitialDocument)
-
 // Sent when the RenderFrame or RenderFrameProxy either updates its opener to
 // another frame identified by |opener_routing_id|, or, if |opener_routing_id|
 // is MSG_ROUTING_NONE, the frame disowns its opener for the lifetime of the
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 7a2d0aad..2f0a1822 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -120,6 +120,7 @@
     "java/src/org/chromium/content/app/SandboxedProcessService.java",
     "java/src/org/chromium/content/app/ZygotePreload.java",
     "java/src/org/chromium/content/browser/AppWebMessagePort.java",
+    "java/src/org/chromium/content/browser/AppWebMessagePortDescriptor.java",
     "java/src/org/chromium/content/browser/AudioFocusDelegate.java",
     "java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java",
     "java/src/org/chromium/content/browser/BindingManager.java",
@@ -347,6 +348,7 @@
     "java/src/org/chromium/content/app/ContentChildProcessServiceDelegate.java",
     "java/src/org/chromium/content/app/ContentMain.java",
     "java/src/org/chromium/content/browser/AppWebMessagePort.java",
+    "java/src/org/chromium/content/browser/AppWebMessagePortDescriptor.java",
     "java/src/org/chromium/content/browser/AudioFocusDelegate.java",
     "java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java",
     "java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java",
@@ -444,6 +446,7 @@
   ]
 
   sources = [
+    "javatests/src/org/chromium/content/browser/AppWebMessagePortDescriptorTest.java",
     "javatests/src/org/chromium/content/browser/BrowserStartupControllerTest.java",
     "javatests/src/org/chromium/content/browser/ChildProcessLauncherHelperTest.java",
     "javatests/src/org/chromium/content/browser/ChildProcessLauncherIntegrationTest.java",
diff --git a/content/public/android/java/src/org/chromium/content/browser/AppWebMessagePortDescriptor.java b/content/public/android/java/src/org/chromium/content/browser/AppWebMessagePortDescriptor.java
new file mode 100644
index 0000000..6623ac9e0
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/AppWebMessagePortDescriptor.java
@@ -0,0 +1,262 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content.browser;
+
+import org.chromium.base.LifetimeAssert;
+import org.chromium.base.annotations.NativeMethods;
+import org.chromium.blink.mojom.MessagePortDescriptor;
+import org.chromium.mojo.system.MessagePipeHandle;
+import org.chromium.mojo.system.Pair;
+import org.chromium.mojo.system.impl.CoreImpl;
+import org.chromium.mojo_base.mojom.UnguessableToken;
+
+/**
+ * Java wrapper around a native blink::MessagePortDescriptor, and mojom serialized versions of that
+ * class (org.chromium.blink.mojom.MessagePortDescriptor).
+ *
+ * This object is pure implementation detail for AppWebMessagePort. Care must be taken to use this
+ * object with something approaching "move" semantics, as under the hood it wraps a Mojo endpoint,
+ * which itself has move semantics.
+ *
+ * The expected usage is as follows:
+ *
+ *   // Create a pair of descriptors, or rehydrate one from a mojo serialized version.
+ *   Pair<AppWebMessagePortDescriptor, AppWebMessagePortDescriptor> pipe =
+ *           AppWebMessagePortDescriptor.createPair();
+ *   AppWebMessagePortDescriptor port = new AppWebMessagePortDescriptor(
+ *           mojomSerializedMessagePortDescriptor);
+ *
+ *   // Take the handle for use.
+ *   MessagePipeHandle handle = port.takeHandleToEntangle();
+ *
+ *   // Do stuff with the handle.
+ *
+ *   // Return the handle.
+ *   port.givenDisentangledHandle(handle);
+ *
+ *   // Close the port when we're done with it.
+ *   port.close();
+ */
+public class AppWebMessagePortDescriptor {
+    private static final long NATIVE_NULL = 0;
+    private static final int INVALID_NATIVE_MOJO_HANDLE = 0; // Mirrors CoreImpl.INVALID_HANDLE.
+    private static final long INVALID_SEQUENCE_NUMBER = 0;
+
+    /** Used to ensure that the object is correctly torn down before being finalized. */
+    private final LifetimeAssert mLifetimeAssert = LifetimeAssert.create(this);
+
+    /** Handle to the native blink::MessagePortDescriptor associated with this object. */
+    private long mNativeMessagePortDescriptor = NATIVE_NULL;
+    /**
+     * The underlying native handle. When a descriptor is bound to an AppWebMessagePort, handle
+     * ownership passes from the native blink::MessagePortDescriptor to a mojo Connector owned by
+     * the AppWebMessagePort. Before tearing down, the handle is returned to the native blink
+     * component and closed. This will be INVALID_NATIVE_MOJO_HANDLE if the handle is currently
+     * owned by the native counterpart, otherwise it is set to the value of the handle that was
+     * passed from the native counterpart.
+     */
+    private int mNativeMojoHandle = INVALID_NATIVE_MOJO_HANDLE;
+
+    /**
+     * @return a newly created pair of connected AppWebMessagePortDescriptors.
+     */
+    static Pair<AppWebMessagePortDescriptor, AppWebMessagePortDescriptor> createPair() {
+        long[] nativeMessagePortDescriptors = AppWebMessagePortDescriptorJni.get().createPair();
+        assert nativeMessagePortDescriptors.length
+                == 2 : "native createPair returned an invalid value";
+        Pair<AppWebMessagePortDescriptor, AppWebMessagePortDescriptor> pair =
+                new Pair<>(new AppWebMessagePortDescriptor(nativeMessagePortDescriptors[0]),
+                        new AppWebMessagePortDescriptor(nativeMessagePortDescriptors[1]));
+        return pair;
+    }
+
+    /**
+     * Creates an instance of a descriptor from a mojo-serialized version.
+     */
+    AppWebMessagePortDescriptor(MessagePortDescriptor blinkMessagePortDescriptor) {
+        // If the descriptor is invalid then immediately go to an invalid state, which also means
+        // we're safe to GC.
+        if (!isBlinkMessagePortDescriptorValid(blinkMessagePortDescriptor)) {
+            reset();
+            return;
+        }
+        mNativeMessagePortDescriptor = AppWebMessagePortDescriptorJni.get().create(
+                blinkMessagePortDescriptor.pipeHandle.releaseNativeHandle(),
+                blinkMessagePortDescriptor.id.low, blinkMessagePortDescriptor.id.high,
+                blinkMessagePortDescriptor.sequenceNumber);
+        resetBlinkMessagePortDescriptor(blinkMessagePortDescriptor);
+    }
+
+    /**
+     * @return true if this descriptor is valid (has an active native counterpart). Safe to call
+     *         anytime.
+     */
+    boolean isValid() {
+        return mNativeMessagePortDescriptor != NATIVE_NULL;
+    }
+
+    /**
+     * @return the MessagePipeHandle corresponding to this descriptors mojo endpoint. This must be
+     *         returned to the descriptor before it is closed, and before it is finalized. It is
+     *         valid to take and return the handle multiple times. This is meant to be called in
+     *         order to entangle the handle with a mojo.system.Connector.
+     */
+    MessagePipeHandle takeHandleToEntangle() {
+        ensureNativeMessagePortDescriptorExists();
+        assert mNativeMojoHandle == INVALID_NATIVE_MOJO_HANDLE : "handle already taken";
+        mNativeMojoHandle = AppWebMessagePortDescriptorJni.get().takeHandleToEntangle(
+                mNativeMessagePortDescriptor);
+        assert mNativeMojoHandle
+                != INVALID_NATIVE_MOJO_HANDLE : "native object returned an invalid handle";
+        return wrapNativeHandle(mNativeMojoHandle);
+    }
+
+    /**
+     * @return true if the port is currently entangled, false otherwise. Safe to call anytime.
+     */
+    boolean isEntangled() {
+        return mNativeMessagePortDescriptor != NATIVE_NULL
+                && mNativeMojoHandle != INVALID_NATIVE_MOJO_HANDLE;
+    }
+
+    /**
+     * Returns the mojo endpoint to this descriptor, previously vended out by
+     * "takeHandleToEntangle". If vended out the handle must be returned prior to closing this
+     * object, which must be done prior to the object being destroyed. It is valid to take and
+     * return the handle multiple times.
+     */
+    void giveDisentangledHandle(MessagePipeHandle handle) {
+        ensureNativeMessagePortDescriptorExists();
+        assert mNativeMojoHandle != INVALID_NATIVE_MOJO_HANDLE : "handle not currently taken";
+        int nativeHandle = handle.releaseNativeHandle();
+        assert nativeHandle
+                == mNativeMojoHandle : "returned handle does not match the taken handle";
+        AppWebMessagePortDescriptorJni.get().giveDisentangledHandle(
+                mNativeMessagePortDescriptor, mNativeMojoHandle);
+        mNativeMojoHandle = INVALID_NATIVE_MOJO_HANDLE;
+    }
+
+    /**
+     * Closes this descriptor. This will cause the native counterpart to be destroyed, and the
+     * descriptor will no longer be valid after this point. It is safe to call this repeatedly. It
+     * is illegal to close a descriptor whose handle is presently taken by a corresponding
+     * AppWebMessagePort.
+     */
+    void close() {
+        if (mNativeMessagePortDescriptor == NATIVE_NULL) return;
+        assert mNativeMojoHandle
+                == INVALID_NATIVE_MOJO_HANDLE : "closing a descriptor whose handle is taken";
+        AppWebMessagePortDescriptorJni.get().closeAndDestroy(mNativeMessagePortDescriptor);
+        reset();
+    }
+
+    /**
+     * Passes ownership of this descriptor into a blink.mojom.MessagePortDescriptor. This allows the
+     * port to be transferred as part of a TransferableMessage. Invalidates this object in the
+     * process.
+     */
+    MessagePortDescriptor passAsBlinkMojomMessagePortDescriptor() {
+        ensureNativeMessagePortDescriptorExists();
+        assert mNativeMojoHandle
+                == INVALID_NATIVE_MOJO_HANDLE : "passing a descriptor whose handle is taken";
+
+        // This is in the format [nativeHandle, idLow, idHigh, sequenceNumber].
+        long[] serialized =
+                AppWebMessagePortDescriptorJni.get().passSerialized(mNativeMessagePortDescriptor);
+        assert serialized.length == 4 : "native passSerialized returned an invalid value";
+
+        int nativeHandle = (int) serialized[0];
+        long idLow = serialized[1];
+        long idHigh = serialized[2];
+        long sequenceNumber = serialized[3];
+
+        MessagePortDescriptor port = new MessagePortDescriptor();
+        port.pipeHandle = wrapNativeHandle(nativeHandle);
+        port.id = new UnguessableToken();
+        port.id.low = idLow;
+        port.id.high = idHigh;
+        port.sequenceNumber = sequenceNumber;
+
+        reset();
+
+        return port;
+    }
+
+    /**
+     * Private constructor used in creating a matching pair of descriptors.
+     */
+    private AppWebMessagePortDescriptor(long nativeMessagePortDescriptor) {
+        assert nativeMessagePortDescriptor != NATIVE_NULL : "invalid nativeMessagePortDescriptor";
+        mNativeMessagePortDescriptor = nativeMessagePortDescriptor;
+    }
+
+    /**
+     * Helper function that throws an exception if the native counterpart does not exist.
+     */
+    private void ensureNativeMessagePortDescriptorExists() {
+        assert mNativeMessagePortDescriptor != NATIVE_NULL : "native descriptor does not exist";
+    }
+
+    /**
+     * Resets this object. Assumes the native side has already been appropriately torn down.
+     */
+    private void reset() {
+        mNativeMessagePortDescriptor = NATIVE_NULL;
+        mNativeMojoHandle = INVALID_NATIVE_MOJO_HANDLE;
+        LifetimeAssert.setSafeToGc(mLifetimeAssert, true);
+    }
+
+    /**
+     * @return true if the provided blink.mojom.MessagePortDescriptor is valid.
+     */
+    private static boolean isBlinkMessagePortDescriptorValid(
+            MessagePortDescriptor blinkMessagePortDescriptor) {
+        if (!blinkMessagePortDescriptor.pipeHandle.isValid()) {
+            return false;
+        }
+        if (blinkMessagePortDescriptor.id == null) {
+            return false;
+        }
+        if (blinkMessagePortDescriptor.id.low == 0 && blinkMessagePortDescriptor.id.high == 0) {
+            return false;
+        }
+        if (blinkMessagePortDescriptor.sequenceNumber == INVALID_SEQUENCE_NUMBER) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Resets the provided blink.mojom.MessagePortDescriptor.
+     */
+    private static void resetBlinkMessagePortDescriptor(
+            MessagePortDescriptor blinkMessagePortDescriptor) {
+        blinkMessagePortDescriptor.pipeHandle.close();
+        if (blinkMessagePortDescriptor.id != null) {
+            blinkMessagePortDescriptor.id.low = 0;
+            blinkMessagePortDescriptor.id.high = 0;
+        }
+        blinkMessagePortDescriptor.sequenceNumber = 0;
+    }
+
+    /**
+     * Wraps the provided native handle as MessagePipeHandle.
+     */
+    MessagePipeHandle wrapNativeHandle(int nativeHandle) {
+        return CoreImpl.getInstance().acquireNativeHandle(nativeHandle).toMessagePipeHandle();
+    }
+
+    @NativeMethods
+    interface Native {
+        long[] createPair();
+        long create(int nativeHandle, long idLow, long idHigh, long sequenceNumber);
+        // Deliberately do not use nativeObjectType naming to avoid automatic typecasting and
+        // member function dispatch; these need to be routed to static functions.
+        int takeHandleToEntangle(long blinkMessagePortDescriptor);
+        void giveDisentangledHandle(long blinkMessagePortDescriptor, int nativeHandle);
+        long[] passSerialized(long blinkMessagePortDescriptor);
+        void closeAndDestroy(long blinkMessagePortDescriptor);
+    }
+}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/AppWebMessagePortDescriptorTest.java b/content/public/android/javatests/src/org/chromium/content/browser/AppWebMessagePortDescriptorTest.java
new file mode 100644
index 0000000..15937ea6
--- /dev/null
+++ b/content/public/android/javatests/src/org/chromium/content/browser/AppWebMessagePortDescriptorTest.java
@@ -0,0 +1,80 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content.browser;
+
+import android.support.test.filters.SmallTest;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.BaseJUnit4ClassRunner;
+import org.chromium.blink.mojom.MessagePortDescriptor;
+import org.chromium.mojo.MojoTestRule;
+import org.chromium.mojo.system.MessagePipeHandle;
+import org.chromium.mojo.system.Pair;
+
+/**
+ * Test suite for AppWebMessagePortDescriptor.
+ */
+@RunWith(BaseJUnit4ClassRunner.class)
+public class AppWebMessagePortDescriptorTest {
+    @Rule
+    public MojoTestRule mActivityTestRule = new MojoTestRule(MojoTestRule.MojoCore.INITIALIZE);
+
+    @Test
+    @SmallTest
+    public void testPassingAndEntangling() throws Throwable {
+        Pair<AppWebMessagePortDescriptor, AppWebMessagePortDescriptor> pair =
+                AppWebMessagePortDescriptor.createPair();
+        Assert.assertTrue(pair.first.isValid());
+        Assert.assertFalse(pair.first.isEntangled());
+        Assert.assertTrue(pair.second.isValid());
+        Assert.assertFalse(pair.second.isEntangled());
+
+        AppWebMessagePortDescriptor port0 = pair.first;
+        Assert.assertTrue(port0.isValid());
+        Assert.assertFalse(port0.isEntangled());
+
+        AppWebMessagePortDescriptor port1 = pair.second;
+        Assert.assertTrue(port1.isValid());
+        Assert.assertFalse(port1.isEntangled());
+
+        // Do a round trip through entanglement/disentanglement.
+
+        MessagePipeHandle handle = port0.takeHandleToEntangle();
+        Assert.assertTrue(port0.isValid());
+        Assert.assertTrue(port0.isEntangled());
+
+        port0.giveDisentangledHandle(handle.pass());
+        Assert.assertTrue(port0.isValid());
+        Assert.assertFalse(port0.isEntangled());
+
+        // Do a round trip through serialization as a blink.mojom.MessagePortDescriptor.
+
+        MessagePortDescriptor blinkPort = port0.passAsBlinkMojomMessagePortDescriptor();
+        Assert.assertFalse(port0.isValid());
+        Assert.assertFalse(port0.isEntangled());
+
+        port0 = new AppWebMessagePortDescriptor(blinkPort);
+        Assert.assertTrue(port0.isValid());
+        Assert.assertFalse(port0.isEntangled());
+
+        // Close the ports to satisfy lifetime assertions.
+
+        port0.close();
+        Assert.assertFalse(port0.isValid());
+        Assert.assertFalse(port0.isEntangled());
+        Assert.assertFalse(pair.first.isValid());
+        Assert.assertFalse(pair.first.isEntangled());
+
+        port1.close();
+        Assert.assertFalse(port1.isValid());
+        Assert.assertFalse(port1.isEntangled());
+        Assert.assertFalse(pair.second.isValid());
+        Assert.assertFalse(pair.second.isEntangled());
+    }
+}
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index 835505c1..452f324c 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -3395,7 +3395,7 @@
   metadata.viewport_size_in_pixels = gfx::Size(75, 75);
   metadata.local_surface_id_allocation =
       viz::LocalSurfaceIdAllocation(local_surface_id, base::TimeTicks::Now());
-  guest_rwh_impl->DidUpdateVisualProperties(metadata);
+  guest_rwh_impl->OnLocalSurfaceIdChanged(metadata);
 
   // This won't generate a response, as we short-circuit auto-resizes, so cause
   // an additional update by disabling auto-resize.
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 3f27c51c..532a1ff 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1835,7 +1835,6 @@
       pepper_last_mouse_event_target_(nullptr),
 #endif
       navigation_client_impl_(nullptr),
-      has_accessed_initial_document_(false),
       media_factory_(
           this,
           base::BindRepeating(&RenderFrameImpl::RequestOverlayRoutingToken,
@@ -4026,19 +4025,6 @@
   return GetRemoteAssociatedInterfaces();
 }
 
-void RenderFrameImpl::DidAccessInitialDocument() {
-  DCHECK(!frame_->Parent());
-  // NOTE: Do not call back into JavaScript here, since this call is made from a
-  // V8 security check.
-
-  // Notify the browser process that it is no longer safe to show the pending
-  // URL of the main frame, since a URL spoof is now possible.
-  if (!has_accessed_initial_document_)
-    Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_));
-
-  has_accessed_initial_document_ = true;
-}
-
 blink::WebLocalFrame* RenderFrameImpl::CreateChildFrame(
     blink::WebLocalFrame* parent,
     blink::WebTreeScopeType scope,
@@ -5982,7 +5968,11 @@
       info->navigation_policy == blink::kWebNavigationPolicyCurrentTab &&
       // No need to dispatch beforeunload if the frame has not committed a
       // navigation and contains an empty initial document.
-      (has_accessed_initial_document_ || !current_history_item_.IsNull());
+      // TODO(dtapuska): crbug.com/1040954 Try to remove the
+      // HasAccessedInitialDocument interface for this. There shouldn't be a
+      // beforeunload handler if it hasn't accessed the initial document so it
+      // should be fine to dispatch in those cases.
+      (frame_->HasAccessedInitialDocument() || !current_history_item_.IsNull());
 
   if (should_dispatch_before_unload) {
     // Execute the BeforeUnload event. If asked not to proceed or the frame is
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index b8bb9be..371c553 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -660,7 +660,6 @@
   service_manager::InterfaceProvider* GetInterfaceProvider() override;
   blink::AssociatedInterfaceProvider* GetRemoteNavigationAssociatedInterfaces()
       override;
-  void DidAccessInitialDocument() override;
   blink::WebLocalFrame* CreateChildFrame(
       blink::WebLocalFrame* parent,
       blink::WebTreeScopeType scope,
@@ -1572,9 +1571,6 @@
   // Only used when PerNavigationMojoInterface is enabled.
   std::unique_ptr<NavigationClient> navigation_client_impl_;
 
-  // Indicates whether |didAccessInitialDocument| was called.
-  bool has_accessed_initial_document_;
-
   // Creates various media clients.
   MediaFactory media_factory_;
 
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
index 46f37fe8..41fbe9e 100644
--- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -238,11 +238,4 @@
 # VP9 appears to not recover correctly after GPU process crashes on Windows.
 crbug.com/1033982 [ win nvidia ] Pixel_Video_Context_Loss_VP9 [ RetryOnFailure ]
 
-crbug.com/1037949 [ use-vulkan android android-chromium skia-renderer ] Pixel_Video_MP4 [ Failure ]
-crbug.com/1037949 [ use-vulkan android android-chromium skia-renderer ] Pixel_Video_MP4_FourColors_Aspect_4x3 [ Failure ]
-crbug.com/1037949 [ use-vulkan android android-chromium skia-renderer ] Pixel_Video_MP4_FourColors_Rot_180 [ Failure ]
-crbug.com/1037949 [ use-vulkan android android-chromium skia-renderer ] Pixel_Video_MP4_FourColors_Rot_270 [ Failure ]
-crbug.com/1037949 [ use-vulkan android android-chromium skia-renderer ] Pixel_Video_MP4_FourColors_Rot_90 [ Failure ]
-crbug.com/1037949 [ use-vulkan android android-chromium skia-renderer ] Pixel_Video_VP9 [ Failure ]
-
 crbug.com/1037654 [ use-vulkan android android-chromium skia-renderer ] Pixel_WebGLCopyImage [ Failure ]
diff --git a/extensions/browser/api/declarative_net_request/action_tracker.cc b/extensions/browser/api/declarative_net_request/action_tracker.cc
index e99ce5b..6aca82b 100644
--- a/extensions/browser/api/declarative_net_request/action_tracker.cc
+++ b/extensions/browser/api/declarative_net_request/action_tracker.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/stl_util.h"
+#include "base/time/clock.h"
 #include "base/values.h"
 #include "extensions/browser/api/declarative_net_request/request_action.h"
 #include "extensions/browser/api/declarative_net_request/rules_monitor_service.h"
@@ -35,6 +36,12 @@
          request_info.type == content::ResourceType::kMainFrame;
 }
 
+const base::Clock* g_test_clock = nullptr;
+
+base::Time GetNow() {
+  return g_test_clock ? g_test_clock->Now() : base::Time::Now();
+}
+
 }  // namespace
 
 ActionTracker::ActionTracker(content::BrowserContext* browser_context)
@@ -53,6 +60,11 @@
   DCHECK(pending_navigation_actions_.empty());
 }
 
+// static
+void ActionTracker::SetClockForTests(const base::Clock* clock) {
+  g_test_clock = clock;
+}
+
 void ActionTracker::OnRuleMatched(const RequestAction& request_action,
                                   const WebRequestInfo& request_info) {
   DispatchOnRuleMatchedDebugIfNeeded(request_action,
@@ -213,14 +225,19 @@
 
 std::vector<dnr_api::MatchedRuleInfo> ActionTracker::GetMatchedRules(
     const ExtensionId& extension_id,
-    base::Optional<int> tab_id) const {
+    const base::Optional<int>& tab_id,
+    const base::Time& min_time_stamp) {
   std::vector<dnr_api::MatchedRuleInfo> matched_rules;
 
-  auto add_to_matched_rules = [this, &matched_rules](
+  auto add_to_matched_rules = [this, &matched_rules, &min_time_stamp](
                                   const std::list<TrackedRule>& tracked_rules,
                                   int tab_id) {
-    for (const TrackedRule& tracked_rule : tracked_rules)
-      matched_rules.push_back(CreateMatchedRuleInfo(tracked_rule, tab_id));
+    for (const TrackedRule& tracked_rule : tracked_rules) {
+      // Filter by the provided |min_time_stamp| for both active and non-active
+      // tabs.
+      if (tracked_rule.time_stamp >= min_time_stamp)
+        matched_rules.push_back(CreateMatchedRuleInfo(tracked_rule, tab_id));
+    }
   };
 
   if (tab_id.has_value()) {
@@ -290,7 +307,7 @@
 ActionTracker::TrackedRule::TrackedRule(
     int rule_id,
     api::declarative_net_request::SourceType source_type)
-    : rule_id(rule_id), source_type(source_type) {}
+    : rule_id(rule_id), source_type(source_type), time_stamp(GetNow()) {}
 
 ActionTracker::TrackedInfo::TrackedInfo() = default;
 ActionTracker::TrackedInfo::~TrackedInfo() = default;
@@ -368,8 +385,8 @@
   dnr_api::MatchedRuleInfo matched_rule_info;
   matched_rule_info.rule = std::move(matched_rule);
   matched_rule_info.tab_id = tab_id;
+  matched_rule_info.time_stamp = tracked_rule.time_stamp.ToJsTimeIgnoringNull();
 
-  // TODO(crbug.com/983761): Populate timestamp for |matched_rule_info|.
   return matched_rule_info;
 }
 
diff --git a/extensions/browser/api/declarative_net_request/action_tracker.h b/extensions/browser/api/declarative_net_request/action_tracker.h
index 147c669..7451306 100644
--- a/extensions/browser/api/declarative_net_request/action_tracker.h
+++ b/extensions/browser/api/declarative_net_request/action_tracker.h
@@ -9,9 +9,14 @@
 #include <map>
 #include <vector>
 
+#include "base/time/time.h"
 #include "extensions/common/api/declarative_net_request.h"
 #include "extensions/common/extension_id.h"
 
+namespace base {
+class Clock;
+}
+
 namespace content {
 class BrowserContext;
 }
@@ -31,6 +36,10 @@
   ActionTracker(const ActionTracker& other) = delete;
   ActionTracker& operator=(const ActionTracker& other) = delete;
 
+  // Sets a custom Clock to use in tests. |clock| should be owned by the caller
+  // of this function.
+  static void SetClockForTests(const base::Clock* clock);
+
   // Called whenever a request matches with a rule.
   void OnRuleMatched(const RequestAction& request_action,
                      const WebRequestInfo& request_info);
@@ -60,7 +69,8 @@
   // rules matched for |tab_id| will be returned.
   std::vector<api::declarative_net_request::MatchedRuleInfo> GetMatchedRules(
       const ExtensionId& extension_id,
-      base::Optional<int> tab_id) const;
+      const base::Optional<int>& tab_id,
+      const base::Time& min_time_stamp);
 
   // Returns the number of matched rules in |rules_tracked_| for the given
   // |extension_id| and |tab_id|. Should only be used for tests.
@@ -103,6 +113,10 @@
 
     const int rule_id;
     const api::declarative_net_request::SourceType source_type;
+
+    // The timestamp for when the rule was matched. This is set in the
+    // constructor.
+    const base::Time time_stamp;
   };
 
   // Info tracked for each ExtensionTabIdKey or ExtensionNavigationIdKey.
diff --git a/extensions/browser/api/declarative_net_request/constants.cc b/extensions/browser/api/declarative_net_request/constants.cc
index e0ba6bd6..c53ef42 100644
--- a/extensions/browser/api/declarative_net_request/constants.cc
+++ b/extensions/browser/api/declarative_net_request/constants.cc
@@ -53,7 +53,10 @@
 const char kErrorRegexSubstitutionWithoutFilter[] =
     "Rule with id * can't specify the \"*\" key without specifying the \"*\" "
     "key.";
-
+const char kErrorInvalidAllowAllRequestsResourceType[] =
+    "Rule with id * is an \"allowAllRequests\" rule and must specify the "
+    "\"resourceTypes\" key. It may only include the \"main_frame\" and "
+    "\"sub_frame\" resource types.";
 const char kErrorListNotPassed[] = "Rules file must contain a list.";
 
 const char kRuleCountExceeded[] =
diff --git a/extensions/browser/api/declarative_net_request/constants.h b/extensions/browser/api/declarative_net_request/constants.h
index d99a3a4..3a16fa5 100644
--- a/extensions/browser/api/declarative_net_request/constants.h
+++ b/extensions/browser/api/declarative_net_request/constants.h
@@ -50,6 +50,7 @@
   ERROR_MULTIPLE_FILTERS_SPECIFIED,
   ERROR_REGEX_SUBSTITUTION_WITHOUT_FILTER,
   ERROR_INVALID_REGEX_SUBSTITUTION,
+  ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE,
 };
 
 // Describes the ways in which updating dynamic rules can fail.
@@ -97,6 +98,7 @@
 extern const char kErrorJavascriptRedirect[];
 extern const char kErrorMultipleFilters[];
 extern const char kErrorRegexSubstitutionWithoutFilter[];
+extern const char kErrorInvalidAllowAllRequestsResourceType[];
 
 extern const char kErrorListNotPassed[];
 
diff --git a/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc b/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc
index 6c9c25d..1c65c87 100644
--- a/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc
+++ b/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc
@@ -12,6 +12,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
 #include "base/task_runner_util.h"
+#include "base/time/time.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/api/declarative_net_request/action_tracker.h"
@@ -282,21 +283,26 @@
   EXTENSION_FUNCTION_VALIDATE(error.empty());
 
   base::Optional<int> tab_id;
-  // TODO(crbug.com/983761): Add timestamp filtering as well.
+  base::Time min_time_stamp = base::Time::Min();
 
-  if (params->filter && params->filter->tab_id)
-    tab_id = *params->filter->tab_id;
+  if (params->filter) {
+    if (params->filter->tab_id)
+      tab_id = *params->filter->tab_id;
+
+    if (params->filter->min_time_stamp)
+      min_time_stamp = base::Time::FromJsTime(*params->filter->min_time_stamp);
+  }
 
   declarative_net_request::RulesMonitorService* rules_monitor_service =
       declarative_net_request::RulesMonitorService::Get(browser_context());
   DCHECK(rules_monitor_service);
 
-  const declarative_net_request::ActionTracker& action_tracker =
+  declarative_net_request::ActionTracker& action_tracker =
       rules_monitor_service->action_tracker();
 
   dnr_api::RulesMatchedDetails details;
   details.rules_matched_info =
-      action_tracker.GetMatchedRules(extension_id(), tab_id);
+      action_tracker.GetMatchedRules(extension_id(), tab_id, min_time_stamp);
 
   return RespondNow(
       ArgumentList(dnr_api::GetMatchedRules::Results::Create(details)));
diff --git a/extensions/browser/api/declarative_net_request/extension_url_pattern_index_matcher.cc b/extensions/browser/api/declarative_net_request/extension_url_pattern_index_matcher.cc
index f7686c8..f173985 100644
--- a/extensions/browser/api/declarative_net_request/extension_url_pattern_index_matcher.cc
+++ b/extensions/browser/api/declarative_net_request/extension_url_pattern_index_matcher.cc
@@ -59,7 +59,7 @@
     const ExtensionUrlPatternIndexMatcher::UrlPatternIndexList* index_list) {
   // We only support removing a subset of extra headers currently. If that
   // changes, the implementation here should change as well.
-  static_assert(flat::IndexType_count == 4,
+  static_assert(flat::IndexType_count == 5,
                 "Modify this method to ensure IsExtraHeadersMatcherInternal is "
                 "updated as new actions are added.");
   static const flat::IndexType extra_header_indices[] = {
@@ -93,9 +93,9 @@
 base::Optional<RequestAction>
 ExtensionUrlPatternIndexMatcher::GetBeforeRequestAction(
     const RequestParams& params) const {
-  const flat_rule::UrlRule* rule =
-      GetMatchingRule(params, flat::IndexType_before_request,
-                      FindRuleStrategy::kHighestPriority);
+  const flat_rule::UrlRule* rule = GetMatchingRule(
+      params, flat::IndexType_before_request_except_allow_all_requests,
+      FindRuleStrategy::kHighestPriority);
   if (!rule)
     return base::nullopt;
 
@@ -112,6 +112,7 @@
       return CreateRedirectActionFromMetadata(params, *rule, *metadata_list_);
     case flat::ActionType_upgrade_scheme:
       return CreateUpgradeAction(params, *rule);
+    case flat::ActionType_allow_all_requests:
     case flat::ActionType_remove_headers:
     case flat::ActionType_count:
       NOTREACHED();
diff --git a/extensions/browser/api/declarative_net_request/flat/extension_ruleset.fbs b/extensions/browser/api/declarative_net_request/flat/extension_ruleset.fbs
index 9fa756d..06827743 100644
--- a/extensions/browser/api/declarative_net_request/flat/extension_ruleset.fbs
+++ b/extensions/browser/api/declarative_net_request/flat/extension_ruleset.fbs
@@ -18,6 +18,7 @@
   redirect,
   upgrade_scheme,
   remove_headers,
+  allow_all_requests,
   /// Number of actions. Must be the last entry.
   count
 }
@@ -79,8 +80,12 @@
 /// the |index_list| vector.
 enum IndexType : ubyte {
   /// Index for rules that are evaluated during the onBeforeRequest stage of a
-  /// request.
-  before_request = 0,
+  /// request, excluding allowAllRequests rules.
+  before_request_except_allow_all_requests = 0,
+
+  /// Index for allowAllRequests rule. We have a separate index for these rules
+  /// since they need to be evaluated separately when a navigation commits.
+  allow_all_requests,
 
   remove_cookie_header,
   remove_referer_header,
diff --git a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
index 509447cd..883158e 100644
--- a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
+++ b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
@@ -273,7 +273,11 @@
     case dnr_api::RULE_ACTION_TYPE_ALLOW:
     case dnr_api::RULE_ACTION_TYPE_REDIRECT:
     case dnr_api::RULE_ACTION_TYPE_UPGRADESCHEME:
-      return {index_builders_[flat::IndexType_before_request].get()};
+      return {index_builders_
+                  [flat::IndexType_before_request_except_allow_all_requests]
+                      .get()};
+    case dnr_api::RULE_ACTION_TYPE_ALLOWALLREQUESTS:
+      return {index_builders_[flat::IndexType_allow_all_requests].get()};
     case dnr_api::RULE_ACTION_TYPE_REMOVEHEADERS:
       return GetRemoveHeaderBuilders(indexed_rule.remove_headers_set);
     case dnr_api::RULE_ACTION_TYPE_NONE:
diff --git a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
index 0711789..cf0ad895 100644
--- a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
@@ -426,16 +426,26 @@
       {dnr_api::REMOVE_HEADER_TYPE_SETCOOKIE,
        dnr_api::REMOVE_HEADER_TYPE_COOKIE, dnr_api::REMOVE_HEADER_TYPE_REFERER},
       nullptr, base::nullopt));
+  rules_to_index.push_back(CreateIndexedRule(
+      22, 3, flat_rule::OptionFlag_NONE, flat_rule::ElementType_SUBDOCUMENT,
+      flat_rule::ActivationType_NONE, flat_rule::UrlPatternType_SUBSTRING,
+      flat_rule::AnchorType_NONE, flat_rule::AnchorType_NONE, "example.com", {},
+      {}, base::nullopt, dnr_api::RULE_ACTION_TYPE_ALLOWALLREQUESTS, {},
+      nullptr, base::nullopt));
 
   // Note: It's unsafe to store/return pointers to a mutable vector since the
   // vector can resize/reallocate invalidating the existing pointers/iterators.
   // Hence we build |expected_index_lists| once the vector |rules_to_index| is
   // finalized.
   std::vector<const IndexedRule*> expected_index_lists[flat::IndexType_count];
-  expected_index_lists[flat::IndexType_before_request] = {
-      &rules_to_index[0], &rules_to_index[1], &rules_to_index[2],
-      &rules_to_index[3], &rules_to_index[4], &rules_to_index[5],
-      &rules_to_index[6], &rules_to_index[7]};
+  expected_index_lists
+      [flat::IndexType_before_request_except_allow_all_requests] = {
+          &rules_to_index[0], &rules_to_index[1], &rules_to_index[2],
+          &rules_to_index[3], &rules_to_index[4], &rules_to_index[5],
+          &rules_to_index[6], &rules_to_index[7]};
+  expected_index_lists[flat::IndexType_allow_all_requests] = {
+      &rules_to_index[10]};
+
   expected_index_lists[flat::IndexType_remove_cookie_header] = {
       &rules_to_index[8], &rules_to_index[9]};
   expected_index_lists[flat::IndexType_remove_referer_header] = {
diff --git a/extensions/browser/api/declarative_net_request/indexed_rule.cc b/extensions/browser/api/declarative_net_request/indexed_rule.cc
index fc1c198..b027552 100644
--- a/extensions/browser/api/declarative_net_request/indexed_rule.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_rule.cc
@@ -212,14 +212,15 @@
   return mask;
 }
 
-// Computes the bitmask of flat_rule::ElementType taking into consideration
-// the included and excluded resource types for |condition|.
-ParseResult ComputeElementTypes(const dnr_api::RuleCondition& condition,
+// Computes the bitmask of flat_rule::ElementType taking into consideration the
+// included and excluded resource types for |rule| and its associated action
+// type.
+ParseResult ComputeElementTypes(const dnr_api::Rule& rule,
                                 uint16_t* element_types) {
   uint16_t include_element_type_mask =
-      GetResourceTypesMask(condition.resource_types.get());
+      GetResourceTypesMask(rule.condition.resource_types.get());
   uint16_t exclude_element_type_mask =
-      GetResourceTypesMask(condition.excluded_resource_types.get());
+      GetResourceTypesMask(rule.condition.excluded_resource_types.get());
 
   // OBJECT_SUBREQUEST is not used by Extensions.
   if (exclude_element_type_mask ==
@@ -231,6 +232,17 @@
   if (include_element_type_mask & exclude_element_type_mask)
     return ParseResult::ERROR_RESOURCE_TYPE_DUPLICATED;
 
+  if (rule.action.type == dnr_api::RULE_ACTION_TYPE_ALLOWALLREQUESTS) {
+    // For allowAllRequests rule, the resourceTypes key must always be specified
+    // and may only include main_frame and sub_frame types.
+    const uint16_t frame_element_type_mask =
+        flat_rule::ElementType_MAIN_FRAME | flat_rule::ElementType_SUBDOCUMENT;
+    if (include_element_type_mask == flat_rule::ElementType_NONE ||
+        !IsSubset(include_element_type_mask, frame_element_type_mask)) {
+      return ParseResult::ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE;
+    }
+  }
+
   if (include_element_type_mask != flat_rule::ElementType_NONE)
     *element_types = include_element_type_mask;
   else if (exclude_element_type_mask != flat_rule::ElementType_NONE)
@@ -368,6 +380,27 @@
   return ParseResult::ERROR_INVALID_REDIRECT;
 }
 
+bool DoesActionSupportPriority(dnr_api::RuleActionType type) {
+  switch (type) {
+    case dnr_api::RULE_ACTION_TYPE_NONE:
+      break;
+    case dnr_api::RULE_ACTION_TYPE_BLOCK:
+      return true;
+    case dnr_api::RULE_ACTION_TYPE_REDIRECT:
+      return true;
+    case dnr_api::RULE_ACTION_TYPE_ALLOW:
+      return true;
+    case dnr_api::RULE_ACTION_TYPE_UPGRADESCHEME:
+      return true;
+    case dnr_api::RULE_ACTION_TYPE_REMOVEHEADERS:
+      return false;
+    case dnr_api::RULE_ACTION_TYPE_ALLOWALLREQUESTS:
+      return true;
+  }
+  NOTREACHED();
+  return false;
+}
+
 }  // namespace
 
 IndexedRule::IndexedRule() = default;
@@ -384,12 +417,9 @@
   if (parsed_rule.id < kMinValidID)
     return ParseResult::ERROR_INVALID_RULE_ID;
 
-  const bool is_before_request_rule =
-      parsed_rule.action.type == dnr_api::RULE_ACTION_TYPE_BLOCK ||
-      parsed_rule.action.type == dnr_api::RULE_ACTION_TYPE_ALLOW ||
-      parsed_rule.action.type == dnr_api::RULE_ACTION_TYPE_REDIRECT ||
-      parsed_rule.action.type == dnr_api::RULE_ACTION_TYPE_UPGRADESCHEME;
-  if (is_before_request_rule) {
+  const bool is_priority_supported =
+      DoesActionSupportPriority(parsed_rule.action.type);
+  if (is_priority_supported) {
     if (!parsed_rule.priority)
       return ParseResult::ERROR_EMPTY_RULE_PRIORITY;
     if (*parsed_rule.priority < kMinValidPriority)
@@ -464,13 +494,13 @@
   indexed_rule->action_type = parsed_rule.action.type;
   indexed_rule->id = base::checked_cast<uint32_t>(parsed_rule.id);
   indexed_rule->priority = base::checked_cast<uint32_t>(
-      is_before_request_rule ? *parsed_rule.priority : kDefaultPriority);
+      is_priority_supported ? *parsed_rule.priority : kDefaultPriority);
   indexed_rule->options = GetOptionsMask(parsed_rule);
   indexed_rule->activation_types = GetActivationTypes(parsed_rule);
 
   {
-    ParseResult result = ComputeElementTypes(parsed_rule.condition,
-                                             &indexed_rule->element_types);
+    ParseResult result =
+        ComputeElementTypes(parsed_rule, &indexed_rule->element_types);
     if (result != ParseResult::SUCCESS)
       return result;
   }
diff --git a/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc b/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
index 8d2bfde3..68cec854 100644
--- a/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
@@ -777,6 +777,59 @@
   EXPECT_EQ("http://google.com", indexed_rule.redirect_url);
 }
 
+TEST_F(IndexedRuleTest, InvalidAllowAllRequestsResourceType) {
+  using ResourceTypeVec = std::vector<dnr_api::ResourceType>;
+
+  struct {
+    ResourceTypeVec resource_types;
+    ResourceTypeVec excluded_resource_types;
+    const ParseResult expected_result;
+    // Only valid if |expected_result| is SUCCESS.
+    const uint16_t expected_element_types;
+  } cases[] = {
+      {{}, {}, ParseResult::ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE, 0},
+      {{dnr_api::RESOURCE_TYPE_SUB_FRAME},
+       {dnr_api::RESOURCE_TYPE_SCRIPT},
+       ParseResult::SUCCESS,
+       flat_rule::ElementType_SUBDOCUMENT},
+      {{dnr_api::RESOURCE_TYPE_SCRIPT, dnr_api::RESOURCE_TYPE_MAIN_FRAME},
+       {},
+       ParseResult::ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE,
+       0},
+      {{dnr_api::RESOURCE_TYPE_MAIN_FRAME, dnr_api::RESOURCE_TYPE_SUB_FRAME},
+       {},
+       ParseResult::SUCCESS,
+       flat_rule::ElementType_MAIN_FRAME | flat_rule::ElementType_SUBDOCUMENT},
+      {{dnr_api::RESOURCE_TYPE_MAIN_FRAME},
+       {},
+       ParseResult::SUCCESS,
+       flat_rule::ElementType_MAIN_FRAME},
+  };
+
+  for (size_t i = 0; i < base::size(cases); ++i) {
+    SCOPED_TRACE(base::StringPrintf("Testing case[%" PRIuS "]", i));
+    dnr_api::Rule rule = CreateGenericParsedRule();
+
+    if (cases[i].resource_types.empty())
+      rule.condition.resource_types = nullptr;
+    else
+      rule.condition.resource_types =
+          std::make_unique<ResourceTypeVec>(cases[i].resource_types);
+
+    rule.condition.excluded_resource_types =
+        std::make_unique<ResourceTypeVec>(cases[i].excluded_resource_types);
+    rule.action.type = dnr_api::RULE_ACTION_TYPE_ALLOWALLREQUESTS;
+
+    IndexedRule indexed_rule;
+    ParseResult result = IndexedRule::CreateIndexedRule(
+        std::move(rule), GetBaseURL(), &indexed_rule);
+
+    EXPECT_EQ(cases[i].expected_result, result);
+    if (result == ParseResult::SUCCESS)
+      EXPECT_EQ(cases[i].expected_element_types, indexed_rule.element_types);
+  }
+}
+
 }  // namespace
 }  // namespace declarative_net_request
 }  // namespace extensions
diff --git a/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc b/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc
index 92b6de8..22981eb 100644
--- a/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc
@@ -26,6 +26,7 @@
   redirect,
   upgrade_scheme,
   remove_headers,
+  allow_all_requests,
   count
 }
 table QueryKeyValue {
@@ -55,7 +56,8 @@
   transform : UrlTransform;
 }
 enum IndexType : ubyte {
-  before_request = 0,
+  before_request_except_allow_all_requests = 0,
+  allow_all_requests,
   remove_cookie_header,
   remove_referer_header,
   remove_set_cookie_header,
@@ -143,7 +145,7 @@
   EXPECT_EQ(StripCommentsAndWhitespace(kFlatbufferSchemaExpected),
             StripCommentsAndWhitespace(flatbuffer_schema))
       << "Schema change detected; update this test and the schema version.";
-  EXPECT_EQ(14, GetIndexedRulesetFormatVersionForTesting())
+  EXPECT_EQ(15, GetIndexedRulesetFormatVersionForTesting())
       << "Update this test if you update the schema version.";
 }
 
diff --git a/extensions/browser/api/declarative_net_request/parse_info.cc b/extensions/browser/api/declarative_net_request/parse_info.cc
index eb08f6c..d23841b 100644
--- a/extensions/browser/api/declarative_net_request/parse_info.cc
+++ b/extensions/browser/api/declarative_net_request/parse_info.cc
@@ -177,6 +177,11 @@
                                              base::NumberToString(*rule_id_),
                                              kRegexSubstitutionPath);
       break;
+    case ParseResult::ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE:
+      error = ErrorUtils::FormatErrorMessage(
+          kErrorInvalidAllowAllRequestsResourceType,
+          base::NumberToString(*rule_id_));
+      break;
   }
   return error;
 }
diff --git a/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc b/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc
index efa29595..353107d 100644
--- a/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc
+++ b/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc
@@ -25,7 +25,7 @@
 
   // We only support removing a subset of extra headers currently. If that
   // changes, the implementation here should change as well.
-  static_assert(flat::ActionType_count == 5,
+  static_assert(flat::ActionType_count == 6,
                 "Modify this method to ensure IsExtraHeadersMatcherInternal is "
                 "updated as new actions are added.");
 
@@ -61,6 +61,7 @@
     case flat::ActionType_allow:
     case flat::ActionType_redirect:
     case flat::ActionType_upgrade_scheme:
+    case flat::ActionType_allow_all_requests:
       return true;
     case flat::ActionType_remove_headers:
       return false;
@@ -124,6 +125,9 @@
                                                     *metadata_list_);
     case flat::ActionType_upgrade_scheme:
       return CreateUpgradeAction(params, rule);
+    case flat::ActionType_allow_all_requests:
+      // TODO(crbug.com/1038831): Handle allowAllRequests case.
+      break;
     default:
       NOTREACHED();
   }
diff --git a/extensions/browser/api/declarative_net_request/ruleset_manager.cc b/extensions/browser/api/declarative_net_request/ruleset_manager.cc
index 06b5a8b..f3b58de 100644
--- a/extensions/browser/api/declarative_net_request/ruleset_manager.cc
+++ b/extensions/browser/api/declarative_net_request/ruleset_manager.cc
@@ -311,7 +311,7 @@
 
   // We only support removing a subset of extra headers currently. If that
   // changes, the implementation here should change as well.
-  static_assert(flat::ActionType_count == 5,
+  static_assert(flat::ActionType_count == 6,
                 "Modify this method to ensure HasExtraHeadersMatcherForRequest "
                 "is updated as new actions are added.");
 
diff --git a/extensions/browser/api/declarative_net_request/test_utils.cc b/extensions/browser/api/declarative_net_request/test_utils.cc
index a33bc4f..f160a5ed 100644
--- a/extensions/browser/api/declarative_net_request/test_utils.cc
+++ b/extensions/browser/api/declarative_net_request/test_utils.cc
@@ -37,7 +37,7 @@
 // with gtest. This reuses the logic used to test action equality in
 // TestRequestACtion in test_utils.h.
 bool operator==(const RequestAction& lhs, const RequestAction& rhs) {
-  static_assert(flat::IndexType_count == 4,
+  static_assert(flat::IndexType_count == 5,
                 "Modify this method to ensure it stays updated as new actions "
                 "are added.");
 
@@ -198,6 +198,9 @@
     case ParseResult::ERROR_INVALID_REGEX_SUBSTITUTION:
       output << "ERROR_INVALID_REGEX_SUBSTITUTION";
       break;
+    case ParseResult::ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE:
+      output << "ERROR_INVALID_ALLOW_ALL_REQUESTS_RESOURCE_TYPE";
+      break;
   }
   return output;
 }
diff --git a/extensions/browser/api/declarative_net_request/utils.cc b/extensions/browser/api/declarative_net_request/utils.cc
index cc6a7bb1..1d00d3a 100644
--- a/extensions/browser/api/declarative_net_request/utils.cc
+++ b/extensions/browser/api/declarative_net_request/utils.cc
@@ -37,7 +37,7 @@
 // url_pattern_index.fbs. Whenever an extension with an indexed ruleset format
 // version different from the one currently used by Chrome is loaded, the
 // extension ruleset will be reindexed.
-constexpr int kIndexedRulesetFormatVersion = 14;
+constexpr int kIndexedRulesetFormatVersion = 15;
 
 // This static assert is meant to catch cases where
 // url_pattern_index::kUrlPatternIndexFormatVersion is incremented without
@@ -250,6 +250,8 @@
       return flat::ActionType_remove_headers;
     case dnr_api::RULE_ACTION_TYPE_UPGRADESCHEME:
       return flat::ActionType_upgrade_scheme;
+    case dnr_api::RULE_ACTION_TYPE_ALLOWALLREQUESTS:
+      return flat::ActionType_allow_all_requests;
     case dnr_api::RULE_ACTION_TYPE_NONE:
       break;
   }
diff --git a/extensions/browser/api/web_request/DEPS b/extensions/browser/api/web_request/DEPS
deleted file mode 100644
index 96d3200..0000000
--- a/extensions/browser/api/web_request/DEPS
+++ /dev/null
@@ -1,4 +0,0 @@
-include_rules = [
-  # TODO(crbug.com/996940): Remove this when done debugging.
-  "+components/crash",
-]
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
index 30d776f0..481a45d 100644
--- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
+++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
@@ -10,10 +10,8 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/feature_list.h"
-#include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
-#include "components/crash/core/common/crash_key.h"
 #include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -1038,20 +1036,6 @@
       request_id_generator_->Generate(routing_id, request_id);
 
   if (request_id) {
-    // TODO(crbug.com/996940): Remove these when done debugging.
-    static crash_reporter::CrashKeyString<1024> url_key("wr-url");
-    crash_reporter::ScopedCrashKeyString url_string(
-        &url_key, request.url.possibly_invalid_spec());
-
-    static crash_reporter::CrashKeyString<8> type_key("wr-loader-type");
-    crash_reporter::ScopedCrashKeyString type_string(
-        &type_key, base::NumberToString(int(loader_factory_type_)));
-
-    static crash_reporter::CrashKeyString<32> id_key("wr-request-id");
-    crash_reporter::ScopedCrashKeyString id_string(
-        &id_key, base::NumberToString(render_process_id_) + ":" +
-                     base::NumberToString(request_id));
-
     // Only requests with a non-zero request ID can have their proxy associated
     // with said ID. This is necessary to support correlation against any auth
     // events received by the browser. Requests with a request ID of 0 therefore
diff --git a/extensions/common/api/declarative_net_request.idl b/extensions/common/api/declarative_net_request.idl
index 541bc63..047da6f 100644
--- a/extensions/common/api/declarative_net_request.idl
+++ b/extensions/common/api/declarative_net_request.idl
@@ -53,7 +53,11 @@
     // or ftp.
     upgradeScheme,
     // Remove request/response headers from the network request.
-    removeHeaders
+    removeHeaders,
+    // TODO(crbug.com/1038831): Add documentation once the implementation is
+    // complete.
+    [nodoc]
+    allowAllRequests
   };
 
   // Represents a query key-value pair.
@@ -258,7 +262,7 @@
     long? tabId;
 
     // If specified, only matches rules after the given timestamp.
-    long? minTimeStamp;
+    double? minTimeStamp;
   };
 
   [nodoc]
diff --git a/extensions/common/constants.cc b/extensions/common/constants.cc
index 5f57a23..db5a7cf3 100644
--- a/extensions/common/constants.cc
+++ b/extensions/common/constants.cc
@@ -20,6 +20,8 @@
     FILE_PATH_LITERAL("_locales");
 const base::FilePath::CharType kMessagesFilename[] =
     FILE_PATH_LITERAL("messages.json");
+const base::FilePath::CharType kGzippedMessagesFilename[] =
+    FILE_PATH_LITERAL("messages.json.gz");
 const base::FilePath::CharType kPlatformSpecificFolder[] =
     FILE_PATH_LITERAL("_platform_specific");
 const base::FilePath::CharType kMetadataFolder[] =
diff --git a/extensions/common/constants.h b/extensions/common/constants.h
index edbf27c..b859afe3 100644
--- a/extensions/common/constants.h
+++ b/extensions/common/constants.h
@@ -29,6 +29,9 @@
 // The name of the messages file inside an extension.
 extern const base::FilePath::CharType kMessagesFilename[];
 
+// The name of the gzipped messages file inside an extension.
+extern const base::FilePath::CharType kGzippedMessagesFilename[];
+
 // The base directory for subdirectories with platform-specific code.
 extern const base::FilePath::CharType kPlatformSpecificFolder[];
 
diff --git a/extensions/common/extension_l10n_util.cc b/extensions/common/extension_l10n_util.cc
index 4f1b0a93..c102fc13 100644
--- a/extensions/common/extension_l10n_util.cc
+++ b/extensions/common/extension_l10n_util.cc
@@ -163,10 +163,16 @@
 
 GzippedMessagesPermission GetGzippedMessagesPermissionForExtension(
     const extensions::Extension* extension) {
+  return extension
+             ? GetGzippedMessagesPermissionForLocation(extension->location())
+             : GzippedMessagesPermission::kDisallow;
+}
+
+GzippedMessagesPermission GetGzippedMessagesPermissionForLocation(
+    extensions::Manifest::Location location) {
   // Component extensions are part of the chromium or chromium OS source and
   // as such are considered a trusted source.
-  return (extension &&
-          extension->location() == extensions::Manifest::Location::COMPONENT)
+  return location == extensions::Manifest::COMPONENT
              ? GzippedMessagesPermission::kAllowForTrustedSource
              : GzippedMessagesPermission::kDisallow;
 }
diff --git a/extensions/common/extension_l10n_util.h b/extensions/common/extension_l10n_util.h
index b1360898..1971662 100644
--- a/extensions/common/extension_l10n_util.h
+++ b/extensions/common/extension_l10n_util.h
@@ -13,6 +13,7 @@
 
 #include "base/auto_reset.h"
 #include "base/strings/string_piece.h"
+#include "extensions/common/manifest.h"
 
 namespace base {
 class DictionaryValue;
@@ -39,6 +40,11 @@
 GzippedMessagesPermission GetGzippedMessagesPermissionForExtension(
     const extensions::Extension* extension);
 
+// Returns GzippedMessagesPermission::kAllowForTrustedSource for trusted
+// manifest locations, otherwise returns kDisallow.
+GzippedMessagesPermission GetGzippedMessagesPermissionForLocation(
+    extensions::Manifest::Location location);
+
 // Called from tests to temporarily allow loading gzipped messages for non
 // component test extensions.
 base::AutoReset<bool> AllowGzippedMessagesAllowedForTest();
diff --git a/extensions/common/file_util.cc b/extensions/common/file_util.cc
index 49f30ee..d40f987 100644
--- a/extensions/common/file_util.cc
+++ b/extensions/common/file_util.cc
@@ -207,9 +207,12 @@
       LoadManifest(extension_path, error);
   if (!manifest.get())
     return nullptr;
+
   if (!extension_l10n_util::LocalizeExtension(
           extension_path, manifest.get(),
-          extension_l10n_util::GzippedMessagesPermission::kDisallow, error)) {
+          extension_l10n_util::GetGzippedMessagesPermissionForLocation(
+              location),
+          error)) {
     return nullptr;
   }
 
diff --git a/extensions/common/file_util_unittest.cc b/extensions/common/file_util_unittest.cc
index 6f63ba8..f1cfdebd 100644
--- a/extensions/common/file_util_unittest.cc
+++ b/extensions/common/file_util_unittest.cc
@@ -195,6 +195,31 @@
   EXPECT_EQ("The first extension that I made.", extension->description());
 }
 
+TEST_F(FileUtilTest, LoadExtensionWithGzippedLocalesAllowed) {
+  base::FilePath install_dir;
+  ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &install_dir));
+  install_dir = install_dir.AppendASCII("extension_with_gzipped_locales");
+
+  std::string error;
+  scoped_refptr<Extension> extension(file_util::LoadExtension(
+      install_dir, Manifest::COMPONENT, Extension::NO_FLAGS, &error));
+  ASSERT_TRUE(extension.get() != nullptr);
+  EXPECT_EQ("The first extension that I made.", extension->description());
+  ASSERT_TRUE(error.empty());
+}
+
+TEST_F(FileUtilTest, LoadExtensionWithGzippedLocalesNotAllowed) {
+  base::FilePath install_dir;
+  ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &install_dir));
+  install_dir = install_dir.AppendASCII("extension_with_gzipped_locales");
+
+  std::string error;
+  scoped_refptr<Extension> extension(file_util::LoadExtension(
+      install_dir, Manifest::UNPACKED, Extension::NO_FLAGS, &error));
+  ASSERT_TRUE(extension.get() == nullptr);
+  EXPECT_EQ("Catalog file is missing for locale en.", error);
+}
+
 TEST_F(FileUtilTest, LoadExtensionWithoutLocalesFolder) {
   base::FilePath install_dir;
   ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &install_dir));
diff --git a/extensions/common/manifest_handlers/default_locale_handler.cc b/extensions/common/manifest_handlers/default_locale_handler.cc
index 83dfdc71..f765516 100644
--- a/extensions/common/manifest_handlers/default_locale_handler.cc
+++ b/extensions/common/manifest_handlers/default_locale_handler.cc
@@ -80,6 +80,11 @@
   const base::FilePath default_locale_path = path.AppendASCII(default_locale);
   bool has_default_locale_message_file = false;
 
+  bool gzipped_messages_allowed =
+      extension_l10n_util::GetGzippedMessagesPermissionForLocation(
+          extension->location()) ==
+      extension_l10n_util::GzippedMessagesPermission::kAllowForTrustedSource;
+
   base::FilePath locale_path;
   while (!(locale_path = locales.Next()).empty()) {
     if (extension_l10n_util::ShouldSkipValidation(path, locale_path,
@@ -87,8 +92,13 @@
       continue;
 
     base::FilePath messages_path = locale_path.Append(kMessagesFilename);
+    base::FilePath gzipped_messages_path =
+        locale_path.Append(kGzippedMessagesFilename);
 
-    if (!base::PathExists(messages_path)) {
+    // Fail unless plain exists or (gzip allowed and gzip exists)
+    if (!base::PathExists(messages_path) &&
+        !(gzipped_messages_allowed &&
+          base::PathExists(gzipped_messages_path))) {
       *error = base::StringPrintf(
           "%s %s", errors::kLocalesMessagesFileMissing,
           base::UTF16ToUTF8(messages_path.LossyDisplayName()).c_str());
diff --git a/extensions/test/data/extension_with_gzipped_locales/_locales/en/messages.json.gz b/extensions/test/data/extension_with_gzipped_locales/_locales/en/messages.json.gz
new file mode 100644
index 0000000..e3670a8
--- /dev/null
+++ b/extensions/test/data/extension_with_gzipped_locales/_locales/en/messages.json.gz
Binary files differ
diff --git a/extensions/test/data/extension_with_gzipped_locales/_locales/en_US/messages.json.gz b/extensions/test/data/extension_with_gzipped_locales/_locales/en_US/messages.json.gz
new file mode 100644
index 0000000..ef28667
--- /dev/null
+++ b/extensions/test/data/extension_with_gzipped_locales/_locales/en_US/messages.json.gz
Binary files differ
diff --git a/extensions/test/data/extension_with_gzipped_locales/_locales/sr/messages.json.gz b/extensions/test/data/extension_with_gzipped_locales/_locales/sr/messages.json.gz
new file mode 100644
index 0000000..72e5820a
--- /dev/null
+++ b/extensions/test/data/extension_with_gzipped_locales/_locales/sr/messages.json.gz
Binary files differ
diff --git a/extensions/test/data/extension_with_gzipped_locales/manifest.json b/extensions/test/data/extension_with_gzipped_locales/manifest.json
new file mode 100644
index 0000000..04da45a
--- /dev/null
+++ b/extensions/test/data/extension_with_gzipped_locales/manifest.json
@@ -0,0 +1,7 @@
+{
+  "version": "1.0.0.0",
+  "manifest_version": 2,
+  "name": "__MSG_chrome_extension_name__",
+  "description": "__MSG_chrome_extension_description__",
+  "default_locale": "en_US"
+}
diff --git a/gpu/command_buffer/service/shared_image_representation.cc b/gpu/command_buffer/service/shared_image_representation.cc
index 829083c..3e34acb 100644
--- a/gpu/command_buffer/service/shared_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image_representation.cc
@@ -19,6 +19,10 @@
 }
 
 SharedImageRepresentation::~SharedImageRepresentation() {
+  // CHECK here as we'll crash later anyway, and this makes it clearer what the
+  // error is.
+  CHECK(!has_scoped_access_) << "Destroying a SharedImageRepresentation with "
+                                "outstanding Scoped*Access objects.";
   manager_->OnRepresentationDestroyed(backing_->mailbox(), this);
 }
 
@@ -85,10 +89,10 @@
     util::PassKey<SharedImageRepresentationSkia> /* pass_key */,
     SharedImageRepresentationSkia* representation,
     sk_sp<SkSurface> surface)
-    : representation_(representation), surface_(std::move(surface)) {}
+    : ScopedAccessBase(representation), surface_(std::move(surface)) {}
 
 SharedImageRepresentationSkia::ScopedWriteAccess::~ScopedWriteAccess() {
-  representation_->EndWriteAccess(std::move(surface_));
+  representation()->EndWriteAccess(std::move(surface_));
 }
 
 std::unique_ptr<SharedImageRepresentationSkia::ScopedWriteAccess>
@@ -127,11 +131,11 @@
     util::PassKey<SharedImageRepresentationSkia> /* pass_key */,
     SharedImageRepresentationSkia* representation,
     sk_sp<SkPromiseImageTexture> promise_image_texture)
-    : representation_(representation),
+    : ScopedAccessBase(representation),
       promise_image_texture_(std::move(promise_image_texture)) {}
 
 SharedImageRepresentationSkia::ScopedReadAccess::~ScopedReadAccess() {
-  representation_->EndReadAccess();
+  representation()->EndReadAccess();
 }
 
 std::unique_ptr<SharedImageRepresentationSkia::ScopedReadAccess>
@@ -153,6 +157,12 @@
       std::move(promise_image_texture));
 }
 
+SharedImageRepresentationOverlay::ScopedReadAccess::ScopedReadAccess(
+    util::PassKey<SharedImageRepresentationOverlay> pass_key,
+    SharedImageRepresentationOverlay* representation,
+    gl::GLImage* gl_image)
+    : ScopedAccessBase(representation), gl_image_(gl_image) {}
+
 std::unique_ptr<SharedImageRepresentationOverlay::ScopedReadAccess>
 SharedImageRepresentationOverlay::BeginScopedReadAccess(bool needs_gl_image) {
   if (!IsCleared()) {
@@ -170,10 +180,10 @@
     util::PassKey<SharedImageRepresentationDawn> /* pass_key */,
     SharedImageRepresentationDawn* representation,
     WGPUTexture texture)
-    : representation_(representation), texture_(texture) {}
+    : ScopedAccessBase(representation), texture_(texture) {}
 
 SharedImageRepresentationDawn::ScopedAccess::~ScopedAccess() {
-  representation_->EndAccess();
+  representation()->EndAccess();
 }
 
 std::unique_ptr<SharedImageRepresentationDawn::ScopedAccess>
diff --git a/gpu/command_buffer/service/shared_image_representation.h b/gpu/command_buffer/service/shared_image_representation.h
index e8a699e..065db021 100644
--- a/gpu/command_buffer/service/shared_image_representation.h
+++ b/gpu/command_buffer/service/shared_image_representation.h
@@ -78,11 +78,36 @@
   SharedImageBacking* backing() const { return backing_; }
   bool has_context() const { return has_context_; }
 
+  // Helper class for derived classes' Scoped*Access objects. Has tracking to
+  // ensure a Scoped*Access does not outlive the representation it's associated
+  // with.
+  template <typename RepresentationClass>
+  class ScopedAccessBase {
+   public:
+    ScopedAccessBase(RepresentationClass* representation)
+        : representation_(representation) {
+      DCHECK(!representation_->has_scoped_access_);
+      representation_->has_scoped_access_ = true;
+    }
+    ~ScopedAccessBase() {
+      DCHECK(representation_->has_scoped_access_);
+      representation_->has_scoped_access_ = false;
+    }
+
+    RepresentationClass* representation() { return representation_; }
+
+   private:
+    RepresentationClass* const representation_;
+
+    DISALLOW_COPY_AND_ASSIGN(ScopedAccessBase);
+  };
+
  private:
   SharedImageManager* const manager_;
   SharedImageBacking* const backing_;
   MemoryTypeTracker* const tracker_;
   bool has_context_ = true;
+  bool has_scoped_access_ = false;
 };
 
 class SharedImageRepresentationFactoryRef : public SharedImageRepresentation {
@@ -106,20 +131,16 @@
 class GPU_GLES2_EXPORT SharedImageRepresentationGLTextureBase
     : public SharedImageRepresentation {
  public:
-  class ScopedAccess {
+  class ScopedAccess
+      : public ScopedAccessBase<SharedImageRepresentationGLTextureBase> {
    public:
     ScopedAccess(util::PassKey<SharedImageRepresentationGLTextureBase> pass_key,
                  SharedImageRepresentationGLTextureBase* representation)
-        : representation_(representation) {}
+        : ScopedAccessBase(representation) {}
     ~ScopedAccess() {
-      representation_->UpdateClearedStateOnEndAccess();
-      representation_->EndAccess();
+      representation()->UpdateClearedStateOnEndAccess();
+      representation()->EndAccess();
     }
-
-   private:
-    SharedImageRepresentationGLTextureBase* representation_ = nullptr;
-
-    DISALLOW_COPY_AND_ASSIGN(ScopedAccess);
   };
 
   SharedImageRepresentationGLTextureBase(SharedImageManager* manager,
@@ -183,7 +204,8 @@
 class GPU_GLES2_EXPORT SharedImageRepresentationSkia
     : public SharedImageRepresentation {
  public:
-  class GPU_GLES2_EXPORT ScopedWriteAccess {
+  class GPU_GLES2_EXPORT ScopedWriteAccess
+      : public ScopedAccessBase<SharedImageRepresentationSkia> {
    public:
     ScopedWriteAccess(util::PassKey<SharedImageRepresentationSkia> pass_key,
                       SharedImageRepresentationSkia* representation,
@@ -193,13 +215,11 @@
     SkSurface* surface() const { return surface_.get(); }
 
    private:
-    SharedImageRepresentationSkia* const representation_;
     sk_sp<SkSurface> surface_;
-
-    DISALLOW_COPY_AND_ASSIGN(ScopedWriteAccess);
   };
 
-  class GPU_GLES2_EXPORT ScopedReadAccess {
+  class GPU_GLES2_EXPORT ScopedReadAccess
+      : public ScopedAccessBase<SharedImageRepresentationSkia> {
    public:
     ScopedReadAccess(util::PassKey<SharedImageRepresentationSkia> pass_key,
                      SharedImageRepresentationSkia* representation,
@@ -211,10 +231,7 @@
     }
 
    private:
-    SharedImageRepresentationSkia* const representation_;
     sk_sp<SkPromiseImageTexture> promise_image_texture_;
-
-    DISALLOW_COPY_AND_ASSIGN(ScopedReadAccess);
   };
 
   SharedImageRepresentationSkia(SharedImageManager* manager,
@@ -280,7 +297,8 @@
                                 MemoryTypeTracker* tracker)
       : SharedImageRepresentation(manager, backing, tracker) {}
 
-  class GPU_GLES2_EXPORT ScopedAccess {
+  class GPU_GLES2_EXPORT ScopedAccess
+      : public ScopedAccessBase<SharedImageRepresentationDawn> {
    public:
     ScopedAccess(util::PassKey<SharedImageRepresentationDawn> pass_key,
                  SharedImageRepresentationDawn* representation,
@@ -290,10 +308,7 @@
     WGPUTexture texture() const { return texture_; }
 
    private:
-    SharedImageRepresentationDawn* representation_ = nullptr;
     WGPUTexture texture_ = 0;
-
-    DISALLOW_COPY_AND_ASSIGN(ScopedAccess);
   };
 
   // Calls BeginAccess and returns a ScopedAccess object which will EndAccess
@@ -318,24 +333,19 @@
                                    MemoryTypeTracker* tracker)
       : SharedImageRepresentation(manager, backing, tracker) {}
 
-  class ScopedReadAccess {
+  class ScopedReadAccess
+      : public ScopedAccessBase<SharedImageRepresentationOverlay> {
    public:
     ScopedReadAccess(util::PassKey<SharedImageRepresentationOverlay> pass_key,
                      SharedImageRepresentationOverlay* representation,
-                     gl::GLImage* gl_image)
-        : representation_(representation), gl_image_(gl_image) {}
-    ~ScopedReadAccess() {
-      if (representation_)
-        representation_->EndReadAccess();
-    }
+                     gl::GLImage* gl_image);
+    ~ScopedReadAccess() { representation()->EndReadAccess(); }
 
     gl::GLImage* gl_image() const {
-      DCHECK(representation_);
       return gl_image_;
     }
 
    private:
-    SharedImageRepresentationOverlay* representation_;
     gl::GLImage* gl_image_;
   };
 
diff --git a/gpu/command_buffer/service/wrapped_sk_image.cc b/gpu/command_buffer/service/wrapped_sk_image.cc
index d8c46b23f..bd7256d 100644
--- a/gpu/command_buffer/service/wrapped_sk_image.cc
+++ b/gpu/command_buffer/service/wrapped_sk_image.cc
@@ -42,7 +42,8 @@
  public:
   ~WrappedSkImage() override {
     promise_texture_.reset();
-    gpu::DeleteSkImage(context_state_, std::move(image_));
+    if (backend_texture_.isValid())
+      DeleteGrBackendTexture(context_state_, &backend_texture_);
 
     DCHECK(context_state_->context_lost() ||
            context_state_->IsCurrent(nullptr));
@@ -84,7 +85,7 @@
     DCHECK(context_state_->IsCurrent(nullptr));
 
     return SkSurface::MakeFromBackendTexture(
-        context_state_->gr_context(), image_->getBackendTexture(false),
+        context_state_->gr_context(), backend_texture_,
         kTopLeft_GrSurfaceOrigin, final_msaa_count, GetSkColorType(),
         color_space().ToSkColorSpace(), &surface_props);
   }
@@ -138,23 +139,21 @@
 
     if (!data.empty()) {
       if (format() == viz::ResourceFormat::ETC1) {
-        auto sk_data = SkData::MakeWithCopy(data.data(), data.size());
-        image_ = SkImage::MakeFromCompressed(
-            context_state_->gr_context(), sk_data, size().width(),
-            size().height(), SkImage::kETC1_CompressionType);
+        backend_texture_ =
+            context_state_->gr_context()->createCompressedBackendTexture(
+                size().width(), size().height(), SkImage::kETC1_CompressionType,
+                data.data(), data.size(), GrMipMapped::kNo, is_protected);
       } else {
         SkBitmap bitmap;
         if (!bitmap.installPixels(info, const_cast<uint8_t*>(data.data()),
                                   info.minRowBytes())) {
           return false;
         }
-        image_ = SkImage::MakeFromBitmap(bitmap);
-        // Move image to GPU
-        if (image_)
-          image_ = image_->makeTextureImage(context_state_->gr_context());
+        backend_texture_ = context_state_->gr_context()->createBackendTexture(
+            bitmap.pixmap(), GrRenderable::kNo, is_protected);
       }
 
-      if (!image_)
+      if (!backend_texture_.isValid())
         return false;
 
       SetCleared();
@@ -165,42 +164,38 @@
       // We don't do this on release builds because there is a slight overhead.
 
 #if DCHECK_IS_ON()
-      auto backend_texture = context_state_->gr_context()->createBackendTexture(
+      backend_texture_ = context_state_->gr_context()->createBackendTexture(
           size().width(), size().height(), GetSkColorType(), SkColors::kBlue,
           GrMipMapped::kNo, GrRenderable::kYes, is_protected);
 #else
-      auto backend_texture = context_state_->gr_context()->createBackendTexture(
+      backend_texture_ = context_state_->gr_context()->createBackendTexture(
           size().width(), size().height(), GetSkColorType(), GrMipMapped::kNo,
           GrRenderable::kYes, is_protected);
 #endif
-      image_ = SkImage::MakeFromAdoptedTexture(
-          context_state_->gr_context(), backend_texture,
-          GrSurfaceOrigin::kTopLeft_GrSurfaceOrigin, info.colorType(),
-          info.alphaType(), color_space().ToSkColorSpace());
     }
 
-    auto backend_texture = image_->getBackendTexture(true);
-    DCHECK(backend_texture.isValid());
+    if (!backend_texture_.isValid())
+      return false;
 
-    promise_texture_ = SkPromiseImageTexture::Make(backend_texture);
+    promise_texture_ = SkPromiseImageTexture::Make(backend_texture_);
 
-    switch (backend_texture.backend()) {
+    switch (backend_texture_.backend()) {
       case GrBackendApi::kOpenGL: {
         GrGLTextureInfo tex_info;
-        if (backend_texture.getGLTextureInfo(&tex_info))
+        if (backend_texture_.getGLTextureInfo(&tex_info))
           tracing_id_ = tex_info.fID;
         break;
       }
       case GrBackendApi::kVulkan: {
         GrVkImageInfo image_info;
-        if (backend_texture.getVkImageInfo(&image_info))
+        if (backend_texture_.getVkImageInfo(&image_info))
           tracing_id_ = reinterpret_cast<uint64_t>(image_info.fImage);
         break;
       }
 #if BUILDFLAG(SKIA_USE_DAWN)
       case GrBackendApi::kDawn: {
         GrDawnTextureInfo tex_info;
-        if (backend_texture.getDawnTextureInfo(&tex_info))
+        if (backend_texture_.getDawnTextureInfo(&tex_info))
           tracing_id_ = reinterpret_cast<uint64_t>(tex_info.fTexture.Get());
         break;
       }
@@ -215,9 +210,8 @@
 
   SharedContextState* const context_state_;
 
+  GrBackendTexture backend_texture_;
   sk_sp<SkPromiseImageTexture> promise_texture_;
-  // TODO(penghuang): manage texture directly with GrBackendTexture,
-  sk_sp<SkImage> image_;
 
   uint64_t tracing_id_ = 0;
 
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.h b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.h
index 434053f..5051cd2d 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.h
@@ -24,17 +24,24 @@
   ~InfobarBannerOverlayRequestCallbackInstaller() override;
 
  private:
-  // Called as a dispatch callback for |request| when |response| is configured
-  // with an InfobarBannerMainActionResponse.
+  // Used as a callback for OverlayResponses dispatched through |request|'s
+  // callback manager.  The OverlayDispatchCallback is created with an
+  // OverlayResponseSupport that guarantees that |response| is created with an
+  // InfobarBannerMainActionResponse.
   void MainActionButtonTapped(OverlayRequest* request,
                               OverlayResponse* response);
-  // Called as a dispatch callback for |request| when |response| is configured
-  // with an InfobarBannerShowModalResponse.
+  // Used as a callback for OverlayResponses dispatched through |request|'s
+  // callback manager.  The OverlayDispatchCallback is created with an
+  // OverlayResponseSupport that guarantees that |response| is created with an
+  // InfobarBannerShowModalResponse.
   void ShowModalButtonTapped(OverlayRequest* request,
                              OverlayResponse* response);
-  // Called as a completion callback for |request|, where |response| is the
-  // completion response.
-  void BannerCompleted(OverlayRequest* request, OverlayResponse* response);
+  // Used as a callback for OverlayResponses dispatched through |request|'s
+  // callback manager.  The OverlayDispatchCallback is created with an
+  // OverlayResponseSupport that guarantees that |response| is created with an
+  // InfobarBannerUserInitiatedDismissalResponse.
+  void BannerDismissedByUser(OverlayRequest* request,
+                             OverlayResponse* response);
 
   // OverlayRequestCallbackInstaller:
   const OverlayRequestSupport* GetRequestSupport() const override;
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.mm b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.mm
index a86ff30..87ac0215 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer.mm
@@ -46,17 +46,11 @@
                                               request->GetQueueWebState());
 }
 
-void InfobarBannerOverlayRequestCallbackInstaller::BannerCompleted(
+void InfobarBannerOverlayRequestCallbackInstaller::BannerDismissedByUser(
     OverlayRequest* request,
     OverlayResponse* response) {
-  bool user_initiated = false;
-  if (response) {
-    InfobarBannerCompletionResponse* banner_completion =
-        response->GetInfo<InfobarBannerCompletionResponse>();
-    user_initiated = banner_completion && banner_completion->user_initiated();
-  }
-  interaction_handler_->BannerCompleted(GetOverlayRequestInfobar(request),
-                                        user_initiated);
+  interaction_handler_->BannerDismissedByUser(
+      GetOverlayRequestInfobar(request));
 }
 
 #pragma mark - OverlayRequestCallbackInstaller
@@ -79,7 +73,9 @@
           &InfobarBannerOverlayRequestCallbackInstaller::ShowModalButtonTapped,
           weak_factory_.GetWeakPtr(), request),
       InfobarBannerShowModalResponse::ResponseSupport()));
-  manager->AddCompletionCallback(base::BindOnce(
-      &InfobarBannerOverlayRequestCallbackInstaller::BannerCompleted,
-      weak_factory_.GetWeakPtr(), request));
+  manager->AddDispatchCallback(OverlayDispatchCallback(
+      base::BindRepeating(
+          &InfobarBannerOverlayRequestCallbackInstaller::BannerDismissedByUser,
+          weak_factory_.GetWeakPtr(), request),
+      InfobarBannerUserInitiatedDismissalResponse::ResponseSupport()));
 }
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer_unittest.mm b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer_unittest.mm
index c9a31f0..dd0c8f6d 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_banner_overlay_request_callback_installer_unittest.mm
@@ -68,13 +68,12 @@
       OverlayResponse::CreateWithInfo<InfobarBannerShowModalResponse>());
 }
 
-// Tests that the request's completion callback calls
-// InfobarBannerInteractionHandler::BannerCompleted().
-TEST_F(InfobarBannerOverlayRequestCallbackInstallerTest, Completion) {
-  bool user_initiated = true;
-  callback_manager()->SetCompletionResponse(
-      OverlayResponse::CreateWithInfo<InfobarBannerCompletionResponse>(
-          user_initiated));
-  EXPECT_CALL(mock_handler_, BannerCompleted(&infobar_, user_initiated));
-  queue()->CancelAllRequests();
+// Tests that a dispatched InfobarBannerShowModalResponse calls
+// InfobarBannerInteractionHandler::BannerDismissedByUser().
+TEST_F(InfobarBannerOverlayRequestCallbackInstallerTest,
+       UserInitiatedDismissal) {
+  EXPECT_CALL(mock_handler_, BannerDismissedByUser(&infobar_));
+  callback_manager()->DispatchResponse(
+      OverlayResponse::CreateWithInfo<
+          InfobarBannerUserInitiatedDismissalResponse>());
 }
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_unittest.mm b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_unittest.mm
index 0dc2d7b..dbbaf0d 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_unittest.mm
@@ -101,13 +101,6 @@
   EXPECT_CALL(mock_banner_handler,
               BannerVisibilityChanged(&infobar_, /*visible=*/true));
   banner_queue()->AddRequest(std::move(added_request));
-  // Set up the completion response and expect for the interaction handler to
-  // receive the BannerCompleted() callback.
-  bool user_initiated = true;
-  request->GetCallbackManager()->SetCompletionResponse(
-      OverlayResponse::CreateWithInfo<InfobarBannerCompletionResponse>(
-          user_initiated));
-  EXPECT_CALL(mock_banner_handler, BannerCompleted(&infobar_, user_initiated));
   // Simulate dismissal of the request's UI, expecting
   // InfobarBannerInteractionHandler::BannerVisibilityChanged() to be called.
   EXPECT_CALL(mock_banner_handler,
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/infobar_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/infobar_interaction_handler.h
index 4499741..244fcf1 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/infobar_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/infobar_interaction_handler.h
@@ -27,11 +27,9 @@
   // |web_state| is the WebState associated with |infobar|'s InfoBarManager.
   virtual void ShowModalButtonTapped(InfoBarIOS* infobar,
                                      web::WebState* web_state) = 0;
-  // Called when the banner overlay for |infobar| is completed.  Called when the
-  // banner UI is dismissed by user interaction or when its request is
-  // cancelled.  |user_initiated| describes whether the banner was dismissed for
-  // user interaction.
-  virtual void BannerCompleted(InfoBarIOS* infobar, bool user_initiated) = 0;
+  // Notifies the model that the upcoming dismissal is user-initiated (i.e.
+  // a swipe dismissal in the refresh UI).
+  virtual void BannerDismissedByUser(InfoBarIOS* infobar) = 0;
 };
 
 // Handler for infobar detail sheet user interaction events.
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_infobar_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_infobar_interaction_handler.h
index 3ec809f..e740ad37 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_infobar_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_infobar_interaction_handler.h
@@ -20,7 +20,7 @@
   MOCK_METHOD1(MainButtonTapped, void(InfoBarIOS* infobar));
   MOCK_METHOD2(ShowModalButtonTapped,
                void(InfoBarIOS* infobar, web::WebState* web_state));
-  MOCK_METHOD2(BannerCompleted, void(InfoBarIOS* infobar, bool user_initiated));
+  MOCK_METHOD1(BannerDismissedByUser, void(InfoBarIOS* infobar));
 };
 
 // Mock version of InfobarDetailSheetInteractionHandler.
diff --git a/ios/chrome/browser/interstitials/BUILD.gn b/ios/chrome/browser/interstitials/BUILD.gn
index cb25fb7..2b7deb9 100644
--- a/ios/chrome/browser/interstitials/BUILD.gn
+++ b/ios/chrome/browser/interstitials/BUILD.gn
@@ -25,6 +25,7 @@
     "//ios/chrome/browser/history",
     "//ios/chrome/browser/ui/util",
     "//ios/web",
+    "//ios/web/common",
     "//ios/web/public",
     "//ios/web/public/security",
     "//ui/base",
diff --git a/ios/chrome/browser/interstitials/ios_security_interstitial_page.h b/ios/chrome/browser/interstitials/ios_security_interstitial_page.h
index c3cb7dd..cc718019 100644
--- a/ios/chrome/browser/interstitials/ios_security_interstitial_page.h
+++ b/ios/chrome/browser/interstitials/ios_security_interstitial_page.h
@@ -17,6 +17,7 @@
 }
 
 namespace web {
+class WebFrame;
 class WebInterstitial;
 class WebState;
 }
@@ -33,6 +34,13 @@
   // web::WebInterstitialDelegate implementation.
   std::string GetHtmlContents() const override;
 
+  // Handles JS commands from the interstitial page. Overridden in subclasses
+  // to handle actions specific to the type of interstitial.
+  virtual void HandleScriptCommand(const base::DictionaryValue& message,
+                                   const GURL& origin_url,
+                                   bool user_is_interacting,
+                                   web::WebFrame* sender_frame) = 0;
+
  protected:
   // Returns true if the interstitial should create a new navigation item.
   virtual bool ShouldCreateNewNavigation() const = 0;
diff --git a/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm b/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm
index a723ea5..1d17064 100644
--- a/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm
+++ b/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/interstitials/ios_security_interstitial_page.h"
 
+#include "base/feature_list.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
@@ -14,6 +15,7 @@
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/ui/util/dynamic_type_util.h"
+#include "ios/web/common/features.h"
 #include "ios/web/public/security/web_interstitial.h"
 #import "ios/web/public/web_state.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -65,6 +67,9 @@
 
 std::string IOSSecurityInterstitialPage::GetHtmlContents() const {
   base::DictionaryValue load_time_data;
+  load_time_data.SetBoolean(
+      "committed_interstitials_enabled",
+      base::FeatureList::IsEnabled(web::features::kSSLCommittedInterstitials));
   PopulateInterstitialStrings(&load_time_data);
   webui::SetLoadTimeDataDefaults(
       GetApplicationContext()->GetApplicationLocale(), &load_time_data);
diff --git a/ios/chrome/browser/net/cookies_egtest.mm b/ios/chrome/browser/net/cookies_egtest.mm
index efed73b..5b465b0 100644
--- a/ios/chrome/browser/net/cookies_egtest.mm
+++ b/ios/chrome/browser/net/cookies_egtest.mm
@@ -109,13 +109,7 @@
 // The goal is to verify that cookies set in incognito tabs are available in
 // incognito tabs but not available in normal tabs. Cookies set in incognito
 // tabs are also deleted when all incognito tabs are closed.
-// TODO(crbug.com/1019670): This test fails on iOS 12/13 under EG2.
-#if defined(CHROME_EARL_GREY_2)
-#define MAYBE_testClearIncognitoFromMain DISABLED_testClearIncognitoFromMain
-#else
-#define MAYBE_testClearIncognitoFromMain testClearIncognitoFromMain
-#endif
-- (void)MAYBE_testClearIncognitoFromMain {
+- (void)testClearIncognitoFromMain {
   // Loads a dummy page in normal tab. Sets a normal test cookie. Verifies that
   // the incognito test cookie is not found.
   [ChromeEarlGrey
@@ -162,14 +156,7 @@
 // Tests that a cookie set in incognito tab is removed after closing all
 // incognito tabs and then when new incognito tab is created the cookie will
 // not reappear.
-// TODO(crbug.com/1019670): This test fails on iOS 12/13 under EG2.
-#if defined(CHROME_EARL_GREY_2)
-#define MAYBE_testClearIncognitoFromIncognito \
-  DISABLED_testClearIncognitoFromIncognito
-#else
-#define MAYBE_testClearIncognitoFromIncognito testClearIncognitoFromIncognito
-#endif
-- (void)MAYBE_testClearIncognitoFromIncognito {
+- (void)testClearIncognitoFromIncognito {
   // Loads a page in normal tab.
   [ChromeEarlGrey
       loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalBrowsing)];
@@ -210,13 +197,7 @@
 }
 
 // Tests that a cookie set in normal tab is not available in an incognito tab.
-// TODO(crbug.com/1019670): This test fails on iOS 12/13 under EG2.
-#if defined(CHROME_EARL_GREY_2)
-#define MAYBE_testSwitchToIncognito DISABLED_testSwitchToIncognito
-#else
-#define MAYBE_testSwitchToIncognito testSwitchToIncognito
-#endif
-- (void)MAYBE_testSwitchToIncognito {
+- (void)testSwitchToIncognito {
   // Sets cookie in normal tab.
   [ChromeEarlGrey
       loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalSetCookie)];
@@ -250,13 +231,7 @@
 
 // Tests that a cookie set in incognito tab is only available in another
 // incognito tab. They are not available in a normal tab.
-// TODO(crbug.com/1019670): This test fails on iOS 12/13 under EG2.
-#if defined(CHROME_EARL_GREY_2)
-#define MAYBE_testSwitchToMain DISABLED_testSwitchToMain
-#else
-#define MAYBE_testSwitchToMain testSwitchToMain
-#endif
-- (void)MAYBE_testSwitchToMain {
+- (void)testSwitchToMain {
   // Loads a page in normal tab and then switches to a new incognito tab. Sets
   // cookie in incognito tab.
   [ChromeEarlGrey
@@ -292,13 +267,7 @@
 }
 
 // Tests that a cookie set in a normal tab can be found in another normal tab.
-// TODO(crbug.com/1019670): This test fails on iOS 12/13 under EG2.
-#if defined(CHROME_EARL_GREY_2)
-#define MAYBE_testShareCookiesBetweenTabs DISABLED_testShareCookiesBetweenTabs
-#else
-#define MAYBE_testShareCookiesBetweenTabs testShareCookiesBetweenTabs
-#endif
-- (void)MAYBE_testShareCookiesBetweenTabs {
+- (void)testShareCookiesBetweenTabs {
   // Loads page and sets cookie in first normal tab.
   [ChromeEarlGrey
       loadURL:web::test::HttpServer::MakeUrl(kTestUrlNormalSetCookie)];
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.cc b/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.cc
index 75603b2..3149dfa 100644
--- a/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.cc
+++ b/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.cc
@@ -20,12 +20,12 @@
 
 InfobarBannerShowModalResponse::~InfobarBannerShowModalResponse() = default;
 
-#pragma mark - InfobarBannerCompletionResponse
+#pragma mark - InfobarBannerUserInitiatedDismissalResponse
 
-OVERLAY_USER_DATA_SETUP_IMPL(InfobarBannerCompletionResponse);
+OVERLAY_USER_DATA_SETUP_IMPL(InfobarBannerUserInitiatedDismissalResponse);
 
-InfobarBannerCompletionResponse::InfobarBannerCompletionResponse(
-    bool user_initiated)
-    : user_initiated_(user_initiated) {}
+InfobarBannerUserInitiatedDismissalResponse::
+    InfobarBannerUserInitiatedDismissalResponse() = default;
 
-InfobarBannerCompletionResponse::~InfobarBannerCompletionResponse() = default;
+InfobarBannerUserInitiatedDismissalResponse::
+    ~InfobarBannerUserInitiatedDismissalResponse() = default;
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.h b/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.h
index 9bf87b8f..f577245 100644
--- a/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.h
+++ b/ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.h
@@ -31,22 +31,17 @@
   InfobarBannerShowModalResponse();
 };
 
-// Response info used to create completion OverlayResponses for an infobar
-// banner OverlayRequest.  Executed when the banner is dismissed by the user or
-// the request is cancelled.
-class InfobarBannerCompletionResponse
-    : public OverlayResponseInfo<InfobarBannerCompletionResponse> {
+// Response info used to create dispatched OverlayResponses that notify the
+// model layer that the upcoming dismissal is user-initiated (i.e. swipe up to
+// dismiss the banner on the refresh banner UI).
+class InfobarBannerUserInitiatedDismissalResponse
+    : public OverlayResponseInfo<InfobarBannerUserInitiatedDismissalResponse> {
  public:
-  ~InfobarBannerCompletionResponse() override;
-
-  // Whether the banner dismissal was user-initiated.
-  bool user_initiated() const { return user_initiated_; }
+  ~InfobarBannerUserInitiatedDismissalResponse() override;
 
  private:
-  OVERLAY_USER_DATA_SETUP(InfobarBannerCompletionResponse);
-  explicit InfobarBannerCompletionResponse(bool user_initiated);
-
-  bool user_initiated_ = false;
+  OVERLAY_USER_DATA_SETUP(InfobarBannerUserInitiatedDismissalResponse);
+  InfobarBannerUserInitiatedDismissalResponse();
 };
 
 #endif  // IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_BANNER_INFOBAR_BANNER_OVERLAY_RESPONSES_H_
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h
index 61ba33f..2d8517c 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h
@@ -73,6 +73,7 @@
       override;
   autofill::AutofillDriver* GetAutofillDriver() override;
   bool IsMainFrame() const override;
+  bool CanShowAutofillUi() const override;
   const GURL& GetLastCommittedURL() const override;
 
  private:
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm
index 02162d0..84a08fa7 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm
@@ -93,6 +93,10 @@
   return true;
 }
 
+bool IOSChromePasswordManagerDriver::CanShowAutofillUi() const {
+  return true;
+}
+
 const GURL& IOSChromePasswordManagerDriver::GetLastCommittedURL() const {
   return delegate_.lastCommittedURL;
 }
diff --git a/ios/chrome/browser/ssl/BUILD.gn b/ios/chrome/browser/ssl/BUILD.gn
index 35a37322..74040cc 100644
--- a/ios/chrome/browser/ssl/BUILD.gn
+++ b/ios/chrome/browser/ssl/BUILD.gn
@@ -40,6 +40,7 @@
     "//ios/web/common",
     "//ios/web/public",
     "//ios/web/public/security",
+    "//ios/web/public/session",
     "//net",
     "//ui/base",
     "//url",
diff --git a/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.h b/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.h
index 25b6d48a..d515ab3cd 100644
--- a/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.h
+++ b/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.h
@@ -36,6 +36,10 @@
   void AfterShow() override;
   void OnDontProceed() override;
   void CommandReceived(const std::string& command) override;
+  void HandleScriptCommand(const base::DictionaryValue& message,
+                           const GURL& origin_url,
+                           bool user_is_interacting,
+                           web::WebFrame* sender_frame) override;
 
   // The landing page url for the captive portal network.
   const GURL landing_url_;
diff --git a/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm b/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm
index 5215a42..62fa6d8 100644
--- a/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm
+++ b/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm
@@ -106,3 +106,24 @@
         ->DisplayCaptivePortalLoginPage(landing_url_);
   }
 }
+
+void IOSCaptivePortalBlockingPage::HandleScriptCommand(
+    const base::DictionaryValue& message,
+    const GURL& origin_url,
+    bool user_is_interacting,
+    web::WebFrame* sender_frame) {
+  std::string command;
+  if (!message.GetString("command", &command)) {
+    LOG(ERROR) << "JS message parameter not found: command";
+    return;
+  }
+  // Non-proceed commands are handled the same between committed and
+  // non-committed interstitials, so the CommandReceived method can be used.
+  // Remove the command prefix since it is ignored when converting the value
+  // to a SecurityInterstitialCommand.
+  std::size_t delimiter = command.find(".");
+  if (delimiter != std::string::npos) {
+    IOSCaptivePortalBlockingPage::CommandReceived(
+        command.substr(delimiter + 1));
+  }
+}
diff --git a/ios/chrome/browser/ssl/ios_ssl_blocking_page.h b/ios/chrome/browser/ssl/ios_ssl_blocking_page.h
index f2b03b3..5c699aa 100644
--- a/ios/chrome/browser/ssl/ios_ssl_blocking_page.h
+++ b/ios/chrome/browser/ssl/ios_ssl_blocking_page.h
@@ -55,10 +55,15 @@
 
  private:
   void NotifyDenyCertificate();
+  void HandleScriptCommand(const base::DictionaryValue& message,
+                           const GURL& origin_url,
+                           bool user_is_interacting,
+                           web::WebFrame* sender_frame) override;
 
   // Returns true if |options_mask| refers to a soft-overridable SSL error.
   static bool IsOverridable(int options_mask);
 
+  web::WebState* web_state_ = nullptr;
   base::OnceCallback<void(bool)> callback_;
   const net::SSLInfo ssl_info_;
   const bool overridable_;  // The UI allows the user to override the error.
diff --git a/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm b/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm
index f7452b9..1cf37ec 100644
--- a/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm
+++ b/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm
@@ -18,7 +18,10 @@
 #include "ios/chrome/browser/interstitials/ios_chrome_controller_client.h"
 #include "ios/chrome/browser/interstitials/ios_chrome_metrics_helper.h"
 #import "ios/web/public/navigation/navigation_item.h"
+#import "ios/web/public/navigation/navigation_manager.h"
 #include "ios/web/public/security/ssl_status.h"
+#include "ios/web/public/session/session_certificate_policy_cache.h"
+#import "ios/web/public/web_state.h"
 #include "net/base/net_errors.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
@@ -53,6 +56,7 @@
                                        const base::Time& time_triggered,
                                        base::OnceCallback<void(bool)> callback)
     : IOSSecurityInterstitialPage(web_state, request_url),
+      web_state_(web_state),
       callback_(std::move(callback)),
       ssl_info_(ssl_info),
       overridable_(IsOverridable(options_mask)),
@@ -61,6 +65,7 @@
           base::WrapUnique(CreateMetricsHelper(web_state,
                                                request_url,
                                                IsOverridable(options_mask))))) {
+  DCHECK(web_state_);
   // Override prefs for the SSLErrorUI.
   if (overridable_)
     options_mask |= SSLErrorOptionsMask::SOFT_OVERRIDE_ENABLED;
@@ -148,3 +153,40 @@
   return (options_mask & SSLErrorOptionsMask::SOFT_OVERRIDE_ENABLED) &&
          !(options_mask & SSLErrorOptionsMask::STRICT_ENFORCEMENT);
 }
+
+void IOSSSLBlockingPage::HandleScriptCommand(
+    const base::DictionaryValue& message,
+    const GURL& origin_url,
+    bool user_is_interacting,
+    web::WebFrame* sender_frame) {
+  std::string command;
+  if (!message.GetString("command", &command)) {
+    LOG(ERROR) << "JS message parameter not found: command";
+    return;
+  }
+
+  // Remove the command prefix so that the string value can be converted to a
+  // SecurityInterstitialCommand enum value.
+  std::size_t delimiter = command.find(".");
+  if (delimiter == std::string::npos) {
+    return;
+  }
+  std::string command_str = command.substr(delimiter + 1);
+  int command_num = 0;
+  bool command_is_num = base::StringToInt(command_str, &command_num);
+  DCHECK(command_is_num) << command_str;
+
+  // If a proceed command is received, allowlist the certificate and reload
+  // the page to re-initiate the original navigation.
+  if (command_num == security_interstitials::CMD_PROCEED) {
+    web_state_->GetSessionCertificatePolicyCache()->RegisterAllowedCertificate(
+        ssl_info_.cert, origin_url.host(), ssl_info_.cert_status);
+    web_state_->GetNavigationManager()->Reload(web::ReloadType::NORMAL,
+                                               /*check_for_repost=*/true);
+    return;
+  }
+
+  // Non-proceed commands are handled the same between committed and
+  // non-committed interstitials, so the CommandReceived method can be used.
+  IOSSSLBlockingPage::CommandReceived(command_str);
+}
diff --git a/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.h b/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.h
index a98e227..404434f 100644
--- a/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.h
+++ b/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.h
@@ -36,13 +36,24 @@
   void WebStateDestroyed(web::WebState* web_state) override;
 
  private:
+  WEB_STATE_USER_DATA_KEY_DECL();
+
   explicit IOSSSLErrorTabHelper(web::WebState* web_state);
+  DISALLOW_COPY_AND_ASSIGN(IOSSSLErrorTabHelper);
+
   friend class web::WebStateUserData<IOSSSLErrorTabHelper>;
 
   void SetBlockingPage(
       int64_t navigation_id,
       std::unique_ptr<IOSSecurityInterstitialPage> blocking_page);
 
+  // Handler for "blockingPage.*" JavaScript command. Dispatch to more specific
+  // handler.
+  void OnBlockingPageCommand(const base::DictionaryValue& message,
+                             const GURL& url,
+                             bool user_is_interacting,
+                             web::WebFrame* sender_frame);
+
   // Keeps track of blocking pages for navigations that have encountered
   // certificate errors in this WebState. When a navigation commits, the
   // corresponding blocking page is moved out and stored in
@@ -59,9 +70,9 @@
   // WebStateDestroyed has been called.
   web::WebState* web_state_ = nullptr;
 
-  WEB_STATE_USER_DATA_KEY_DECL();
-
-  DISALLOW_COPY_AND_ASSIGN(IOSSSLErrorTabHelper);
+  // Subscription for JS messages.
+  std::unique_ptr<web::WebState::ScriptCommandSubscription> subscription_;
+  base::WeakPtrFactory<IOSSSLErrorTabHelper> weak_factory_{this};
 };
 
 #endif  // IOS_CHROME_BROWSER_SSL_IOS_SSL_ERROR_TAB_HELPER_H_
diff --git a/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.mm b/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.mm
index 6ea2150..1b92bc8 100644
--- a/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.mm
+++ b/ios/chrome/browser/ssl/ios_ssl_error_tab_helper.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/ssl/ios_ssl_error_tab_helper.h"
 
+#include "base/values.h"
 #include "ios/chrome/browser/interstitials/ios_security_interstitial_page.h"
 #import "ios/web/public/navigation/navigation_context.h"
 #import "ios/web/public/web_state.h"
@@ -13,9 +14,18 @@
 #error "This file requires ARC support."
 #endif
 
+namespace {
+// Script command prefix.
+const char kCommandPrefix[] = "blockingPage";
+}  // namespace
+
 IOSSSLErrorTabHelper::IOSSSLErrorTabHelper(web::WebState* web_state)
-    : web_state_(web_state) {
+    : web_state_(web_state), subscription_(nullptr), weak_factory_(this) {
   web_state_->AddObserver(this);
+  auto command_callback = base::Bind(
+      &IOSSSLErrorTabHelper::OnBlockingPageCommand, weak_factory_.GetWeakPtr());
+  subscription_ =
+      web_state->AddScriptCommandCallback(command_callback, kCommandPrefix);
 }
 
 IOSSSLErrorTabHelper::~IOSSSLErrorTabHelper() = default;
@@ -76,4 +86,18 @@
   blocking_pages_for_navigations_[navigation_id] = std::move(blocking_page);
 }
 
+void IOSSSLErrorTabHelper::OnBlockingPageCommand(
+    const base::DictionaryValue& message,
+    const GURL& url,
+    bool user_is_interacting,
+    web::WebFrame* sender_frame) {
+  std::string command;
+  if (!message.GetString("command", &command)) {
+    DLOG(WARNING) << "JS message parameter not found: command";
+  } else {
+    blocking_page_for_currently_committed_navigation_->HandleScriptCommand(
+        message, url, user_is_interacting, sender_frame);
+  }
+}
+
 WEB_STATE_USER_DATA_KEY_IMPL(IOSSSLErrorTabHelper)
diff --git a/ios/chrome/browser/ssl/ios_ssl_error_tab_helper_unittest.mm b/ios/chrome/browser/ssl/ios_ssl_error_tab_helper_unittest.mm
index b1efaea..4474309 100644
--- a/ios/chrome/browser/ssl/ios_ssl_error_tab_helper_unittest.mm
+++ b/ios/chrome/browser/ssl/ios_ssl_error_tab_helper_unittest.mm
@@ -25,6 +25,11 @@
 
   ~TestInterstitialPage() override { *destroyed_tracker_ = true; }
 
+  void HandleScriptCommand(const base::DictionaryValue& message,
+                           const GURL& origin_url,
+                           bool user_is_interacting,
+                           web::WebFrame* sender_frame) override {}
+
  protected:
   bool ShouldCreateNewNavigation() const override { return false; }
 
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_mediator.mm b/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_mediator.mm
index 720cbbd7..f11c463b 100644
--- a/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_mediator.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_mediator.mm
@@ -49,15 +49,15 @@
 }
 
 - (void)dismissInfobarBannerForUserInteraction:(BOOL)userInitiated {
-  if (self.request) {
-    // Add a completion response notifying the requesting code of whether the
-    // dismissal was user-initiated.  Provided to the request's completion
-    // callbacks that are executed when the UI is finished being dismissed.
-    self.request->GetCallbackManager()->SetCompletionResponse(
-        OverlayResponse::CreateWithInfo<InfobarBannerCompletionResponse>(
-            userInitiated));
+  if (userInitiated) {
+    // Notify the model layer of user-initiated banner dismissal before
+    // dismissing the banner.
+    [self dispatchResponseAndStopOverlay:
+              OverlayResponse::CreateWithInfo<
+                  InfobarBannerUserInitiatedDismissalResponse>()];
+  } else {
+    [self.delegate stopOverlayForMediator:self];
   }
-  [self.delegate stopOverlayForMediator:self];
 }
 
 - (void)presentInfobarModalFromBanner {
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm b/ios/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm
index 99d5eb9..f4faa82 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/files/scoped_temp_dir.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/bookmarks/browser/bookmark_model.h"
@@ -104,6 +105,11 @@
       : scoped_provider_(
             std::make_unique<TestToolbarMediatorChromeBrowserProvider>()) {
     TestChromeBrowserState::Builder test_cbs_builder;
+
+    bool success = state_dir_.CreateUniqueTempDir();
+    DCHECK(success);
+    test_cbs_builder.SetPath(state_dir_.GetPath());
+
     chrome_browser_state_ = test_cbs_builder.Build();
     chrome_browser_state_->CreateBookmarkModel(false);
     bookmark_model_ = ios::BookmarkModelFactory::GetForBrowserState(
@@ -128,6 +134,11 @@
   ~ToolbarMediatorTest() override { [mediator_ disconnect]; }
 
  protected:
+  // A state directory that outlives |task_environment_| is needed because
+  // CreateHistoryService/CreateBookmarkModel use the directory to host
+  // databases. See https://crbug.com/546640 for more details.
+  base::ScopedTempDir state_dir_;
+
   web::WebTaskEnvironment task_environment_;
   void SetUpWebStateList() {
     web_state_list_ = std::make_unique<WebStateList>(&web_state_list_delegate_);
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.mm b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
index aec609c..91f6c51 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey.mm
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
@@ -394,16 +394,13 @@
   NSString* const kGetCookiesScript =
       @"document.cookie ? document.cookie.split(/;\\s*/) : [];";
   id result = [self executeJavaScript:kGetCookiesScript];
-  EG_TEST_HELPER_ASSERT_TRUE(
-      [result respondsToSelector:@selector(objectEnumerator)],
-      @"The script response is not iterable.");
-
+  // TODO(crbug.com/1041000): Assert that |result| is iterable using
+  // respondToSelector, after the bug is fixed.
   NSMutableDictionary* cookies = [NSMutableDictionary dictionary];
   for (NSString* nameValuePair in result) {
     NSArray* cookieNameValue = [nameValuePair componentsSeparatedByString:@"="];
     EG_TEST_HELPER_ASSERT_TRUE((2 == cookieNameValue.count),
                                @"Cookie has invalid format.");
-
     NSString* cookieName = cookieNameValue[0];
     NSString* cookieValue = cookieNameValue[1];
     cookies[cookieName] = cookieValue;
diff --git a/ios/web/navigation/session_storage_builder.mm b/ios/web/navigation/session_storage_builder.mm
index 1a8066e..5f2c4c8 100644
--- a/ios/web/navigation/session_storage_builder.mm
+++ b/ios/web/navigation/session_storage_builder.mm
@@ -99,9 +99,10 @@
   SessionCertificatePolicyCacheStorageBuilder cert_builder;
   std::unique_ptr<SessionCertificatePolicyCacheImpl> cert_policy_cache =
       cert_builder.BuildSessionCertificatePolicyCache(
-          storage.certPolicyCacheStorage);
+          storage.certPolicyCacheStorage, web_state->GetBrowserState());
   if (!cert_policy_cache)
-    cert_policy_cache = std::make_unique<SessionCertificatePolicyCacheImpl>();
+    cert_policy_cache = std::make_unique<SessionCertificatePolicyCacheImpl>(
+        web_state->GetBrowserState());
   web_state->certificate_policy_cache_ = std::move(cert_policy_cache);
   web::SerializableUserDataManager::FromWebState(web_state)
       ->AddSerializableUserData(storage.userData);
diff --git a/ios/web/public/session/BUILD.gn b/ios/web/public/session/BUILD.gn
index a7bdcc3..8490655 100644
--- a/ios/web/public/session/BUILD.gn
+++ b/ios/web/public/session/BUILD.gn
@@ -9,6 +9,7 @@
     "//ios/web/common:user_agent",
     "//ios/web/public",
     "//ios/web/public/navigation",
+    "//ios/web/public/security",
     "//net",
     "//url",
   ]
@@ -18,5 +19,6 @@
     "crw_session_storage.h",
     "serializable_user_data_manager.h",
     "session_certificate_policy_cache.h",
+    "session_certificate_policy_cache.mm",
   ]
 }
diff --git a/ios/web/public/session/session_certificate_policy_cache.h b/ios/web/public/session/session_certificate_policy_cache.h
index e4c5059..97b09bd18 100644
--- a/ios/web/public/session/session_certificate_policy_cache.h
+++ b/ios/web/public/session/session_certificate_policy_cache.h
@@ -5,11 +5,18 @@
 #ifndef IOS_WEB_PUBLIC_SESSION_SESSION_CERTIFICATE_POLICY_CACHE_H_
 #define IOS_WEB_PUBLIC_SESSION_SESSION_CERTIFICATE_POLICY_CACHE_H_
 
+#import <Foundation/Foundation.h>
+
 #include "base/memory/ref_counted.h"
 #include "net/cert/cert_status_flags.h"
 
+namespace net {
+class X509Certificate;
+}
+
 namespace web {
 
+class BrowserState;
 class CertificatePolicyCache;
 
 // Stores certificate policy decisions for a specific session.  The certificate
@@ -18,12 +25,33 @@
 // BrowserState.  Must be accessed on the UI thread.
 class SessionCertificatePolicyCache {
  public:
-  SessionCertificatePolicyCache() {}
-  virtual ~SessionCertificatePolicyCache() {}
+  // |browser_state| should be non-null.
+  SessionCertificatePolicyCache(BrowserState* browser_state);
+  virtual ~SessionCertificatePolicyCache();
 
   // Transfers the allowed certificate information from this session to |cache|.
+  //
+  // TODO(crbug.com/1040566): Delete this method since
+  // RegisterAllowedCertificate already updates the CertificatePolicyCache.
   virtual void UpdateCertificatePolicyCache(
       const scoped_refptr<web::CertificatePolicyCache>& cache) const = 0;
+
+  // Stores certificate information that a user has indicated should be allowed
+  // for this session. The web::CertificatePolicyCache will also be updated
+  // when this method is called.
+  virtual void RegisterAllowedCertificate(
+      const scoped_refptr<net::X509Certificate> certificate,
+      const std::string& host,
+      net::CertStatus status) = 0;
+
+ protected:
+  // Get the web::CertificatePolicyCache for this session's BrowserState.
+  // Must be called on UI thread.
+  scoped_refptr<CertificatePolicyCache> GetCertificatePolicyCache() const;
+
+ private:
+  // The WebState's BrowserState used for retrieving the CertificatePolicyCache.
+  BrowserState* browser_state_;
 };
 
 }  // namespace web
diff --git a/ios/web/public/session/session_certificate_policy_cache.mm b/ios/web/public/session/session_certificate_policy_cache.mm
new file mode 100644
index 0000000..05a71848
--- /dev/null
+++ b/ios/web/public/session/session_certificate_policy_cache.mm
@@ -0,0 +1,31 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/web/public/session/session_certificate_policy_cache.h"
+
+#include "ios/web/public/browser_state.h"
+#include "ios/web/public/security/certificate_policy_cache.h"
+#include "ios/web/public/thread/web_thread.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace web {
+
+SessionCertificatePolicyCache::SessionCertificatePolicyCache(
+    BrowserState* browser_state)
+    : browser_state_(browser_state) {
+  DCHECK(browser_state_);
+}
+
+SessionCertificatePolicyCache::~SessionCertificatePolicyCache() {}
+
+scoped_refptr<CertificatePolicyCache>
+SessionCertificatePolicyCache::GetCertificatePolicyCache() const {
+  DCHECK_CURRENTLY_ON(WebThread::UI);
+  return web::BrowserState::GetCertificatePolicyCache(browser_state_);
+}
+
+}  // namespace web
diff --git a/ios/web/session/session_certificate_policy_cache_impl.h b/ios/web/session/session_certificate_policy_cache_impl.h
index 55698758..82070e75 100644
--- a/ios/web/session/session_certificate_policy_cache_impl.h
+++ b/ios/web/session/session_certificate_policy_cache_impl.h
@@ -18,19 +18,16 @@
 // Concrete implementation of SessionCertificatePolicyCache.
 class SessionCertificatePolicyCacheImpl : public SessionCertificatePolicyCache {
  public:
-  SessionCertificatePolicyCacheImpl();
+  SessionCertificatePolicyCacheImpl(BrowserState* browser_state);
   ~SessionCertificatePolicyCacheImpl() override;
 
   // SessionCertificatePolicyCache:
   void UpdateCertificatePolicyCache(
       const scoped_refptr<web::CertificatePolicyCache>& cache) const override;
-
-  // Stores certificate information that a user has indicated should be allowed
-  // for this session.
   void RegisterAllowedCertificate(
-      const scoped_refptr<net::X509Certificate> certificate,
+      scoped_refptr<net::X509Certificate> certificate,
       const std::string& host,
-      net::CertStatus status);
+      net::CertStatus status) override;
 
   // Allows for batch updating the allowed certificate storages.
   void SetAllowedCerts(NSSet* allowed_certs);
diff --git a/ios/web/session/session_certificate_policy_cache_impl.mm b/ios/web/session/session_certificate_policy_cache_impl.mm
index c04ebfd7..68baeaf 100644
--- a/ios/web/session/session_certificate_policy_cache_impl.mm
+++ b/ios/web/session/session_certificate_policy_cache_impl.mm
@@ -6,10 +6,13 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "ios/web/public/browser_state.h"
 #include "ios/web/public/security/certificate_policy_cache.h"
 #import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h"
 #include "ios/web/public/thread/web_task_traits.h"
 #include "ios/web/public/thread/web_thread.h"
+#include "net/cert/x509_util.h"
+#include "net/cert/x509_util_ios.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -46,8 +49,10 @@
 
 namespace web {
 
-SessionCertificatePolicyCacheImpl::SessionCertificatePolicyCacheImpl()
-    : allowed_certs_([[NSMutableSet alloc] init]) {}
+SessionCertificatePolicyCacheImpl::SessionCertificatePolicyCacheImpl(
+    BrowserState* browser_state)
+    : SessionCertificatePolicyCache(browser_state),
+      allowed_certs_([[NSMutableSet alloc] init]) {}
 
 SessionCertificatePolicyCacheImpl::~SessionCertificatePolicyCacheImpl() {}
 
@@ -56,8 +61,8 @@
   DCHECK_CURRENTLY_ON(WebThread::UI);
   DCHECK(cache.get());
   NSSet* allowed_certs = [NSSet setWithSet:allowed_certs_];
-  const scoped_refptr<web::CertificatePolicyCache> cache_copy = cache;
-  base::PostTask(FROM_HERE, {web::WebThread::IO}, base::BindOnce(^{
+  const scoped_refptr<CertificatePolicyCache> cache_copy = cache;
+  base::PostTask(FROM_HERE, {WebThread::IO}, base::BindOnce(^{
                    for (CRWSessionCertificateStorage* cert in allowed_certs) {
                      cache_copy->AllowCertForHost(cert.certificate, cert.host,
                                                   cert.status);
@@ -66,14 +71,32 @@
 }
 
 void SessionCertificatePolicyCacheImpl::RegisterAllowedCertificate(
-    const scoped_refptr<net::X509Certificate> certificate,
+    scoped_refptr<net::X509Certificate> certificate,
     const std::string& host,
     net::CertStatus status) {
   DCHECK_CURRENTLY_ON(WebThread::UI);
+  // Store user decisions with the leaf cert, ignoring any intermediates.
+  // This is because WKWebView returns the verified certificate chain in
+  // |webView:didReceiveAuthenticationChallenge:completionHandler:|,
+  // but the server-supplied chain in
+  // |webView:didFailProvisionalNavigation:withError:|.
+  if (!certificate->intermediate_buffers().empty()) {
+    certificate = net::X509Certificate::CreateFromBuffer(
+        bssl::UpRef(certificate->cert_buffer()), {});
+    DCHECK(certificate);
+  }
+  DCHECK(certificate->intermediate_buffers().empty());
+
   [allowed_certs_ addObject:[[CRWSessionCertificateStorage alloc]
                                 initWithCertificate:certificate
                                                host:host
                                              status:status]];
+  const scoped_refptr<CertificatePolicyCache> cache =
+      GetCertificatePolicyCache();
+  base::PostTask(
+      FROM_HERE, {WebThread::IO},
+      base::BindOnce(&CertificatePolicyCache::AllowCertForHost, cache,
+                     base::RetainedRef(certificate.get()), host, status));
 }
 
 void SessionCertificatePolicyCacheImpl::SetAllowedCerts(NSSet* allowed_certs) {
diff --git a/ios/web/session/session_certificate_policy_cache_impl_unittest.mm b/ios/web/session/session_certificate_policy_cache_impl_unittest.mm
index fd84dec..0a86d30 100644
--- a/ios/web/session/session_certificate_policy_cache_impl_unittest.mm
+++ b/ios/web/session/session_certificate_policy_cache_impl_unittest.mm
@@ -54,14 +54,22 @@
  protected:
   SessionCertificatePolicyCacheImplTest()
       : task_environment_(web::WebTaskEnvironment::Options::REAL_IO_THREAD),
+        cache_(&browser_state_),
         cert_(net::ImportCertFromFile(net::GetTestCertsDirectory(),
                                       "ok_cert.pem")),
         host_("test.com"),
         status_(net::CERT_STATUS_REVOKED) {
+    // Check that the default value for the CertPolicyJudgment in
+    // web::CertificatePolicyCache is UNKNOWN before registering it.
+    EXPECT_EQ(web::CertPolicy::Judgment::UNKNOWN,
+              GetJudgmenet(
+                  web::BrowserState::GetCertificatePolicyCache(&browser_state_),
+                  cert_, host_, status_));
     cache_.RegisterAllowedCertificate(cert_, host_, status_);
   }
 
   web::WebTaskEnvironment task_environment_;
+  web::TestBrowserState browser_state_;
   web::SessionCertificatePolicyCacheImpl cache_;
   scoped_refptr<net::X509Certificate> cert_;
   std::string host_;
@@ -78,15 +86,24 @@
   EXPECT_EQ(cert_.get(), cert_storage.certificate);
   EXPECT_EQ(host_, cert_storage.host);
   EXPECT_EQ(status_, cert_storage.status);
+  // Verify that the CertificatePolicyCache gets updated.
+  scoped_refptr<web::CertificatePolicyCache> cache =
+      web::BrowserState::GetCertificatePolicyCache(&browser_state_);
+  EXPECT_EQ(web::CertPolicy::Judgment::ALLOWED,
+            GetJudgmenet(cache, cert_, host_, status_));
 }
 
 // Tests that UpdateCertificatePolicyCache() successfully transfers the allowed
 // certificate information to a CertificatePolicyCache.
-TEST_F(SessionCertificatePolicyCacheImplTest, UpdateCertificatePolicyCache) {
+//
+// TODO(crbug.com/1040566): Delete this test when UpdateCertificatePolicyCache
+// is deleted. Currently disabled since RegisterAllowedCertificate already
+// updates the CertificatePolicyCache.
+TEST_F(SessionCertificatePolicyCacheImplTest,
+       DISABLED_UpdateCertificatePolicyCache) {
   // Create a CertificatePolicyCache.
-  web::TestBrowserState browser_state;
   scoped_refptr<web::CertificatePolicyCache> cache =
-      web::BrowserState::GetCertificatePolicyCache(&browser_state);
+      web::BrowserState::GetCertificatePolicyCache(&browser_state_);
   EXPECT_EQ(web::CertPolicy::Judgment::UNKNOWN,
             GetJudgmenet(cache, cert_, host_, status_));
   // Add allowed certificates to the CertificatePolicyCache and verify that it's
diff --git a/ios/web/session/session_certificate_policy_cache_storage_builder.h b/ios/web/session/session_certificate_policy_cache_storage_builder.h
index 1c0c3f9..c5639819 100644
--- a/ios/web/session/session_certificate_policy_cache_storage_builder.h
+++ b/ios/web/session/session_certificate_policy_cache_storage_builder.h
@@ -11,6 +11,7 @@
 
 namespace web {
 
+class BrowserState;
 class SessionCertificatePolicyCacheImpl;
 
 // Class that converts between model objects and their serializable versions.
@@ -22,7 +23,8 @@
   // Creates a SessionCertificatePolicyCache from |cache_storage|.
   std::unique_ptr<SessionCertificatePolicyCacheImpl>
   BuildSessionCertificatePolicyCache(
-      CRWSessionCertificatePolicyCacheStorage* cache_storage) const;
+      CRWSessionCertificatePolicyCacheStorage* cache_storage,
+      BrowserState* browser_state) const;
 };
 
 }  // namespace web
diff --git a/ios/web/session/session_certificate_policy_cache_storage_builder.mm b/ios/web/session/session_certificate_policy_cache_storage_builder.mm
index a95a159..b76b208 100644
--- a/ios/web/session/session_certificate_policy_cache_storage_builder.mm
+++ b/ios/web/session/session_certificate_policy_cache_storage_builder.mm
@@ -26,9 +26,10 @@
 
 std::unique_ptr<SessionCertificatePolicyCacheImpl>
 SessionCertificatePolicyCacheStorageBuilder::BuildSessionCertificatePolicyCache(
-    CRWSessionCertificatePolicyCacheStorage* cache_storage) const {
+    CRWSessionCertificatePolicyCacheStorage* cache_storage,
+    BrowserState* browser_state) const {
   std::unique_ptr<SessionCertificatePolicyCacheImpl> cache =
-      std::make_unique<SessionCertificatePolicyCacheImpl>();
+      std::make_unique<SessionCertificatePolicyCacheImpl>(browser_state);
   cache->SetAllowedCerts(cache_storage.certificateStorages);
   return cache;
 }
diff --git a/ios/web/session/session_certificate_policy_cache_storage_builder_unittest.mm b/ios/web/session/session_certificate_policy_cache_storage_builder_unittest.mm
index 6301b93..486347a 100644
--- a/ios/web/session/session_certificate_policy_cache_storage_builder_unittest.mm
+++ b/ios/web/session/session_certificate_policy_cache_storage_builder_unittest.mm
@@ -5,6 +5,7 @@
 #import "ios/web/session/session_certificate_policy_cache_storage_builder.h"
 
 #import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h"
+#include "ios/web/public/test/fakes/test_browser_state.h"
 #include "ios/web/public/test/web_task_environment.h"
 #import "ios/web/session/session_certificate_policy_cache_impl.h"
 #include "net/cert/x509_certificate.h"
@@ -25,7 +26,8 @@
 TEST_F(SessionCertificatePolicyCacheStorageBuilderTest, BuildStorage) {
   // Create a cache and populate it with an allowed cert.
   web::WebTaskEnvironment task_environment;
-  web::SessionCertificatePolicyCacheImpl cache;
+  web::TestBrowserState browser_state;
+  web::SessionCertificatePolicyCacheImpl cache(&browser_state);
   scoped_refptr<net::X509Certificate> cert =
       net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
   std::string host("test.com");
@@ -61,7 +63,8 @@
   [cache_storage setCertificateStorages:[NSSet setWithObject:cert_storage]];
   // Build the cert policy cache and verify its contents.
   web::SessionCertificatePolicyCacheStorageBuilder builder;
+  web::TestBrowserState browser_state;
   std::unique_ptr<web::SessionCertificatePolicyCacheImpl> cache =
-      builder.BuildSessionCertificatePolicyCache(cache_storage);
+      builder.BuildSessionCertificatePolicyCache(cache_storage, &browser_state);
   EXPECT_NSEQ([cache_storage certificateStorages], cache -> GetAllowedCerts());
 }
diff --git a/ios/web/web_state/web_state_impl.mm b/ios/web/web_state/web_state_impl.mm
index 70ef89df..5c5965d2 100644
--- a/ios/web/web_state/web_state_impl.mm
+++ b/ios/web/web_state/web_state_impl.mm
@@ -99,7 +99,7 @@
     RestoreSessionStorage(session_storage);
   } else {
     certificate_policy_cache_ =
-        std::make_unique<SessionCertificatePolicyCacheImpl>();
+        std::make_unique<SessionCertificatePolicyCacheImpl>(GetBrowserState());
   }
 }
 
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_driver.h b/ios/web_view/internal/passwords/web_view_password_manager_driver.h
index 85fe5f54..8ad2ba30 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_driver.h
+++ b/ios/web_view/internal/passwords/web_view_password_manager_driver.h
@@ -62,6 +62,7 @@
       override;
   autofill::AutofillDriver* GetAutofillDriver() override;
   bool IsMainFrame() const override;
+  bool CanShowAutofillUi() const override;
   const GURL& GetLastCommittedURL() const override;
 
  private:
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_driver.mm b/ios/web_view/internal/passwords/web_view_password_manager_driver.mm
index 55c6ad8..bd576fa 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_driver.mm
+++ b/ios/web_view/internal/passwords/web_view_password_manager_driver.mm
@@ -82,6 +82,10 @@
   return true;
 }
 
+bool WebViewPasswordManagerDriver::CanShowAutofillUi() const {
+  return true;
+}
+
 const GURL& WebViewPasswordManagerDriver::GetLastCommittedURL() const {
   return delegate_.lastCommittedURL;
 }
diff --git a/net/base/file_stream_unittest.cc b/net/base/file_stream_unittest.cc
index b9a8c86..86b40b3 100644
--- a/net/base/file_stream_unittest.cc
+++ b/net/base/file_stream_unittest.cc
@@ -837,7 +837,8 @@
 #endif
 
 #if defined(OS_ANDROID)
-TEST_F(FileStreamTest, ContentUriRead) {
+// TODO(https://crbug.com/894599): flaky on both android and cronet bots.
+TEST_F(FileStreamTest, DISABLED_ContentUriRead) {
   base::FilePath test_dir;
   base::PathService::Get(base::DIR_SOURCE_ROOT, &test_dir);
   test_dir = test_dir.AppendASCII("net");
diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
index be7700e..a833bc7 100644
--- a/net/dns/dns_transaction.cc
+++ b/net/dns/dns_transaction.cc
@@ -833,9 +833,9 @@
     1000,
     // Increase the delay between consecutive probes by a factor of 1.5.
     1.5,
-    // Fuzz the delay between consecutive probes between 90%-100% of the
+    // Fuzz the delay between consecutive probes between 80%-100% of the
     // calculated time.
-    0.1,
+    0.2,
     // Cap the maximum delay between consecutive probes at 1 hour.
     1000 * 60 * 60,
     // Never expire entries.
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index 3c128f2..884d3ff 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -762,27 +762,45 @@
   ~ProbeRequestImpl() override { Cancel(); }
 
   void Cancel() override {
-    if (!needs_cancel_ || !resolver_)
-      return;
-
-    resolver_->CancelDohProbes();
-    needs_cancel_ = false;
+    runner_.reset();
     context_ = nullptr;
+
+    if (resolver_)
+      resolver_->started_doh_probe_requests_.erase(this);
   }
 
   int Start() override {
     DCHECK(resolver_);
-    DCHECK(!needs_cancel_);
+    DCHECK(context_);
+    DCHECK_EQ(0u, resolver_->started_doh_probe_requests_.count(this));
 
-    resolver_->ActivateDohProbes(context_, false /* network_change */);
-    needs_cancel_ = true;
+    resolver_->started_doh_probe_requests_.insert(this);
+
+    RestartRunner(false /* network_change */);
     return ERR_IO_PENDING;
   }
 
+  void RestartRunner(bool network_change) {
+    DCHECK(resolver_);
+
+    // If network change, the current runner can be reused if there is one.
+    if (!runner_ || !network_change)
+      runner_ = resolver_->CreateDohProbeRunner(context_);
+
+    if (runner_) {
+      if (network_change)
+        runner_->RestartForNetworkChange();
+      else
+        runner_->Start();
+    }
+  }
+
+  void CancelRunner() { runner_.reset(); }
+
  private:
   URLRequestContext* context_;
+  std::unique_ptr<DnsProbeRunner> runner_;
   base::WeakPtr<HostResolverManager> resolver_;
-  bool needs_cancel_ = false;
 };
 
 //------------------------------------------------------------------------------
@@ -2886,11 +2904,9 @@
       UpdateJobsForChangedConfig();
     }
 
-    // Restart DoH probes with the new configuration.
-    if (url_request_context_for_probes_) {
-      doh_probe_runner_.reset();
-      ActivateDohProbes(url_request_context_for_probes_,
-                        false /* network_change */);
+    // Restart DoH probes for the new configuration.
+    for (auto* probe_request : started_doh_probe_requests_) {
+      probe_request->RestartRunner(false /* network_change */);
     }
   }
 }
@@ -3726,15 +3742,12 @@
           "DnsUnresponsiveDelayMsByConnectionType",
           ProcTaskParams::kDnsDefaultUnresponsiveDelay, type);
 
-  // If there is an active DoH probe runner, it should be cancelled or restarted
-  // for the new connection.
-  if (url_request_context_for_probes_) {
-    if (type == NetworkChangeNotifier::CONNECTION_NONE) {
-      doh_probe_runner_.reset();
-    } else {
-      ActivateDohProbes(url_request_context_for_probes_,
-                        true /* network_change */);
-    }
+  // Restart all DoH probe requests.
+  for (auto* probe_request : started_doh_probe_requests_) {
+    if (type == NetworkChangeNotifier::CONNECTION_NONE)
+      probe_request->CancelRunner();
+    else
+      probe_request->RestartRunner(true /* network_change */);
   }
 }
 
@@ -3757,11 +3770,9 @@
     if (transactions_allowed_before)
       UpdateJobsForChangedConfig();
 
-    // Restart DoH probes with the new configuration.
-    if (url_request_context_for_probes_) {
-      doh_probe_runner_.reset();
-      ActivateDohProbes(url_request_context_for_probes_,
-                        false /* network_change */);
+    // Restart DoH probes for the new configuration.
+    for (auto* probe_request : started_doh_probe_requests_) {
+      probe_request->RestartRunner(false /* network_change */);
     }
   }
 }
@@ -3840,45 +3851,16 @@
 #endif
 }
 
-void HostResolverManager::ActivateDohProbes(
-    URLRequestContext* url_request_context,
-    bool network_change) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(dns_client_);
-  DCHECK(url_request_context);
-  DCHECK(!url_request_context_for_probes_ ||
-         url_request_context_for_probes_ == url_request_context);
-
-  url_request_context_for_probes_ = url_request_context;
-
-  if (!dns_client_->CanUseSecureDnsTransactions())
-    return;
-
-  // Don't bother running probes if there is no network connection.
-  if (NetworkChangeNotifier::GetConnectionType() ==
-      NetworkChangeNotifier::CONNECTION_NONE) {
-    return;
+std::unique_ptr<DnsProbeRunner> HostResolverManager::CreateDohProbeRunner(
+    URLRequestContext* url_request_context) {
+  if (!dns_client_->CanUseSecureDnsTransactions() ||
+      NetworkChangeNotifier::GetConnectionType() ==
+          NetworkChangeNotifier::CONNECTION_NONE) {
+    return nullptr;
   }
 
-  if (!doh_probe_runner_) {
-    doh_probe_runner_ =
-        dns_client_->GetTransactionFactory()->CreateDohProbeRunner(
-            url_request_context);
-  }
-
-  if (network_change)
-    doh_probe_runner_->RestartForNetworkChange();
-  else
-    doh_probe_runner_->Start();
-}
-
-void HostResolverManager::CancelDohProbes() {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(dns_client_);
-  DCHECK(url_request_context_for_probes_);
-
-  url_request_context_for_probes_ = nullptr;
-  doh_probe_runner_.reset();
+  return dns_client_->GetTransactionFactory()->CreateDohProbeRunner(
+      url_request_context);
 }
 
 void HostResolverManager::RequestImpl::Cancel() {
diff --git a/net/dns/host_resolver_manager.h b/net/dns/host_resolver_manager.h
index 9b038a2..2bf7c2b 100644
--- a/net/dns/host_resolver_manager.h
+++ b/net/dns/host_resolver_manager.h
@@ -453,11 +453,10 @@
 
   void InvalidateCaches();
 
-  // Currently only allows one probe to be started at a time. Must be cancelled
-  // before starting another.
-  void ActivateDohProbes(URLRequestContext* url_request_context,
-                         bool network_change);
-  void CancelDohProbes();
+  // Returns |nullptr| if DoH probes are currently not allowed (due to
+  // configuration or current connection state).
+  std::unique_ptr<DnsProbeRunner> CreateDohProbeRunner(
+      URLRequestContext* url_request_context);
 
   // Used for multicast DNS tasks. Created on first use using
   // GetOrCreateMndsClient().
@@ -478,8 +477,7 @@
 
   NetLog* net_log_;
 
-  URLRequestContext* url_request_context_for_probes_ = nullptr;
-  std::unique_ptr<DnsProbeRunner> doh_probe_runner_;
+  std::set<ProbeRequestImpl*> started_doh_probe_requests_;
 
   // If present, used by DnsTask and ServeFromHosts to resolve requests.
   std::unique_ptr<DnsClient> dns_client_;
diff --git a/net/dns/host_resolver_manager_unittest.cc b/net/dns/host_resolver_manager_unittest.cc
index d16dd9a..83bed96 100644
--- a/net/dns/host_resolver_manager_unittest.cc
+++ b/net/dns/host_resolver_manager_unittest.cc
@@ -8497,6 +8497,27 @@
   EXPECT_FALSE(dns_client_->factory()->doh_probes_running());
 }
 
+TEST_F(HostResolverManagerDnsTest, MultipleDohProbeRequests) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  EXPECT_FALSE(dns_client_->factory()->doh_probes_running());
+
+  std::unique_ptr<HostResolverManager::CancellableProbeRequest> request1 =
+      resolver_->CreateDohProbeRequest(request_context_.get());
+  EXPECT_THAT(request1->Start(), IsError(ERR_IO_PENDING));
+  std::unique_ptr<HostResolverManager::CancellableProbeRequest> request2 =
+      resolver_->CreateDohProbeRequest(request_context_.get());
+  EXPECT_THAT(request2->Start(), IsError(ERR_IO_PENDING));
+
+  EXPECT_TRUE(dns_client_->factory()->doh_probes_running());
+
+  request1.reset();
+  EXPECT_TRUE(dns_client_->factory()->doh_probes_running());
+
+  request2.reset();
+  EXPECT_FALSE(dns_client_->factory()->doh_probes_running());
+}
+
 TEST_F(HostResolverManagerDnsTest, EsniQuery) {
   EsniContent c1, c2, c3;
   IPAddress a1(1, 2, 3, 4), a2(5, 6, 7, 8);
diff --git a/net/log/file_net_log_observer_unittest.cc b/net/log/file_net_log_observer_unittest.cc
index cd97ab89..860a98d 100644
--- a/net/log/file_net_log_observer_unittest.cc
+++ b/net/log/file_net_log_observer_unittest.cc
@@ -68,13 +68,13 @@
 
   // The maximum value of base::TimeTicks::Now() will be the maximum value of
   // int64_t, and if the maximum number of digits are included, the
-  // |base_entry_size| could be up to 101 characters. Check that the event
+  // |base_entry_size| could be up to 136 characters. Check that the event
   // format does not include additional padding.
-  DCHECK_LE(base_entry_size, 101u);
+  DCHECK_LE(base_entry_size, 136u);
 
   // |entry_size| should be at least as big as the largest possible base
   // entry.
-  EXPECT_GE(entry_size, 101u);
+  EXPECT_GE(entry_size, 136u);
 
   // |entry_size| cannot be smaller than the minimum event size.
   EXPECT_GE(entry_size, base_entry_size);
diff --git a/net/log/net_log_entry.cc b/net/log/net_log_entry.cc
index 10c0c98..d889aed4 100644
--- a/net/log/net_log_entry.cc
+++ b/net/log/net_log_entry.cc
@@ -33,6 +33,8 @@
   base::DictionaryValue source_dict;
   source_dict.SetInteger("id", source.id);
   source_dict.SetInteger("type", static_cast<int>(source.type));
+  source_dict.SetString("start_time",
+                        NetLog::TickCountToString(source.start_time));
   entry_dict.SetKey("source", std::move(source_dict));
 
   // Set the event info.
diff --git a/net/log/net_log_source.cc b/net/log/net_log_source.cc
index e9ffa467..ff1e84d4 100644
--- a/net/log/net_log_source.cc
+++ b/net/log/net_log_source.cc
@@ -30,10 +30,16 @@
 // LoadTimingInfo requires this be 0.
 const uint32_t NetLogSource::kInvalidId = 0;
 
-NetLogSource::NetLogSource() : type(NetLogSourceType::NONE), id(kInvalidId) {}
+NetLogSource::NetLogSource()
+    : NetLogSource(NetLogSourceType::NONE, kInvalidId) {}
 
 NetLogSource::NetLogSource(NetLogSourceType type, uint32_t id)
-    : type(type), id(id) {}
+    : NetLogSource(type, id, base::TimeTicks::Now()) {}
+
+NetLogSource::NetLogSource(NetLogSourceType type,
+                           uint32_t id,
+                           base::TimeTicks start_time)
+    : type(type), id(id), start_time(start_time) {}
 
 bool NetLogSource::IsValid() const {
   return id != kInvalidId;
diff --git a/net/log/net_log_source.h b/net/log/net_log_source.h
index 82fa6daa..01b091b 100644
--- a/net/log/net_log_source.h
+++ b/net/log/net_log_source.h
@@ -7,6 +7,7 @@
 
 #include <stdint.h>
 
+#include "base/time/time.h"
 #include "net/base/net_export.h"
 #include "net/log/net_log_source_type.h"
 
@@ -25,6 +26,7 @@
 
   NetLogSource();
   NetLogSource(NetLogSourceType type, uint32_t id);
+  NetLogSource(NetLogSourceType type, uint32_t id, base::TimeTicks start_time);
   bool IsValid() const;
 
   // Adds the source to a DictionaryValue containing event parameters,
@@ -44,6 +46,7 @@
 
   NetLogSourceType type;
   uint32_t id;
+  base::TimeTicks start_time;
 };
 
 }  // namespace net
diff --git a/net/log/net_log_unittest.cc b/net/log/net_log_unittest.cc
index fec3bda..2aea603 100644
--- a/net/log/net_log_unittest.cc
+++ b/net/log/net_log_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/stl_util.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/test/task_environment.h"
 #include "base/threading/simple_thread.h"
 #include "base/values.h"
 #include "net/log/net_log_event_type.h"
@@ -35,21 +36,117 @@
   return std::move(dict);
 }
 
-TEST(NetLogTest, Basic) {
+TEST(NetLogTest, BasicGlobalEvents) {
+  base::test::TaskEnvironment task_environment{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
   RecordingTestNetLog net_log;
   auto entries = net_log.GetEntries();
   EXPECT_EQ(0u, entries.size());
 
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(1234));
+  base::TimeTicks ticks0 = base::TimeTicks::Now();
+
   net_log.AddGlobalEntry(NetLogEventType::CANCELLED);
 
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(5678));
+  base::TimeTicks ticks1 = base::TimeTicks::Now();
+  EXPECT_LE(ticks0, ticks1);
+
+  net_log.AddGlobalEntry(NetLogEventType::FAILED);
+
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(91011));
+  EXPECT_LE(ticks1, base::TimeTicks::Now());
+
   entries = net_log.GetEntries();
-  ASSERT_EQ(1u, entries.size());
+  ASSERT_EQ(2u, entries.size());
+
   EXPECT_EQ(NetLogEventType::CANCELLED, entries[0].type);
   EXPECT_EQ(NetLogSourceType::NONE, entries[0].source.type);
   EXPECT_NE(NetLogSource::kInvalidId, entries[0].source.id);
+  EXPECT_EQ(ticks0, entries[0].source.start_time);
   EXPECT_EQ(NetLogEventPhase::NONE, entries[0].phase);
-  EXPECT_GE(base::TimeTicks::Now(), entries[0].time);
+  EXPECT_EQ(ticks0, entries[0].time);
   EXPECT_FALSE(entries[0].HasParams());
+
+  EXPECT_EQ(NetLogEventType::FAILED, entries[1].type);
+  EXPECT_EQ(NetLogSourceType::NONE, entries[1].source.type);
+  EXPECT_NE(NetLogSource::kInvalidId, entries[1].source.id);
+  EXPECT_LT(entries[0].source.id, entries[1].source.id);
+  EXPECT_EQ(ticks1, entries[1].source.start_time);
+  EXPECT_EQ(NetLogEventPhase::NONE, entries[1].phase);
+  EXPECT_EQ(ticks1, entries[1].time);
+  EXPECT_FALSE(entries[1].HasParams());
+}
+
+TEST(NetLogTest, BasicEventsWithSource) {
+  base::test::TaskEnvironment task_environment{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+  RecordingTestNetLog net_log;
+  auto entries = net_log.GetEntries();
+  EXPECT_EQ(0u, entries.size());
+
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(9876));
+  base::TimeTicks source0_start_ticks = base::TimeTicks::Now();
+
+  NetLogWithSource source0 =
+      NetLogWithSource::Make(&net_log, NetLogSourceType::URL_REQUEST);
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(1));
+  base::TimeTicks source0_event0_ticks = base::TimeTicks::Now();
+  source0.BeginEvent(NetLogEventType::REQUEST_ALIVE);
+
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(5432));
+  base::TimeTicks source1_start_ticks = base::TimeTicks::Now();
+
+  NetLogWithSource source1 =
+      NetLogWithSource::Make(&net_log, NetLogSourceType::SOCKET);
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(1));
+  base::TimeTicks source1_event0_ticks = base::TimeTicks::Now();
+  source1.BeginEvent(NetLogEventType::SOCKET_ALIVE);
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(10));
+  base::TimeTicks source1_event1_ticks = base::TimeTicks::Now();
+  source1.EndEvent(NetLogEventType::SOCKET_ALIVE);
+
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(1));
+  base::TimeTicks source0_event1_ticks = base::TimeTicks::Now();
+  source0.EndEvent(NetLogEventType::REQUEST_ALIVE);
+
+  task_environment.FastForwardBy(base::TimeDelta::FromSeconds(123));
+
+  entries = net_log.GetEntries();
+  ASSERT_EQ(4u, entries.size());
+
+  EXPECT_EQ(NetLogEventType::REQUEST_ALIVE, entries[0].type);
+  EXPECT_EQ(NetLogSourceType::URL_REQUEST, entries[0].source.type);
+  EXPECT_NE(NetLogSource::kInvalidId, entries[0].source.id);
+  EXPECT_EQ(source0_start_ticks, entries[0].source.start_time);
+  EXPECT_EQ(NetLogEventPhase::BEGIN, entries[0].phase);
+  EXPECT_EQ(source0_event0_ticks, entries[0].time);
+  EXPECT_FALSE(entries[0].HasParams());
+
+  EXPECT_EQ(NetLogEventType::SOCKET_ALIVE, entries[1].type);
+  EXPECT_EQ(NetLogSourceType::SOCKET, entries[1].source.type);
+  EXPECT_NE(NetLogSource::kInvalidId, entries[1].source.id);
+  EXPECT_LT(entries[0].source.id, entries[1].source.id);
+  EXPECT_EQ(source1_start_ticks, entries[1].source.start_time);
+  EXPECT_EQ(NetLogEventPhase::BEGIN, entries[1].phase);
+  EXPECT_EQ(source1_event0_ticks, entries[1].time);
+  EXPECT_FALSE(entries[1].HasParams());
+
+  EXPECT_EQ(NetLogEventType::SOCKET_ALIVE, entries[2].type);
+  EXPECT_EQ(NetLogSourceType::SOCKET, entries[2].source.type);
+  EXPECT_EQ(entries[1].source.id, entries[2].source.id);
+  EXPECT_EQ(source1_start_ticks, entries[2].source.start_time);
+  EXPECT_EQ(NetLogEventPhase::END, entries[2].phase);
+  EXPECT_EQ(source1_event1_ticks, entries[2].time);
+  EXPECT_FALSE(entries[2].HasParams());
+
+  EXPECT_EQ(NetLogEventType::REQUEST_ALIVE, entries[3].type);
+  EXPECT_EQ(NetLogSourceType::URL_REQUEST, entries[3].source.type);
+  EXPECT_EQ(entries[0].source.id, entries[3].source.id);
+  EXPECT_EQ(source0_start_ticks, entries[3].source.start_time);
+  EXPECT_EQ(NetLogEventPhase::END, entries[3].phase);
+  EXPECT_EQ(source0_event1_ticks, entries[3].time);
+  EXPECT_FALSE(entries[3].HasParams());
 }
 
 // Check that the correct CaptureMode is sent to NetLog Value callbacks.
@@ -77,6 +174,7 @@
     EXPECT_EQ(NetLogEventType::SOCKET_ALIVE, entries[0].type);
     EXPECT_EQ(NetLogSourceType::NONE, entries[0].source.type);
     EXPECT_NE(NetLogSource::kInvalidId, entries[0].source.id);
+    EXPECT_GE(base::TimeTicks::Now(), entries[0].source.start_time);
     EXPECT_EQ(NetLogEventPhase::NONE, entries[0].phase);
     EXPECT_GE(base::TimeTicks::Now(), entries[0].time);
 
diff --git a/remoting/host/mac/permission_utils.mm b/remoting/host/mac/permission_utils.mm
index caf8acb..8861dade 100644
--- a/remoting/host/mac/permission_utils.mm
+++ b/remoting/host/mac/permission_utils.mm
@@ -118,24 +118,42 @@
 }
 
 // Heuristic to check screen capture permission. See http://crbug.com/993692
+// Screen capture is considered allowed if the name of at least one normal
+// or dock window running on another process is visible.
 // Copied from
 // chrome/browser/media/webrtc/system_media_capture_permissions_mac.mm
 // TODO(garykac) Move webrtc version where it can be shared.
 bool CanRecordScreen() {
   if (@available(macOS 10.15, *)) {
-    base::ScopedCFTypeRef<CFArrayRef> window_list(CGWindowListCopyWindowInfo(
-        kCGWindowListOptionOnScreenOnly, kCGNullWindowID));
-    NSUInteger num_windows = CFArrayGetCount(window_list);
-    NSUInteger num_windows_with_name = 0;
-    for (NSDictionary* dict in base::mac::CFToNSCast(window_list.get())) {
-      if ([dict objectForKey:base::mac::CFToNSCast(kCGWindowName)]) {
-        num_windows_with_name++;
-      } else {
-        // No kCGWindowName detected implies no permission.
-        break;
+    base::ScopedCFTypeRef<CFArrayRef> window_list(
+        CGWindowListCopyWindowInfo(kCGWindowListOptionAll, kCGNullWindowID));
+    int current_pid = [[NSProcessInfo processInfo] processIdentifier];
+    for (NSDictionary* window in base::mac::CFToNSCast(window_list.get())) {
+      NSNumber* window_pid =
+          [window objectForKey:base::mac::CFToNSCast(kCGWindowOwnerPID)];
+      if (!window_pid || [window_pid integerValue] == current_pid)
+        continue;
+
+      NSString* window_name =
+          [window objectForKey:base::mac::CFToNSCast(kCGWindowName)];
+      if (!window_name)
+        continue;
+
+      NSNumber* layer =
+          [window objectForKey:base::mac::CFToNSCast(kCGWindowLayer)];
+      if (!layer)
+        continue;
+
+      NSInteger layer_integer = [layer integerValue];
+      if (layer_integer == CGWindowLevelForKey(kCGNormalWindowLevelKey) ||
+          layer_integer == CGWindowLevelForKey(kCGDockWindowLevelKey)) {
+        return true;
       }
+      return false;
     }
-    return num_windows == num_windows_with_name;
+
+    // Screen capture is always allowed in older macOS versions.
+    return true;
   }
 
   // Previous to 10.15, screen capture was always allowed.
diff --git a/services/service_manager/sandbox/BUILD.gn b/services/service_manager/sandbox/BUILD.gn
index 912c0c26..b6d3e00 100644
--- a/services/service_manager/sandbox/BUILD.gn
+++ b/services/service_manager/sandbox/BUILD.gn
@@ -52,6 +52,8 @@
       "linux/bpf_ppapi_policy_linux.h",
       "linux/bpf_renderer_policy_linux.cc",
       "linux/bpf_renderer_policy_linux.h",
+      "linux/bpf_soda_policy_linux.cc",
+      "linux/bpf_soda_policy_linux.h",
       "linux/bpf_utility_policy_linux.cc",
       "linux/bpf_utility_policy_linux.h",
       "linux/sandbox_debug_handling_linux.cc",
diff --git a/services/service_manager/sandbox/linux/bpf_soda_policy_linux.cc b/services/service_manager/sandbox/linux/bpf_soda_policy_linux.cc
new file mode 100644
index 0000000..07a9a9da
--- /dev/null
+++ b/services/service_manager/sandbox/linux/bpf_soda_policy_linux.cc
@@ -0,0 +1,71 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/service_manager/sandbox/linux/bpf_soda_policy_linux.h"
+
+#include <sys/socket.h>
+
+#include "sandbox/linux/bpf_dsl/bpf_dsl.h"
+#include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
+#include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h"
+#include "sandbox/linux/syscall_broker/broker_process.h"
+#include "sandbox/linux/system_headers/linux_syscalls.h"
+#include "services/service_manager/sandbox/linux/sandbox_linux.h"
+
+using sandbox::bpf_dsl::Allow;
+using sandbox::bpf_dsl::Arg;
+using sandbox::bpf_dsl::If;
+using sandbox::bpf_dsl::ResultExpr;
+using sandbox::bpf_dsl::Trap;
+using sandbox::syscall_broker::BrokerProcess;
+
+namespace service_manager {
+
+SodaProcessPolicy::SodaProcessPolicy() = default;
+SodaProcessPolicy::~SodaProcessPolicy() = default;
+
+ResultExpr SodaProcessPolicy::EvaluateSyscall(int system_call_number) const {
+  switch (system_call_number) {
+#if defined(__NR_uname)
+    case __NR_uname:
+#endif
+#if defined(__NR_setitimer)
+    case __NR_setitimer:
+#endif
+#if defined(__NR_sigaltstack)
+    case __NR_sigaltstack:
+#endif
+#if defined(__NR_eventfd2)
+    case __NR_eventfd2:
+#endif
+#if defined(__NR_getitimer)
+    case __NR_getitimer:
+#endif
+#if defined(__NR_rseq)
+    case __NR_rseq:
+#endif
+      return Allow();
+#if defined(__NR_prlimit64)
+    case __NR_prlimit64:
+      return sandbox::RestrictPrlimit64(GetPolicyPid());
+#endif
+#if defined(__NR_getsockopt)
+    case __NR_getsockopt: {
+      const Arg<int> level(1);
+      const Arg<int> optname(2);
+      return If(AllOf(level == SOL_SOCKET, optname == SO_PEEK_OFF), Allow())
+          .Else(sandbox::CrashSIGSYS());
+    }
+#endif
+    default:
+      auto* broker_process = SandboxLinux::GetInstance()->broker_process();
+      if (broker_process->IsSyscallAllowed(system_call_number))
+        return Trap(BrokerProcess::SIGSYS_Handler, broker_process);
+
+      // Default on the content baseline policy.
+      return BPFBasePolicy::EvaluateSyscall(system_call_number);
+  }
+}
+
+}  // namespace service_manager
diff --git a/services/service_manager/sandbox/linux/bpf_soda_policy_linux.h b/services/service_manager/sandbox/linux/bpf_soda_policy_linux.h
new file mode 100644
index 0000000..5b1aa319
--- /dev/null
+++ b/services/service_manager/sandbox/linux/bpf_soda_policy_linux.h
@@ -0,0 +1,30 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_SERVICE_MANAGER_SANDBOX_LINUX_BPF_SODA_POLICY_LINUX_H_
+#define SERVICES_SERVICE_MANAGER_SANDBOX_LINUX_BPF_SODA_POLICY_LINUX_H_
+
+#include "sandbox/linux/bpf_dsl/bpf_dsl.h"
+#include "services/service_manager/sandbox/linux/bpf_base_policy_linux.h"
+
+namespace service_manager {
+
+// The process policy for the sandboxed utility process that loads the Speech
+// On-Device API (SODA). This policy allows the syscalls used by the libsoda.so
+// binary to transcribe audio into text.
+class SERVICE_MANAGER_SANDBOX_EXPORT SodaProcessPolicy : public BPFBasePolicy {
+ public:
+  SodaProcessPolicy();
+  ~SodaProcessPolicy() override;
+
+  sandbox::bpf_dsl::ResultExpr EvaluateSyscall(
+      int system_call_number) const override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SodaProcessPolicy);
+};
+
+}  // namespace service_manager
+
+#endif  // SERVICES_SERVICE_MANAGER_SANDBOX_LINUX_BPF_SODA_POLICY_LINUX_H_
diff --git a/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc b/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc
index c599471..b1bdd799 100644
--- a/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc
+++ b/services/service_manager/sandbox/linux/sandbox_seccomp_bpf_linux.cc
@@ -43,6 +43,7 @@
 #include "services/service_manager/sandbox/linux/bpf_pdf_compositor_policy_linux.h"
 #include "services/service_manager/sandbox/linux/bpf_ppapi_policy_linux.h"
 #include "services/service_manager/sandbox/linux/bpf_renderer_policy_linux.h"
+#include "services/service_manager/sandbox/linux/bpf_soda_policy_linux.h"
 #include "services/service_manager/sandbox/linux/bpf_utility_policy_linux.h"
 
 #if !defined(OS_NACL_NONSFI)
@@ -172,6 +173,8 @@
       return std::make_unique<NetworkProcessPolicy>();
     case SandboxType::kAudio:
       return std::make_unique<AudioProcessPolicy>();
+    case SandboxType::kSoda:
+      return std::make_unique<SodaProcessPolicy>();
 #if defined(OS_CHROMEOS)
     case SandboxType::kIme:
       return std::make_unique<ImeProcessPolicy>();
@@ -219,6 +222,7 @@
     case SandboxType::kIme:
 #endif  // defined(OS_CHROMEOS)
     case SandboxType::kAudio:
+    case SandboxType::kSoda:
     case SandboxType::kNetwork:
     case SandboxType::kUtility:
     case SandboxType::kNoSandbox:
diff --git a/services/service_manager/sandbox/mac/sandbox_mac.mm b/services/service_manager/sandbox/mac/sandbox_mac.mm
index 13f4917..2702bf92 100644
--- a/services/service_manager/sandbox/mac/sandbox_mac.mm
+++ b/services/service_manager/sandbox/mac/sandbox_mac.mm
@@ -262,6 +262,7 @@
       break;
     case service_manager::SandboxType::kNoSandbox:
     case service_manager::SandboxType::kInvalid:
+    case service_manager::SandboxType::kSoda:
       CHECK(false);
       break;
   }
diff --git a/services/service_manager/sandbox/sandbox_type.cc b/services/service_manager/sandbox/sandbox_type.cc
index 4a577a81..8d65b7e 100644
--- a/services/service_manager/sandbox/sandbox_type.cc
+++ b/services/service_manager/sandbox/sandbox_type.cc
@@ -45,6 +45,7 @@
 #if defined(OS_CHROMEOS)
     case SandboxType::kIme:
 #endif
+    case SandboxType::kSoda:
       return false;
   }
 }
@@ -89,6 +90,7 @@
 #if defined(OS_CHROMEOS)
     case SandboxType::kIme:
 #endif  // defined(OS_CHROMEOS)
+    case SandboxType::kSoda:
       DCHECK(command_line->GetSwitchValueASCII(switches::kProcessType) ==
              switches::kUtilityProcess);
       DCHECK(!command_line->HasSwitch(switches::kServiceSandboxType));
@@ -164,6 +166,8 @@
       return switches::kUtilitySandbox;
     case SandboxType::kAudio:
       return switches::kAudioSandbox;
+    case SandboxType::kSoda:
+      return switches::kSodaSandbox;
 #if defined(OS_WIN)
     case SandboxType::kXrCompositing:
       return switches::kXrCompositingSandbox;
@@ -214,6 +218,8 @@
 #endif
   if (sandbox_string == switches::kAudioSandbox)
     return SandboxType::kAudio;
+  if (sandbox_string == switches::kSodaSandbox)
+    return SandboxType::kSoda;
 #if defined(OS_CHROMEOS)
   if (sandbox_string == switches::kImeSandbox)
     return SandboxType::kIme;
diff --git a/services/service_manager/sandbox/sandbox_type.h b/services/service_manager/sandbox/sandbox_type.h
index f9d8486..4671862 100644
--- a/services/service_manager/sandbox/sandbox_type.h
+++ b/services/service_manager/sandbox/sandbox_type.h
@@ -67,6 +67,9 @@
 #if defined(OS_CHROMEOS)
   kIme,
 #endif  // defined(OS_CHROMEOS)
+
+  // The Speech On-Device API service process.
+  kSoda
 };
 
 SERVICE_MANAGER_SANDBOX_EXPORT bool IsUnsandboxedSandboxType(
diff --git a/services/service_manager/sandbox/switches.cc b/services/service_manager/sandbox/switches.cc
index 0b43b8a..2fba59c 100644
--- a/services/service_manager/sandbox/switches.cc
+++ b/services/service_manager/sandbox/switches.cc
@@ -28,6 +28,7 @@
 const char kCdmSandbox[] = "cdm";
 const char kPdfCompositorSandbox[] = "pdf_compositor";
 const char kAudioSandbox[] = "audio";
+const char kSodaSandbox[] = "soda";
 
 #if defined(OS_WIN)
 const char kXrCompositingSandbox[] = "xr_compositing";
diff --git a/services/service_manager/sandbox/switches.h b/services/service_manager/sandbox/switches.h
index 3e08da1..718f749 100644
--- a/services/service_manager/sandbox/switches.h
+++ b/services/service_manager/sandbox/switches.h
@@ -27,6 +27,7 @@
 SERVICE_MANAGER_SANDBOX_EXPORT extern const char kCdmSandbox[];
 SERVICE_MANAGER_SANDBOX_EXPORT extern const char kPdfCompositorSandbox[];
 SERVICE_MANAGER_SANDBOX_EXPORT extern const char kAudioSandbox[];
+SERVICE_MANAGER_SANDBOX_EXPORT extern const char kSodaSandbox[];
 
 #if defined(OS_WIN)
 SERVICE_MANAGER_SANDBOX_EXPORT extern const char kXrCompositingSandbox[];
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 70bb326..e434b4f 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -4594,6 +4594,9 @@
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android23.textpb"
         ],
+        "flags": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.viz_unittests.filter"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -8950,6 +8953,9 @@
           "--recover-devices",
           "--avd-config=../../tools/android/avd/proto/generic_android28.textpb"
         ],
+        "flags": [
+          "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.viz_unittests.filter"
+        ],
         "merge": {
           "args": [
             "--bucket",
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index f1ff72b..a2f4cbb 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -21270,10 +21270,6 @@
         "test_target": "//third_party/boringssl:boringssl_ssl_tests"
       },
       {
-        "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter",
-          "--gtest_shuffle"
-        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -22391,9 +22387,7 @@
       },
       {
         "args": [
-          "--test-launcher-print-test-stdio=always",
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter",
-          "--gtest_shuffle"
+          "--test-launcher-print-test-stdio=always"
         ],
         "merge": {
           "args": [],
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index 77f8f60d..68fb7eb 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -1795,10 +1795,6 @@
         "test_target": "//third_party/boringssl:boringssl_ssl_tests"
       },
       {
-        "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter",
-          "--gtest_shuffle"
-        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -3393,10 +3389,6 @@
         "test_target": "//third_party/boringssl:boringssl_ssl_tests"
       },
       {
-        "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter",
-          "--gtest_shuffle"
-        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -5038,10 +5030,6 @@
         "test_target": "//third_party/boringssl:boringssl_ssl_tests"
       },
       {
-        "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter",
-          "--gtest_shuffle"
-        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -6672,10 +6660,6 @@
         "test_target": "//third_party/boringssl:boringssl_ssl_tests"
       },
       {
-        "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter",
-          "--gtest_shuffle"
-        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index e1828b65..142198e 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -13258,9 +13258,7 @@
       },
       {
         "args": [
-          "--test-launcher-print-test-stdio=always",
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter",
-          "--gtest_shuffle"
+          "--test-launcher-print-test-stdio=always"
         ],
         "merge": {
           "args": [],
diff --git a/testing/buildbot/filters/BUILD.gn b/testing/buildbot/filters/BUILD.gn
index 9f1eeb86..dd20ede 100644
--- a/testing/buildbot/filters/BUILD.gn
+++ b/testing/buildbot/filters/BUILD.gn
@@ -113,6 +113,14 @@
   ]
 }
 
+source_set("e2e_sync_integration_tests_filters") {
+  testonly = true
+
+  data = [
+    "//testing/buildbot/filters/e2e.sync_integration_tests.filter",
+  ]
+}
+
 source_set("fuchsia_filters") {
   data = [
     "//testing/buildbot/filters/fuchsia.base_perftests.filter",
@@ -126,6 +134,21 @@
   ]
 }
 
+source_set("gl_tests_filters") {
+  testonly = true
+
+  data = [
+    "//testing/buildbot/filters/android.emulator.gl_tests.filter",
+    "//testing/buildbot/filters/android.pie_arm64_rel.gl_tests.filter",
+  ]
+}
+
+source_set("linux_ozone_views_unittests_filters") {
+  data = [
+    "//testing/buildbot/filters/ozone-linux.x11_views_unittests.filter",
+  ]
+}
+
 source_set("linux_trusty_rel_browser_tests_filters") {
   data = [
     "//testing/buildbot/filters/linux_trusty_rel.browser_tests.filter",
@@ -153,12 +176,11 @@
   ]
 }
 
-source_set("gl_tests_filters") {
+source_set("viz_unittests_filters") {
   testonly = true
 
   data = [
-    "//testing/buildbot/filters/android.emulator.gl_tests.filter",
-    "//testing/buildbot/filters/android.pie_arm64_rel.gl_tests.filter",
+    "//testing/buildbot/filters/android.emulator.viz_unittests.filter",
   ]
 }
 
@@ -177,17 +199,3 @@
     "//testing/buildbot/filters/mojo.fyi.network_webview_instrumentation_test_apk.filter",
   ]
 }
-
-source_set("linux_ozone_views_unittests_filters") {
-  data = [
-    "//testing/buildbot/filters/ozone-linux.x11_views_unittests.filter",
-  ]
-}
-
-source_set("e2e_sync_integration_tests_filters") {
-  testonly = true
-
-  data = [
-    "//testing/buildbot/filters/e2e.sync_integration_tests.filter",
-  ]
-}
diff --git a/testing/buildbot/filters/android.emulator.viz_unittests.filter b/testing/buildbot/filters/android.emulator.viz_unittests.filter
new file mode 100644
index 0000000..4ed15e3
--- /dev/null
+++ b/testing/buildbot/filters/android.emulator.viz_unittests.filter
@@ -0,0 +1,41 @@
+# https://crbug.com/1039860
+-All/GLScalerShaderPixelTest.BicubicDownscaleByHalf/0
+-All/GLScalerShaderPixelTest.BicubicDownscaleByHalf/1
+-All/GLScalerShaderPixelTest.BicubicDownscaleByHalf/2
+-All/GLScalerShaderPixelTest.BicubicDownscaleByHalf/3
+-All/GLScalerShaderPixelTest.BicubicUpscale/0
+-All/GLScalerShaderPixelTest.BicubicUpscale/1
+-All/GLScalerShaderPixelTest.BicubicUpscale/2
+-All/GLScalerShaderPixelTest.BicubicUpscale/3
+-All/GLScalerShaderPixelTest.Bilinear/0
+-All/GLScalerShaderPixelTest.Bilinear/1
+-All/GLScalerShaderPixelTest.Bilinear/2
+-All/GLScalerShaderPixelTest.Bilinear/3
+-All/GLScalerShaderPixelTest.Export_Planar/0
+-All/GLScalerShaderPixelTest.Export_Planar/1
+-All/GLScalerShaderPixelTest.Export_Planar/2
+-All/GLScalerShaderPixelTest.Export_Planar/3
+-All/GLScalerShaderPixelTest.FourTapBilinear/0
+-All/GLScalerShaderPixelTest.FourTapBilinear/1
+-All/GLScalerShaderPixelTest.FourTapBilinear/2
+-All/GLScalerShaderPixelTest.FourTapBilinear/3
+-All/GLScalerShaderPixelTest.ThreeTapBilinear/0
+-All/GLScalerShaderPixelTest.ThreeTapBilinear/1
+-All/GLScalerShaderPixelTest.ThreeTapBilinear/2
+-All/GLScalerShaderPixelTest.ThreeTapBilinear/3
+-All/GLScalerShaderPixelTest.TwoByTwoTapBilinear/0
+-All/GLScalerShaderPixelTest.TwoByTwoTapBilinear/1
+-All/GLScalerShaderPixelTest.TwoByTwoTapBilinear/2
+-All/GLScalerShaderPixelTest.TwoByTwoTapBilinear/3
+-All/GLScalerShaderPixelTest.TwoTapBilinear/0
+-All/GLScalerShaderPixelTest.TwoTapBilinear/1
+-All/GLScalerShaderPixelTest.TwoTapBilinear/2
+-All/GLScalerShaderPixelTest.TwoTapBilinear/3
+-All/GLScalerShaderPixelTest.ValidateTestHelpers/1
+-All/GLScalerShaderPixelTest.ValidateTestHelpers/2
+-All/GLScalerShaderPixelTest.ValidateTestHelpers/3
+-GLScalerPixelTest.CopiesByDefault
+-GLScalerPixelTest.ExportsTheRedColorChannel
+-GLScalerPixelTest.TranslatesVerticallyFlippedSourceWithSourceOffset
+-GLScalerPixelTest.TranslatesWithSourceOffset
+-GLScalerPixelTest.VerticallyFlipsOutput
diff --git a/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter b/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter
deleted file mode 100644
index 53de3f7..0000000
--- a/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter
+++ /dev/null
@@ -1,15 +0,0 @@
-# https://crbug.com/828031
-
-# Suites implicated in window_server deaths.
--ConstrainedWebDialogBrowserTest.*
--SSLClientCertificateSelectorMacTest.*
-
-# Potential 10.13 killers.
--DisableExtensionsExceptBrowserTest.*
--ExtensionActionRunnerBrowserTest.*
--ExtensionFetchTest.*
--ExtensionTabUtilBrowserTest.*
--NativeBindingsApiTest.*
--PasswordManagerBrowserTest.*
--PictureInPictureWindowControllerBrowserTest.*
--UpdateServiceTest.*
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index e0fa264..6fb16c5 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -124,64 +124,10 @@
         },
       },
       'Mac ASan 64 Tests (1)': {
-        # A subset of tests seem to cause WindowServer deaths on VMs.
-        # crbug.com/828031 et al.
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter',
-          '--gtest_shuffle',
-        ],
         'swarming': {
           'shards': 20,
         },
       },
-      'Mac10.11 Tests': {
-        # A subset of tests seem to cause WindowServer deaths on VMs.
-        # crbug.com/828031 et al.
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter',
-          '--gtest_shuffle',
-        ],
-      },
-      'Mac10.12 Tests': {
-        # A subset of tests seem to cause WindowServer deaths on VMs.
-        # crbug.com/828031 et al.
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter',
-          '--gtest_shuffle',
-        ],
-      },
-      'Mac10.13 Tests': {
-        # A subset of tests seem to cause WindowServer deaths on VMs.
-        # crbug.com/828031 et al.
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter',
-          '--gtest_shuffle',
-        ],
-      },
-      'Mac10.13 Tests (dbg)': {
-        # A subset of tests seem to cause WindowServer deaths on VMs.
-        # crbug.com/828031 et al.
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter',
-          '--gtest_shuffle',
-        ],
-      },
-      'ToTMac': {
-        # A subset of tests seem to cause WindowServer deaths on VMs.
-        # crbug.com/828031 et al.
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter',
-          '--gtest_shuffle',
-        ],
-      },
-      'ToTMacASan': {
-        # A subset of tests seem to cause WindowServer deaths on VMs.
-        # crbug.com/828031 et al.
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/mac_window_server_killers.browser_tests.filter',
-          '--gtest_shuffle',
-        ],
-      },
       'ToTWin(dbg)': {
         'swarming': {
           'shards': 20,
@@ -1689,6 +1635,20 @@
       'Win10 FYI x64 Exp Release (Intel HD 630)',
     ],
   },
+  'viz_unittests': {
+    'modifications': {
+      'android-marshmallow-x86-fyi-rel': {
+        'flags': [
+          '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.viz_unittests.filter',
+        ],
+      },
+      'android-pie-x86-fyi-rel': {
+        'flags': [
+          '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.viz_unittests.filter',
+        ],
+      },
+    },
+  },
   'vr_android_unittests': {
     'remove_from': [
       'android-marshmallow-x86-fyi-rel',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index c343c30..435041a 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2028,6 +2028,26 @@
             ]
         }
     ],
+    "DesktopHats": [
+        {
+            "platforms": [
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "EnabledNTP79",
+                    "params": {
+                        "en_site_id": "ty52vxwjrabfvhusawtrmkmx6m",
+                        "probability": "0.2",
+                        "survey": "satisfaction"
+                    },
+                    "enable_features": [
+                        "HappinessTrackingSurveysForDesktop"
+                    ]
+                }
+            ]
+        }
+    ],
     "DesktopTabGroups": [
         {
             "platforms": [
@@ -5533,6 +5553,25 @@
             ]
         }
     ],
+    "SafeBrowsingCommittedInterstitials": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SafeBrowsingCommittedInterstitials"
+                    ]
+                }
+            ]
+        }
+    ],
     "SafeBrowsingPasswordProtectionForSavedPasswords": [
         {
             "platforms": [
@@ -6610,6 +6649,7 @@
         {
             "platforms": [
                 "android",
+                "android_webview",
                 "chromeos",
                 "linux",
                 "mac",
diff --git a/third_party/blink/common/feature_policy/document_policy.cc b/third_party/blink/common/feature_policy/document_policy.cc
index 25da03e..9a19a27 100644
--- a/third_party/blink/common/feature_policy/document_policy.cc
+++ b/third_party/blink/common/feature_policy/document_policy.cc
@@ -13,9 +13,9 @@
 namespace blink {
 
 // static
-std::unique_ptr<DocumentPolicy> DocumentPolicy::CreateWithRequiredPolicy(
-    const FeatureState& required_policy) {
-  return CreateWithRequiredPolicy(required_policy, GetFeatureDefaults());
+std::unique_ptr<DocumentPolicy> DocumentPolicy::CreateWithHeaderPolicy(
+    const FeatureState& header_policy) {
+  return CreateWithHeaderPolicy(header_policy, GetFeatureDefaults());
 }
 
 namespace {
@@ -302,12 +302,12 @@
 }
 
 // static
-std::unique_ptr<DocumentPolicy> DocumentPolicy::CreateWithRequiredPolicy(
-    const FeatureState& required_policy,
+std::unique_ptr<DocumentPolicy> DocumentPolicy::CreateWithHeaderPolicy(
+    const FeatureState& header_policy,
     const DocumentPolicy::FeatureState& defaults) {
   std::unique_ptr<DocumentPolicy> new_policy =
       base::WrapUnique(new DocumentPolicy(defaults));
-  new_policy->UpdateFeatureState(required_policy);
+  new_policy->UpdateFeatureState(header_policy);
   return new_policy;
 }
 
@@ -323,13 +323,21 @@
   return *default_feature_list;
 }
 
+// static
 bool DocumentPolicy::IsPolicyCompatible(
+    const DocumentPolicy::FeatureState& required_policy,
     const DocumentPolicy::FeatureState& incoming_policy) {
-  const DocumentPolicy::FeatureState& state = GetFeatureState();
-  for (const auto& e : incoming_policy) {
-    // feature value > threshold => enabled
-    // value_a > value_b => value_a less strict than value_b
-    if (state.at(e.first) > e.second)
+  for (const auto& incoming_entry : incoming_policy) {
+    // feature value > threshold => enabled, where feature value is the value in
+    // document policy and threshold is the value to test against.
+    // The smaller the feature value, the stricter the policy.
+    // Incoming policy should be at least as strict as the required one.
+    const auto required_entry =
+        required_policy.find(incoming_entry.first /* feature */);
+
+    if (required_entry != required_policy.end() &&
+        required_entry->second /* required_value */ <
+            incoming_entry.second /* incoming_value */)
       return false;
   }
   return true;
diff --git a/third_party/blink/common/feature_policy/feature_policy_mojom_traits.cc b/third_party/blink/common/feature_policy/feature_policy_mojom_traits.cc
index 14ed005..eff9e14 100644
--- a/third_party/blink/common/feature_policy/feature_policy_mojom_traits.cc
+++ b/third_party/blink/common/feature_policy/feature_policy_mojom_traits.cc
@@ -17,28 +17,4 @@
          in.ReadOpaqueValue(&out->opaque_value) && in.ReadValues(&out->values);
 }
 
-bool UnionTraits<blink::mojom::PolicyValueDataDataView, blink::PolicyValue>::
-    Read(blink::mojom::PolicyValueDataDataView in, blink::PolicyValue* out) {
-  switch (in.tag()) {
-    case blink::mojom::PolicyValueDataDataView::Tag::BOOL_VALUE:
-      out->SetType(blink::mojom::PolicyValueType::kBool);
-      out->SetBoolValue(in.bool_value());
-      return true;
-    case blink::mojom::PolicyValueDataDataView::Tag::DEC_DOUBLE_VALUE:
-      out->SetType(blink::mojom::PolicyValueType::kDecDouble);
-      out->SetDoubleValue(in.dec_double_value());
-      return true;
-    case blink::mojom::PolicyValueDataDataView::Tag::NULL_VALUE:
-      break;
-  }
-  NOTREACHED();
-  return false;
-}
-
-bool StructTraits<blink::mojom::PolicyValueDataView, blink::PolicyValue>::Read(
-    blink::mojom::PolicyValueDataView data,
-    blink::PolicyValue* out) {
-  return data.ReadData(out);
-}
-
 }  // namespace mojo
diff --git a/third_party/blink/common/feature_policy/feature_policy_mojom_traits.h b/third_party/blink/common/feature_policy/feature_policy_mojom_traits.h
index 70c3c7a..353903c 100644
--- a/third_party/blink/common/feature_policy/feature_policy_mojom_traits.h
+++ b/third_party/blink/common/feature_policy/feature_policy_mojom_traits.h
@@ -9,9 +9,9 @@
 
 #include "base/containers/flat_map.h"
 #include "mojo/public/cpp/bindings/enum_traits.h"
+#include "third_party/blink/common/feature_policy/policy_value_mojom_traits.h"
 #include "third_party/blink/public/common/common_export.h"
 #include "third_party/blink/public/common/feature_policy/feature_policy.h"
-#include "third_party/blink/public/common/feature_policy/policy_value.h"
 #include "third_party/blink/public/common/frame/sandbox_flags.h"
 #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-shared.h"
 
@@ -76,45 +76,6 @@
 };
 
 template <>
-struct BLINK_COMMON_EXPORT
-    UnionTraits<blink::mojom::PolicyValueDataDataView, blink::PolicyValue> {
- public:
-  static blink::mojom::PolicyValueDataDataView::Tag GetTag(
-      const blink::PolicyValue& value) {
-    switch (value.Type()) {
-      case blink::mojom::PolicyValueType::kNull:
-        return blink::mojom::PolicyValueDataDataView::Tag::NULL_VALUE;
-      case blink::mojom::PolicyValueType::kBool:
-        return blink::mojom::PolicyValueDataDataView::Tag::BOOL_VALUE;
-      case blink::mojom::PolicyValueType::kDecDouble:
-        return blink::mojom::PolicyValueDataDataView::Tag::DEC_DOUBLE_VALUE;
-    }
-
-    NOTREACHED();
-    return blink::mojom::PolicyValueDataDataView::Tag::NULL_VALUE;
-  }
-  static bool null_value(const blink::PolicyValue& value) { return false; }
-  static bool bool_value(const blink::PolicyValue& value) {
-    return value.BoolValue();
-  }
-  static double dec_double_value(const blink::PolicyValue& value) {
-    return value.DoubleValue();
-  }
-  static bool Read(blink::mojom::PolicyValueDataDataView in,
-                   blink::PolicyValue* out);
-};
-
-template <>
-struct BLINK_COMMON_EXPORT
-    StructTraits<blink::mojom::PolicyValueDataView, blink::PolicyValue> {
-  static const blink::PolicyValue& data(const blink::PolicyValue& value) {
-    return value;
-  }
-  static bool Read(blink::mojom::PolicyValueDataView data,
-                   blink::PolicyValue* out);
-};
-
-template <>
 class BLINK_COMMON_EXPORT
     StructTraits<blink::mojom::ParsedFeaturePolicyDeclarationDataView,
                  blink::ParsedFeaturePolicyDeclaration> {
diff --git a/third_party/blink/common/feature_policy/policy_value.typemap b/third_party/blink/common/feature_policy/policy_value.typemap
new file mode 100644
index 0000000..ada28ca6
--- /dev/null
+++ b/third_party/blink/common/feature_policy/policy_value.typemap
@@ -0,0 +1,12 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+mojom = "//third_party/blink/public/mojom/feature_policy/policy_value.mojom"
+public_headers = []
+traits_headers =
+    [ "//third_party/blink/common/feature_policy/policy_value_mojom_traits.h" ]
+sources = [
+  "//third_party/blink/common/feature_policy/policy_value_mojom_traits.cc",
+]
+type_mappings = [ "blink.mojom.PolicyValue=::blink::PolicyValue" ]
diff --git a/third_party/blink/common/feature_policy/policy_value_mojom_traits.cc b/third_party/blink/common/feature_policy/policy_value_mojom_traits.cc
new file mode 100644
index 0000000..a1437a3
--- /dev/null
+++ b/third_party/blink/common/feature_policy/policy_value_mojom_traits.cc
@@ -0,0 +1,33 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/common/feature_policy/policy_value_mojom_traits.h"
+
+namespace mojo {
+
+bool UnionTraits<blink::mojom::PolicyValueDataDataView, blink::PolicyValue>::
+    Read(blink::mojom::PolicyValueDataDataView in, blink::PolicyValue* out) {
+  switch (in.tag()) {
+    case blink::mojom::PolicyValueDataDataView::Tag::BOOL_VALUE:
+      out->SetType(blink::mojom::PolicyValueType::kBool);
+      out->SetBoolValue(in.bool_value());
+      return true;
+    case blink::mojom::PolicyValueDataDataView::Tag::DEC_DOUBLE_VALUE:
+      out->SetType(blink::mojom::PolicyValueType::kDecDouble);
+      out->SetDoubleValue(in.dec_double_value());
+      return true;
+    case blink::mojom::PolicyValueDataDataView::Tag::NULL_VALUE:
+      break;
+  }
+  NOTREACHED();
+  return false;
+}
+
+bool StructTraits<blink::mojom::PolicyValueDataView, blink::PolicyValue>::Read(
+    blink::mojom::PolicyValueDataView data,
+    blink::PolicyValue* out) {
+  return data.ReadData(out);
+}
+
+}  // namespace mojo
diff --git a/third_party/blink/common/feature_policy/policy_value_mojom_traits.h b/third_party/blink/common/feature_policy/policy_value_mojom_traits.h
new file mode 100644
index 0000000..2da326b
--- /dev/null
+++ b/third_party/blink/common/feature_policy/policy_value_mojom_traits.h
@@ -0,0 +1,55 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_COMMON_FEATURE_POLICY_POLICY_VALUE_MOJOM_TRAITS_H_
+#define THIRD_PARTY_BLINK_COMMON_FEATURE_POLICY_POLICY_VALUE_MOJOM_TRAITS_H_
+
+#include "third_party/blink/public/common/common_export.h"
+#include "third_party/blink/public/common/feature_policy/policy_value.h"
+#include "third_party/blink/public/mojom/feature_policy/policy_value.mojom-shared.h"
+
+namespace mojo {
+
+template <>
+struct BLINK_COMMON_EXPORT
+    UnionTraits<blink::mojom::PolicyValueDataDataView, blink::PolicyValue> {
+ public:
+  static blink::mojom::PolicyValueDataDataView::Tag GetTag(
+      const blink::PolicyValue& value) {
+    switch (value.Type()) {
+      case blink::mojom::PolicyValueType::kNull:
+        return blink::mojom::PolicyValueDataDataView::Tag::NULL_VALUE;
+      case blink::mojom::PolicyValueType::kBool:
+        return blink::mojom::PolicyValueDataDataView::Tag::BOOL_VALUE;
+      case blink::mojom::PolicyValueType::kDecDouble:
+        return blink::mojom::PolicyValueDataDataView::Tag::DEC_DOUBLE_VALUE;
+    }
+
+    NOTREACHED();
+    return blink::mojom::PolicyValueDataDataView::Tag::NULL_VALUE;
+  }
+  static bool null_value(const blink::PolicyValue& value) { return false; }
+  static bool bool_value(const blink::PolicyValue& value) {
+    return value.BoolValue();
+  }
+  static double dec_double_value(const blink::PolicyValue& value) {
+    return value.DoubleValue();
+  }
+  static bool Read(blink::mojom::PolicyValueDataDataView in,
+                   blink::PolicyValue* out);
+};
+
+template <>
+struct BLINK_COMMON_EXPORT
+    StructTraits<blink::mojom::PolicyValueDataView, blink::PolicyValue> {
+  static const blink::PolicyValue& data(const blink::PolicyValue& value) {
+    return value;
+  }
+  static bool Read(blink::mojom::PolicyValueDataView data,
+                   blink::PolicyValue* out);
+};
+
+}  // namespace mojo
+
+#endif  // THIRD_PARTY_BLINK_COMMON_FEATURE_POLICY_POLICY_VALUE_MOJOM_TRAITS_H_
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index c1e581d3..c668600 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -232,6 +232,11 @@
 const base::Feature kAllowSyncXHRInPageDismissal{
     "AllowSyncXHRInPageDismissal", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Font enumeration and table access. https://crbug.com/535764 and
+// https://crbug.com/982054.
+const base::Feature kFontAccess{"FontAccess",
+                                base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Allows Web Components v0 to be re-enabled.
 const base::Feature kWebComponentsV0Enabled{"WebComponentsV0Enabled",
                                             base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/third_party/blink/common/messaging/message_port_descriptor.cc b/third_party/blink/common/messaging/message_port_descriptor.cc
index 445dce4..5097ab4 100644
--- a/third_party/blink/common/messaging/message_port_descriptor.cc
+++ b/third_party/blink/common/messaging/message_port_descriptor.cc
@@ -70,6 +70,12 @@
   return *this;
 }
 
+MojoHandle MessagePortDescriptor::GetMojoHandleForTesting() const {
+  if (!handle_.get())
+    return MOJO_HANDLE_INVALID;
+  return handle_.get().value();
+}
+
 bool MessagePortDescriptor::IsValid() const {
   // |handle_| can be valid or invalid, depending on if we're entangled or
   // not. But everything else should be consistent.
@@ -122,7 +128,7 @@
 }
 
 void MessagePortDescriptor::Init(mojo::ScopedMessagePipeHandle handle,
-                                 base::UnguessableToken id,
+                                 const base::UnguessableToken& id,
                                  uint64_t sequence_number) {
   // Init is only called by deserialization code and thus should only be called
   // on a default initialized descriptor.
@@ -170,6 +176,13 @@
   return std::move(handle_);
 }
 
+mojo::ScopedMessagePipeHandle
+MessagePortDescriptor::TakeHandleToEntangleWithEmbedder() {
+  DCHECK(handle_.is_valid());
+  NotifyAttachedToEmbedder();
+  return std::move(handle_);
+}
+
 void MessagePortDescriptor::GiveDisentangledHandle(
     mojo::ScopedMessagePipeHandle handle) {
   // We should only ever be given back the same handle that was taken from us.
@@ -181,6 +194,12 @@
   NotifyDetached();
 }
 
+// static
+MessagePortDescriptor::InstrumentationDelegate*
+MessagePortDescriptor::GetInstrumentationDelegate() {
+  return g_instrumentation_delegate;
+}
+
 MessagePortDescriptor::MessagePortDescriptor(
     mojo::ScopedMessagePipeHandle handle)
     : handle_(std::move(handle)),
@@ -200,6 +219,14 @@
   }
 }
 
+void MessagePortDescriptor::NotifyAttachedToEmbedder() {
+  DCHECK(!id_.is_empty());
+  if (g_instrumentation_delegate) {
+    g_instrumentation_delegate->NotifyMessagePortAttachedToEmbedder(
+        id_, sequence_number_++);
+  }
+}
+
 void MessagePortDescriptor::NotifyDetached() {
   DCHECK(!id_.is_empty());
   if (g_instrumentation_delegate) {
@@ -223,8 +250,10 @@
 
   // Notify the instrumentation that these ports are newly created and peers of
   // each other.
-  if (g_instrumentation_delegate)
-    g_instrumentation_delegate->NotifyMessagePortPairCreated(*this);
+  if (g_instrumentation_delegate) {
+    g_instrumentation_delegate->NotifyMessagePortPairCreated(port0_.id(),
+                                                             port1_.id());
+  }
 }
 
 MessagePortDescriptorPair::~MessagePortDescriptorPair() = default;
diff --git a/third_party/blink/common/messaging/message_port_descriptor_unittest.cc b/third_party/blink/common/messaging/message_port_descriptor_unittest.cc
index 02f3d54ed..7446735 100644
--- a/third_party/blink/common/messaging/message_port_descriptor_unittest.cc
+++ b/third_party/blink/common/messaging/message_port_descriptor_unittest.cc
@@ -23,14 +23,19 @@
     MessagePortDescriptor::SetInstrumentationDelegate(nullptr);
   }
 
-  MOCK_METHOD1(NotifyMessagePortPairCreated,
-               void(const MessagePortDescriptorPair& pair));
+  MOCK_METHOD2(NotifyMessagePortPairCreated,
+               void(const base::UnguessableToken& port0_id,
+                    const base::UnguessableToken& port1_id));
 
   MOCK_METHOD3(NotifyMessagePortAttached,
                void(const base::UnguessableToken& port_id,
                     uint64_t sequence_number,
                     const base::UnguessableToken& execution_context_id));
 
+  MOCK_METHOD2(NotifyMessagePortAttachedToEmbedder,
+               void(const base::UnguessableToken& port_id,
+                    uint64_t sequence_number));
+
   MOCK_METHOD2(NotifyMessagePortDetached,
                void(const base::UnguessableToken& port_id,
                     uint64_t sequence_number));
@@ -95,12 +100,11 @@
   } created_data;
 
   // Create a message handle descriptor pair and expect a notification.
-  EXPECT_CALL(delegate, NotifyMessagePortPairCreated(_))
-      .WillOnce(Invoke([&created_data](const MessagePortDescriptorPair& pair) {
-        created_data.token0 = pair.port0().id();
-        created_data.token1 = pair.port1().id();
-        EXPECT_EQ(1u, pair.port0().sequence_number());
-        EXPECT_EQ(1u, pair.port1().sequence_number());
+  EXPECT_CALL(delegate, NotifyMessagePortPairCreated(_, _))
+      .WillOnce(Invoke([&created_data](const base::UnguessableToken& port0_id,
+                                       const base::UnguessableToken& port1_id) {
+        created_data.token0 = port0_id;
+        created_data.token1 = port1_id;
       }));
   MessagePortDescriptorPair pair;
 
diff --git a/third_party/blink/common/typemaps.gni b/third_party/blink/common/typemaps.gni
index b4bbb0de..0c2e2699 100644
--- a/third_party/blink/common/typemaps.gni
+++ b/third_party/blink/common/typemaps.gni
@@ -5,6 +5,7 @@
 typemaps = [
   "//third_party/blink/common/bluetooth/web_bluetooth_device_id.typemap",
   "//third_party/blink/common/feature_policy/feature_policy.typemap",
+  "//third_party/blink/common/feature_policy/policy_value.typemap",
   "//third_party/blink/common/frame/frame_policy.typemap",
   "//third_party/blink/common/messaging/cloneable_message.typemap",
   "//third_party/blink/common/messaging/transferable_message.typemap",
diff --git a/third_party/blink/public/common/feature_policy/document_policy.h b/third_party/blink/public/common/feature_policy/document_policy.h
index 8c61b31c..8e84cea 100644
--- a/third_party/blink/public/common/feature_policy/document_policy.h
+++ b/third_party/blink/public/common/feature_policy/document_policy.h
@@ -68,8 +68,8 @@
  public:
   using FeatureState = std::map<mojom::FeaturePolicyFeature, PolicyValue>;
 
-  static std::unique_ptr<DocumentPolicy> CreateWithRequiredPolicy(
-      const FeatureState& required_policy);
+  static std::unique_ptr<DocumentPolicy> CreateWithHeaderPolicy(
+      const FeatureState& header_policy);
 
   // Returns true if the feature is unrestricted (has its default value for the
   // platform)
@@ -93,15 +93,18 @@
   // (such as sandbox policies).
   FeatureState GetFeatureState() const;
 
-  // Returns true if this document policy is compatible with the incoming
-  // document policy.
-  bool IsPolicyCompatible(const FeatureState& incoming_policy);
+  // Returns true if the incoming policy is compatible with the given required
+  // policy, i.e. incoming policy is at least as strict as required policy.
+  static bool IsPolicyCompatible(const FeatureState& required_policy,
+                                 const FeatureState& incoming_policy);
 
   // Returns the list of features which can be controlled by Document Policy,
   // and their default values.
   static const FeatureState& GetFeatureDefaults();
 
   // Serialize document policy according to http_structured_header.
+  // returns base::nullopt when http structured header serializer encounters
+  // problems, e.g. double value out of the range supported.
   static base::Optional<std::string> Serialize(const FeatureState& policy);
 
   // Parse document policy header to FeatureState
@@ -115,8 +118,8 @@
   friend class DocumentPolicyTest;
 
   DocumentPolicy(const FeatureState& feature_list);
-  static std::unique_ptr<DocumentPolicy> CreateWithRequiredPolicy(
-      const FeatureState& required_policy,
+  static std::unique_ptr<DocumentPolicy> CreateWithHeaderPolicy(
+      const FeatureState& header_policy,
       const FeatureState& defaults);
 
   void UpdateFeatureState(const FeatureState& feature_state);
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 5b552305..a9858ed 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -63,6 +63,7 @@
 BLINK_COMMON_EXPORT extern const base::Feature kStorageAccessAPI;
 BLINK_COMMON_EXPORT extern const base::Feature kTextFragmentAnchor;
 BLINK_COMMON_EXPORT extern const base::Feature kWasmCodeCache;
+BLINK_COMMON_EXPORT extern const base::Feature kFontAccess;
 BLINK_COMMON_EXPORT extern const base::Feature kNativeFileSystemAPI;
 BLINK_COMMON_EXPORT extern const base::Feature kFileHandlingAPI;
 BLINK_COMMON_EXPORT extern const base::Feature kAllowSyncXHRInPageDismissal;
diff --git a/third_party/blink/public/common/messaging/message_port_descriptor.h b/third_party/blink/public/common/messaging/message_port_descriptor.h
index 7c238ec..51c067e 100644
--- a/third_party/blink/public/common/messaging/message_port_descriptor.h
+++ b/third_party/blink/public/common/messaging/message_port_descriptor.h
@@ -9,6 +9,10 @@
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "third_party/blink/public/common/common_export.h"
 
+namespace content {
+class MessagePort;
+}
+
 namespace blink {
 
 // Defines a message port descriptor, which is a mojo::MessagePipeHandle and
@@ -69,6 +73,10 @@
   const base::UnguessableToken& id() const { return id_; }
   uint64_t sequence_number() const { return sequence_number_; }
 
+  // Helper accessor for getting the underlying Mojo handle. Makes tests a
+  // little easier to write.
+  MojoHandle GetMojoHandleForTesting() const;
+
   // Returns true if this is a valid descriptor.
   bool IsValid() const;
 
@@ -82,16 +90,18 @@
   void Reset();
 
  protected:
+  friend class content::MessagePort;
   friend class MessagePort;
-  friend class MessagePortSerializationAccess;
   friend class MessagePortDescriptorTestHelper;
+  friend class MessagePortJavaAccess;
+  friend class MessagePortSerializationAccess;
 
   // These are only meant to be used for serialization, and as such the values
   // should always be non-default initialized when they are called. Intended for
   // use via MessagePortSerializationAccess. These should only be called for
   // descriptors that actually host non-default values.
   void Init(mojo::ScopedMessagePipeHandle handle,
-            base::UnguessableToken id,
+            const base::UnguessableToken& id,
             uint64_t sequence_number);
   mojo::ScopedMessagePipeHandle TakeHandle();
   base::UnguessableToken TakeId();
@@ -107,8 +117,14 @@
   // caller. See MessagePort::Entangle and MessagePort::Disentangle.
   mojo::ScopedMessagePipeHandle TakeHandleToEntangle(
       const base::UnguessableToken& execution_context_id);
+  // Intended for use by Fuchsia's MessagePort integration, or other similar
+  // embedders.
+  mojo::ScopedMessagePipeHandle TakeHandleToEntangleWithEmbedder();
   void GiveDisentangledHandle(mojo::ScopedMessagePipeHandle handle);
 
+  // Exposed for access by the Java MessagePortDescriptor counterpart.
+  static InstrumentationDelegate* GetInstrumentationDelegate();
+
  private:
   // For access to NotifyPeer and the following constructor.
   friend class MessagePortDescriptorPair;
@@ -121,6 +137,7 @@
   // Helper functions for forwarding notifications to the
   // InstrumentationDelegate if it exists.
   void NotifyAttached(const base::UnguessableToken& execution_context_id);
+  void NotifyAttachedToEmbedder();
   void NotifyDetached();
   void NotifyDestroyed();
 
@@ -194,7 +211,8 @@
 
   // Notifies the instrumentation that a pair of matching ports was created.
   virtual void NotifyMessagePortPairCreated(
-      const MessagePortDescriptorPair& pair) = 0;
+      const base::UnguessableToken& port0_id,
+      const base::UnguessableToken& port1_id) = 0;
 
   // Notifies the instrumentation that a handle has been attached to an
   // execution context.
@@ -203,6 +221,12 @@
       uint64_t sequence_number,
       const base::UnguessableToken& execution_context_id) = 0;
 
+  // Notifies the instrumentation that a handle has been attached to an
+  // embedder.
+  virtual void NotifyMessagePortAttachedToEmbedder(
+      const base::UnguessableToken& port_id,
+      uint64_t sequence_number) = 0;
+
   // Notifies the instrumentation that a handle has been detached from an
   // execution context.
   virtual void NotifyMessagePortDetached(const base::UnguessableToken& port_id,
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom
index 07a928e..a9bbe7b 100644
--- a/third_party/blink/public/mojom/frame/frame.mojom
+++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -121,6 +121,11 @@
   // process.
   BubbleLogicalScrollInParentFrame(ScrollDirection direction,
                                    ui.mojom.ScrollGranularity granularity);
+
+  // Indicates that another page has accessed the DOM of the initial empty
+  // document of a main frame. After this, it is no longer safe to show a
+  // pending navigation's URL, because a URL spoof is possible.
+  DidAccessInitialDocument();
 };
 
 // Implemented in Blink, this interface defines frame-specific methods that will
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
index 15217b2..461e157 100644
--- a/third_party/blink/public/web/web_local_frame.h
+++ b/third_party/blink/public/web/web_local_frame.h
@@ -151,6 +151,11 @@
   // Runs unload handlers for this frame.
   virtual void DispatchUnloadEvent() = 0;
 
+  // Indicates that the DOM of the initial empty document has been
+  // accessed via javascript. The BeforeUnload event will not be dispatched
+  // if the initial document has not been accessed.
+  virtual bool HasAccessedInitialDocument() = 0;
+
   // Basic properties ---------------------------------------------------
 
   // The urls of the given combination types of favicon (if any) specified by
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h
index 6da1ddc6..d055ae43 100644
--- a/third_party/blink/public/web/web_local_frame_client.h
+++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -216,11 +216,6 @@
 
   // General notifications -----------------------------------------------
 
-  // Indicates that another page has accessed the DOM of the initial empty
-  // document of a main frame. After this, it is no longer safe to show a
-  // pending navigation's URL, because a URL spoof is possible.
-  virtual void DidAccessInitialDocument() {}
-
   // Request the creation of a new child frame. Embedders may return nullptr
   // to prevent the new child frame from being attached. Otherwise, embedders
   // should create a new WebLocalFrame, insert it into the frame tree, and
diff --git a/third_party/blink/renderer/core/css/parser/css.proto b/third_party/blink/renderer/core/css/parser/css.proto
index 8f3dcbf..49a8a7b 100644
--- a/third_party/blink/renderer/core/css/parser/css.proto
+++ b/third_party/blink/renderer/core/css/parser/css.proto
@@ -952,501 +952,496 @@
     _WEBKIT_MASK_POSITION_X = 65;
     _WEBKIT_MASK_POSITION_Y = 66;
     OUTLINE_STYLE = 67;
-    _WEBKIT_MARGIN_BOTTOM_COLLAPSE = 68;
-    COLOR_INTERPOLATION_FILTERS = 69;
-    FONT_VARIANT = 70;
-    _WEBKIT_ANIMATION_FILL_MODE = 71;
-    BORDER_RIGHT = 72;
-    VISIBILITY = 73;
-    TRANSFORM_BOX = 74;
-    FONT_VARIANT_CAPS = 75;
-    _EPUB_TEXT_EMPHASIS_COLOR = 76;
-    _WEBKIT_BORDER_BEFORE_STYLE = 77;
-    RESIZE = 78;
-    _WEBKIT_RTL_ORDERING = 79;
-    _WEBKIT_BOX_ORDINAL_GROUP = 80;
-    PAINT_ORDER = 81;
-    STROKE_LINECAP = 82;
-    ANIMATION_DIRECTION = 83;
-    _WEBKIT_FONT_FEATURE_SETTINGS = 84;
-    BORDER_TOP_LEFT_RADIUS = 85;
-    _WEBKIT_COLUMN_WIDTH = 86;
-    _WEBKIT_BOX_ALIGN = 87;
-    _WEBKIT_PADDING_AFTER = 88;
-    COLUMN_WIDTH = 89;
-    LIST_STYLE = 90;
-    _WEBKIT_MASK_REPEAT_Y = 91;
-    _WEBKIT_MARGIN_BEFORE_COLLAPSE = 92;
-    STROKE = 93;
-    TEXT_DECORATION_LINE = 94;
-    _WEBKIT_BACKGROUND_SIZE = 95;
-    _WEBKIT_MASK_REPEAT_X = 96;
-    PADDING_BOTTOM = 97;
-    FONT_STYLE = 98;
-    _WEBKIT_TRANSITION_DELAY = 99;
-    BACKGROUND_REPEAT = 100;
-    FLEX_BASIS = 101;
-    BORDER_IMAGE_SLICE = 102;
-    _WEBKIT_TRANSFORM_ORIGIN = 103;
-    SCROLL_BOUNDARY_BEHAVIOR_X = 104;
-    SCROLL_BOUNDARY_BEHAVIOR_Y = 105;
-    VECTOR_EFFECT = 106;
-    _WEBKIT_ANIMATION_TIMING_FUNCTION = 107;
-    _WEBKIT_BORDER_AFTER_STYLE = 108;
-    _WEBKIT_PERSPECTIVE_ORIGIN_X = 109;
-    _WEBKIT_PERSPECTIVE_ORIGIN_Y = 110;
-    INLINE_SIZE = 111;
-    OUTLINE = 112;
-    FONT_DISPLAY = 113;
-    _WEBKIT_BORDER_BEFORE = 114;
-    BORDER_IMAGE_SOURCE = 115;
-    TRANSITION_DURATION = 116;
-    SCROLL_PADDING_TOP = 117;
-    ORDER = 118;
-    _WEBKIT_BOX_ORIENT = 119;
-    COUNTER_RESET = 120;
-    COLOR_RENDERING = 121;
-    FLEX_DIRECTION = 122;
-    _WEBKIT_TEXT_STROKE_WIDTH = 123;
-    FONT_VARIANT_NUMERIC = 124;
-    SCROLL_MARGIN_BLOCK_END = 125;
-    MIN_HEIGHT = 126;
-    SCROLL_PADDING_INLINE_START = 127;
-    _WEBKIT_MASK_BOX_IMAGE = 128;
-    LEFT = 129;
-    _WEBKIT_MASK = 130;
-    _WEBKIT_BORDER_AFTER_WIDTH = 131;
-    STROKE_WIDTH = 132;
-    _WEBKIT_BOX_DECORATION_BREAK = 133;
-    _WEBKIT_MASK_POSITION = 134;
-    BACKGROUND_ORIGIN = 135;
-    _WEBKIT_BORDER_START_COLOR = 136;
-    FONT_STRETCH = 137;
-    _WEBKIT_BACKGROUND_CLIP = 138;
-    SCROLL_MARGIN_TOP = 139;
-    _WEBKIT_BORDER_HORIZONTAL_SPACING = 140;
-    BORDER_RADIUS = 141;
-    FLEX = 142;
-    TEXT_INDENT = 143;
-    HYPHENS = 144;
-    COLUMN_RULE_WIDTH = 145;
-    _WEBKIT_MARGIN_AFTER = 146;
-    _EPUB_CAPTION_SIDE = 147;
-    BREAK_AFTER = 148;
-    TEXT_TRANSFORM = 149;
-    TOUCH_ACTION = 150;
-    FONT_SIZE = 151;
-    _WEBKIT_ANIMATION_NAME = 152;
-    SCROLL_PADDING_INLINE = 153;
-    OFFSET_PATH = 154;
-    SCROLL_MARGIN = 155;
-    PADDING_TOP = 156;
-    SCROLL_SNAP_ALIGN = 157;
-    _WEBKIT_TEXT_COMBINE = 158;
-    _WEBKIT_FLEX_SHRINK = 159;
-    RX = 160;
-    RY = 161;
-    CONTENT = 162;
-    PADDING_RIGHT = 163;
-    _WEBKIT_TRANSFORM = 164;
-    MARKER_MID = 165;
-    _WEBKIT_MIN_LOGICAL_WIDTH = 166;
-    CLIP_RULE = 167;
-    FONT_FAMILY = 168;
-    SCROLL_SNAP_TYPE = 169;
-    TEXT_DECORATION_SKIP_INK = 170;
-    TRANSITION = 171;
-    FILTER = 172;
-    BORDER_RIGHT_WIDTH = 173;
-    _WEBKIT_FLEX_DIRECTION = 174;
-    _WEBKIT_MASK_COMPOSITE = 175;
-    MIX_BLEND_MODE = 176;
-    COLOR_INTERPOLATION = 177;
-    BORDER_TOP_STYLE = 178;
-    FILL_OPACITY = 179;
-    MARKER_START = 180;
-    BORDER_BOTTOM_WIDTH = 181;
-    _WEBKIT_TEXT_EMPHASIS = 182;
-    GRID_AREA = 183;
-    SIZE = 184;
-    BACKGROUND_CLIP = 185;
-    _WEBKIT_TEXT_FILL_COLOR = 186;
-    TOP = 187;
-    _WEBKIT_BOX_REFLECT = 188;
-    BORDER_WIDTH = 189;
-    OFFSET_ANCHOR = 190;
-    MAX_INLINE_SIZE = 191;
-    _WEBKIT_COLUMN_RULE_STYLE = 192;
-    _WEBKIT_COLUMN_COUNT = 193;
-    ANIMATION_PLAY_STATE = 194;
-    PADDING = 195;
-    DOMINANT_BASELINE = 196;
-    BACKGROUND_ATTACHMENT = 197;
-    _WEBKIT_BOX_SIZING = 198;
-    _WEBKIT_BOX_FLEX = 199;
-    TEXT_ORIENTATION = 200;
-    BACKGROUND_POSITION = 201;
-    _WEBKIT_BORDER_START_WIDTH = 202;
-    _EPUB_TEXT_EMPHASIS_STYLE = 203;
-    ISOLATION = 204;
-    _EPUB_TEXT_ORIENTATION = 205;
-    _WEBKIT_BORDER_BOTTOM_RIGHT_RADIUS = 206;
-    R = 207;
-    BORDER_LEFT_WIDTH = 208;
-    GRID_COLUMN_END = 209;
-    BACKGROUND_BLEND_MODE = 210;
-    VERTICAL_ALIGN = 211;
-    CLIP = 212;
-    GRID_AUTO_ROWS = 213;
-    OFFSET_ROTATE = 214;
-    MARGIN_LEFT = 215;
-    ANIMATION_NAME = 216;
-    TEXT_DECORATION = 217;
-    BORDER = 218;
-    _WEBKIT_TRANSITION_TIMING_FUNCTION = 219;
-    MARGIN_BOTTOM = 220;
-    UNICODE_RANGE = 221;
-    ANIMATION = 222;
-    _WEBKIT_SHAPE_MARGIN = 223;
-    FONT_WEIGHT = 224;
-    SHAPE_MARGIN = 225;
-    MASK_TYPE = 226;
-    SCROLL_PADDING = 227;
-    MIN_INLINE_SIZE = 228;
-    OBJECT_POSITION = 229;
-    PAGE_BREAK_AFTER = 230;
-    _WEBKIT_MASK_CLIP = 231;
-    WHITE_SPACE = 232;
-    _WEBKIT_BORDER_AFTER_COLOR = 233;
-    _WEBKIT_MAX_LOGICAL_WIDTH = 234;
-    _WEBKIT_BORDER_BEFORE_COLOR = 235;
-    FONT_KERNING = 236;
-    _EPUB_WORD_BREAK = 237;
-    CLEAR = 238;
-    ANIMATION_TIMING_FUNCTION = 239;
-    _WEBKIT_BORDER_RADIUS = 240;
-    SCROLL_PADDING_RIGHT = 241;
-    _WEBKIT_TEXT_DECORATIONS_IN_EFFECT = 242;
-    _WEBKIT_ANIMATION_DIRECTION = 243;
-    JUSTIFY_SELF = 244;
-    TRANSITION_TIMING_FUNCTION = 245;
-    SCROLL_SNAP_STOP = 246;
-    COUNTER_INCREMENT = 247;
-    _WEBKIT_TRANSFORM_STYLE = 248;
-    GRID_AUTO_COLUMNS = 249;
-    _WEBKIT_ALIGN_CONTENT = 250;
-    FONT = 251;
-    FLEX_WRAP = 252;
-    GRID_ROW_START = 253;
-    LIST_STYLE_IMAGE = 254;
-    _WEBKIT_TAP_HIGHLIGHT_COLOR = 255;
-    _WEBKIT_TEXT_EMPHASIS_COLOR = 256;
-    BORDER_LEFT = 257;
-    _WEBKIT_BORDER_END_COLOR = 258;
-    COLUMNS = 259;
-    BOX_SHADOW = 260;
-    _WEBKIT_FLEX_WRAP = 261;
-    ALIGN_SELF = 262;
-    BORDER_BOTTOM = 263;
-    BORDER_SPACING = 264;
-    _WEBKIT_COLUMN_SPAN = 265;
-    GRID_ROW_END = 266;
-    _WEBKIT_BORDER_END = 267;
-    PERSPECTIVE_ORIGIN = 268;
-    PAGE_BREAK_INSIDE = 269;
-    ORPHANS = 270;
-    _WEBKIT_BORDER_START_STYLE = 271;
-    SCROLL_BEHAVIOR = 272;
-    COLUMN_SPAN = 273;
-    _WEBKIT_HYPHENATE_CHARACTER = 274;
-    COLUMN_FILL = 275;
-    TAB_SIZE = 276;
-    CONTAIN = 277;
-    X = 278;
-    GRID_ROW = 279;
-    BORDER_BOTTOM_RIGHT_RADIUS = 280;
-    LINE_HEIGHT = 281;
-    STROKE_LINEJOIN = 282;
-    TEXT_ALIGN_LAST = 283;
-    OFFSET_POSITION = 284;
-    WORD_SPACING = 285;
-    TRANSFORM_STYLE = 286;
-    _WEBKIT_APP_REGION = 287;
-    _WEBKIT_BORDER_END_STYLE = 288;
-    _WEBKIT_TRANSFORM_ORIGIN_Z = 289;
-    _WEBKIT_TRANSFORM_ORIGIN_X = 290;
-    _WEBKIT_TRANSFORM_ORIGIN_Y = 291;
-    BACKGROUND_REPEAT_X = 292;
-    BACKGROUND_REPEAT_Y = 293;
-    BORDER_BOTTOM_COLOR = 294;
-    _WEBKIT_RUBY_POSITION = 295;
-    _WEBKIT_LOGICAL_WIDTH = 296;
-    TEXT_JUSTIFY = 297;
-    SCROLL_MARGIN_INLINE_START = 298;
-    CAPTION_SIDE = 299;
-    MASK_SOURCE_TYPE = 300;
-    _WEBKIT_MASK_BOX_IMAGE_SLICE = 301;
-    _WEBKIT_BORDER_IMAGE = 302;
-    TEXT_SIZE_ADJUST = 303;
-    _WEBKIT_TEXT_SECURITY = 304;
-    _EPUB_WRITING_MODE = 305;
-    GRID_TEMPLATE = 306;
-    _WEBKIT_MASK_BOX_IMAGE_REPEAT = 307;
-    _WEBKIT_MASK_REPEAT = 308;
-    _WEBKIT_JUSTIFY_CONTENT = 309;
-    BASELINE_SHIFT = 310;
-    BORDER_IMAGE = 311;
-    TEXT_DECORATION_COLOR = 312;
-    COLOR = 313;
-    SHAPE_IMAGE_THRESHOLD = 314;
-    SHAPE_RENDERING = 315;
-    CY = 316;
-    CX = 317;
-    _WEBKIT_USER_MODIFY = 318;
-    OFFSET_DISTANCE = 319;
-    _WEBKIT_BORDER_BOTTOM_LEFT_RADIUS = 320;
-    SPEAK = 321;
-    BORDER_BOTTOM_LEFT_RADIUS = 322;
-    _WEBKIT_COLUMN_BREAK_AFTER = 323;
-    _WEBKIT_FONT_SMOOTHING = 324;
-    _WEBKIT_MAX_LOGICAL_HEIGHT = 325;
-    _WEBKIT_LINE_BREAK = 326;
-    FILL_RULE = 327;
-    _WEBKIT_MARGIN_START = 328;
-    MIN_WIDTH = 329;
-    _EPUB_TEXT_COMBINE = 330;
-    BREAK_BEFORE = 331;
-    CARET_COLOR = 332;
-    EMPTY_CELLS = 333;
-    DIRECTION = 334;
-    CLIP_PATH = 335;
-    JUSTIFY_CONTENT = 336;
-    SCROLL_PADDING_BLOCK_END = 337;
-    Z_INDEX = 338;
-    BACKGROUND_POSITION_Y = 339;
-    TEXT_DECORATION_STYLE = 340;
-    GRID_TEMPLATE_AREAS = 341;
-    _WEBKIT_MIN_LOGICAL_HEIGHT = 342;
-    FONT_SIZE_ADJUST = 343;
-    SCROLL_PADDING_BLOCK = 344;
-    OVERFLOW_ANCHOR = 345;
-    CURSOR = 346;
-    SCROLL_MARGIN_BLOCK_START = 347;
-    _WEBKIT_MASK_BOX_IMAGE_SOURCE = 348;
-    MARGIN = 349;
-    _WEBKIT_ANIMATION = 350;
-    LETTER_SPACING = 351;
-    ORIENTATION = 352;
-    WILL_CHANGE = 353;
-    _WEBKIT_HIGHLIGHT = 354;
-    TRANSFORM_ORIGIN = 355;
-    FONT_VARIANT_LIGATURES = 356;
-    _WEBKIT_ANIMATION_DURATION = 357;
-    _WEBKIT_MASK_ORIGIN = 358;
-    _WEBKIT_CLIP_PATH = 359;
-    WORD_BREAK = 360;
-    TABLE_LAYOUT = 361;
-    TEXT_OVERFLOW = 362;
-    _WEBKIT_LOCALE = 363;
-    _WEBKIT_FLEX = 364;
-    GRID_AUTO_FLOW = 365;
-    BORDER_TOP_RIGHT_RADIUS = 366;
-    BORDER_IMAGE_OUTSET = 367;
-    PLACE_ITEMS = 368;
-    BORDER_LEFT_COLOR = 369;
-    FONT_VARIATION_SETTINGS = 370;
-    BORDER_RIGHT_COLOR = 371;
-    MIN_ZOOM = 372;
-    SCROLL_MARGIN_INLINE = 373;
-    _WEBKIT_BORDER_BEFORE_WIDTH = 374;
-    BACKFACE_VISIBILITY = 375;
-    BACKGROUND_IMAGE = 376;
-    _WEBKIT_TRANSITION_PROPERTY = 377;
-    WRITING_MODE = 378;
-    STROKE_OPACITY = 379;
-    _WEBKIT_MARGIN_COLLAPSE = 380;
-    BOX_SIZING = 381;
-    MARGIN_TOP = 382;
-    COLUMN_RULE_COLOR = 383;
-    Y = 384;
-    POSITION = 385;
-    SCROLL_MARGIN_BOTTOM = 386;
-    LIST_STYLE_POSITION = 387;
-    _WEBKIT_BOX_PACK = 388;
-    SCROLL_PADDING_INLINE_END = 389;
-    QUOTES = 390;
-    BORDER_TOP = 391;
-    SCROLL_PADDING_LEFT = 392;
-    _WEBKIT_TRANSITION = 393;
-    _WEBKIT_COLUMN_BREAK_BEFORE = 394;
-    LIGHTING_COLOR = 395;
-    BACKGROUND_SIZE = 396;
-    _WEBKIT_PADDING_BEFORE = 397;
-    _WEBKIT_BORDER_TOP_LEFT_RADIUS = 398;
-    FLOOD_OPACITY = 399;
-    LINE_HEIGHT_STEP = 400;
-    _WEBKIT_MASK_SIZE = 401;
-    TEXT_ALIGN = 402;
-    _WEBKIT_FILTER = 403;
-    WORD_WRAP = 404;
-    MAX_ZOOM = 405;
-    GRID = 406;
-    BACKGROUND = 407;
-    HEIGHT = 408;
-    GRID_COLUMN_START = 409;
-    ANIMATION_FILL_MODE = 410;
-    ROTATE = 411;
-    MARKER_END = 412;
-    D = 413;
-    JUSTIFY_ITEMS = 414;
-    ZOOM = 415;
-    SCROLL_PADDING_BLOCK_START = 416;
-    _WEBKIT_MARGIN_TOP_COLLAPSE = 417;
-    PAGE = 418;
-    RIGHT = 419;
-    USER_SELECT = 420;
-    MARGIN_RIGHT = 421;
-    MARKER = 422;
-    LINE_BREAK = 423;
-    _WEBKIT_MARGIN_END = 424;
-    _WEBKIT_TRANSITION_DURATION = 425;
-    _WEBKIT_WRITING_MODE = 426;
-    BORDER_TOP_WIDTH = 427;
-    BOTTOM = 428;
-    PLACE_CONTENT = 429;
-    _WEBKIT_SHAPE_IMAGE_THRESHOLD = 430;
-    _WEBKIT_USER_DRAG = 431;
-    _WEBKIT_BORDER_VERTICAL_SPACING = 432;
-    _WEBKIT_COLUMN_GAP = 433;
-    _WEBKIT_OPACITY = 434;
-    BACKGROUND_COLOR = 435;
-    COLUMN_GAP = 436;
-    SHAPE_OUTSIDE = 437;
-    _WEBKIT_PADDING_END = 438;
-    _WEBKIT_BORDER_START = 439;
-    ANIMATION_DELAY = 440;
-    UNICODE_BIDI = 441;
-    TEXT_SHADOW = 442;
-    _WEBKIT_BOX_DIRECTION = 443;
-    IMAGE_RENDERING = 444;
-    SRC = 445;
-    GAP = 446;
-    GRID_GAP = 447;
-    POINTER_EVENTS = 448;
-    BORDER_IMAGE_WIDTH = 449;
-    MIN_BLOCK_SIZE = 450;
-    TRANSITION_PROPERTY = 451;
-    _WEBKIT_MASK_IMAGE = 452;
-    FLOAT = 453;
-    MAX_HEIGHT = 454;
-    OUTLINE_OFFSET = 455;
-    _WEBKIT_BOX_SHADOW = 456;
-    OVERFLOW_WRAP = 457;
-    BLOCK_SIZE = 458;
-    TRANSFORM = 459;
-    PLACE_SELF = 460;
-    WIDTH = 461;
-    STROKE_MITERLIMIT = 462;
-    STOP_OPACITY = 463;
-    BORDER_TOP_COLOR = 464;
-    TRANSLATE = 465;
-    OBJECT_FIT = 466;
-    _WEBKIT_MASK_BOX_IMAGE_WIDTH = 467;
-    _WEBKIT_BACKGROUND_ORIGIN = 468;
-    _WEBKIT_ALIGN_ITEMS = 469;
-    TRANSITION_DELAY = 470;
-    SCROLL_MARGIN_LEFT = 471;
-    BORDER_STYLE = 472;
-    ANIMATION_ITERATION_COUNT = 473;
-    _WEBKIT_MARGIN_AFTER_COLLAPSE = 474;
+    COLOR_INTERPOLATION_FILTERS = 68;
+    FONT_VARIANT = 69;
+    _WEBKIT_ANIMATION_FILL_MODE = 70;
+    BORDER_RIGHT = 71;
+    VISIBILITY = 72;
+    TRANSFORM_BOX = 73;
+    FONT_VARIANT_CAPS = 74;
+    _EPUB_TEXT_EMPHASIS_COLOR = 75;
+    _WEBKIT_BORDER_BEFORE_STYLE = 76;
+    RESIZE = 77;
+    _WEBKIT_RTL_ORDERING = 78;
+    _WEBKIT_BOX_ORDINAL_GROUP = 79;
+    PAINT_ORDER = 80;
+    STROKE_LINECAP = 81;
+    ANIMATION_DIRECTION = 82;
+    _WEBKIT_FONT_FEATURE_SETTINGS = 83;
+    BORDER_TOP_LEFT_RADIUS = 84;
+    _WEBKIT_COLUMN_WIDTH = 85;
+    _WEBKIT_BOX_ALIGN = 86;
+    _WEBKIT_PADDING_AFTER = 87;
+    COLUMN_WIDTH = 88;
+    LIST_STYLE = 89;
+    _WEBKIT_MASK_REPEAT_Y = 90;
+    STROKE = 91;
+    TEXT_DECORATION_LINE = 92;
+    _WEBKIT_BACKGROUND_SIZE = 93;
+    _WEBKIT_MASK_REPEAT_X = 94;
+    PADDING_BOTTOM = 95;
+    FONT_STYLE = 96;
+    _WEBKIT_TRANSITION_DELAY = 97;
+    BACKGROUND_REPEAT = 98;
+    FLEX_BASIS = 99;
+    BORDER_IMAGE_SLICE = 100;
+    _WEBKIT_TRANSFORM_ORIGIN = 101;
+    SCROLL_BOUNDARY_BEHAVIOR_X = 102;
+    SCROLL_BOUNDARY_BEHAVIOR_Y = 103;
+    VECTOR_EFFECT = 104;
+    _WEBKIT_ANIMATION_TIMING_FUNCTION = 105;
+    _WEBKIT_BORDER_AFTER_STYLE = 106;
+    _WEBKIT_PERSPECTIVE_ORIGIN_X = 107;
+    _WEBKIT_PERSPECTIVE_ORIGIN_Y = 108;
+    INLINE_SIZE = 109;
+    OUTLINE = 110;
+    FONT_DISPLAY = 111;
+    _WEBKIT_BORDER_BEFORE = 112;
+    BORDER_IMAGE_SOURCE = 113;
+    TRANSITION_DURATION = 114;
+    SCROLL_PADDING_TOP = 115;
+    ORDER = 116;
+    _WEBKIT_BOX_ORIENT = 117;
+    COUNTER_RESET = 118;
+    COLOR_RENDERING = 119;
+    FLEX_DIRECTION = 120;
+    _WEBKIT_TEXT_STROKE_WIDTH = 121;
+    FONT_VARIANT_NUMERIC = 122;
+    SCROLL_MARGIN_BLOCK_END = 123;
+    MIN_HEIGHT = 124;
+    SCROLL_PADDING_INLINE_START = 125;
+    _WEBKIT_MASK_BOX_IMAGE = 126;
+    LEFT = 127;
+    _WEBKIT_MASK = 128;
+    _WEBKIT_BORDER_AFTER_WIDTH = 129;
+    STROKE_WIDTH = 130;
+    _WEBKIT_BOX_DECORATION_BREAK = 131;
+    _WEBKIT_MASK_POSITION = 132;
+    BACKGROUND_ORIGIN = 133;
+    _WEBKIT_BORDER_START_COLOR = 134;
+    FONT_STRETCH = 135;
+    _WEBKIT_BACKGROUND_CLIP = 136;
+    SCROLL_MARGIN_TOP = 137;
+    _WEBKIT_BORDER_HORIZONTAL_SPACING = 138;
+    BORDER_RADIUS = 139;
+    FLEX = 140;
+    TEXT_INDENT = 141;
+    HYPHENS = 142;
+    COLUMN_RULE_WIDTH = 143;
+    _WEBKIT_MARGIN_AFTER = 144;
+    _EPUB_CAPTION_SIDE = 145;
+    BREAK_AFTER = 146;
+    TEXT_TRANSFORM = 147;
+    TOUCH_ACTION = 148;
+    FONT_SIZE = 149;
+    _WEBKIT_ANIMATION_NAME = 150;
+    SCROLL_PADDING_INLINE = 151;
+    OFFSET_PATH = 152;
+    SCROLL_MARGIN = 153;
+    PADDING_TOP = 154;
+    SCROLL_SNAP_ALIGN = 155;
+    _WEBKIT_TEXT_COMBINE = 156;
+    _WEBKIT_FLEX_SHRINK = 157;
+    RX = 158;
+    RY = 159;
+    CONTENT = 160;
+    PADDING_RIGHT = 161;
+    _WEBKIT_TRANSFORM = 162;
+    MARKER_MID = 163;
+    _WEBKIT_MIN_LOGICAL_WIDTH = 164;
+    CLIP_RULE = 165;
+    FONT_FAMILY = 166;
+    SCROLL_SNAP_TYPE = 167;
+    TEXT_DECORATION_SKIP_INK = 168;
+    TRANSITION = 169;
+    FILTER = 170;
+    BORDER_RIGHT_WIDTH = 171;
+    _WEBKIT_FLEX_DIRECTION = 172;
+    _WEBKIT_MASK_COMPOSITE = 173;
+    MIX_BLEND_MODE = 174;
+    COLOR_INTERPOLATION = 175;
+    BORDER_TOP_STYLE = 176;
+    FILL_OPACITY = 177;
+    MARKER_START = 178;
+    BORDER_BOTTOM_WIDTH = 179;
+    _WEBKIT_TEXT_EMPHASIS = 180;
+    GRID_AREA = 181;
+    SIZE = 182;
+    BACKGROUND_CLIP = 183;
+    _WEBKIT_TEXT_FILL_COLOR = 184;
+    TOP = 185;
+    _WEBKIT_BOX_REFLECT = 186;
+    BORDER_WIDTH = 187;
+    OFFSET_ANCHOR = 188;
+    MAX_INLINE_SIZE = 189;
+    _WEBKIT_COLUMN_RULE_STYLE = 190;
+    _WEBKIT_COLUMN_COUNT = 191;
+    ANIMATION_PLAY_STATE = 192;
+    PADDING = 193;
+    DOMINANT_BASELINE = 194;
+    BACKGROUND_ATTACHMENT = 195;
+    _WEBKIT_BOX_SIZING = 196;
+    _WEBKIT_BOX_FLEX = 197;
+    TEXT_ORIENTATION = 198;
+    BACKGROUND_POSITION = 199;
+    _WEBKIT_BORDER_START_WIDTH = 200;
+    _EPUB_TEXT_EMPHASIS_STYLE = 201;
+    ISOLATION = 202;
+    _EPUB_TEXT_ORIENTATION = 203;
+    _WEBKIT_BORDER_BOTTOM_RIGHT_RADIUS = 204;
+    R = 205;
+    BORDER_LEFT_WIDTH = 206;
+    GRID_COLUMN_END = 207;
+    BACKGROUND_BLEND_MODE = 208;
+    VERTICAL_ALIGN = 209;
+    CLIP = 210;
+    GRID_AUTO_ROWS = 211;
+    OFFSET_ROTATE = 212;
+    MARGIN_LEFT = 213;
+    ANIMATION_NAME = 214;
+    TEXT_DECORATION = 215;
+    BORDER = 216;
+    _WEBKIT_TRANSITION_TIMING_FUNCTION = 217;
+    MARGIN_BOTTOM = 218;
+    UNICODE_RANGE = 219;
+    ANIMATION = 220;
+    _WEBKIT_SHAPE_MARGIN = 221;
+    FONT_WEIGHT = 222;
+    SHAPE_MARGIN = 223;
+    MASK_TYPE = 224;
+    SCROLL_PADDING = 225;
+    MIN_INLINE_SIZE = 226;
+    OBJECT_POSITION = 227;
+    PAGE_BREAK_AFTER = 228;
+    _WEBKIT_MASK_CLIP = 229;
+    WHITE_SPACE = 230;
+    _WEBKIT_BORDER_AFTER_COLOR = 231;
+    _WEBKIT_MAX_LOGICAL_WIDTH = 232;
+    _WEBKIT_BORDER_BEFORE_COLOR = 233;
+    FONT_KERNING = 234;
+    _EPUB_WORD_BREAK = 235;
+    CLEAR = 236;
+    ANIMATION_TIMING_FUNCTION = 237;
+    _WEBKIT_BORDER_RADIUS = 238;
+    SCROLL_PADDING_RIGHT = 239;
+    _WEBKIT_TEXT_DECORATIONS_IN_EFFECT = 240;
+    _WEBKIT_ANIMATION_DIRECTION = 241;
+    JUSTIFY_SELF = 242;
+    TRANSITION_TIMING_FUNCTION = 243;
+    SCROLL_SNAP_STOP = 244;
+    COUNTER_INCREMENT = 245;
+    _WEBKIT_TRANSFORM_STYLE = 246;
+    GRID_AUTO_COLUMNS = 247;
+    _WEBKIT_ALIGN_CONTENT = 248;
+    FONT = 249;
+    FLEX_WRAP = 250;
+    GRID_ROW_START = 251;
+    LIST_STYLE_IMAGE = 252;
+    _WEBKIT_TAP_HIGHLIGHT_COLOR = 253;
+    _WEBKIT_TEXT_EMPHASIS_COLOR = 254;
+    BORDER_LEFT = 255;
+    _WEBKIT_BORDER_END_COLOR = 256;
+    COLUMNS = 257;
+    BOX_SHADOW = 258;
+    _WEBKIT_FLEX_WRAP = 259;
+    ALIGN_SELF = 260;
+    BORDER_BOTTOM = 261;
+    BORDER_SPACING = 262;
+    _WEBKIT_COLUMN_SPAN = 263;
+    GRID_ROW_END = 264;
+    _WEBKIT_BORDER_END = 265;
+    PERSPECTIVE_ORIGIN = 266;
+    PAGE_BREAK_INSIDE = 267;
+    ORPHANS = 268;
+    _WEBKIT_BORDER_START_STYLE = 269;
+    SCROLL_BEHAVIOR = 270;
+    COLUMN_SPAN = 271;
+    _WEBKIT_HYPHENATE_CHARACTER = 272;
+    COLUMN_FILL = 273;
+    TAB_SIZE = 274;
+    CONTAIN = 275;
+    X = 276;
+    GRID_ROW = 277;
+    BORDER_BOTTOM_RIGHT_RADIUS = 278;
+    LINE_HEIGHT = 279;
+    STROKE_LINEJOIN = 280;
+    TEXT_ALIGN_LAST = 281;
+    OFFSET_POSITION = 282;
+    WORD_SPACING = 283;
+    TRANSFORM_STYLE = 284;
+    _WEBKIT_APP_REGION = 285;
+    _WEBKIT_BORDER_END_STYLE = 286;
+    _WEBKIT_TRANSFORM_ORIGIN_Z = 287;
+    _WEBKIT_TRANSFORM_ORIGIN_X = 288;
+    _WEBKIT_TRANSFORM_ORIGIN_Y = 289;
+    BACKGROUND_REPEAT_X = 290;
+    BACKGROUND_REPEAT_Y = 291;
+    BORDER_BOTTOM_COLOR = 292;
+    _WEBKIT_RUBY_POSITION = 293;
+    _WEBKIT_LOGICAL_WIDTH = 294;
+    TEXT_JUSTIFY = 295;
+    SCROLL_MARGIN_INLINE_START = 296;
+    CAPTION_SIDE = 297;
+    MASK_SOURCE_TYPE = 298;
+    _WEBKIT_MASK_BOX_IMAGE_SLICE = 299;
+    _WEBKIT_BORDER_IMAGE = 300;
+    TEXT_SIZE_ADJUST = 301;
+    _WEBKIT_TEXT_SECURITY = 302;
+    _EPUB_WRITING_MODE = 303;
+    GRID_TEMPLATE = 304;
+    _WEBKIT_MASK_BOX_IMAGE_REPEAT = 305;
+    _WEBKIT_MASK_REPEAT = 306;
+    _WEBKIT_JUSTIFY_CONTENT = 307;
+    BASELINE_SHIFT = 308;
+    BORDER_IMAGE = 309;
+    TEXT_DECORATION_COLOR = 310;
+    COLOR = 311;
+    SHAPE_IMAGE_THRESHOLD = 312;
+    SHAPE_RENDERING = 313;
+    CY = 314;
+    CX = 315;
+    _WEBKIT_USER_MODIFY = 316;
+    OFFSET_DISTANCE = 317;
+    _WEBKIT_BORDER_BOTTOM_LEFT_RADIUS = 318;
+    SPEAK = 319;
+    BORDER_BOTTOM_LEFT_RADIUS = 320;
+    _WEBKIT_COLUMN_BREAK_AFTER = 321;
+    _WEBKIT_FONT_SMOOTHING = 322;
+    _WEBKIT_MAX_LOGICAL_HEIGHT = 323;
+    _WEBKIT_LINE_BREAK = 324;
+    FILL_RULE = 325;
+    _WEBKIT_MARGIN_START = 326;
+    MIN_WIDTH = 327;
+    _EPUB_TEXT_COMBINE = 328;
+    BREAK_BEFORE = 329;
+    CARET_COLOR = 330;
+    EMPTY_CELLS = 331;
+    DIRECTION = 332;
+    CLIP_PATH = 333;
+    JUSTIFY_CONTENT = 334;
+    SCROLL_PADDING_BLOCK_END = 335;
+    Z_INDEX = 336;
+    BACKGROUND_POSITION_Y = 337;
+    TEXT_DECORATION_STYLE = 338;
+    GRID_TEMPLATE_AREAS = 339;
+    _WEBKIT_MIN_LOGICAL_HEIGHT = 340;
+    FONT_SIZE_ADJUST = 341;
+    SCROLL_PADDING_BLOCK = 342;
+    OVERFLOW_ANCHOR = 343;
+    CURSOR = 344;
+    SCROLL_MARGIN_BLOCK_START = 345;
+    _WEBKIT_MASK_BOX_IMAGE_SOURCE = 346;
+    MARGIN = 347;
+    _WEBKIT_ANIMATION = 348;
+    LETTER_SPACING = 349;
+    ORIENTATION = 350;
+    WILL_CHANGE = 351;
+    _WEBKIT_HIGHLIGHT = 352;
+    TRANSFORM_ORIGIN = 353;
+    FONT_VARIANT_LIGATURES = 354;
+    _WEBKIT_ANIMATION_DURATION = 355;
+    _WEBKIT_MASK_ORIGIN = 356;
+    _WEBKIT_CLIP_PATH = 357;
+    WORD_BREAK = 358;
+    TABLE_LAYOUT = 359;
+    TEXT_OVERFLOW = 360;
+    _WEBKIT_LOCALE = 361;
+    _WEBKIT_FLEX = 362;
+    GRID_AUTO_FLOW = 363;
+    BORDER_TOP_RIGHT_RADIUS = 364;
+    BORDER_IMAGE_OUTSET = 365;
+    PLACE_ITEMS = 366;
+    BORDER_LEFT_COLOR = 367;
+    FONT_VARIATION_SETTINGS = 368;
+    BORDER_RIGHT_COLOR = 369;
+    MIN_ZOOM = 370;
+    SCROLL_MARGIN_INLINE = 371;
+    _WEBKIT_BORDER_BEFORE_WIDTH = 372;
+    BACKFACE_VISIBILITY = 373;
+    BACKGROUND_IMAGE = 374;
+    _WEBKIT_TRANSITION_PROPERTY = 375;
+    WRITING_MODE = 376;
+    STROKE_OPACITY = 377;
+    BOX_SIZING = 378;
+    MARGIN_TOP = 379;
+    COLUMN_RULE_COLOR = 380;
+    Y = 381;
+    POSITION = 382;
+    SCROLL_MARGIN_BOTTOM = 383;
+    LIST_STYLE_POSITION = 384;
+    _WEBKIT_BOX_PACK = 385;
+    SCROLL_PADDING_INLINE_END = 386;
+    QUOTES = 387;
+    BORDER_TOP = 388;
+    SCROLL_PADDING_LEFT = 389;
+    _WEBKIT_TRANSITION = 390;
+    _WEBKIT_COLUMN_BREAK_BEFORE = 391;
+    LIGHTING_COLOR = 392;
+    BACKGROUND_SIZE = 393;
+    _WEBKIT_PADDING_BEFORE = 394;
+    _WEBKIT_BORDER_TOP_LEFT_RADIUS = 395;
+    FLOOD_OPACITY = 396;
+    LINE_HEIGHT_STEP = 397;
+    _WEBKIT_MASK_SIZE = 398;
+    TEXT_ALIGN = 399;
+    _WEBKIT_FILTER = 400;
+    WORD_WRAP = 401;
+    MAX_ZOOM = 402;
+    GRID = 403;
+    BACKGROUND = 404;
+    HEIGHT = 405;
+    GRID_COLUMN_START = 406;
+    ANIMATION_FILL_MODE = 407;
+    ROTATE = 408;
+    MARKER_END = 409;
+    D = 410;
+    JUSTIFY_ITEMS = 411;
+    ZOOM = 412;
+    SCROLL_PADDING_BLOCK_START = 413;
+    PAGE = 414;
+    RIGHT = 415;
+    USER_SELECT = 416;
+    MARGIN_RIGHT = 417;
+    MARKER = 418;
+    LINE_BREAK = 419;
+    _WEBKIT_MARGIN_END = 420;
+    _WEBKIT_TRANSITION_DURATION = 421;
+    _WEBKIT_WRITING_MODE = 422;
+    BORDER_TOP_WIDTH = 423;
+    BOTTOM = 424;
+    PLACE_CONTENT = 425;
+    _WEBKIT_SHAPE_IMAGE_THRESHOLD = 426;
+    _WEBKIT_USER_DRAG = 427;
+    _WEBKIT_BORDER_VERTICAL_SPACING = 428;
+    _WEBKIT_COLUMN_GAP = 429;
+    _WEBKIT_OPACITY = 430;
+    BACKGROUND_COLOR = 431;
+    COLUMN_GAP = 432;
+    SHAPE_OUTSIDE = 433;
+    _WEBKIT_PADDING_END = 434;
+    _WEBKIT_BORDER_START = 435;
+    ANIMATION_DELAY = 436;
+    UNICODE_BIDI = 437;
+    TEXT_SHADOW = 438;
+    _WEBKIT_BOX_DIRECTION = 439;
+    IMAGE_RENDERING = 440;
+    SRC = 441;
+    GAP = 442;
+    GRID_GAP = 443;
+    POINTER_EVENTS = 444;
+    BORDER_IMAGE_WIDTH = 445;
+    MIN_BLOCK_SIZE = 446;
+    TRANSITION_PROPERTY = 447;
+    _WEBKIT_MASK_IMAGE = 448;
+    FLOAT = 449;
+    MAX_HEIGHT = 450;
+    OUTLINE_OFFSET = 451;
+    _WEBKIT_BOX_SHADOW = 452;
+    OVERFLOW_WRAP = 453;
+    BLOCK_SIZE = 454;
+    TRANSFORM = 455;
+    PLACE_SELF = 456;
+    WIDTH = 457;
+    STROKE_MITERLIMIT = 458;
+    STOP_OPACITY = 459;
+    BORDER_TOP_COLOR = 460;
+    TRANSLATE = 461;
+    OBJECT_FIT = 462;
+    _WEBKIT_MASK_BOX_IMAGE_WIDTH = 463;
+    _WEBKIT_BACKGROUND_ORIGIN = 464;
+    _WEBKIT_ALIGN_ITEMS = 465;
+    TRANSITION_DELAY = 466;
+    SCROLL_MARGIN_LEFT = 467;
+    BORDER_STYLE = 468;
+    ANIMATION_ITERATION_COUNT = 469;
     // Should be named OVERFLOW but can't because a macro uses this. Needs two
     // underscores for Windows.
-    __OVERFLOW = 475;
-    USER_ZOOM = 476;
-    _WEBKIT_BORDER_TOP_RIGHT_RADIUS = 477;
-    GRID_TEMPLATE_COLUMNS = 478;
-    _WEBKIT_ALIGN_SELF = 479;
-    _WEBKIT_PERSPECTIVE_ORIGIN = 480;
-    COLUMN_RULE_STYLE = 481;
-    DISPLAY = 482;
-    _WEBKIT_COLUMN_RULE_WIDTH = 483;
-    BORDER_COLOR = 484;
-    _WEBKIT_FLEX_BASIS = 485;
-    STROKE_DASHOFFSET = 486;
-    _WEBKIT_TEXT_SIZE_ADJUST = 487;
-    SCROLL_BOUNDARY_BEHAVIOR = 488;
-    _WEBKIT_TEXT_STROKE = 489;
-    WIDOWS = 490;
-    FILL = 491;
-    OVERFLOW_Y = 492;
-    OVERFLOW_X = 493;
-    OPACITY = 494;
-    _WEBKIT_PERSPECTIVE = 495;
-    _WEBKIT_TEXT_STROKE_COLOR = 496;
-    SCROLL_MARGIN_INLINE_END = 497;
-    SCALE = 498;
-    _WEBKIT_TEXT_ORIENTATION = 499;
-    _WEBKIT_MASK_BOX_IMAGE_OUTSET = 500;
-    ALIGN_CONTENT = 501;
-    _WEBKIT_BORDER_END_WIDTH = 502;
-    BORDER_BOTTOM_STYLE = 503;
-    MASK = 504;
-    BACKGROUND_POSITION_X = 505;
-    _EPUB_TEXT_TRANSFORM = 506;
-    STOP_COLOR = 507;
-    STROKE_DASHARRAY = 508;
-    _WEBKIT_LINE_CLAMP = 509;
-    MARGIN_BLOCK_START = 510;
-    MARGIN_BLOCK_END = 511;
-    MARGIN_INLINE_START = 512;
-    MARGIN_INLINE_END = 513;
-    PADDING_BLOCK_START = 514;
-    PADDING_BLOCK_END = 515;
-    PADDING_INLINE_START = 516;
-    PADDING_INLINE_END = 517;
-    BORDER_BLOCK_START_WIDTH = 518;
-    BORDER_BLOCK_START_STYLE = 519;
-    BORDER_BLOCK_START_COLOR = 520;
-    BORDER_BLOCK_END_WIDTH = 521;
-    BORDER_BLOCK_END_STYLE = 522;
-    BORDER_BLOCK_END_COLOR = 523;
-    BORDER_INLINE_START_WIDTH = 524;
-    BORDER_INLINE_START_STYLE = 525;
-    BORDER_INLINE_START_COLOR = 526;
-    BORDER_INLINE_END_WIDTH = 527;
-    BORDER_INLINE_END_STYLE = 528;
-    BORDER_INLINE_END_COLOR = 529;
-    BORDER_BLOCK_START = 530;
-    BORDER_BLOCK_END = 531;
-    BORDER_INLINE_START = 532;
-    BORDER_INLINE_END = 533;
-    MARGIN_BLOCK = 534;
-    MARGIN_INLINE = 535;
-    PADDING_BLOCK = 536;
-    PADDING_INLINE = 537;
-    BORDER_BLOCK_WIDTH = 538;
-    BORDER_BLOCK_STYLE = 539;
-    BORDER_BLOCK_COLOR = 540;
-    BORDER_INLINE_WIDTH = 541;
-    BORDER_INLINE_STYLE = 542;
-    BORDER_INLINE_COLOR = 543;
-    BORDER_BLOCK = 544;
-    BORDER_INLINE = 545;
-    INSET_BLOCK_START = 546;
-    INSET_BLOCK_END = 547;
-    INSET_BLOCK = 548;
-    INSET_INLINE_START = 549;
-    INSET_INLINE_END = 550;
-    INSET_INLINE = 551;
-    INSET = 552;
-    OVERFLOW_BLOCK = 553;
-    OVERFLOW_INLINE = 554;
-    FORCED_COLOR_ADJUST = 555;
-    OVERSCROLL_BEHAVIOR_INLINE = 556;
-    OVERSCROLL_BEHAVIOR_BLOCK = 557;
-    OVERSCROLL_BEHAVIOR_X = 558;
-    OVERSCROLL_BEHAVIOR_Y = 559;
-    INVALID_PROPERTY = 560;
+    __OVERFLOW = 470;
+    USER_ZOOM = 471;
+    _WEBKIT_BORDER_TOP_RIGHT_RADIUS = 472;
+    GRID_TEMPLATE_COLUMNS = 473;
+    _WEBKIT_ALIGN_SELF = 474;
+    _WEBKIT_PERSPECTIVE_ORIGIN = 475;
+    COLUMN_RULE_STYLE = 476;
+    DISPLAY = 477;
+    _WEBKIT_COLUMN_RULE_WIDTH = 478;
+    BORDER_COLOR = 479;
+    _WEBKIT_FLEX_BASIS = 480;
+    STROKE_DASHOFFSET = 481;
+    _WEBKIT_TEXT_SIZE_ADJUST = 482;
+    SCROLL_BOUNDARY_BEHAVIOR = 483;
+    _WEBKIT_TEXT_STROKE = 484;
+    WIDOWS = 485;
+    FILL = 486;
+    OVERFLOW_Y = 487;
+    OVERFLOW_X = 488;
+    OPACITY = 489;
+    _WEBKIT_PERSPECTIVE = 490;
+    _WEBKIT_TEXT_STROKE_COLOR = 491;
+    SCROLL_MARGIN_INLINE_END = 492;
+    SCALE = 493;
+    _WEBKIT_TEXT_ORIENTATION = 494;
+    _WEBKIT_MASK_BOX_IMAGE_OUTSET = 495;
+    ALIGN_CONTENT = 496;
+    _WEBKIT_BORDER_END_WIDTH = 497;
+    BORDER_BOTTOM_STYLE = 498;
+    MASK = 499;
+    BACKGROUND_POSITION_X = 500;
+    _EPUB_TEXT_TRANSFORM = 501;
+    STOP_COLOR = 502;
+    STROKE_DASHARRAY = 503;
+    _WEBKIT_LINE_CLAMP = 504;
+    MARGIN_BLOCK_START = 505;
+    MARGIN_BLOCK_END = 506;
+    MARGIN_INLINE_START = 507;
+    MARGIN_INLINE_END = 508;
+    PADDING_BLOCK_START = 509;
+    PADDING_BLOCK_END = 510;
+    PADDING_INLINE_START = 511;
+    PADDING_INLINE_END = 512;
+    BORDER_BLOCK_START_WIDTH = 513;
+    BORDER_BLOCK_START_STYLE = 514;
+    BORDER_BLOCK_START_COLOR = 515;
+    BORDER_BLOCK_END_WIDTH = 516;
+    BORDER_BLOCK_END_STYLE = 517;
+    BORDER_BLOCK_END_COLOR = 518;
+    BORDER_INLINE_START_WIDTH = 519;
+    BORDER_INLINE_START_STYLE = 520;
+    BORDER_INLINE_START_COLOR = 521;
+    BORDER_INLINE_END_WIDTH = 522;
+    BORDER_INLINE_END_STYLE = 523;
+    BORDER_INLINE_END_COLOR = 524;
+    BORDER_BLOCK_START = 525;
+    BORDER_BLOCK_END = 526;
+    BORDER_INLINE_START = 527;
+    BORDER_INLINE_END = 528;
+    MARGIN_BLOCK = 529;
+    MARGIN_INLINE = 530;
+    PADDING_BLOCK = 531;
+    PADDING_INLINE = 532;
+    BORDER_BLOCK_WIDTH = 533;
+    BORDER_BLOCK_STYLE = 534;
+    BORDER_BLOCK_COLOR = 535;
+    BORDER_INLINE_WIDTH = 536;
+    BORDER_INLINE_STYLE = 537;
+    BORDER_INLINE_COLOR = 538;
+    BORDER_BLOCK = 539;
+    BORDER_INLINE = 540;
+    INSET_BLOCK_START = 541;
+    INSET_BLOCK_END = 542;
+    INSET_BLOCK = 543;
+    INSET_INLINE_START = 544;
+    INSET_INLINE_END = 545;
+    INSET_INLINE = 546;
+    INSET = 547;
+    OVERFLOW_BLOCK = 548;
+    OVERFLOW_INLINE = 549;
+    FORCED_COLOR_ADJUST = 550;
+    OVERSCROLL_BEHAVIOR_INLINE = 551;
+    OVERSCROLL_BEHAVIOR_BLOCK = 552;
+    OVERSCROLL_BEHAVIOR_X = 553;
+    OVERSCROLL_BEHAVIOR_Y = 554;
+    INVALID_PROPERTY = 555;
   }
   required NameId name_id = 1;
 }
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 7ea8d3e..9cf9b6e 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -639,6 +639,10 @@
     // Initialize feature policy, depends on origin trials.
     InitializeFeaturePolicy(initializer, document_classes);
 
+    // Initialize document policy.
+    document_policy_ =
+        DocumentPolicy::CreateWithHeaderPolicy(initializer.GetDocumentPolicy());
+
     // Initialize the agent. Depends on security origin.
     InitializeAgent(initializer);
   }
@@ -656,6 +660,11 @@
     return std::move(feature_policy_);
   }
 
+  std::unique_ptr<DocumentPolicy> TakeDocumentPolicy() {
+    DCHECK(document_policy_);
+    return std::move(document_policy_);
+  }
+
   const Vector<String>& FeaturePolicyParseMessages() const {
     return feature_policy_parse_messages_;
   }
@@ -1041,6 +1050,7 @@
   scoped_refptr<SecurityOrigin> security_origin_;
   WebSandboxFlags sandbox_flags_ = WebSandboxFlags::kNone;
   std::unique_ptr<FeaturePolicy> feature_policy_;
+  std::unique_ptr<DocumentPolicy> document_policy_;
   Vector<String> feature_policy_parse_messages_;
   ParsedFeaturePolicy parsed_header_;
   Member<ContentSecurityPolicy> csp_;
@@ -1095,6 +1105,7 @@
                        security_initializer.GetSecurityOrigin(),
                        security_initializer.GetSandboxFlags(),
                        security_initializer.TakeFeaturePolicy(),
+                       security_initializer.TakeDocumentPolicy(),
                        security_initializer.GetSecureContextMode()),
       evaluate_media_queries_on_style_recalc_(false),
       pending_sheet_layout_(kNoLayoutWithPendingSheets),
diff --git a/third_party/blink/renderer/core/dom/document_init.cc b/third_party/blink/renderer/core/dom/document_init.cc
index 71bce92..bbc427c 100644
--- a/third_party/blink/renderer/core/dom/document_init.cc
+++ b/third_party/blink/renderer/core/dom/document_init.cc
@@ -310,4 +310,10 @@
   return *this;
 }
 
+DocumentInit& DocumentInit::WithDocumentPolicy(
+    const DocumentPolicy::FeatureState& document_policy) {
+  document_policy_ = document_policy;
+  return *this;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/document_init.h b/third_party/blink/renderer/core/dom/document_init.h
index 2a26b3a..8f9fa791 100644
--- a/third_party/blink/renderer/core/dom/document_init.h
+++ b/third_party/blink/renderer/core/dom/document_init.h
@@ -145,6 +145,12 @@
     return frame_policy_;
   }
 
+  DocumentInit& WithDocumentPolicy(
+      const DocumentPolicy::FeatureState& document_policy);
+  const DocumentPolicy::FeatureState& GetDocumentPolicy() const {
+    return document_policy_;
+  }
+
  private:
   DocumentInit(HTMLImportsController*);
 
@@ -215,6 +221,8 @@
 
   // The frame policy snapshot from the beginning of navigation.
   base::Optional<FramePolicy> frame_policy_ = base::nullopt;
+
+  DocumentPolicy::FeatureState document_policy_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc
index d9c6815..119ec16 100644
--- a/third_party/blink/renderer/core/dom/document_test.cc
+++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -1205,36 +1205,37 @@
       blink::mojom::FeaturePolicyFeature::kSyncScript;
   const auto report_option = blink::ReportOptions::kReportOnFailure;
 
-  // When document_policy is not initialized, feature_policy should
-  // be sufficient to determine the result.
-  NavigateTo(KURL("https://www.example.com/"), "font-display-late-swap 'none'",
-             "");
-  EXPECT_FALSE(GetDocument().IsFeatureEnabled(test_feature, report_option));
-
-  NavigateTo(KURL("https://www.example.com/"), "font-display-late-swap *", "");
-  EXPECT_TRUE(GetDocument().IsFeatureEnabled(test_feature, report_option));
+  // When document_policy is not specified in response header, default values
+  // are used for document policy.
+  NavigateTo(KURL("https://www.example.com/"), "", "");
+  GetDocument().GetSecurityContext().SetDocumentPolicyForTesting(
+      DocumentPolicy::CreateWithHeaderPolicy({}));
+  EXPECT_EQ(
+      DocumentPolicy::GetFeatureDefaults().at(test_feature),
+      GetDocument().GetSecurityContext().GetDocumentPolicy()->GetFeatureValue(
+          test_feature));
 
   // When document_policy is specified, both feature_policy and
   // document_policy need to return true for the feature to be
   // enabled.
   NavigateTo(KURL("https://www.example.com/"), "font-display-late-swap *", "");
   GetDocument().GetSecurityContext().SetDocumentPolicyForTesting(
-      DocumentPolicy::CreateWithRequiredPolicy(
+      DocumentPolicy::CreateWithHeaderPolicy(
           {{test_feature, blink::PolicyValue(true)}}));
   EXPECT_TRUE(GetDocument().IsFeatureEnabled(test_feature, report_option));
   GetDocument().GetSecurityContext().SetDocumentPolicyForTesting(
-      DocumentPolicy::CreateWithRequiredPolicy(
+      DocumentPolicy::CreateWithHeaderPolicy(
           {{test_feature, blink::PolicyValue(false)}}));
   EXPECT_FALSE(GetDocument().IsFeatureEnabled(test_feature, report_option));
 
   NavigateTo(KURL("https://www.example.com/"), "font-display-late-swap 'none'",
              "");
   GetDocument().GetSecurityContext().SetDocumentPolicyForTesting(
-      DocumentPolicy::CreateWithRequiredPolicy(
+      DocumentPolicy::CreateWithHeaderPolicy(
           {{test_feature, blink::PolicyValue(true)}}));
   EXPECT_FALSE(GetDocument().IsFeatureEnabled(test_feature, report_option));
   GetDocument().GetSecurityContext().SetDocumentPolicyForTesting(
-      DocumentPolicy::CreateWithRequiredPolicy(
+      DocumentPolicy::CreateWithHeaderPolicy(
           {{test_feature, blink::PolicyValue(false)}}));
   EXPECT_FALSE(GetDocument().IsFeatureEnabled(test_feature, report_option));
 
@@ -1244,7 +1245,7 @@
   EXPECT_TRUE(
       GetDocument().IsFeatureEnabled(unsupported_feature, report_option));
   GetDocument().GetSecurityContext().SetDocumentPolicyForTesting(
-      DocumentPolicy::CreateWithRequiredPolicy(
+      DocumentPolicy::CreateWithHeaderPolicy(
           {{test_feature, blink::PolicyValue(true)}}));
   ASSERT_FALSE(GetDocument()
                    .GetSecurityContext()
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
index b6436b9..6367a35b 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -59,11 +59,13 @@
     scoped_refptr<SecurityOrigin> origin,
     WebSandboxFlags sandbox_flags,
     std::unique_ptr<FeaturePolicy> feature_policy,
+    std::unique_ptr<DocumentPolicy> document_policy,
     SecureContextMode secure_context_mode)
     : isolate_(isolate),
       security_context_(origin,
                         sandbox_flags,
                         std::move(feature_policy),
+                        std::move(document_policy),
                         SecurityContext::kLocal),
       circular_sequential_id_(0),
       in_dispatch_error_event_(false),
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
index c95b002..eea36ed7 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -342,6 +342,7 @@
                    scoped_refptr<SecurityOrigin> origin,
                    WebSandboxFlags sandbox_flags,
                    std::unique_ptr<FeaturePolicy> feature_policy,
+                   std::unique_ptr<DocumentPolicy> document_policy,
                    SecureContextMode secure_context_mode);
   ~ExecutionContext() override;
 
diff --git a/third_party/blink/renderer/core/execution_context/remote_security_context.cc b/third_party/blink/renderer/core/execution_context/remote_security_context.cc
index f7b286a..841d83a 100644
--- a/third_party/blink/renderer/core/execution_context/remote_security_context.cc
+++ b/third_party/blink/renderer/core/execution_context/remote_security_context.cc
@@ -12,7 +12,11 @@
 namespace blink {
 
 RemoteSecurityContext::RemoteSecurityContext()
-    : SecurityContext(nullptr, WebSandboxFlags::kNone, nullptr, kRemote) {
+    : SecurityContext(nullptr /* origin */,
+                      WebSandboxFlags::kNone,
+                      nullptr /* feature_policy */,
+                      nullptr /* document_policy */,
+                      kRemote) {
   // RemoteSecurityContext's origin is expected to stay uninitialized until
   // we set it using replicated origin data from the browser process.
   DCHECK(!GetSecurityOrigin());
diff --git a/third_party/blink/renderer/core/execution_context/security_context.cc b/third_party/blink/renderer/core/execution_context/security_context.cc
index 01b1107..b58b008 100644
--- a/third_party/blink/renderer/core/execution_context/security_context.cc
+++ b/third_party/blink/renderer/core/execution_context/security_context.cc
@@ -83,13 +83,16 @@
   return serialized;
 }
 
-SecurityContext::SecurityContext(scoped_refptr<SecurityOrigin> origin,
-                                 WebSandboxFlags sandbox_flags,
-                                 std::unique_ptr<FeaturePolicy> feature_policy,
-                                 SecurityContextType context_type)
+SecurityContext::SecurityContext(
+    scoped_refptr<SecurityOrigin> origin,
+    WebSandboxFlags sandbox_flags,
+    std::unique_ptr<FeaturePolicy> feature_policy,
+    std::unique_ptr<DocumentPolicy> document_policy,
+    SecurityContextType context_type)
     : sandbox_flags_(sandbox_flags),
       security_origin_(std::move(origin)),
       feature_policy_(std::move(feature_policy)),
+      document_policy_(std::move(document_policy)),
       address_space_(network::mojom::IPAddressSpace::kUnknown),
       insecure_request_policy_(kLeaveInsecureRequestsAlone),
       require_safe_types_(false),
diff --git a/third_party/blink/renderer/core/execution_context/security_context.h b/third_party/blink/renderer/core/execution_context/security_context.h
index fd48d67..4d362b6 100644
--- a/third_party/blink/renderer/core/execution_context/security_context.h
+++ b/third_party/blink/renderer/core/execution_context/security_context.h
@@ -76,6 +76,7 @@
   SecurityContext(scoped_refptr<SecurityOrigin> origin,
                   WebSandboxFlags sandbox_flags,
                   std::unique_ptr<FeaturePolicy> feature_policy,
+                  std::unique_ptr<DocumentPolicy> document_policy,
                   SecurityContextType context_type);
   virtual ~SecurityContext() = default;
 
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
index 57f0b34..4695265 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -651,11 +651,6 @@
   return true;
 }
 
-void LocalFrameClientImpl::DidAccessInitialDocument() {
-  if (web_frame_->Client())
-    web_frame_->Client()->DidAccessInitialDocument();
-}
-
 void LocalFrameClientImpl::DidRunInsecureContent(const SecurityOrigin* origin,
                                                  const KURL& insecure_url) {
   if (web_frame_->Client()) {
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
index a910975..0cd319b5 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -140,7 +140,6 @@
   void DownloadURL(const ResourceRequest&,
                    network::mojom::RedirectMode) override;
   bool NavigateBackForward(int offset) const override;
-  void DidAccessInitialDocument() override;
   void DidRunInsecureContent(const SecurityOrigin*,
                              const KURL& insecure_url) override;
   void DidDispatchPingLoader(const KURL&) override;
diff --git a/third_party/blink/renderer/core/exported/web_frame_test.cc b/third_party/blink/renderer/core/exported/web_frame_test.cc
index a613412..00910e1b 100644
--- a/third_party/blink/renderer/core/exported/web_frame_test.cc
+++ b/third_party/blink/renderer/core/exported/web_frame_test.cc
@@ -6697,13 +6697,12 @@
             document->Markers().Markers()[0]->GetType());
 }
 
-class TestAccessInitialDocumentWebFrameClient
-    : public frame_test_helpers::TestWebFrameClient {
+class TestAccessInitialDocumentLocalFrameHost : public FakeLocalFrameHost {
  public:
-  TestAccessInitialDocumentWebFrameClient() = default;
-  ~TestAccessInitialDocumentWebFrameClient() override = default;
+  TestAccessInitialDocumentLocalFrameHost() = default;
+  ~TestAccessInitialDocumentLocalFrameHost() override = default;
 
-  // frame_test_helpers::TestWebFrameClient:
+  // FakeLocalFrameHost:
   void DidAccessInitialDocument() override { ++did_access_initial_document_; }
 
   // !!!!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!!!!!
@@ -6716,153 +6715,169 @@
 };
 
 TEST_F(WebFrameTest, DidAccessInitialDocumentBody) {
-  TestAccessInitialDocumentWebFrameClient web_frame_client;
+  TestAccessInitialDocumentLocalFrameHost frame_host;
+  frame_test_helpers::TestWebFrameClient web_frame_client;
+  frame_host.Init(web_frame_client.GetRemoteNavigationAssociatedInterfaces());
   frame_test_helpers::WebViewHelper web_view_helper;
   web_view_helper.Initialize(&web_frame_client);
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Create another window that will try to access it.
   frame_test_helpers::WebViewHelper new_web_view_helper;
   WebViewImpl* new_view = new_web_view_helper.InitializeWithOpener(
       web_view_helper.GetWebView()->MainFrame());
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Access the initial document by modifying the body.
   new_view->MainFrameImpl()->ExecuteScript(
       WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"));
   RunPendingTasks();
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   web_view_helper.Reset();
 }
 
 TEST_F(WebFrameTest, DidAccessInitialDocumentOpen) {
-  TestAccessInitialDocumentWebFrameClient web_frame_client;
+  TestAccessInitialDocumentLocalFrameHost frame_host;
+  frame_test_helpers::TestWebFrameClient web_frame_client;
+  frame_host.Init(web_frame_client.GetRemoteNavigationAssociatedInterfaces());
   frame_test_helpers::WebViewHelper web_view_helper;
   web_view_helper.Initialize(&web_frame_client);
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Create another window that will try to access it.
   frame_test_helpers::WebViewHelper new_web_view_helper;
   WebViewImpl* new_view = new_web_view_helper.InitializeWithOpener(
       web_view_helper.GetWebView()->MainFrame());
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Access the initial document by calling document.open(), which allows
   // arbitrary modification of the initial document.
   new_view->MainFrameImpl()->ExecuteScript(
       WebScriptSource("window.opener.document.open();"));
   RunPendingTasks();
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   web_view_helper.Reset();
 }
 
 TEST_F(WebFrameTest, DidAccessInitialDocumentNavigator) {
-  TestAccessInitialDocumentWebFrameClient web_frame_client;
+  TestAccessInitialDocumentLocalFrameHost frame_host;
+  frame_test_helpers::TestWebFrameClient web_frame_client;
+  frame_host.Init(web_frame_client.GetRemoteNavigationAssociatedInterfaces());
   frame_test_helpers::WebViewHelper web_view_helper;
   web_view_helper.Initialize(&web_frame_client);
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Create another window that will try to access it.
   frame_test_helpers::WebViewHelper new_web_view_helper;
   WebViewImpl* new_view = new_web_view_helper.InitializeWithOpener(
       web_view_helper.GetWebView()->MainFrame());
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Access the initial document to get to the navigator object.
   new_view->MainFrameImpl()->ExecuteScript(
       WebScriptSource("console.log(window.opener.navigator);"));
   RunPendingTasks();
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   web_view_helper.Reset();
 }
 
 TEST_F(WebFrameTest, DidAccessInitialDocumentViaJavascriptUrl) {
-  TestAccessInitialDocumentWebFrameClient web_frame_client;
+  TestAccessInitialDocumentLocalFrameHost frame_host;
+  frame_test_helpers::TestWebFrameClient web_frame_client;
+  frame_host.Init(web_frame_client.GetRemoteNavigationAssociatedInterfaces());
   frame_test_helpers::WebViewHelper web_view_helper;
   web_view_helper.Initialize(&web_frame_client);
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Access the initial document from a javascript: URL.
   frame_test_helpers::LoadFrame(web_view_helper.GetWebView()->MainFrameImpl(),
                                 "javascript:document.body.appendChild(document."
                                 "createTextNode('Modified'))");
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   web_view_helper.Reset();
 }
 
 TEST_F(WebFrameTest, DidAccessInitialDocumentBodyBeforeModalDialog) {
-  TestAccessInitialDocumentWebFrameClient web_frame_client;
+  TestAccessInitialDocumentLocalFrameHost frame_host;
+  frame_test_helpers::TestWebFrameClient web_frame_client;
+  frame_host.Init(web_frame_client.GetRemoteNavigationAssociatedInterfaces());
   frame_test_helpers::WebViewHelper web_view_helper;
   web_view_helper.Initialize(&web_frame_client);
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Create another window that will try to access it.
   frame_test_helpers::WebViewHelper new_web_view_helper;
   WebViewImpl* new_view = new_web_view_helper.InitializeWithOpener(
       web_view_helper.GetWebView()->MainFrame());
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Access the initial document by modifying the body.
   new_view->MainFrameImpl()->ExecuteScript(
       WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"));
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  RunPendingTasks();
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   // Run a modal dialog, which used to run a nested run loop and require
   // a special case for notifying about the access.
   new_view->MainFrameImpl()->ExecuteScript(
       WebScriptSource("window.opener.confirm('Modal');"));
-  EXPECT_EQ(2, web_frame_client.did_access_initial_document_);
+  RunPendingTasks();
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   // Ensure that we don't notify again later.
   RunPendingTasks();
-  EXPECT_EQ(2, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   web_view_helper.Reset();
 }
 
 TEST_F(WebFrameTest, DidWriteToInitialDocumentBeforeModalDialog) {
-  TestAccessInitialDocumentWebFrameClient web_frame_client;
+  TestAccessInitialDocumentLocalFrameHost frame_host;
+  frame_test_helpers::TestWebFrameClient web_frame_client;
+  frame_host.Init(web_frame_client.GetRemoteNavigationAssociatedInterfaces());
   frame_test_helpers::WebViewHelper web_view_helper;
   web_view_helper.Initialize(&web_frame_client);
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Create another window that will try to access it.
   frame_test_helpers::WebViewHelper new_web_view_helper;
   WebViewImpl* new_view = new_web_view_helper.InitializeWithOpener(
       web_view_helper.GetWebView()->MainFrame());
   RunPendingTasks();
-  EXPECT_EQ(0, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(0, frame_host.did_access_initial_document_);
 
   // Access the initial document with document.write, which moves us past the
   // initial empty document state of the state machine.
   new_view->MainFrameImpl()->ExecuteScript(
       WebScriptSource("window.opener.document.write('Modified'); "
                       "window.opener.document.close();"));
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  RunPendingTasks();
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   // Run a modal dialog, which used to run a nested run loop and require
   // a special case for notifying about the access.
   new_view->MainFrameImpl()->ExecuteScript(
       WebScriptSource("window.opener.confirm('Modal');"));
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  RunPendingTasks();
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   // Ensure that we don't notify again later.
   RunPendingTasks();
-  EXPECT_EQ(1, web_frame_client.did_access_initial_document_);
+  EXPECT_EQ(1, frame_host.did_access_initial_document_);
 
   web_view_helper.Reset();
 }
diff --git a/third_party/blink/renderer/core/exported/web_image.cc b/third_party/blink/renderer/core/exported/web_image.cc
index d616a8d..3b89ae23 100644
--- a/third_party/blink/renderer/core/exported/web_image.cc
+++ b/third_party/blink/renderer/core/exported/web_image.cc
@@ -114,7 +114,8 @@
   const bool data_complete = true;
   std::unique_ptr<ImageDecoder> decoder(ImageDecoder::Create(
       data, data_complete, ImageDecoder::kAlphaPremultiplied,
-      ImageDecoder::kDefaultBitDepth, ColorBehavior::Ignore()));
+      ImageDecoder::kDefaultBitDepth, ColorBehavior::Ignore(),
+      ImageDecoder::OverrideAllowDecodeToYuv::kDeny));
   if (!decoder || !decoder->IsSizeAvailable())
     return {};
 
@@ -147,7 +148,8 @@
   const bool data_complete = true;
   std::unique_ptr<ImageDecoder> decoder(ImageDecoder::Create(
       data, data_complete, ImageDecoder::kAlphaPremultiplied,
-      ImageDecoder::kDefaultBitDepth, ColorBehavior::Ignore()));
+      ImageDecoder::kDefaultBitDepth, ColorBehavior::Ignore(),
+      ImageDecoder::OverrideAllowDecodeToYuv::kDeny));
   if (!decoder || !decoder->IsSizeAvailable() || decoder->FrameCount() == 0)
     return {};
 
diff --git a/third_party/blink/renderer/core/frame/frame.h b/third_party/blink/renderer/core/frame/frame.h
index f28019d..b86853a 100644
--- a/third_party/blink/renderer/core/frame/frame.h
+++ b/third_party/blink/renderer/core/frame/frame.h
@@ -31,7 +31,7 @@
 
 #include "base/optional.h"
 #include "base/unguessable_token.h"
-#include "third_party/blink/public/common/feature_policy/feature_policy.h"
+#include "third_party/blink/public/common/frame/frame_policy.h"
 #include "third_party/blink/public/common/frame/user_activation_state.h"
 #include "third_party/blink/public/common/frame/user_activation_update_source.h"
 #include "third_party/blink/public/web/web_frame_load_type.h"
@@ -234,6 +234,12 @@
     opener_feature_state_ = state;
   }
 
+  const FramePolicy& GetFramePolicy() const { return frame_policy_; }
+
+  void SetFramePolicy(const FramePolicy& frame_policy) {
+    frame_policy_ = frame_policy;
+  }
+
   WindowAgentFactory& window_agent_factory() const {
     return *window_agent_factory_;
   }
@@ -300,6 +306,11 @@
   // frames.
   FeaturePolicy::FeatureState opener_feature_state_;
 
+  // Frame policy of current frame. This can be different to
+  // Owner()->GetFramePolicy(), as the document hosted in the frame can also
+  // further specify frame policy.
+  FramePolicy frame_policy_;
+
   Member<WindowAgentFactory> window_agent_factory_;
 
   // TODO(sashab): Investigate if this can be represented with m_lifecycle.
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h
index dbade52..c2b9a5bd 100644
--- a/third_party/blink/renderer/core/frame/local_frame.h
+++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -401,7 +401,8 @@
   const mojo::Remote<mojom::blink::ReportingServiceProxy>& GetReportingService()
       const;
 
-  // Returns the frame host ptr.
+  // Returns the frame host ptr. The interface returned is backed by an
+  // associated interface with the legacy Chrome IPC channel.
   mojom::blink::LocalFrameHost& GetLocalFrameHostRemote();
 
   // Overlays a color on top of this LocalFrameView if it is associated with
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
index a524842..0e526fb 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client.h
+++ b/third_party/blink/renderer/core/frame/local_frame_client.h
@@ -181,11 +181,6 @@
 
   virtual bool NavigateBackForward(int offset) const = 0;
 
-  // Another page has accessed the initial empty document of this frame. It is
-  // no longer safe to display a provisional URL, since a URL spoof is now
-  // possible.
-  virtual void DidAccessInitialDocument() {}
-
   // The indicated security origin has run active content (such as a script)
   // from an insecure source.  Note that the insecure content can spread to
   // other frames in the same origin.
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index 31d40796..68fa0ac 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -763,6 +763,11 @@
   GetFrame()->Loader().DispatchUnloadEvent(nullptr, nullptr);
 }
 
+bool WebLocalFrameImpl::HasAccessedInitialDocument() {
+  DCHECK(GetFrame());
+  return GetFrame()->Loader().HasAccessedInitialDocument();
+}
+
 void WebLocalFrameImpl::ExecuteScript(const WebScriptSource& source) {
   DCHECK(GetFrame());
   v8::HandleScope handle_scope(ToIsolate(GetFrame()));
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
index 6990498..8e28c1d 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -112,6 +112,7 @@
   void SetContentCaptureClient(WebContentCaptureClient*) override;
   WebContentCaptureClient* ContentCaptureClient() const override;
   void DispatchUnloadEvent() override;
+  bool HasAccessedInitialDocument() override;
   WebVector<WebIconURL> IconURLs(int icon_types_mask) const override;
   WebDocument GetDocument() const override;
   WebString AssignedName() const override;
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.cc b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
index 0779508..fa5e70c9 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
@@ -312,16 +312,10 @@
       ConstructRequiredPolicy();
   const auto* frame = GetDocument().GetFrame();
   DCHECK(frame);
-  // TODO(chenleihu): unify the logic of getting parent required policy after
-  // frame policy gets moved from FrameOwner to Frame.
-  frame_policy_.required_document_policy =
-      frame->IsMainFrame()
-          ? self_required_policy
-          : DocumentPolicy::MergeFeatureState(
-                self_required_policy,
-                frame->Owner()
-                    ->GetFramePolicy()
-                    .required_document_policy /* parent required policy */);
+  frame_policy_.required_document_policy = DocumentPolicy::MergeFeatureState(
+      self_required_policy,
+      frame->GetFramePolicy()
+          .required_document_policy /* parent required policy */);
   if (ContentFrame()) {
     frame->Client()->DidChangeFramePolicy(ContentFrame(), frame_policy_);
   }
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc
index 3b34642..8e575c7 100644
--- a/third_party/blink/renderer/core/loader/document_loader.cc
+++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -124,6 +124,7 @@
       document_load_timing_(*this),
       service_worker_network_provider_(
           std::move(params_->service_worker_network_provider)),
+      was_blocked_by_document_policy_(false),
       was_blocked_by_csp_(false),
       state_(kNotStarted),
       in_commit_data_(false),
@@ -173,7 +174,12 @@
   ip_address_space_ = params_->ip_address_space;
   grant_load_local_resources_ = params_->grant_load_local_resources;
   force_fetch_cache_mode_ = params_->force_fetch_cache_mode;
-  frame_policy_ = params_->frame_policy;
+  response_ = params_->response.ToResourceResponse();
+  frame_policy_ = params_->frame_policy.value_or(FramePolicy());
+  document_policy_ = CreateDocumentPolicy();
+  // Initialize |frame_policy_| in frame after the update to
+  // |frame_policy_.required_document_policy| in CreateDocumentPolicy.
+  frame_->SetFramePolicy(frame_policy_);
 
   WebNavigationTimings& timings = params_->navigation_timings;
   if (!timings.input_start.is_null())
@@ -232,25 +238,20 @@
       // information that is consistent with the final request URL.
       // Note: We can't use |url_| for the origin calculation because
       // we need to take into account any redirects that may have occurred.
-      const auto request_url_origin = blink::SecurityOrigin::Create(
-          params_->response.ToResourceResponse().CurrentRequestUrl());
+      const auto request_url_origin =
+          blink::SecurityOrigin::Create(response_.CurrentRequestUrl());
       origin_to_commit_ = request_url_origin->DeriveNewOpaqueOrigin();
 
       was_blocked_by_csp_ = true;
-      KURL blocked_url = SecurityOrigin::UrlWithUniqueOpaqueOrigin();
-      original_url_ = blocked_url;
-      url_ = blocked_url;
-      params_->url = blocked_url;
-      WebNavigationParams::FillStaticResponse(params_.get(), "text/html",
-                                              "UTF-8", "");
     }
   }
 
+  if (was_blocked_by_csp_ || was_blocked_by_document_policy_)
+    ReplaceWithEmptyDocument();
+
   if (!GetFrameLoader().StateMachine()->CreatingInitialEmptyDocument())
     redirect_chain_.push_back(url_);
 
-  response_ = params_->response.ToResourceResponse();
-
   for (auto feature : params_->initiator_origin_trial_features) {
     // Convert from int to OriginTrialFeature. These values are passed between
     // blink navigations. OriginTrialFeature isn't visible outside of blink (and
@@ -625,7 +626,7 @@
       navigation_timing_info_->SetFinalResponse(response_);
       navigation_timing_info_->AddFinalTransferSize(
           total_encoded_data_length == -1 ? 0 : total_encoded_data_length);
-      if (response_.HttpStatusCode() < 400 && report_timing_info_to_parent_) {
+      if (report_timing_info_to_parent_) {
         navigation_timing_info_->SetLoadResponseEnd(completion_time);
         if (state_ >= kCommitted) {
           // Note that we currently lose timing info for empty documents,
@@ -784,6 +785,51 @@
   return true;
 }
 
+void DocumentLoader::ConsoleError(const String& message) {
+  ConsoleMessage* console_message = ConsoleMessage::CreateForRequest(
+      mojom::ConsoleMessageSource::kSecurity,
+      mojom::ConsoleMessageLevel::kError, message,
+      response_.CurrentRequestUrl(), this, MainResourceIdentifier());
+  frame_->GetDocument()->AddConsoleMessage(console_message);
+}
+
+void DocumentLoader::ReplaceWithEmptyDocument() {
+  DCHECK(params_);
+  KURL blocked_url = SecurityOrigin::UrlWithUniqueOpaqueOrigin();
+  original_url_ = blocked_url;
+  url_ = blocked_url;
+  params_->url = blocked_url;
+  WebNavigationParams::FillStaticResponse(params_.get(), "text/html", "UTF-8",
+                                          "");
+}
+
+DocumentPolicy::FeatureState DocumentLoader::CreateDocumentPolicy() {
+  if (!RuntimeEnabledFeatures::DocumentPolicyEnabled())
+    return DocumentPolicy::FeatureState{};
+
+  const DocumentPolicy::FeatureState header_policy =
+      DocumentPolicy::Parse(
+          response_.HttpHeaderField(http_names::kDocumentPolicy).Ascii())
+          .value_or(DocumentPolicy::FeatureState{});
+
+  const DocumentPolicy::FeatureState header_required_policy =
+      DocumentPolicy::Parse(
+          response_.HttpHeaderField(http_names::kRequireDocumentPolicy).Ascii())
+          .value_or(DocumentPolicy::FeatureState{});
+
+  frame_policy_.required_document_policy = DocumentPolicy::MergeFeatureState(
+      frame_policy_.required_document_policy, header_required_policy);
+
+  if (!DocumentPolicy::IsPolicyCompatible(
+          frame_policy_.required_document_policy, header_policy)) {
+    was_blocked_by_document_policy_ = true;
+    // When header policy is less strict than required policy, use required
+    // policy to initialize document policy for the document.
+    return frame_policy_.required_document_policy;
+  }
+  return header_policy;
+}
+
 void DocumentLoader::HandleResponse() {
   DCHECK(frame_);
   application_cache_host_->DidReceiveResponseForMainResource(response_);
@@ -1431,6 +1477,7 @@
           .WithFramePolicy(frame_policy_)
           .WithNewRegistrationContext()
           .WithFeaturePolicyHeader(feature_policy.ToString())
+          .WithDocumentPolicy(document_policy_)
           .WithOriginTrialsHeader(
               response_.HttpHeaderField(http_names::kOriginTrial))
           .WithContentSecurityPolicy(content_security_policy_.Get());
@@ -1535,16 +1582,24 @@
   // Log if the document was blocked by CSP checks now that the new Document has
   // been created and console messages will be properly displayed.
   if (was_blocked_by_csp_) {
-    String message = "Refused to display '" +
-                     response_.CurrentRequestUrl().ElidedString() +
-                     "' because it has not opted-into the following policy "
-                     "required by its embedder: '" +
-                     GetFrameLoader().RequiredCSP() + "'.";
-    ConsoleMessage* console_message = ConsoleMessage::CreateForRequest(
-        mojom::ConsoleMessageSource::kSecurity,
-        mojom::ConsoleMessageLevel::kError, message,
-        response_.CurrentRequestUrl(), this, MainResourceIdentifier());
-    frame_->GetDocument()->AddConsoleMessage(console_message);
+    ConsoleError("Refused to display '" +
+                 response_.CurrentRequestUrl().ElidedString() +
+                 "' because it has not opted into the following policy "
+                 "required by its embedder: '" +
+                 GetFrameLoader().RequiredCSP() + "'.");
+  }
+
+  if (was_blocked_by_document_policy_) {
+    // TODO(chenleihu): Add which document policy violated in error string,
+    // instead of just displaying serialized required document policy.
+    ConsoleError(
+        "Refused to display '" + response_.CurrentRequestUrl().ElidedString() +
+        "' because it violates the following document policy "
+        "required by its embedder: '" +
+        DocumentPolicy::Serialize(frame_policy_.required_document_policy)
+            .value_or("[Serialization Error]")
+            .c_str() +
+        "'.");
   }
 
   // Report the ResourceResponse now that the new Document has been created and
diff --git a/third_party/blink/renderer/core/loader/document_loader.h b/third_party/blink/renderer/core/loader/document_loader.h
index ad89d6db..ee41ae06 100644
--- a/third_party/blink/renderer/core/loader/document_loader.h
+++ b/third_party/blink/renderer/core/loader/document_loader.h
@@ -359,9 +359,17 @@
   FrameLoader& GetFrameLoader() const;
   LocalFrameClient& GetLocalFrameClient() const;
 
+  void ConsoleError(const String& message);
+
+  // Replace the current document with a empty one and the URL with a unique
+  // opaque origin.
+  void ReplaceWithEmptyDocument();
+
   ContentSecurityPolicy* CreateCSP(
       const ResourceResponse&,
       const base::Optional<WebOriginPolicy>& origin_policy);
+  DocumentPolicy::FeatureState CreateDocumentPolicy();
+
   void StartLoadingInternal();
   void FinishedLoading(base::TimeTicks finish_time);
   void CancelLoadAfterCSPDenied(const ResourceResponse&);
@@ -423,7 +431,7 @@
       network::mojom::IPAddressSpace::kUnknown;
   bool grant_load_local_resources_ = false;
   base::Optional<blink::mojom::FetchCacheMode> force_fetch_cache_mode_;
-  base::Optional<FramePolicy> frame_policy_;
+  FramePolicy frame_policy_;
 
   // Params are saved in constructor and are cleared after StartLoading().
   // TODO(dgozman): remove once StartLoading is merged with constructor.
@@ -470,6 +478,9 @@
   std::unique_ptr<WebServiceWorkerNetworkProvider>
       service_worker_network_provider_;
 
+  bool was_blocked_by_document_policy_;
+  DocumentPolicy::FeatureState document_policy_;
+
   Member<ContentSecurityPolicy> content_security_policy_;
   ClientHintsPreferences client_hints_preferences_;
   InitialScrollState initial_scroll_state_;
diff --git a/third_party/blink/renderer/core/loader/document_loader_test.cc b/third_party/blink/renderer/core/loader/document_loader_test.cc
index 1cf18f9..2a896cd6 100644
--- a/third_party/blink/renderer/core/loader/document_loader_test.cc
+++ b/third_party/blink/renderer/core/loader/document_loader_test.cc
@@ -14,6 +14,7 @@
 #include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
 #include "third_party/blink/renderer/core/frame/frame_test_helpers.h"
 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
+#include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/testing/scoped_fake_plugin_registry.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_request.h"
@@ -256,6 +257,45 @@
       blink::mojom::FeaturePolicyFeature::kPayment));
 }
 
+TEST_F(DocumentLoaderSimTest, ReportErrorWhenDocumentPolicyIncompatible) {
+  blink::ScopedDocumentPolicyForTest sdp(true);
+  SimRequest::Params params;
+  params.response_http_headers = {
+      {"Document-Policy", "unoptimized-lossless-images;bpp=1.1"}};
+
+  SimRequest main_resource("https://example.com", "text/html");
+  SimRequest iframe_resource("https://example.com/foo.html", "text/html",
+                             params);
+
+  LoadURL("https://example.com");
+  main_resource.Complete(R"(
+    <iframe
+      src="https://example.com/foo.html"
+      policy="unoptimized-lossless-images;bpp=1.0">
+    </iframe>
+  )");
+
+  // When blocked by document policy, the document should be filled in with an
+  // empty response, with Finish called on |navigation_body_loader| already.
+  // If Finish was not called on the loader, because the document was not
+  // blocked, this test will fail by crashing here.
+  iframe_resource.Finish(true /* body_loader_finished */);
+
+  auto* child_frame = To<WebLocalFrameImpl>(MainFrame().FirstChild());
+  auto* child_document = child_frame->GetFrame()->GetDocument();
+
+  // Should console log a error message.
+  auto& console_messages = static_cast<frame_test_helpers::TestWebFrameClient*>(
+                               child_frame->Client())
+                               ->ConsoleMessages();
+
+  ASSERT_EQ(console_messages.size(), 1u);
+  EXPECT_TRUE(console_messages.front().Contains("document policy"));
+
+  // Should replace the document's origin with an opaque origin.
+  EXPECT_EQ(child_document->Url(), SecurityOrigin::UrlWithUniqueOpaqueOrigin());
+}
+
 TEST_F(DocumentLoaderTest, CommitsDeferredOnSameOriginNavigation) {
   const KURL& requestor_url =
       KURL(NullURL(), "https://www.example.com/foo.html");
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index aea8f77..8ccc4fbe 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -1032,12 +1032,12 @@
 }
 
 void FrameLoader::DidAccessInitialDocument() {
-  if (frame_->IsMainFrame()) {
+  if (frame_->IsMainFrame() && !has_accessed_initial_document_) {
+    has_accessed_initial_document_ = true;
     // Forbid script execution to prevent re-entering V8, since this is called
     // from a binding security check.
     ScriptForbiddenScope forbid_scripts;
-    if (Client())
-      Client()->DidAccessInitialDocument();
+    frame_->GetLocalFrameHostRemote().DidAccessInitialDocument();
   }
 }
 
diff --git a/third_party/blink/renderer/core/loader/frame_loader.h b/third_party/blink/renderer/core/loader/frame_loader.h
index 59a2994..061f129 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.h
+++ b/third_party/blink/renderer/core/loader/frame_loader.h
@@ -238,6 +238,8 @@
 
   bool IsClientNavigationInitialHistoryLoad();
 
+  bool HasAccessedInitialDocument() { return has_accessed_initial_document_; }
+
   static bool NeedsHistoryItemRestore(WebFrameLoadType type);
 
  private:
@@ -325,6 +327,7 @@
   bool dispatching_did_clear_window_object_in_main_world_;
   bool detached_;
   bool committing_navigation_ = false;
+  bool has_accessed_initial_document_ = false;
 
   WebScopedVirtualTimePauser virtual_time_pauser_;
 
diff --git a/third_party/blink/renderer/core/loader/threaded_icon_loader.cc b/third_party/blink/renderer/core/loader/threaded_icon_loader.cc
index 355a5542..2240475c 100644
--- a/third_party/blink/renderer/core/loader/threaded_icon_loader.cc
+++ b/third_party/blink/renderer/core/loader/threaded_icon_loader.cc
@@ -110,7 +110,8 @@
   std::unique_ptr<ImageDecoder> decoder = ImageDecoder::Create(
       std::move(data), /* data_complete= */ true,
       ImageDecoder::kAlphaPremultiplied, ImageDecoder::kDefaultBitDepth,
-      ColorBehavior::TransformToSRGB());
+      ColorBehavior::TransformToSRGB(),
+      ImageDecoder::OverrideAllowDecodeToYuv::kDeny);
 
   if (!decoder) {
     notify_complete(-1.0);
diff --git a/third_party/blink/renderer/core/testing/fake_local_frame_host.cc b/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
index baf1860..84d2f93 100644
--- a/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
+++ b/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
@@ -70,6 +70,8 @@
     blink::mojom::blink::ScrollDirection direction,
     ui::input_types::ScrollGranularity granularity) {}
 
+void FakeLocalFrameHost::DidAccessInitialDocument() {}
+
 void FakeLocalFrameHost::BindFrameHostReceiver(
     mojo::ScopedInterfaceEndpointHandle handle) {
   receiver_.Bind(mojo::PendingAssociatedReceiver<mojom::blink::LocalFrameHost>(
diff --git a/third_party/blink/renderer/core/testing/fake_local_frame_host.h b/third_party/blink/renderer/core/testing/fake_local_frame_host.h
index 4d9feaa..6fbceda 100644
--- a/third_party/blink/renderer/core/testing/fake_local_frame_host.h
+++ b/third_party/blink/renderer/core/testing/fake_local_frame_host.h
@@ -50,6 +50,7 @@
   void BubbleLogicalScrollInParentFrame(
       blink::mojom::blink::ScrollDirection direction,
       ui::input_types::ScrollGranularity granularity) override;
+  void DidAccessInitialDocument() override;
 
  private:
   void BindFrameHostReceiver(mojo::ScopedInterfaceEndpointHandle handle);
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.cc b/third_party/blink/renderer/core/testing/null_execution_context.cc
index abd9ec3..7de27c4 100644
--- a/third_party/blink/renderer/core/testing/null_execution_context.cc
+++ b/third_party/blink/renderer/core/testing/null_execution_context.cc
@@ -23,9 +23,10 @@
           MakeGarbageCollected<Agent>(v8::Isolate::GetCurrent(),
                                       base::UnguessableToken::Null()),
           origin_trial_context,
-          nullptr,
+          nullptr /* origin */,
           WebSandboxFlags::kNone,
-          nullptr,
+          nullptr /* feature_policy */,
+          nullptr /* document_policy */,
           SecureContextMode::kSecureContext),
       scheduler_(scheduler::CreateDummyFrameScheduler()) {}
 
diff --git a/third_party/blink/renderer/core/testing/sim/sim_request.cc b/third_party/blink/renderer/core/testing/sim/sim_request.cc
index 1716513f..dd39773 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_request.cc
+++ b/third_party/blink/renderer/core/testing/sim/sim_request.cc
@@ -84,7 +84,7 @@
     client_->DidReceiveData(data.data(), data.size());
 }
 
-void SimRequestBase::Finish() {
+void SimRequestBase::Finish(bool body_loader_finished) {
   if (!started_)
     ServePending();
   DCHECK(started_);
@@ -94,7 +94,8 @@
                      total_encoded_data_length_, total_encoded_data_length_);
   } else {
     if (navigation_body_loader_) {
-      navigation_body_loader_->Finish();
+      if (!body_loader_finished)
+        navigation_body_loader_->Finish();
     } else {
       // TODO(esprehn): Is claiming a request time of 0 okay for tests?
       client_->DidFinishLoading(base::TimeTicks(), total_encoded_data_length_,
diff --git a/third_party/blink/renderer/core/testing/sim/sim_request.h b/third_party/blink/renderer/core/testing/sim/sim_request.h
index cd208356..1400a2a 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_request.h
+++ b/third_party/blink/renderer/core/testing/sim/sim_request.h
@@ -46,7 +46,8 @@
   void Write(const Vector<char>& data);
 
   // Finish the response, this is as if the server closed the connection.
-  void Finish();
+  // If |navigation_body_loader| already finished, skip calling Finish on it.
+  void Finish(bool body_loader_finished = false);
 
   // Shorthand to complete a request (start/write/finish) sequence in order.
   void Complete(const String& data = String());
diff --git a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
index 4a7772ce..edf45d8 100644
--- a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
@@ -183,7 +183,8 @@
                        MakeGarbageCollected<OriginTrialContext>(),
                        origin,
                        WebSandboxFlags::kNone,
-                       nullptr,
+                       nullptr, /* feature_policy */
+                       nullptr, /* document_policy */
                        // Until there are APIs that are available in workers or
                        // or worklets that require a privileged context test
                        // that checks ancestors, just do a simple check here.
diff --git a/third_party/blink/renderer/modules/remote_objects/remote_object.cc b/third_party/blink/renderer/modules/remote_objects/remote_object.cc
index 2cffcbd..b604dc5 100644
--- a/third_party/blink/renderer/modules/remote_objects/remote_object.cc
+++ b/third_party/blink/renderer/modules/remote_objects/remote_object.cc
@@ -25,8 +25,7 @@
     v8::Isolate* isolate,
     const std::string& property) {
   // TODO(crbug.com/794320): implement this.
-  ignore_result(object_id_);
-  return v8::Local<v8::Value>();
+  return gin::StringToSymbol(isolate, property);
 }
 
 std::vector<std::string> RemoteObject::EnumerateNamedProperties(
diff --git a/third_party/blink/renderer/modules/xr/xr.cc b/third_party/blink/renderer/modules/xr/xr.cc
index 7f84b3f..478d187 100644
--- a/third_party/blink/renderer/modules/xr/xr.cc
+++ b/third_party/blink/renderer/modules/xr/xr.cc
@@ -232,7 +232,6 @@
     if (supported) {
       resolver_->Resolve();
     } else {
-      DVLOG(2) << __func__ << ": session is unsupported - throwing exception";
       RejectWithDOMException(DOMExceptionCode::kNotSupportedError,
                              kSessionNotSupported, exception_state);
     }
@@ -648,9 +647,6 @@
 
   if (session_mode == device::mojom::blink::XRSessionMode::kImmersiveAr &&
       !RuntimeEnabledFeatures::WebXRARModuleEnabled(doc)) {
-    DVLOG(2) << __func__
-             << ": Immersive AR session is only supported if WebXRARModule "
-                "feature is enabled";
     query->Resolve(false);
     return promise;
   }
diff --git a/third_party/blink/renderer/modules/xr/xr.h b/third_party/blink/renderer/modules/xr/xr.h
index 499c568..9680fd53 100644
--- a/third_party/blink/renderer/modules/xr/xr.h
+++ b/third_party/blink/renderer/modules/xr/xr.h
@@ -29,6 +29,33 @@
 class XRFrameProvider;
 class XRSessionInit;
 
+// Implementation of the XR interface according to
+// https://immersive-web.github.io/webxr/#xr-interface . This is created lazily
+// via the NavigatorXR class on first access to the navigator.xr attribute, and
+// disposed when the execution context is destroyed or on mojo communication
+// errors with the browser/device process.
+//
+// When the XR object is used for promises, it uses query objects to store state
+// including the associated ScriptPromiseResolver. These query objects are owned
+// by the XR object and remain alive until the promise is resolved or rejected.
+// (See comments below for PendingSupportsSessionQuery and
+// PendingRequestSessionQuery.) These query objects are destroyed and any
+// outstanding promises rejected when the XR object is disposed.
+//
+// The XR object owns mojo connections with the Browser process through
+// VRService, used for capability queries and session lifetime
+// management. The XR object is also the receiver for the VRServiceClient.
+//
+// The XR object owns mojo connections with the Device process (either a
+// separate utility process, or implemented as part of the Browser process,
+// depending on the runtime and options) through XRFrameProvider and
+// XREnvironmentIntegrationProvider. These are used to transport per-frame data
+// such as image data and input poses. These are lazily created when first
+// needed for a sensor-backed session (all except sensorless inline sessions),
+// and destroyed when the XR object is disposed.
+//
+// The XR object keeps weak references to XRSession objects after they were
+// returned through a successful requestSession promise, but does not own them.
 class XR final : public EventTargetWithInlineData,
                  public ContextLifecycleObserver,
                  public device::mojom::blink::VRServiceClient,
@@ -117,7 +144,8 @@
 
   // Encapsulates blink-side `XR::requestSession()` call. It is a wrapper around
   // ScriptPromiseResolver that allows us to add additional logic as certain
-  // things related to promise's life cycle happen.
+  // things related to promise's life cycle happen. Instances are owned
+  // by the XR object, see outstanding_request_queries_ below.
   class PendingRequestSessionQuery final
       : public GarbageCollected<PendingRequestSessionQuery> {
    public:
@@ -197,9 +225,10 @@
   static device::mojom::blink::XRSessionOptionsPtr XRSessionOptionsFromQuery(
       const PendingRequestSessionQuery& query);
 
-  // Encapsulates blink-side `XR::supportsSession()` call.  It is a wrapper
+  // Encapsulates blink-side `XR::isSessionSupported()` call.  It is a wrapper
   // around ScriptPromiseResolver that allows us to add additional logic as
-  // certain things related to promise's life cycle happen.
+  // certain things related to promise's life cycle happen. Instances are owned
+  // by the XR object, see outstanding_support_queries_ below.
   class PendingSupportsSessionQuery final
       : public GarbageCollected<PendingSupportsSessionQuery> {
    public:
@@ -312,6 +341,8 @@
 
   const int64_t ukm_source_id_;
 
+  // The XR object owns outstanding pending session queries, these live until
+  // the underlying promise is either resolved or rejected.
   HeapHashSet<Member<PendingSupportsSessionQuery>> outstanding_support_queries_;
   HeapHashSet<Member<PendingRequestSessionQuery>> outstanding_request_queries_;
   bool has_outstanding_immersive_request_ = false;
diff --git a/third_party/blink/renderer/platform/mojo/blink_typemaps.gni b/third_party/blink/renderer/platform/mojo/blink_typemaps.gni
index 303e822..3b36f42 100644
--- a/third_party/blink/renderer/platform/mojo/blink_typemaps.gni
+++ b/third_party/blink/renderer/platform/mojo/blink_typemaps.gni
@@ -13,6 +13,7 @@
   "//services/network/public/cpp/mutable_network_traffic_annotation_tag.typemap",
   "//services/network/public/cpp/site_for_cookies.typemap",
   "//services/network/public/cpp/p2p.typemap",
+  "//third_party/blink/public/common/messaging/message_port_descriptor.typemap",
   "//third_party/blink/renderer/core/messaging/blink_cloneable_message.typemap",
   "//third_party/blink/renderer/core/messaging/blink_transferable_message.typemap",
   "//third_party/blink/renderer/modules/indexeddb/indexed_db_blink.typemap",
diff --git a/third_party/blink/renderer/platform/network/http_names.json5 b/third_party/blink/renderer/platform/network/http_names.json5
index 71e696a..61c1791 100644
--- a/third_party/blink/renderer/platform/network/http_names.json5
+++ b/third_party/blink/renderer/platform/network/http_names.json5
@@ -31,6 +31,7 @@
     "Content-Security-Policy",
     "Content-Security-Policy-Report-Only",
     "Content-Type",
+    "Document-Policy",
     "ETag",
     "Expires",
     "Date",
@@ -55,6 +56,7 @@
     "Referrer-Policy",
     "Refresh",
     "Resource-Freshness",
+    "Require-Document-Policy",
     "Save-Data",
     "Sec-CH-Lang",
     "Sec-Required-CSP",
diff --git a/third_party/blink/renderer/platform/wtf/list_hash_set.h b/third_party/blink/renderer/platform/wtf/list_hash_set.h
index 062c6ac..7856b7be 100644
--- a/third_party/blink/renderer/platform/wtf/list_hash_set.h
+++ b/third_party/blink/renderer/platform/wtf/list_hash_set.h
@@ -58,7 +58,7 @@
 template <typename Set>
 class ListHashSetConstReverseIterator;
 
-template <typename ValueArg>
+template <typename ValueArg, typename Allocator>
 class ListHashSetNodeBase;
 template <typename ValueArg, typename Allocator>
 class ListHashSetNode;
@@ -272,9 +272,9 @@
   typename Allocator::AllocatorProvider allocator_provider_;
 };
 
-template <typename T>
+template <typename T, typename Allocator>
 class ListHashSetNodeBasePointer {
-  using NodeType = ListHashSetNodeBase<T>;
+  using NodeType = ListHashSetNodeBase<T, Allocator>;
 
  public:
   ListHashSetNodeBasePointer& operator=(
@@ -285,7 +285,7 @@
 
   template <typename U>
   ListHashSetNodeBasePointer& operator=(
-      const ListHashSetNodeBasePointer<U>& other) {
+      const ListHashSetNodeBasePointer<U, Allocator>& other) {
     SetSafe(other);
     return *this;
   }
@@ -308,12 +308,23 @@
   NodeType& operator*() const { return *Get(); }
 
  private:
+  template <bool = Allocator::kIsGarbageCollected>
   void SetSafe(NodeType* node) {
-    return AsAtomicPtr(&node_)->store(node, std::memory_order_relaxed);
+    AsAtomicPtr(&node_)->store(node, std::memory_order_relaxed);
   }
+  template <>
+  void SetSafe<false>(NodeType* node) {
+    node_ = node;
+  }
+
+  template <bool = Allocator::kIsGarbageCollected>
   NodeType* GetSafe() const {
     return AsAtomicPtr(&node_)->load(std::memory_order_relaxed);
   }
+  template <>
+  NodeType* GetSafe<false>() const {
+    return node_;
+  }
 
   NodeType* node_ = nullptr;
 
@@ -324,7 +335,7 @@
 // ListHashSetNode has this base class to hold the members because the MSVC
 // compiler otherwise gets into circular template dependencies when trying to do
 // sizeof on a node.
-template <typename ValueArg>
+template <typename ValueArg, typename Allocator>
 class ListHashSetNodeBase {
   DISALLOW_NEW();
 
@@ -334,8 +345,8 @@
 
  public:
   ValueArg value_;
-  ListHashSetNodeBasePointer<ValueArg> prev_;
-  ListHashSetNodeBasePointer<ValueArg> next_;
+  ListHashSetNodeBasePointer<ValueArg, Allocator> prev_;
+  ListHashSetNodeBasePointer<ValueArg, Allocator> next_;
 #if DCHECK_IS_ON()
   bool is_allocated_ = true;
 #endif
@@ -346,7 +357,7 @@
 struct ListHashSetAllocator : public PartitionAllocator {
   typedef PartitionAllocator TableAllocator;
   typedef ListHashSetNode<ValueArg, ListHashSetAllocator> Node;
-  typedef ListHashSetNodeBase<ValueArg> NodeBase;
+  typedef ListHashSetNodeBase<ValueArg, ListHashSetAllocator> NodeBase;
 
   class AllocatorProvider {
     DISALLOW_NEW();
@@ -451,19 +462,19 @@
 };
 
 template <typename ValueArg, typename AllocatorArg>
-class ListHashSetNode : public ListHashSetNodeBase<ValueArg> {
+class ListHashSetNode : public ListHashSetNodeBase<ValueArg, AllocatorArg> {
  public:
   typedef AllocatorArg NodeAllocator;
   typedef ValueArg Value;
 
   template <typename U>
   ListHashSetNode(U&& value)
-      : ListHashSetNodeBase<ValueArg>(std::forward<U>(value)) {}
+      : ListHashSetNodeBase<ValueArg, AllocatorArg>(std::forward<U>(value)) {}
 
   void* operator new(size_t, NodeAllocator* allocator) {
-    static_assert(
-        sizeof(ListHashSetNode) == sizeof(ListHashSetNodeBase<ValueArg>),
-        "please add any fields to the base");
+    static_assert(sizeof(ListHashSetNode) ==
+                      sizeof(ListHashSetNodeBase<ValueArg, AllocatorArg>),
+                  "please add any fields to the base");
     return allocator->AllocateNode();
   }
 
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 629fa67..e6e994d 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1786,18 +1786,30 @@
 
 # -
 # -
-# Group 1:
-crbug.com/1035582 fast/forms/basic-buttons.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/basic-inputs.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/button/button-align.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/button/button-white-space.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/button-sizes.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/button-style-color.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/button-table-styles.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/button-text-transform.html [ Failure Pass ]
+# -
+# Group 1 Leftovers:
+crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-datetimelocal.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-datetimelocal-with-step.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-should-not-change-datetimelocal-time.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-with-step.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/datetimelocal-picker-choose-default-value-after-set-value.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/month-picker-choose-default-value-after-set-value.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/month-picker-key-operations.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/month-picker-mouse-operations.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/month-picker-touch-operations.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/week-picker-key-operations.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/date-multiple-fields/date-clearbutton-preventdefault-mousecapture-status.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-mouse-events.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-spinbutton-change-and-input-events.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-wheel-event.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-spinbutton-change-and-input-events.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-wheel-event.html [ Failure Pass ]
+# Focus ring:
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-ar.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-coarse.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-minimum-date.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-required.html [ Failure Pass ]
@@ -1805,124 +1817,47 @@
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-step.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-datetimelocal.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-datetimelocal-with-step.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-should-not-change-datetimelocal-time.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-with-step.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/datetimelocal-picker-choose-default-value-after-set-value.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/month-picker-appearance.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-appearance.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/month-picker-appearance-step.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/month-picker-choose-default-value-after-set-value.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/month-picker-key-operations.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/month-picker-mouse-operations.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/month-picker-touch-operations.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/week-picker-appearance.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/month-picker-appearance.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/calendar-picker/week-picker-appearance-step.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/calendar-picker/week-picker-key-operations.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/color/color-suggestion-picker-appearance.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/calendar-picker/week-picker-appearance.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Failure Pass ]
+crbug.com/1035582 fast/forms/color/color-suggestion-picker-appearance.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/color/color-suggestion-picker-with-scrollbar-appearance.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/color/input-appearance-color.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/control-restrict-line-height.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datalist/input-appearance-range-with-datalist.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datalist/input-appearance-range-with-datalist-zoomed.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datalist/input-appearance-range-with-padding-with-datalist.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/date/date-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/date/date-appearance-l10n.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/date-multiple-fields/date-clearbutton-preventdefault-mousecapture-status.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-mouse-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-spinbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/date-multiple-fields/date-multiple-fields-wheel-event.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datetimelocal/datetimelocal-appearance-l10n.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-spinbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-wheel-event.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/file/file-input-direction.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/form-element-geometry.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/input-appearance-height.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/input-button-sizes.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/input-value.html [ Failure Pass ]
+
+
 # -
 # -
 # -
 # -
 # -
-# Group 2
+# Group 2 Leftovers:
+crbug.com/1035582 fast/forms/date-multiple-fields/* [ Skip ]
+crbug.com/1035582 fast/forms/datetimelocal-multiple-fields/* [ Skip ]
+crbug.com/1035582 fast/forms/month-multiple-fields/* [ Skip ]
+crbug.com/1035582 fast/forms/week-multiple-fields/* [ Skip ]
+crbug.com/1035582 fast/forms/time-multiple-fields/* [ Skip ]
+crbug.com/1035582 fast/forms/suggestion-picker/* [ Skip ]
+crbug.com/1035582 fast/forms/select/listbox-tap.html [ Failure Pass ]
+# Uncomment the one on 5715:
+crbug.com/1035582 fast/forms/suggested-value.html [ Failure Pass ]
+crbug.com/1035582 virtual/form-controls-refresh-disabled/fast/forms/select/menulist-update-text-popup.html [ Failure Pass ]
+# Focus ring:
 crbug.com/1035582 fast/forms/month/month-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/month/month-appearance-l10n.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/month-multiple-fields/month-multiple-fields-mouse-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/month-multiple-fields/month-multiple-fields-spinbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/month-multiple-fields/month-multiple-fields-wheel-event.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/number/number-appearance-datalist.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/number/number-appearance-spinbutton-disabled-readonly.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/placeholder-position.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/range/input-appearance-range.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/range/range-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/range/slider-padding.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/search/search-vertical-alignment.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/basic-selects.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/disabled-select-change-index.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/HTMLOptionElement_label02.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/HTMLOptionElement_label03.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/HTMLOptionElement_label04.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/select/listbox-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/listbox-bidi-align.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/listbox-tap.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/menulist-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/menulist-appearance-rtl.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/menulist-update-text-popup.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/option-strip-whitespace.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/select-align.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/select-disabled-appearance.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/select-initial-position.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/select-selected.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/select/select-writing-direction-natural.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/submit/submit-appearance-basic.html [ Failure Pass ]
-# Comment back in the Win7 version of this file at line 5896:
-crbug.com/1035582 fast/forms/suggested-value.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/date-suggestion-picker-appearance.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/datetimelocal-suggestion-picker-key-operations.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/month-suggestion-picker-appearance.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/month-suggestion-picker-key-operations.html [ Failure Pass Timeout ]
-crbug.com/1035582 fast/forms/suggestion-picker/time-suggestion-picker-appearance.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/time-suggestion-picker-key-operations.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/time-suggestion-picker-min-max-attribute.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/time-suggestion-picker-step-attribute.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/week-suggestion-picker-appearance.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/textarea/basic-textareas.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/textarea/basic-textareas-quirks.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/textarea/textarea-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/text/input-disabled-color.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/text/text-appearance-basic.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/text/text-appearance-datalist.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/time-multiple-fields/time-multiple-fields-mouse-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/time-multiple-fields/time-multiple-fields-spinbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/time-multiple-fields/time-multiple-fields-spinbutton-click-in-iframe.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/time-multiple-fields/time-multiple-fields-wheel-event.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/time/time-appearance-basic.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/week-multiple-fields/week-multiple-fields-mouse-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/week-multiple-fields/week-multiple-fields-spinbutton-change-and-input-events.html [ Failure Pass ]
-crbug.com/1035582 fast/forms/week-multiple-fields/week-multiple-fields-wheel-event.html [ Failure Pass ]
 crbug.com/1035582 fast/forms/week/week-appearance-basic.html [ Failure Pass ]
+
+
 # -
 # -
 # -
@@ -2155,132 +2090,22 @@
 # -
 # -
 # -
-# -
-# -
-# Group 5 (Win/Linux)
-crbug.com/1035582 [ Win ] compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] compositing/overflow/theme-affects-visual-overflow.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css1/box_properties/acid_test.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css2.1/t09-c5526c-display-00-e.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/flexbox/button.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-161.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-23.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-24.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-25.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-64.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-68.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-69.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/html/css3-modsel-70.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-161.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-23.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-24.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-25.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-64.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-68.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-69.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xhtml/css3-modsel-70.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-161.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-23.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-24.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-25.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-64.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-68.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-69.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] css3/selectors3/xml/css3-modsel-70.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-001.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-002.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-003.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-004.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-005.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-007.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-010.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-color-012.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/caret/caret-position.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/input/caret-at-the-edge-of-input.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/input/reveal-caret-of-multiline-input.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/inserting/4960120-1.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/pasteboard/4806874.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/selection/4975120.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] editing/selection/selection-button-text.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/block/basic/011.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/block/float/032.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/block/float/overhanging-tall-block.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/block/positioning/inline-block-relposition.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/css/input-search-padding.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/css/line-height.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/css/non-standard-checkbox-size.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/css/resize-corner-tracking.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/css/rtl-ordering.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/dom/HTMLMeterElement/meter-element.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/dom/HTMLProgressElement/progress-element.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/dynamic/008.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/files/file-in-input-display.html [ Failure Pass ]
-
-crbug.com/1035582 [ Linux ] compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] compositing/overflow/theme-affects-visual-overflow.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css1/box_properties/acid_test.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css2.1/t09-c5526c-display-00-e.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/flexbox/button.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-161.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-23.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-24.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-25.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-64.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-68.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-69.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/html/css3-modsel-70.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-161.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-23.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-24.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-25.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-64.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-68.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-69.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xhtml/css3-modsel-70.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-161.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-23.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-24.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-25.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-64.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-68.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-69.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] css3/selectors3/xml/css3-modsel-70.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-001.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-002.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-003.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-004.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-005.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-007.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-010.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-color-012.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/caret/caret-position.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/input/caret-at-the-edge-of-input.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/input/reveal-caret-of-multiline-input.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/inserting/4960120-1.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/pasteboard/4806874.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/selection/4975120.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] editing/selection/selection-button-text.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/block/basic/011.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/block/float/032.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/block/float/overhanging-tall-block.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/block/positioning/inline-block-relposition.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/css/input-search-padding.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/css/line-height.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/css/non-standard-checkbox-size.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/css/resize-corner-tracking.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/css/rtl-ordering.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/dom/HTMLMeterElement/meter-element.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/dom/HTMLProgressElement/progress-element.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/dynamic/008.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/files/file-in-input-display.html [ Failure Pass ]
-# -
-# -
+# Group 5 Leftovers (all focus rings)
+crbug.com/1035582  compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure Pass ]
+crbug.com/1035582  compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure Pass ]
+crbug.com/1035582  editing/caret/caret-color-001.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-color-002.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-color-003.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-color-004.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-color-005.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-color-007.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-color-010.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-color-012.html [ Failure Pass ]
+crbug.com/1035582 editing/caret/caret-position.html [ Failure Pass ]
+crbug.com/1035582 editing/input/caret-at-the-edge-of-input.html [ Failure Pass ]
+crbug.com/1035582 editing/input/reveal-caret-of-multiline-input.html [ Failure Pass ]
+crbug.com/1035582 editing/inserting/4960120-1.html [ Failure Pass ]
+crbug.com/1035582 editing/pasteboard/4806874.html [ Failure Pass ]
 # -
 # -
 # -
@@ -2376,241 +2201,31 @@
 # -
 # -
 # -
-# -
-# Group 7 (Win/Linux)
-crbug.com/1035582 [ Win ] fast/hidpi/resize-corner-hidpi.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/inline/positionedLifetime.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/invalid/014.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/lists/dynamic-marker-crash.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/multicol/input-with-overflow-second-column.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/overflow/overflow-x-y.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/overflow/scrollRevealButton.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/parser/bad-xml-slash.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/parser/entity-comment-in-textarea.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/parser/open-comment-in-textarea.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/replaced-breaking-mixture.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/three-selects-break.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/width100percent-checkbox.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/width100percent-menulist.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/width100percent-radio.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/width100percent-searchfield.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/width100percent-textarea.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/replaced/width100percent-textfield.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/selectors/064.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/table/003.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/table/append-cells2.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/table/colspanMinWidth.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/table/colspanMinWidth-vertical.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/table/remove-td-display-none.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/table/spanOverlapRepaint.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fast/table/text-field-baseline.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] fragmentation/outline-crossing-columns.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] html/details_summary/details-no-summary4.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] html/details_summary/details-open2.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] html/details_summary/details-open4.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] html/details_summary/details-open-javascript.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] html/details_summary/details-replace-summary-child.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] html/details_summary/details-replace-text.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] http/tests/filesystem/input-display.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] images/12-55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] images/182.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] images/23-55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] images/2-dht.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] images/55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/caret-subpixel.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/forms/radio-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/forms/slider-thumb-drag-release.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/forms/textarea-caret.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/renderer-destruction-by-invalidateSelection-crash.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/scroll/caret-invalidation-in-overflow-scroll.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/scroll/caret-with-composited-scroll.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/selection/selection-in-composited-scrolling-container.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/selection/selection-in-non-composited-scrolling-container.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/invalidation/subtree-root-skipped.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/roundedrects/input-with-rounded-rect-and-shadow.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/selection/text-selection-with-composition.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] paint/theme/adjust-progress-bar-size.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] scrollbars/listbox-scrollbar-combinations.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] svg/custom/inline-svg-in-xhtml.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] svg/hixie/mixed/003.xml [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/45621.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug1188.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug12384.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug1318.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug138725.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug24200.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug2479-2.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug26178.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug28928.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug29326.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug30559.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug30692.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug39209.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug4429.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug4527.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug46368-1.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug46368-2.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug51037.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug55545.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug59354.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug68912.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug7342.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug92647-2.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug96334.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/bugs/bug99948.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/collapsing_borders/bug41262-4.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/core/margins.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/dom/tableDom.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla_expected_failures/bugs/bug1725.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla_expected_failures/bugs/bug58402-2.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla_expected_failures/bugs/bug92647-1.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla_expected_failures/core/captions1.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla_expected_failures/core/captions2.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] tables/mozilla/other/move_row.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] transforms/3d/general/perspective-non-layer.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] transforms/transformed-focused-text-input.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/cascade/fast/forms/001.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/cascade/fast/forms/fieldset/fieldset-align.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/cascade/fast/forms/select/select-autofilled.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/dark-mode-native-theme-off/text-input-elements.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/dark-mode-native-theme-on/text-input-elements.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/exotic-color-space/images/12-55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/exotic-color-space/images/182.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/exotic-color-space/images/23-55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/exotic-color-space/images/2-dht.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/exotic-color-space/images/55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/gpu-rasterization/images/12-55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/gpu-rasterization/images/182.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/gpu-rasterization/images/23-55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/gpu-rasterization/images/2-dht.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/gpu-rasterization/images/55.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/layout_ng_block_frag/fast/multicol/input-with-overflow-second-column.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/layout_ng_block_frag/fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] virtual/layout_ng_block_frag/fragmentation/outline-crossing-columns.html [ Failure Pass ]
-crbug.com/1035582 [ Win ] external/wpt/css/css-pseudo/spelling-error-002-manual.html [ Failure Pass ]
+# Group 7 leftovers:
+crbug.com/1035582 virtual/gpu-rasterization/images/12-55.html [ Skip ]
+crbug.com/1035582 virtual/gpu-rasterization/images/182.html [ Skip ]
+# Focus rings:
+crbug.com/1035582 fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure Pass ]
+crbug.com/1035582 fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure Pass ]
+crbug.com/1035582 fast/overflow/scrollRevealButton.html [ Failure Pass ]
+crbug.com/1035582 fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure Pass ]
+crbug.com/1035582 http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/renderer-destruction-by-invalidateSelection-crash.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/forms/radio-focus-by-mouse-then-keydown.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/forms/textarea-caret.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/scroll/caret-invalidation-in-overflow-scroll.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/scroll/caret-with-composited-scroll.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/selection/selection-in-composited-scrolling-container.html [ Failure Pass ]
+crbug.com/1035582 paint/invalidation/selection/selection-in-non-composited-scrolling-container.html [ Failure Pass ]
+crbug.com/1035582 paint/selection/text-selection-with-composition.html [ Failure Pass ]
+crbug.com/1035582 transforms/transformed-focused-text-input.html [ Failure Pass ]
+crbug.com/1035582 virtual/layout_ng_block_frag/fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure Pass ]
+# Dark mode, flagged by schenney, looks wrong:
+crbug.com/1035582 virtual/dark-mode-native-theme-on/text-input-elements.html [ Failure Pass ]
 
-crbug.com/1035582 [ Linux ] fast/hidpi/resize-corner-hidpi.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/inline/positionedLifetime.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/invalid/014.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/lists/dynamic-marker-crash.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/multicol/input-with-overflow-second-column.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/overflow/overflow-x-y.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/overflow/scrollRevealButton.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/parser/bad-xml-slash.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/parser/entity-comment-in-textarea.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/parser/open-comment-in-textarea.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/replaced-breaking-mixture.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/three-selects-break.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/width100percent-checkbox.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/width100percent-menulist.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/width100percent-radio.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/width100percent-searchfield.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/width100percent-textarea.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/replaced/width100percent-textfield.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/selectors/064.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/table/003.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/table/append-cells2.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/table/colspanMinWidth.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/table/colspanMinWidth-vertical.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/table/remove-td-display-none.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/table/spanOverlapRepaint.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fast/table/text-field-baseline.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] fragmentation/outline-crossing-columns.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] html/details_summary/details-no-summary4.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] html/details_summary/details-open2.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] html/details_summary/details-open4.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] html/details_summary/details-open-javascript.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] html/details_summary/details-replace-summary-child.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] html/details_summary/details-replace-text.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] http/tests/filesystem/input-display.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] images/12-55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] images/182.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] images/23-55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] images/2-dht.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] images/55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/caret-subpixel.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/forms/radio-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/forms/slider-thumb-drag-release.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/forms/textarea-caret.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/renderer-destruction-by-invalidateSelection-crash.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/scroll/caret-invalidation-in-overflow-scroll.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/scroll/caret-with-composited-scroll.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/selection/selection-in-composited-scrolling-container.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/selection/selection-in-non-composited-scrolling-container.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/invalidation/subtree-root-skipped.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/roundedrects/input-with-rounded-rect-and-shadow.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/selection/text-selection-with-composition.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] paint/theme/adjust-progress-bar-size.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] scrollbars/listbox-scrollbar-combinations.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] svg/custom/inline-svg-in-xhtml.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] svg/hixie/mixed/003.xml [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/45621.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug1188.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug12384.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug1318.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug138725.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug24200.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug2479-2.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug26178.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug28928.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug29326.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug30559.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug30692.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug39209.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug4429.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug4527.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug46368-1.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug46368-2.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug51037.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug55545.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug59354.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug68912.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug7342.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug92647-2.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug96334.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/bugs/bug99948.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/collapsing_borders/bug41262-4.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/core/margins.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/dom/tableDom.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla_expected_failures/bugs/bug1725.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla_expected_failures/bugs/bug58402-2.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla_expected_failures/bugs/bug92647-1.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla_expected_failures/core/captions1.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla_expected_failures/core/captions2.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] tables/mozilla/other/move_row.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] transforms/3d/general/perspective-non-layer.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] transforms/transformed-focused-text-input.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/cascade/fast/forms/001.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/cascade/fast/forms/fieldset/fieldset-align.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/cascade/fast/forms/select/select-autofilled.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/dark-mode-native-theme-off/text-input-elements.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/dark-mode-native-theme-on/text-input-elements.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/exotic-color-space/images/12-55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/exotic-color-space/images/182.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/exotic-color-space/images/23-55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/exotic-color-space/images/2-dht.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/exotic-color-space/images/55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/gpu-rasterization/images/12-55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/gpu-rasterization/images/182.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/gpu-rasterization/images/23-55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/gpu-rasterization/images/2-dht.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/gpu-rasterization/images/55.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/layout_ng_block_frag/fast/multicol/input-with-overflow-second-column.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/layout_ng_block_frag/fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] virtual/layout_ng_block_frag/fragmentation/outline-crossing-columns.html [ Failure Pass ]
-crbug.com/1035582 [ Linux ] external/wpt/css/css-pseudo/spelling-error-002-manual.html [ Failure Pass ]
+# -
 # -
 # -
 # -
@@ -2625,9 +2240,6 @@
 crbug.com/1035582 external/wpt/css/selectors/focus-visible-003-manual.html [ Skip ]
 crbug.com/1035582 external/wpt/css/selectors/focus-visible-004-manual.html [ Skip ]
 
-# I don't know why this one is failing:
-crbug.com/1035582 [ Win ] wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any-expected.txt [ Skip ]
-
 # Failed in https://chromium-review.googlesource.com/c/chromium/src/+/1987072
 crbug.com/1035582 fast/forms/calendar-picker/calendar-picker-key-operations.html [ Skip ]
 # Comment back in at line 3002:
@@ -5686,7 +5298,7 @@
 crbug.com/767469 virtual/stable/http/tests/navigation/start-load-during-provisional-loader-detach.html [ Pass Failure ]
 
 # Sheriff failures 2017-10-02
-# crbug.com/770971 [ Win7 ] fast/forms/suggested-value.html [ Pass Failure ]
+##crbug.com/770971 [ Win7 ] fast/forms/suggested-value.html [ Pass Failure ]
 crbug.com/771492 [ Win ] external/wpt/css/css-tables/table-model-fixup-2.html [ Failure ]
 crbug.com/771492 [ Linux ] external/wpt/css/css-tables/table-model-fixup-2.html [ Failure ]
 crbug.com/771492 [ Mac ] external/wpt/css/css-tables/table-model-fixup-2.html [ Failure ]
@@ -6495,6 +6107,7 @@
 # speculative navigation in the browser, and committing the navigation in the
 # renderer.
 crbug.com/838348 external/wpt/portals/csp/frame-src.sub.html [ Pass Crash ]
+crbug.com/838348 virtual/out-of-blink-frame-ancestors-disabled/external/wpt/portals/csp/frame-src.sub.html [ Pass Crash ]
 
 # Sheriff 2019-04-17
 crbug.com/953591 [ Win ] css3/masking/mask-repeat-space-padding.html [ Pass Failure ]
@@ -7054,10 +6667,6 @@
 crbug.com/993790 external/wpt/document-policy/required-policy/no-document-policy.html [ Failure ]
 crbug.com/993790 external/wpt/document-policy/required-policy/required-document-policy-nested.html [ Failure ]
 crbug.com/993790 external/wpt/document-policy/required-policy/required-document-policy.html [ Failure ]
-crbug.com/993790 virtual/document-policy/external/wpt/document-policy/required-policy/document-policy.html [ Failure ]
-crbug.com/993790 virtual/document-policy/external/wpt/document-policy/required-policy/no-document-policy.html [ Failure ]
-crbug.com/993790 virtual/document-policy/external/wpt/document-policy/required-policy/required-document-policy-nested.html [ Failure ]
-crbug.com/993790 virtual/document-policy/external/wpt/document-policy/required-policy/required-document-policy.html [ Failure ]
 
 # Temporary suppression to allow devtools-frontend changes
 crbug.com/1029489 http/tests/devtools/elements/elements-linkify-attributes.js [ Pass Failure ]
@@ -7233,8 +6842,12 @@
 # Sheriff 2020-01-09
 crbug.com/1040270 http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.js [ Pass Timeout ]
 
+# Sheriff 2020-01-10
+crbug.com/1041052 external/wpt/offscreen-canvas/filter/offscreencanvas.filter.w.html [ Pass Failure ]
+crbug.com/1041052 external/wpt/2dcontext/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm [ Pass Failure ]
+
 # Temporarily disabled to land Animations accessibility changes in DevTools
 crbug.com/963183 http/tests/devtools/animation/animation-timeline.js [ Pass Failure ]
 
 # Broken in https://chromium-review.googlesource.com/c/chromium/src/+/1636716
-crbug.com/963183 http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.js [ Pass Failure ]
\ No newline at end of file
+crbug.com/963183 http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.js [ Pass Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
index e33352b..459a17f9c 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
@@ -62263,6 +62263,18 @@
      {}
     ]
    ],
+   "css/css-overflow/overflow-recalc-001.html": [
+    [
+     "css/css-overflow/overflow-recalc-001.html",
+     [
+      [
+       "/css/css-overflow/reference/overflow-recalc-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-overflow/webkit-line-clamp-001.html": [
     [
      "css/css-overflow/webkit-line-clamp-001.html",
@@ -145035,6 +145047,9 @@
    "css/css-overflow/reference/overflow-body-propagation-ref.html": [
     []
    ],
+   "css/css-overflow/reference/overflow-recalc-001-ref.html": [
+    []
+   ],
    "css/css-overflow/reference/webkit-line-clamp-001-ref.html": [
     []
    ],
@@ -156879,6 +156894,9 @@
    "element-timing/resources/circle.svg": [
     []
    ],
+   "element-timing/resources/circle.svg.headers": [
+    []
+   ],
    "element-timing/resources/element-timing-helpers.js": [
     []
    ],
@@ -160917,6 +160935,9 @@
    "html/browsers/windows/resources/window-opener.html": [
     []
    ],
+   "html/cross-origin-embedder-policy/META.yml": [
+    []
+   ],
    "html/cross-origin-embedder-policy/README.md": [
     []
    ],
@@ -160995,6 +161016,9 @@
    "html/cross-origin-embedder-policy/srcdoc.https.html.headers": [
     []
    ],
+   "html/cross-origin-opener-policy/META.yml": [
+    []
+   ],
    "html/cross-origin-opener-policy/README.md": [
     []
    ],
@@ -230642,6 +230666,12 @@
      {}
     ]
    ],
+   "dom/collections/HTMLCollection-live-mutations.window.js": [
+    [
+     "dom/collections/HTMLCollection-live-mutations.window.html",
+     {}
+    ]
+   ],
    "dom/collections/HTMLCollection-own-props.html": [
     [
      "dom/collections/HTMLCollection-own-props.html",
@@ -232149,6 +232179,12 @@
      {}
     ]
    ],
+   "dom/nodes/NodeList-live-mutations.window.js": [
+    [
+     "dom/nodes/NodeList-live-mutations.window.html",
+     {}
+    ]
+   ],
    "dom/nodes/ParentNode-append.html": [
     [
      "dom/nodes/ParentNode-append.html",
@@ -265175,6 +265211,12 @@
      {}
     ]
    ],
+   "largest-contentful-paint/multi-redirects-TAO.html": [
+    [
+     "largest-contentful-paint/multi-redirects-TAO.html",
+     {}
+    ]
+   ],
    "largest-contentful-paint/observe-after-untrusted-scroll.html": [
     [
      "largest-contentful-paint/observe-after-untrusted-scroll.html",
@@ -399837,6 +399879,10 @@
    "963192f6f431cd073f5d8fddc2294259ad62962b",
    "testharness"
   ],
+  "css/css-overflow/overflow-recalc-001.html": [
+   "9c5919a5044bdbac0e782fbb662f1ff3b81857fc",
+   "reftest"
+  ],
   "css/css-overflow/overflow-shorthand-001.html": [
    "f425636c3bb4297e4e6564d1c2629dc10dde5607",
    "testharness"
@@ -399949,6 +399995,10 @@
    "340bda9de92352fe1ef6633610da31e867013299",
    "support"
   ],
+  "css/css-overflow/reference/overflow-recalc-001-ref.html": [
+   "b18dee8caf1864dc30fe656750fe81a8863f1e90",
+   "support"
+  ],
   "css/css-overflow/reference/webkit-line-clamp-001-ref.html": [
    "ef28e01dac0223c9a2768d3fd1415fb9ef2f1c6b",
    "support"
@@ -443701,6 +443751,10 @@
    "4fc34db7f5f245933013a76335f71e9f4cffe115",
    "testharness"
   ],
+  "dom/collections/HTMLCollection-live-mutations.window.js": [
+   "7dbfc6ccf67d37d7272b3490665e218d0549e79e",
+   "testharness"
+  ],
   "dom/collections/HTMLCollection-own-props-expected.txt": [
    "8e6f69310f05283ed334427325624371f765279e",
    "support"
@@ -444989,6 +445043,10 @@
    "fcbee175cb3e07235fcd759e866feb488e31e91f",
    "testharness"
   ],
+  "dom/nodes/NodeList-live-mutations.window.js": [
+   "a11fed1e38efe88e634310d64db1bafe4d34fa1a",
+   "testharness"
+  ],
   "dom/nodes/ParentNode-append.html": [
    "dcc398f3f586d1d627d0ffa0c689f3b1f67ece16",
    "testharness"
@@ -446598,7 +446656,7 @@
    "testharness"
   ],
   "element-timing/multi-redirect-image.html": [
-   "c2f570f20df7989617ea37beaee266562cbf7756",
+   "2a12c5f03c42c6f45c3c975d3deba0c01b8db084",
    "testharness"
   ],
   "element-timing/multiple-background-images.html": [
@@ -446661,6 +446719,10 @@
    "209b9f4e5b5d55b45b5ec80dac25873d06dfb593",
    "support"
   ],
+  "element-timing/resources/circle.svg.headers": [
+   "7296361df3d1c5755acdb825661dbd9a1807b64f",
+   "support"
+  ],
   "element-timing/resources/element-timing-helpers.js": [
    "b7f2eef5978ac5d559865dd34848f15ef0abba10",
    "support"
@@ -457005,6 +457067,10 @@
    "7407248ffe9fe3da977275c2192e31e3db9fc8a9",
    "testharness"
   ],
+  "html/cross-origin-embedder-policy/META.yml": [
+   "103217d38892308541fbc0dbc8d39acfb47d4e80",
+   "support"
+  ],
   "html/cross-origin-embedder-policy/README.md": [
    "16179eb0133a9e14667e127da05f3dc796975875",
    "support"
@@ -457173,6 +457239,10 @@
    "6604450991a122e3e241e40b1b9e0516c525389d",
    "support"
   ],
+  "html/cross-origin-opener-policy/META.yml": [
+   "6c6d26211861f5af94cebae7a687b70d10ffe1b4",
+   "support"
+  ],
   "html/cross-origin-opener-policy/README.md": [
    "3f080c82d25de71d899d3b3011afcc3c553fb2a2",
    "support"
@@ -457238,7 +457308,7 @@
    "support"
   ],
   "html/cross-origin-opener-policy/coop-sandbox.https.html": [
-   "fc16c186cadf44bd1639d0eacf610e7781bc02bd",
+   "5fd11643d5720f54e0b5112e96a9cfea5cafdf9d",
    "testharness"
   ],
   "html/cross-origin-opener-policy/coop-sandbox.https.html.headers": [
@@ -458666,15 +458736,15 @@
    "testharness"
   ],
   "html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt": [
-   "e64f9bafa704efec2616061e72635bfb26517efa",
+   "66d22bb9cdb638008aabf9b7fbbf5b6c2cbe0582",
    "support"
   ],
   "html/dom/idlharness.https_include=(Document_Window)-expected.txt": [
-   "dc7ef25a1b2b646088fa01b69023aa9d05c125f3",
+   "cae5ab4d3a7685ab6c82e8ddcd3bc0eaee93abfe",
    "support"
   ],
   "html/dom/idlharness.https_include=HTML._-expected.txt": [
-   "b62838183a2251db9f078d63da742529fbaa20ba",
+   "a590e36fc57c60fa74a813d7cb828491584be1da",
    "support"
   ],
   "html/dom/idlharness.worker-expected.txt": [
@@ -474458,7 +474528,7 @@
    "manual"
   ],
   "html/webappapis/scripting/events/event-handler-all-global-events-expected.txt": [
-   "3ae75ce4a8ba76b185dffc8ba3bf07b56ad0bb47",
+   "ecf299baccef3442e58eeaf0e20dc2e2762d15cd",
    "support"
   ],
   "html/webappapis/scripting/events/event-handler-all-global-events.html": [
@@ -474466,7 +474536,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/events/event-handler-attributes-body-window-expected.txt": [
-   "caef6028d9d1bdc3d444463152fc6375b6c69fbf",
+   "69c88f095d8b50b60680d7523bac058d1b64233e",
    "support"
   ],
   "html/webappapis/scripting/events/event-handler-attributes-body-window.html": [
@@ -474474,7 +474544,7 @@
    "testharness"
   ],
   "html/webappapis/scripting/events/event-handler-attributes-frameset-window-expected.txt": [
-   "4dcaee309fd1f12e83f6d67eb4e655212624ea53",
+   "d0258b802be5d06fa3480277a2392e7a9caf6159",
    "support"
   ],
   "html/webappapis/scripting/events/event-handler-attributes-frameset-window.html": [
@@ -474486,7 +474556,7 @@
    "support"
   ],
   "html/webappapis/scripting/events/event-handler-attributes-windowless-body-expected.txt": [
-   "14bbc1ec4479e7f72ff845bab53de33da156fa7d",
+   "d69136c7d99429eab349fec3e29d4cc32d6a56fc",
    "support"
   ],
   "html/webappapis/scripting/events/event-handler-attributes-windowless-body.html": [
@@ -476798,7 +476868,7 @@
    "support"
   ],
   "interfaces/html.idl": [
-   "266574de63e8f2aac4a782ba836a277bb5a2997d",
+   "2c0c489315c96b6980181236b8602df60929c3f9",
    "support"
   ],
   "interfaces/image-capture.idl": [
@@ -477058,7 +477128,7 @@
    "support"
   ],
   "interfaces/web-nfc.idl": [
-   "12ea9d58bc055ee57efb65ae1495ebf4301427a5",
+   "f2e31b7352867d39edc9c43a4f1fffb3a02cb985",
    "support"
   ],
   "interfaces/web-share.idl": [
@@ -477645,6 +477715,10 @@
    "0e40127b57683fa76392827003b15c2bb9c8d558",
    "testharness"
   ],
+  "largest-contentful-paint/multi-redirects-TAO.html": [
+   "4e462c729aace01d40b9255465af7fc79f8fdb3c",
+   "testharness"
+  ],
   "largest-contentful-paint/observe-after-untrusted-scroll.html": [
    "1b2cd1d25b5bb9da740e5127526fed41dcebfae7",
    "testharness"
@@ -479298,7 +479372,7 @@
    "testharness"
   ],
   "mathml/relations/html5-tree/math-global-event-handlers.tentative-expected.txt": [
-   "64d81e59c5d128e31fc419f812f20937269bc795",
+   "b5ee241d57167a54bda79ff1bfe2b905c153d72f",
    "support"
   ],
   "mathml/relations/html5-tree/math-global-event-handlers.tentative.html": [
@@ -516062,7 +516136,7 @@
    "support"
   ],
   "tools/lint/lint.py": [
-   "a050cfa8a8e4e2699db44ce9e52f8f230a34a869",
+   "4090f2628a6fea12a0ed4957c55b925b14882f33",
    "support"
   ],
   "tools/lint/rules.py": [
@@ -526642,7 +526716,7 @@
    "support"
   ],
   "web-nfc/idlharness.https.window-expected.txt": [
-   "3a817f268b3ecb00d79cb4f623bc69ffff395470",
+   "28c57a9ddcbd8d2e153c229484d6ff3f085db13c",
    "support"
   ],
   "web-nfc/idlharness.https.window.js": [
diff --git a/third_party/blink/web_tests/external/wpt/document-policy/required-policy/document-policy.html b/third_party/blink/web_tests/external/wpt/document-policy/required-policy/document-policy.html
index d6bf3e9..1935be3d 100644
--- a/third_party/blink/web_tests/external/wpt/document-policy/required-policy/document-policy.html
+++ b/third_party/blink/web_tests/external/wpt/document-policy/required-policy/document-policy.html
@@ -45,7 +45,7 @@
   iframe.src = "/document-policy/echo-policy.py?id=3";
   iframe.policy = "unoptimized-lossless-images;bpp=4";
   callbacks["3"] = t.step_func_done(result => {
-    assert_equals(result, "unoptimized-lossless-images;bpp=4");
+    assert_equals(result, "unoptimized-lossless-images;bpp=4.0");
   });
   document.body.appendChild(iframe);
 }, "Child frame can have a required policy which is less strict than the parent document's policy.");
diff --git a/third_party/blink/web_tests/external/wpt/document-policy/required-policy/required-document-policy.html.headers b/third_party/blink/web_tests/external/wpt/document-policy/required-policy/required-document-policy.html.headers
index 066c0f83..1b671daf 100644
--- a/third_party/blink/web_tests/external/wpt/document-policy/required-policy/required-document-policy.html.headers
+++ b/third_party/blink/web_tests/external/wpt/document-policy/required-policy/required-document-policy.html.headers
@@ -1 +1 @@
-Required-Document-Policy: unoptimized-lossless-images;bpp=1.1
+Require-Document-Policy: unoptimized-lossless-images;bpp=1.1
diff --git a/third_party/blink/web_tests/external/wpt/dom/collections/HTMLCollection-live-mutations.window.js b/third_party/blink/web_tests/external/wpt/dom/collections/HTMLCollection-live-mutations.window.js
new file mode 100644
index 0000000..7dbfc6c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/collections/HTMLCollection-live-mutations.window.js
@@ -0,0 +1,93 @@
+function testHTMLCollection(name, hooks) {
+  test(() => {
+    const nodes = {
+      root: document.createElement("div"),
+      div1: document.createElement("div"),
+      div2: document.createElement("div"),
+      p: document.createElement("p")
+    };
+
+    nodes.div1.id = "div1";
+    nodes.div2.id = "div2";
+
+    const list = nodes.root.getElementsByTagName("div");
+
+    hooks.initial(list, nodes);
+
+    nodes.root.appendChild(nodes.div1);
+    nodes.root.appendChild(nodes.p);
+    nodes.root.appendChild(nodes.div2);
+
+    hooks.afterInsertion(list, nodes);
+
+    nodes.root.removeChild(nodes.div1);
+
+    hooks.afterRemoval(list, nodes);
+  }, `HTMLCollection live mutations: ${name}`);
+}
+
+testHTMLCollection("HTMLCollection.length", {
+  initial(list) {
+    assert_equals(list.length, 0);
+  },
+  afterInsertion(list) {
+    assert_equals(list.length, 2);
+  },
+  afterRemoval(list) {
+    assert_equals(list.length, 1);
+  }
+});
+
+testHTMLCollection("HTMLCollection.item(index)", {
+  initial(list) {
+    assert_equals(list.item(0), null);
+  },
+  afterInsertion(list, nodes) {
+    assert_equals(list.item(0), nodes.div1);
+    assert_equals(list.item(1), nodes.div2);
+  },
+  afterRemoval(list, nodes) {
+    assert_equals(list.item(0), nodes.div2);
+  }
+});
+
+testHTMLCollection("HTMLCollection[index]", {
+  initial(list) {
+    assert_equals(list[0], undefined);
+  },
+  afterInsertion(list, nodes) {
+    assert_equals(list[0], nodes.div1);
+    assert_equals(list[1], nodes.div2);
+  },
+  afterRemoval(list, nodes) {
+    assert_equals(list[0], nodes.div2);
+  }
+});
+
+testHTMLCollection("HTMLCollection.namedItem(index)", {
+  initial(list) {
+    assert_equals(list.namedItem("div1"), null);
+    assert_equals(list.namedItem("div2"), null);
+  },
+  afterInsertion(list, nodes) {
+    assert_equals(list.namedItem("div1"), nodes.div1);
+    assert_equals(list.namedItem("div2"), nodes.div2);
+  },
+  afterRemoval(list, nodes) {
+    assert_equals(list.namedItem("div1"), null);
+    assert_equals(list.namedItem("div2"), nodes.div2);
+  }
+});
+
+testHTMLCollection("HTMLCollection ownPropertyNames", {
+  initial(list) {
+    assert_object_equals(Object.getOwnPropertyNames(list), []);
+  },
+  afterInsertion(list) {
+    assert_object_equals(Object.getOwnPropertyNames(list), ["0", "1", "div1", "div2"]);
+  },
+  afterRemoval(list) {
+    assert_object_equals(Object.getOwnPropertyNames(list), ["0", "div2"]);
+  }
+});
+
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/NodeList-live-mutations.window.js b/third_party/blink/web_tests/external/wpt/dom/nodes/NodeList-live-mutations.window.js
new file mode 100644
index 0000000..a11fed1e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/NodeList-live-mutations.window.js
@@ -0,0 +1,79 @@
+function testNodeList(name, hooks) {
+  test(() => {
+    const nodes = {
+      root: document.createElement("div"),
+      div1: document.createElement("div"),
+      div2: document.createElement("div"),
+      p: document.createElement("p")
+    };
+
+    const list = nodes.root.childNodes;
+
+    hooks.initial(list, nodes);
+
+    nodes.root.appendChild(nodes.div1);
+    nodes.root.appendChild(nodes.p);
+    nodes.root.appendChild(nodes.div2);
+
+    hooks.afterInsertion(list, nodes);
+
+    nodes.root.removeChild(nodes.div1);
+
+    hooks.afterRemoval(list, nodes);
+  }, `NodeList live mutations: ${name}`);
+}
+
+testNodeList("NodeList.length", {
+  initial(list) {
+    assert_equals(list.length, 0);
+  },
+  afterInsertion(list) {
+    assert_equals(list.length, 3);
+  },
+  afterRemoval(list) {
+    assert_equals(list.length, 2);
+  }
+});
+
+testNodeList("NodeList.item(index)", {
+  initial(list) {
+    assert_equals(list.item(0), null);
+  },
+  afterInsertion(list, nodes) {
+    assert_equals(list.item(0), nodes.div1);
+    assert_equals(list.item(1), nodes.p);
+    assert_equals(list.item(2), nodes.div2);
+  },
+  afterRemoval(list, nodes) {
+    assert_equals(list.item(0), nodes.p);
+    assert_equals(list.item(1), nodes.div2);
+  }
+});
+
+testNodeList("NodeList[index]", {
+  initial(list) {
+    assert_equals(list[0], undefined);
+  },
+  afterInsertion(list, nodes) {
+    assert_equals(list[0], nodes.div1);
+    assert_equals(list[1], nodes.p);
+    assert_equals(list[2], nodes.div2);
+  },
+  afterRemoval(list, nodes) {
+    assert_equals(list[0], nodes.p);
+    assert_equals(list[1], nodes.div2);
+  }
+});
+
+testNodeList("NodeList ownPropertyNames", {
+  initial(list) {
+    assert_object_equals(Object.getOwnPropertyNames(list), []);
+  },
+  afterInsertion(list) {
+    assert_object_equals(Object.getOwnPropertyNames(list), ["0", "1", "2"]);
+  },
+  afterRemoval(list) {
+    assert_object_equals(Object.getOwnPropertyNames(list), ["0", "1"]);
+  }
+});
+
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/META.yml b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/META.yml
new file mode 100644
index 0000000..103217d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/META.yml
@@ -0,0 +1,9 @@
+spec: https://mikewest.github.io/corpp/
+suggested_reviewers:
+  - mikewest
+  - jugglinmike
+  - arturjanc
+  - lweichselbaum
+  - hemeryar
+  - ParisMeuleman
+  - valenting
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/META.yml b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/META.yml
new file mode 100644
index 0000000..6c6d262
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/META.yml
@@ -0,0 +1,9 @@
+spec: https://gist.github.com/annevk/6f2dd8c79c77123f39797f6bdac43f3e
+suggested_reviewers:
+  - mikewest
+  - jugglinmike
+  - arturjanc
+  - lweichselbaum
+  - hemeryar
+  - ParisMeuleman
+  - valenting
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html
index fc16c18..5fd1164 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html
@@ -5,20 +5,25 @@
 <script src="/common/utils.js"></script> <!-- Use token() to allow running tests in parallel -->
 <div id=log>
 <script>
-async_test(t => {
-  const frame = document.createElement("iframe");
-  const channel = new BroadcastChannel(token());
-  channel.onmessage = t.unreached_func("A COOP popup was created from a sandboxed frame");
-  t.add_cleanup(() => frame.remove());
-  frame.sandbox = "allow-popups allow-scripts allow-same-origin";
-  frame.srcdoc = `<script>
-const popup = window.open("resources/coop-coep.py?coop=same-origin&coep=&channel=${channel.name}");
-<\/script>`;
-  document.body.append(frame);
-  window.onload = t.step_func(() => {
-    t.step_timeout(() => {
-      t.done()
-    }, 1500);
-  });
+[
+  "allow-popups allow-scripts allow-same-origin",
+  "allow-popups allow-scripts",
+].forEach(sandboxValue => {
+  async_test(t => {
+    const frame = document.createElement("iframe");
+    const channel = new BroadcastChannel(token());
+    channel.onmessage = t.unreached_func("A COOP popup was created from a sandboxed frame");
+    t.add_cleanup(() => frame.remove());
+    frame.sandbox = sandboxValue;
+    frame.srcdoc = `<script>
+  const popup = window.open("resources/coop-coep.py?coop=same-origin&coep=&channel=${channel.name}");
+  <\/script>`;
+    document.body.append(frame);
+    addEventListener('load', t.step_func(() => {
+      t.step_timeout(() => {
+        t.done()
+      }, 1500);
+    }));
+  }, `<iframe sandbox="${sandboxValue}"> ${document.title}`);
 });
 </script>
diff --git "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt" "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt"
index e64f9ba..66d22bb 100644
--- "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt"
+++ "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt"
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 1397 tests; 1356 PASS, 41 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 1401 tests; 1356 PASS, 45 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS Partial interface Document: original interface defined
@@ -1371,6 +1371,10 @@
 PASS SVGElement interface: attribute ontoggle
 PASS SVGElement interface: attribute onvolumechange
 PASS SVGElement interface: attribute onwaiting
+FAIL SVGElement interface: attribute onwebkitanimationend assert_true: The prototype object must have a property "onwebkitanimationend" expected true got false
+FAIL SVGElement interface: attribute onwebkitanimationiteration assert_true: The prototype object must have a property "onwebkitanimationiteration" expected true got false
+FAIL SVGElement interface: attribute onwebkitanimationstart assert_true: The prototype object must have a property "onwebkitanimationstart" expected true got false
+FAIL SVGElement interface: attribute onwebkittransitionend assert_true: The prototype object must have a property "onwebkittransitionend" expected true got false
 PASS SVGElement interface: attribute oncopy
 PASS SVGElement interface: attribute oncut
 PASS SVGElement interface: attribute onpaste
diff --git "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt" "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt"
index dc7ef25..cae5ab4 100644
--- "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt"
+++ "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt"
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 939 tests; 912 PASS, 27 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 963 tests; 920 PASS, 43 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS Partial interface Document: original interface defined
@@ -277,6 +277,10 @@
 PASS Window interface: attribute ontoggle
 PASS Window interface: attribute onvolumechange
 PASS Window interface: attribute onwaiting
+PASS Window interface: attribute onwebkitanimationend
+PASS Window interface: attribute onwebkitanimationiteration
+PASS Window interface: attribute onwebkitanimationstart
+PASS Window interface: attribute onwebkittransitionend
 PASS Window interface: attribute onafterprint
 PASS Window interface: attribute onbeforeprint
 PASS Window interface: attribute onbeforeunload
@@ -422,6 +426,10 @@
 PASS Window interface: window must inherit property "ontoggle" with the proper type
 PASS Window interface: window must inherit property "onvolumechange" with the proper type
 PASS Window interface: window must inherit property "onwaiting" with the proper type
+PASS Window interface: window must inherit property "onwebkitanimationend" with the proper type
+PASS Window interface: window must inherit property "onwebkitanimationiteration" with the proper type
+PASS Window interface: window must inherit property "onwebkitanimationstart" with the proper type
+PASS Window interface: window must inherit property "onwebkittransitionend" with the proper type
 PASS Window interface: window must inherit property "onafterprint" with the proper type
 PASS Window interface: window must inherit property "onbeforeprint" with the proper type
 PASS Window interface: window must inherit property "onbeforeunload" with the proper type
@@ -569,6 +577,10 @@
 PASS Document interface: attribute ontoggle
 PASS Document interface: attribute onvolumechange
 PASS Document interface: attribute onwaiting
+FAIL Document interface: attribute onwebkitanimationend assert_true: The prototype object must have a property "onwebkitanimationend" expected true got false
+FAIL Document interface: attribute onwebkitanimationiteration assert_true: The prototype object must have a property "onwebkitanimationiteration" expected true got false
+FAIL Document interface: attribute onwebkitanimationstart assert_true: The prototype object must have a property "onwebkitanimationstart" expected true got false
+FAIL Document interface: attribute onwebkittransitionend assert_true: The prototype object must have a property "onwebkittransitionend" expected true got false
 PASS Document interface: attribute oncopy
 PASS Document interface: attribute oncut
 PASS Document interface: attribute onpaste
@@ -691,6 +703,10 @@
 PASS Document interface: iframe.contentDocument must inherit property "ontoggle" with the proper type
 PASS Document interface: iframe.contentDocument must inherit property "onvolumechange" with the proper type
 PASS Document interface: iframe.contentDocument must inherit property "onwaiting" with the proper type
+FAIL Document interface: iframe.contentDocument must inherit property "onwebkitanimationend" with the proper type assert_inherits: property "onwebkitanimationend" not found in prototype chain
+FAIL Document interface: iframe.contentDocument must inherit property "onwebkitanimationiteration" with the proper type assert_inherits: property "onwebkitanimationiteration" not found in prototype chain
+FAIL Document interface: iframe.contentDocument must inherit property "onwebkitanimationstart" with the proper type assert_inherits: property "onwebkitanimationstart" not found in prototype chain
+FAIL Document interface: iframe.contentDocument must inherit property "onwebkittransitionend" with the proper type assert_inherits: property "onwebkittransitionend" not found in prototype chain
 PASS Document interface: iframe.contentDocument must inherit property "oncopy" with the proper type
 PASS Document interface: iframe.contentDocument must inherit property "oncut" with the proper type
 PASS Document interface: iframe.contentDocument must inherit property "onpaste" with the proper type
@@ -813,6 +829,10 @@
 PASS Document interface: new Document() must inherit property "ontoggle" with the proper type
 PASS Document interface: new Document() must inherit property "onvolumechange" with the proper type
 PASS Document interface: new Document() must inherit property "onwaiting" with the proper type
+FAIL Document interface: new Document() must inherit property "onwebkitanimationend" with the proper type assert_inherits: property "onwebkitanimationend" not found in prototype chain
+FAIL Document interface: new Document() must inherit property "onwebkitanimationiteration" with the proper type assert_inherits: property "onwebkitanimationiteration" not found in prototype chain
+FAIL Document interface: new Document() must inherit property "onwebkitanimationstart" with the proper type assert_inherits: property "onwebkitanimationstart" not found in prototype chain
+FAIL Document interface: new Document() must inherit property "onwebkittransitionend" with the proper type assert_inherits: property "onwebkittransitionend" not found in prototype chain
 PASS Document interface: new Document() must inherit property "oncopy" with the proper type
 PASS Document interface: new Document() must inherit property "oncut" with the proper type
 PASS Document interface: new Document() must inherit property "onpaste" with the proper type
@@ -935,6 +955,10 @@
 PASS Document interface: documentWithHandlers must inherit property "ontoggle" with the proper type
 PASS Document interface: documentWithHandlers must inherit property "onvolumechange" with the proper type
 PASS Document interface: documentWithHandlers must inherit property "onwaiting" with the proper type
+FAIL Document interface: documentWithHandlers must inherit property "onwebkitanimationend" with the proper type assert_inherits: property "onwebkitanimationend" found on object expected in prototype chain
+FAIL Document interface: documentWithHandlers must inherit property "onwebkitanimationiteration" with the proper type assert_inherits: property "onwebkitanimationiteration" found on object expected in prototype chain
+FAIL Document interface: documentWithHandlers must inherit property "onwebkitanimationstart" with the proper type assert_inherits: property "onwebkitanimationstart" found on object expected in prototype chain
+FAIL Document interface: documentWithHandlers must inherit property "onwebkittransitionend" with the proper type assert_inherits: property "onwebkittransitionend" found on object expected in prototype chain
 PASS Document interface: documentWithHandlers must inherit property "oncopy" with the proper type
 PASS Document interface: documentWithHandlers must inherit property "oncut" with the proper type
 PASS Document interface: documentWithHandlers must inherit property "onpaste" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=HTML._-expected.txt b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=HTML._-expected.txt
index b628381..a590e36 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=HTML._-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=HTML._-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 3721 tests; 3680 PASS, 41 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 3729 tests; 3680 PASS, 49 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS Partial interface Document: original interface defined
@@ -295,6 +295,10 @@
 PASS HTMLElement interface: attribute ontoggle
 PASS HTMLElement interface: attribute onvolumechange
 PASS HTMLElement interface: attribute onwaiting
+FAIL HTMLElement interface: attribute onwebkitanimationend assert_true: The prototype object must have a property "onwebkitanimationend" expected true got false
+FAIL HTMLElement interface: attribute onwebkitanimationiteration assert_true: The prototype object must have a property "onwebkitanimationiteration" expected true got false
+FAIL HTMLElement interface: attribute onwebkitanimationstart assert_true: The prototype object must have a property "onwebkitanimationstart" expected true got false
+FAIL HTMLElement interface: attribute onwebkittransitionend assert_true: The prototype object must have a property "onwebkittransitionend" expected true got false
 PASS HTMLElement interface: attribute oncopy
 PASS HTMLElement interface: attribute oncut
 PASS HTMLElement interface: attribute onpaste
@@ -386,6 +390,10 @@
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "ontoggle" with the proper type
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "onvolumechange" with the proper type
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "onwaiting" with the proper type
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onwebkitanimationend" with the proper type assert_inherits: property "onwebkitanimationend" not found in prototype chain
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onwebkitanimationiteration" with the proper type assert_inherits: property "onwebkitanimationiteration" not found in prototype chain
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onwebkitanimationstart" with the proper type assert_inherits: property "onwebkitanimationstart" not found in prototype chain
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onwebkittransitionend" with the proper type assert_inherits: property "onwebkittransitionend" not found in prototype chain
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncopy" with the proper type
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncut" with the proper type
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "onpaste" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-all-global-events-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-all-global-events-expected.txt
index 3ae75ce4..ecf299b 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-all-global-events-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-all-global-events-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 310 tests; 298 PASS, 12 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 330 tests; 302 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS onabort: must be on the appropriate locations for GlobalEventHandlers
 PASS onabort: the default value must be null
 PASS onabort: the content attribute must be compiled into a function as the corresponding property
@@ -310,5 +310,25 @@
 PASS onwaiting: the content attribute must be compiled into a function as the corresponding property
 PASS onwaiting: the content attribute must execute when an event is dispatched
 PASS onwaiting: dispatching an Event at a <meta> element must trigger element.onwaiting
+FAIL onwebkitanimationend: must be on the appropriate locations for GlobalEventHandlers assert_true: HTMLElement has an own property named "onwebkitanimationend" expected true got false
+FAIL onwebkitanimationend: the default value must be null assert_equals: The default value of the property is null for a HTMLSpanElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationend: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkitanimationend property must be a function expected "function" but got "undefined"
+FAIL onwebkitanimationend: the content attribute must execute when an event is dispatched assert_true: Dispatching an event must run the code expected true got undefined
+PASS onwebkitanimationend: dispatching an Event at a <meta> element must trigger element.onwebkitanimationend
+FAIL onwebkitanimationiteration: must be on the appropriate locations for GlobalEventHandlers assert_true: HTMLElement has an own property named "onwebkitanimationiteration" expected true got false
+FAIL onwebkitanimationiteration: the default value must be null assert_equals: The default value of the property is null for a HTMLSpanElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationiteration: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkitanimationiteration property must be a function expected "function" but got "undefined"
+FAIL onwebkitanimationiteration: the content attribute must execute when an event is dispatched assert_true: Dispatching an event must run the code expected true got undefined
+PASS onwebkitanimationiteration: dispatching an Event at a <meta> element must trigger element.onwebkitanimationiteration
+FAIL onwebkitanimationstart: must be on the appropriate locations for GlobalEventHandlers assert_true: HTMLElement has an own property named "onwebkitanimationstart" expected true got false
+FAIL onwebkitanimationstart: the default value must be null assert_equals: The default value of the property is null for a HTMLSpanElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationstart: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkitanimationstart property must be a function expected "function" but got "undefined"
+FAIL onwebkitanimationstart: the content attribute must execute when an event is dispatched assert_true: Dispatching an event must run the code expected true got undefined
+PASS onwebkitanimationstart: dispatching an Event at a <meta> element must trigger element.onwebkitanimationstart
+FAIL onwebkittransitionend: must be on the appropriate locations for GlobalEventHandlers assert_true: HTMLElement has an own property named "onwebkittransitionend" expected true got false
+FAIL onwebkittransitionend: the default value must be null assert_equals: The default value of the property is null for a HTMLSpanElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkittransitionend: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkittransitionend property must be a function expected "function" but got "undefined"
+FAIL onwebkittransitionend: the content attribute must execute when an event is dispatched assert_true: Dispatching an event must run the code expected true got undefined
+PASS onwebkittransitionend: dispatching an Event at a <meta> element must trigger element.onwebkittransitionend
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window-expected.txt
index caef602..69c88f09 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 312 tests; 297 PASS, 15 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 324 tests; 297 PASS, 27 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS shadowed blur (document.body)
 PASS shadowed error (document.body)
 PASS shadowed focus (document.body)
@@ -79,6 +79,10 @@
 PASS not shadowed toggle (document.body)
 PASS not shadowed volumechange (document.body)
 PASS not shadowed waiting (document.body)
+FAIL not shadowed webkitanimationend (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationiteration (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationstart (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkittransitionend (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed copy (document.body) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed cut (document.body) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed paste (document.body) assert_equals: window should reflect expected (object) null but got (undefined) undefined
@@ -183,6 +187,10 @@
 PASS not shadowed toggle (document.createElement("body"))
 PASS not shadowed volumechange (document.createElement("body"))
 PASS not shadowed waiting (document.createElement("body"))
+FAIL not shadowed webkitanimationend (document.createElement("body")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationiteration (document.createElement("body")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationstart (document.createElement("body")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkittransitionend (document.createElement("body")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed copy (document.createElement("body")) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed cut (document.createElement("body")) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed paste (document.createElement("body")) assert_equals: window should reflect expected (object) null but got (undefined) undefined
@@ -287,6 +295,10 @@
 PASS not shadowed toggle (window)
 PASS not shadowed volumechange (window)
 PASS not shadowed waiting (window)
+FAIL not shadowed webkitanimationend (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationiteration (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationstart (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkittransitionend (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
 PASS not shadowed copy (window)
 PASS not shadowed cut (window)
 PASS not shadowed paste (window)
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-frameset-window-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-frameset-window-expected.txt
index 4dcaee30..d0258b8 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-frameset-window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-frameset-window-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 312 tests; 297 PASS, 15 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 324 tests; 297 PASS, 27 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS shadowed blur (document.body)
 PASS shadowed error (document.body)
 PASS shadowed focus (document.body)
@@ -79,6 +79,10 @@
 PASS not shadowed toggle (document.body)
 PASS not shadowed volumechange (document.body)
 PASS not shadowed waiting (document.body)
+FAIL not shadowed webkitanimationend (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationiteration (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationstart (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkittransitionend (document.body) assert_equals: alternative body should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed copy (document.body) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed cut (document.body) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed paste (document.body) assert_equals: window should reflect expected (object) null but got (undefined) undefined
@@ -183,6 +187,10 @@
 PASS not shadowed toggle (document.createElement("frameset"))
 PASS not shadowed volumechange (document.createElement("frameset"))
 PASS not shadowed waiting (document.createElement("frameset"))
+FAIL not shadowed webkitanimationend (document.createElement("frameset")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationiteration (document.createElement("frameset")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationstart (document.createElement("frameset")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkittransitionend (document.createElement("frameset")) assert_equals: body should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed copy (document.createElement("frameset")) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed cut (document.createElement("frameset")) assert_equals: window should reflect expected (object) null but got (undefined) undefined
 FAIL not shadowed paste (document.createElement("frameset")) assert_equals: window should reflect expected (object) null but got (undefined) undefined
@@ -287,6 +295,10 @@
 PASS not shadowed toggle (window)
 PASS not shadowed volumechange (window)
 PASS not shadowed waiting (window)
+FAIL not shadowed webkitanimationend (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationiteration (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkitanimationstart (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
+FAIL not shadowed webkittransitionend (window) assert_equals: body should reflect expected (object) null but got (undefined) undefined
 PASS not shadowed copy (window)
 PASS not shadowed cut (window)
 PASS not shadowed paste (window)
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-windowless-body-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-windowless-body-expected.txt
index 14bbc1e..d69136c 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-windowless-body-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/events/event-handler-attributes-windowless-body-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 208 tests; 202 PASS, 6 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 216 tests; 202 PASS, 14 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Return null when getting the blur event handler of a windowless body
 PASS Ignore setting of blur window event handlers on windowless body
 PASS Return null when getting the error event handler of a windowless body
@@ -101,6 +101,10 @@
 PASS toggle is unaffected on a windowless body
 PASS volumechange is unaffected on a windowless body
 PASS waiting is unaffected on a windowless body
+FAIL webkitanimationend is unaffected on a windowless body assert_equals: expected (object) null but got (undefined) undefined
+FAIL webkitanimationiteration is unaffected on a windowless body assert_equals: expected (object) null but got (undefined) undefined
+FAIL webkitanimationstart is unaffected on a windowless body assert_equals: expected (object) null but got (undefined) undefined
+FAIL webkittransitionend is unaffected on a windowless body assert_equals: expected (object) null but got (undefined) undefined
 PASS copy is unaffected on a windowless body
 PASS cut is unaffected on a windowless body
 PASS paste is unaffected on a windowless body
@@ -205,6 +209,10 @@
 PASS toggle is unaffected on a windowless frameset
 PASS volumechange is unaffected on a windowless frameset
 PASS waiting is unaffected on a windowless frameset
+FAIL webkitanimationend is unaffected on a windowless frameset assert_equals: expected (object) null but got (undefined) undefined
+FAIL webkitanimationiteration is unaffected on a windowless frameset assert_equals: expected (object) null but got (undefined) undefined
+FAIL webkitanimationstart is unaffected on a windowless frameset assert_equals: expected (object) null but got (undefined) undefined
+FAIL webkittransitionend is unaffected on a windowless frameset assert_equals: expected (object) null but got (undefined) undefined
 PASS copy is unaffected on a windowless frameset
 PASS cut is unaffected on a windowless frameset
 PASS paste is unaffected on a windowless frameset
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/html.idl b/third_party/blink/web_tests/external/wpt/interfaces/html.idl
index 266574de..2c0c489 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/html.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/html.idl
@@ -1925,6 +1925,10 @@
   attribute EventHandler ontoggle;
   attribute EventHandler onvolumechange;
   attribute EventHandler onwaiting;
+  attribute EventHandler onwebkitanimationend;
+  attribute EventHandler onwebkitanimationiteration;
+  attribute EventHandler onwebkitanimationstart;
+  attribute EventHandler onwebkittransitionend;
 };
 
 interface mixin WindowEventHandlers {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
index 12ea9d5..f2e31b73 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
@@ -47,7 +47,7 @@
 interface NDEFWriter {
   constructor();
 
-  Promise<void> push(NDEFMessageSource message, optional NDEFPushOptions options={});
+  Promise<void> write(NDEFMessageSource message, optional NDEFWriteOptions options={});
 };
 
 [SecureContext, Exposed=Window]
@@ -73,19 +73,12 @@
   required NDEFMessageInit message;
 };
 
-dictionary NDEFPushOptions {
-  NDEFPushTarget target = "any";
+dictionary NDEFWriteOptions {
   boolean ignoreRead = true;
   boolean overwrite = true;
   AbortSignal? signal;
 };
 
-enum NDEFPushTarget {
-  "tag",
-  "peer",
-  "any"
-};
-
 dictionary NDEFScanOptions {
   USVString id;
   USVString recordType;
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative-expected.txt
index 64d81e59..b5ee241 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 310 tests; 295 PASS, 15 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 330 tests; 295 PASS, 35 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS onabort: must be on the appropriate locations for GlobalEventHandlers
 PASS onabort: the default value must be null
 PASS onabort: the content attribute must be compiled into a function as the corresponding property
@@ -310,5 +310,25 @@
 PASS onwaiting: the content attribute must be compiled into a function as the corresponding property
 PASS onwaiting: dynamic changes on the attribute
 PASS onwaiting: dispatching an Event at a <math> element must trigger element.onwaiting
+FAIL onwebkitanimationend: must be on the appropriate locations for GlobalEventHandlers assert_true: MathMLElement has an own property named "onwebkitanimationend" expected true got false
+FAIL onwebkitanimationend: the default value must be null assert_equals: The default value of the property is null for a MathMLElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationend: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkitanimationend property must be a function expected "function" but got "undefined"
+FAIL onwebkitanimationend: dynamic changes on the attribute assert_equals: The onwebkitanimationend property must be null (no attribute) expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationend: dispatching an Event at a <math> element must trigger element.onwebkitanimationend assert_equals: The event must be fired at the <math> element expected (object) Element node <math></math> but got (undefined) undefined
+FAIL onwebkitanimationiteration: must be on the appropriate locations for GlobalEventHandlers assert_true: MathMLElement has an own property named "onwebkitanimationiteration" expected true got false
+FAIL onwebkitanimationiteration: the default value must be null assert_equals: The default value of the property is null for a MathMLElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationiteration: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkitanimationiteration property must be a function expected "function" but got "undefined"
+FAIL onwebkitanimationiteration: dynamic changes on the attribute assert_equals: The onwebkitanimationiteration property must be null (no attribute) expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationiteration: dispatching an Event at a <math> element must trigger element.onwebkitanimationiteration assert_equals: The event must be fired at the <math> element expected (object) Element node <math></math> but got (undefined) undefined
+FAIL onwebkitanimationstart: must be on the appropriate locations for GlobalEventHandlers assert_true: MathMLElement has an own property named "onwebkitanimationstart" expected true got false
+FAIL onwebkitanimationstart: the default value must be null assert_equals: The default value of the property is null for a MathMLElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationstart: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkitanimationstart property must be a function expected "function" but got "undefined"
+FAIL onwebkitanimationstart: dynamic changes on the attribute assert_equals: The onwebkitanimationstart property must be null (no attribute) expected (object) null but got (undefined) undefined
+FAIL onwebkitanimationstart: dispatching an Event at a <math> element must trigger element.onwebkitanimationstart assert_equals: The event must be fired at the <math> element expected (object) Element node <math></math> but got (undefined) undefined
+FAIL onwebkittransitionend: must be on the appropriate locations for GlobalEventHandlers assert_true: MathMLElement has an own property named "onwebkittransitionend" expected true got false
+FAIL onwebkittransitionend: the default value must be null assert_equals: The default value of the property is null for a MathMLElement instance expected (object) null but got (undefined) undefined
+FAIL onwebkittransitionend: the content attribute must be compiled into a function as the corresponding property assert_equals: The onwebkittransitionend property must be a function expected "function" but got "undefined"
+FAIL onwebkittransitionend: dynamic changes on the attribute assert_equals: The onwebkittransitionend property must be null (no attribute) expected (object) null but got (undefined) undefined
+FAIL onwebkittransitionend: dispatching an Event at a <math> element must trigger element.onwebkittransitionend assert_equals: The event must be fired at the <math> element expected (object) Element node <math></math> but got (undefined) undefined
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/object-not-found-adds-entry.html b/third_party/blink/web_tests/external/wpt/resource-timing/object-not-found-adds-entry.html
new file mode 100644
index 0000000..22ee95e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/object-not-found-adds-entry.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+<head>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+const test_object_entry = (url, type, test_name) => {
+  promise_test(t => {
+    return new Promise((resolve, reject) => {
+      performance.clearResourceTimings();
+      const el = document.createElement("object");
+      const po = new PerformanceObserver(t.step_func(e => {
+        const entries = e.getEntriesByType("resource");
+        assert_greater_than(entries.length, 0, "Got a performance entry");
+
+        assert_true(entries[0].name.includes(url), "Performance resource timing entry has the right name");
+        po.disconnect();
+        resolve();
+      }));
+      po.observe({type: "resource"});
+      el.data = url;
+      if (type) {
+        el.type = type;
+      }
+      el.style = "width: 0px; height: 0px;";
+      document.body.appendChild(el);
+
+      el.onload = el.onerror = t.step_timeout(() => {
+        assert_unreached("No performance entry was observed");
+        reject();
+      }, 500);
+    });
+  }, test_name);
+
+};
+
+test_object_entry("resources/status-code.py?status=404&type=none", null, "Test that an navigation object with a 404 response displays an entry");
+test_object_entry("resources/status-code.py?status=200&type=none", null, "Test that an navigation object with a 200 response displays an entry");
+test_object_entry("resources/status-code.py?status=404&type=img", "image/png", "Test that an image object with a 404 response displays an entry");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/tools/lint/lint.py b/third_party/blink/web_tests/external/wpt/tools/lint/lint.py
index a050cfa8..4090f26 100644
--- a/third_party/blink/web_tests/external/wpt/tools/lint/lint.py
+++ b/third_party/blink/web_tests/external/wpt/tools/lint/lint.py
@@ -843,7 +843,7 @@
                         help="Output machine-readable JSON format")
     parser.add_argument("--markdown", action="store_true",
                         help="Output markdown")
-    parser.add_argument("--repo-root", help="The WPT directory. Use this"
+    parser.add_argument("--repo-root", help="The WPT directory. Use this "
                         "option if the lint script exists outside the repository")
     parser.add_argument("--ignore-glob", help="Additional file glob to ignore.")
     parser.add_argument("--all", action="store_true", help="If no paths are passed, try to lint the whole "
diff --git a/third_party/blink/web_tests/external/wpt/web-nfc/idlharness.https.window-expected.txt b/third_party/blink/web_tests/external/wpt/web-nfc/idlharness.https.window-expected.txt
index 3a817f26..28c57a9d 100644
--- a/third_party/blink/web_tests/external/wpt/web-nfc/idlharness.https.window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/web-nfc/idlharness.https.window-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 72 tests; 71 PASS, 1 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 72 tests; 68 PASS, 4 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS NDEFMessage interface: existence and properties of interface object
@@ -40,11 +40,11 @@
 PASS NDEFWriter interface: existence and properties of interface prototype object
 PASS NDEFWriter interface: existence and properties of interface prototype object's "constructor" property
 PASS NDEFWriter interface: existence and properties of interface prototype object's @@unscopables property
-PASS NDEFWriter interface: operation push(NDEFMessageSource, NDEFPushOptions)
+FAIL NDEFWriter interface: operation write(NDEFMessageSource, NDEFWriteOptions) assert_own_property: interface prototype object missing non-static operation expected property "write" missing
 PASS NDEFWriter must be primary interface of new NDEFWriter();
 PASS Stringification of new NDEFWriter();
-PASS NDEFWriter interface: new NDEFWriter(); must inherit property "push(NDEFMessageSource, NDEFPushOptions)" with the proper type
-PASS NDEFWriter interface: calling push(NDEFMessageSource, NDEFPushOptions) on new NDEFWriter(); with too few arguments must throw TypeError
+FAIL NDEFWriter interface: new NDEFWriter(); must inherit property "write(NDEFMessageSource, NDEFWriteOptions)" with the proper type assert_inherits: property "write" not found in prototype chain
+FAIL NDEFWriter interface: calling write(NDEFMessageSource, NDEFWriteOptions) on new NDEFWriter(); with too few arguments must throw TypeError assert_inherits: property "write" not found in prototype chain
 PASS NDEFReader interface: existence and properties of interface object
 PASS NDEFReader interface object length
 PASS NDEFReader interface object name
diff --git a/third_party/blink/web_tests/fast/xsl/resources/xslt-enc-cyr.xsl b/third_party/blink/web_tests/fast/xsl/resources/xslt-enc-cyr.xsl
index fec7f48..6cbaef6d1 100644
--- a/third_party/blink/web_tests/fast/xsl/resources/xslt-enc-cyr.xsl
+++ b/third_party/blink/web_tests/fast/xsl/resources/xslt-enc-cyr.xsl
@@ -8,9 +8,4 @@
             </body>
         </html>
   </xsl:template>
-
-<xsl:template >
-		<xsl:value-of select="." />
-</xsl:template>
-
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/xsl/resources/xslt-enc.xsl b/third_party/blink/web_tests/fast/xsl/resources/xslt-enc.xsl
index c0ec33b..710ba48 100644
--- a/third_party/blink/web_tests/fast/xsl/resources/xslt-enc.xsl
+++ b/third_party/blink/web_tests/fast/xsl/resources/xslt-enc.xsl
@@ -11,9 +11,4 @@
             </body>
         </html>
   </xsl:template>
-
-<xsl:template >
-		<xsl:value-of select="." />
-</xsl:template>
-
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/xsl/resources/xslt-enc16.xsl b/third_party/blink/web_tests/fast/xsl/resources/xslt-enc16.xsl
index fbce796..6626c8b 100644
--- a/third_party/blink/web_tests/fast/xsl/resources/xslt-enc16.xsl
+++ b/third_party/blink/web_tests/fast/xsl/resources/xslt-enc16.xsl
@@ -8,9 +8,4 @@
             </body>
         </html>
   </xsl:template>
-
-<xsl:template >
-		<xsl:value-of select="." />
-</xsl:template>
-
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/xsl/resources/xslt-text.xsl b/third_party/blink/web_tests/fast/xsl/resources/xslt-text.xsl
index 1796937b..0362415 100644
--- a/third_party/blink/web_tests/fast/xsl/resources/xslt-text.xsl
+++ b/third_party/blink/web_tests/fast/xsl/resources/xslt-text.xsl
@@ -5,8 +5,4 @@
 <xsl:template match="TEST">CHARACTERS IN XSLT: &lt;&lt;&lt;&amp;тест&amp;>>&gt;
 <xsl:apply-templates/><xsl:text>&#10;</xsl:text></xsl:template>
 
-<xsl:template >
-		<xsl:value-of select="." />
-</xsl:template>
-
 </xsl:stylesheet>
diff --git a/third_party/blink/web_tests/fast/xsl/xslt-processor-expected.txt b/third_party/blink/web_tests/fast/xsl/xslt-processor-expected.txt
index 8142c7d..51e98455 100644
--- a/third_party/blink/web_tests/fast/xsl/xslt-processor-expected.txt
+++ b/third_party/blink/web_tests/fast/xsl/xslt-processor-expected.txt
@@ -9,10 +9,6 @@
 <xsl:apply-templates/><xsl:text>
 </xsl:text></xsl:template>
 
-<xsl:template>
-		<xsl:value-of select="."/>
-</xsl:template>
-
 </xsl:stylesheet>
 0.3 xsl2:
 <?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
@@ -27,11 +23,6 @@
             </body>
         </html>
   </xsl:template>
-
-<xsl:template>
-		<xsl:value-of select="."/>
-</xsl:template>
-
 </xsl:stylesheet>
 
 1.0 void importStylesheet(in DOMNode style):
diff --git a/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
new file mode 100644
index 0000000..40c9d435
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug59354-expected.png b/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug59354-expected.png
new file mode 100644
index 0000000..8f10876
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug59354-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug7342-expected.png b/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug7342-expected.png
new file mode 100644
index 0000000..1e30c6a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug7342-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/blink/web_tests/platform/linux/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
index 24ea3c6..5682c73 100644
--- a/third_party/blink/web_tests/platform/linux/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ b/third_party/blink/web_tests/platform/linux/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
index 6b84ae45..206c123 100644
--- a/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ b/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css1/box_properties/acid_test-expected.png b/third_party/blink/web_tests/platform/linux/css1/box_properties/acid_test-expected.png
index ac51c72c..8e74a7a 100644
--- a/third_party/blink/web_tests/platform/linux/css1/box_properties/acid_test-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css1/box_properties/acid_test-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png b/third_party/blink/web_tests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png
index 2d53c00..e9f00b98 100644
--- a/third_party/blink/web_tests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css2.1/t09-c5526c-display-00-e-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/flexbox/button-expected.png b/third_party/blink/web_tests/platform/linux/css3/flexbox/button-expected.png
index 160ea2d..d0efbff 100644
--- a/third_party/blink/web_tests/platform/linux/css3/flexbox/button-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/flexbox/button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-161-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-161-expected.png
index cb20443..09557b96 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-161-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-161-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-23-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-23-expected.png
index 89838aa..d5b32ae3 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-23-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-23-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-24-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-24-expected.png
index 2a06a24..ef81a0a 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-24-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-24-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-25-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-25-expected.png
index 2b40542..b6102ee 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-25-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-25-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-64-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-64-expected.png
index a018c5c..ad92d71 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-64-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-64-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-68-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-68-expected.png
index 2a06a24..ef81a0a 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-68-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-68-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-69-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-69-expected.png
index 89838aa..d5b32ae3 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-69-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-69-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-70-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-70-expected.png
index c13fa4e9..9071ed410 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-70-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/html/css3-modsel-70-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-161-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-161-expected.png
index cb20443..09557b96 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-161-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-161-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-23-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-23-expected.png
index 89838aa..d5b32ae3 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-23-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-23-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-24-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-24-expected.png
index 2a06a24..ef81a0a 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-24-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-24-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-25-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-25-expected.png
index 2b40542..b6102ee 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-25-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-25-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-64-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-64-expected.png
index a018c5c..ad92d71 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-64-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-64-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-68-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-68-expected.png
index 2a06a24..ef81a0a 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-68-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-68-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-69-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-69-expected.png
index 89838aa..d5b32ae3 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-69-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-69-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-70-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-70-expected.png
index c13fa4e9..9071ed410 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-70-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xhtml/css3-modsel-70-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-161-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-161-expected.png
index 4bffa96..99073ba 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-161-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-161-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-23-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-23-expected.png
index 74f9657..4a62a6d0 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-23-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-23-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-24-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-24-expected.png
index 836a506..3995100 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-24-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-24-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-25-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-25-expected.png
index 9e1ca23..1b7a0c0f 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-25-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-25-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-64-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-64-expected.png
index 8d787a8b..6733767 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-64-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-64-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-68-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-68-expected.png
index 836a506..3995100 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-68-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-68-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-69-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-69-expected.png
index 74f9657..4a62a6d0 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-69-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-69-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-70-expected.png b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-70-expected.png
index b7ec511..cd0d565 100644
--- a/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-70-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/selectors3/xml/css3-modsel-70-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-001-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-001-expected.png
index 461adda9..ed158f2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-001-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-002-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-002-expected.png
index 461adda9..ed158f2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-002-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-003-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-003-expected.png
index e4793c06..0014f94 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-003-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-004-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-004-expected.png
index 9489019..a045a74 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-004-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-005-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-005-expected.png
index faf359f..640ac00c 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-005-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-007-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-007-expected.png
index 5b0ec5f..3dfc2ed2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-007-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-007-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-010-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-010-expected.png
index 4c3f2a1..3da5415 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-010-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-010-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-012-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-012-expected.png
index 461adda9..ed158f2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-012-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-012-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-position-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-position-expected.png
index 421abde65..bf9a4d9a 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-position-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-input-expected.png b/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-input-expected.png
index e5c0090..962aaca 100644
--- a/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-input-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-input-expected.png b/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-input-expected.png
index 89bad9a1..eb79e1c6 100644
--- a/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-input-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/4960120-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/4960120-1-expected.png
index 37964b87..7a3018b 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/4960120-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/4960120-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/4806874-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/4806874-expected.png
index 82629ea..71b652c 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/4806874-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/4806874-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/4975120-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/4975120-expected.png
index 2b3fff3..05fd734 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/4975120-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/4975120-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png
index 84c4a51..8bd56fa8 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png b/third_party/blink/web_tests/platform/linux/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png
index c970547..2fba0aa 100644
--- a/third_party/blink/web_tests/platform/linux/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/block/basic/011-expected.png b/third_party/blink/web_tests/platform/linux/fast/block/basic/011-expected.png
index ac51c72c..8e74a7a 100644
--- a/third_party/blink/web_tests/platform/linux/fast/block/basic/011-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/block/basic/011-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/block/positioning/inline-block-relposition-expected.png b/third_party/blink/web_tests/platform/linux/fast/block/positioning/inline-block-relposition-expected.png
index af347fd..599dfbf 100644
--- a/third_party/blink/web_tests/platform/linux/fast/block/positioning/inline-block-relposition-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/block/positioning/inline-block-relposition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/input-search-padding-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/input-search-padding-expected.png
index 4b303da02..d6020a8 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/input-search-padding-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/input-search-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/line-height-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/line-height-expected.png
index 0f46666..5abfc28 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/line-height-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/non-standard-checkbox-size-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/non-standard-checkbox-size-expected.png
index 29167e9..67209f9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/non-standard-checkbox-size-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/non-standard-checkbox-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/resize-corner-tracking-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/resize-corner-tracking-expected.png
index 5eee11d5..dd5a67cd 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/resize-corner-tracking-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/resize-corner-tracking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/rtl-ordering-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/rtl-ordering-expected.png
index 0cdf3e0..a40b56ea 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/rtl-ordering-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/rtl-ordering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png b/third_party/blink/web_tests/platform/linux/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
index 2fd51c52..7d479d7 100644
--- a/third_party/blink/web_tests/platform/linux/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/dynamic/008-expected.png b/third_party/blink/web_tests/platform/linux/fast/dynamic/008-expected.png
index 75ea05b..e861eea 100644
--- a/third_party/blink/web_tests/platform/linux/fast/dynamic/008-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/dynamic/008-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/files/file-in-input-display-expected.png b/third_party/blink/web_tests/platform/linux/fast/files/file-in-input-display-expected.png
index 9455260cf..ab7f3ede 100644
--- a/third_party/blink/web_tests/platform/linux/fast/files/file-in-input-display-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/files/file-in-input-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/basic-buttons-expected.png
index aa9553ef..079f21e2 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/basic-buttons-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/basic-inputs-expected.png
index 1bc93a2d..4469aeb 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/basic-inputs-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/button-sizes-expected.png
index cb47731f..cdb9668 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/button-sizes-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/button-style-color-expected.png
index d35546ae..462c844 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/button-style-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/button-table-styles-expected.png
index 4187406..8aa4d0b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/button-table-styles-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/button-text-transform-expected.png
index 3139340..6c3fda9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/button-text-transform-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/button/button-align-expected.png
index 6aa044b..4613a221 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/button/button-align-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/button/button-white-space-expected.png
index e61c1c0..fd3b1f4 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/button/button-white-space-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
index da73f86..df60748a 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
index ec49d5f..ec83ea4 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
index 5d5a39be..ec83ea4 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
index 89be398..27ca78cd 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
index 115f0012..a2f6f2c7 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
index 6a2fa4a..21dea2f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
index 2ce875e2..6bd0482 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
index 1d31db6e..45bfe648 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
index 30269dbf..ccfe425 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
index 7006028..3aca173 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png
index 41b3861..3d5fd63f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
index 213bd56..1871117 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png
index c921136..6407c55 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
index eb3f1e38..946fa0a1 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-expected.png
index ead5a0af..0502a01b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
index 8f4646b8..785d6154 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
index f9bafd7..df4db332 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
index d55a429e..20c9c4d 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
index b9ea3e7..ae8c53a8 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color/input-appearance-color-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color/input-appearance-color-expected.png
index 24b2c90..2489d44 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color/input-appearance-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color/input-appearance-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/control-restrict-line-height-expected.png
index f935f545..60fc8d3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/control-restrict-line-height-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
index 1f1e22d5..bbb70404 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
index fc5d95d..b67b81e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
index fd5070bc..478c24a 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png
index b169c147..5855a36 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png
index 2dc52f2..9b8b7bd 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
index ff2bc77..64fe9ab 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
index 33c0994..e35c7c9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/file/file-input-direction-expected.png
index c243b530..46652a8 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/file/file-input-direction-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/form-element-geometry-expected.png
index 521f5e3..7a2f109 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/form-element-geometry-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/input-appearance-height-expected.png
index 318c7f0..39b3c326 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/input-appearance-height-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/input-button-sizes-expected.png
index e37cfac5..f4064de 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/input-button-sizes-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/input-value-expected.png
index 5c8e44a..10e7295 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/input-value-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png
index 36ed333..a4304e8 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png
index 7d810b3..d633f41 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-datalist-expected.png
index c6ff932..2edff533 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
index 3fcf495d..64b0ea5b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/placeholder-position-expected.png
index daf2706..c791e33 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/placeholder-position-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/range/slider-padding-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/range/slider-padding-expected.png
index 4e71fce..57ad5b11 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/range/slider-padding-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/range/slider-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/search/search-vertical-alignment-expected.png
index 787ee90..f96396a0 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/search/search-vertical-alignment-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label02-expected.png
index 3edc4ce..4bd70b3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label02-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label03-expected.png
index 7187b3c..be97b85 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label03-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label04-expected.png
index 601e81b..8ef6948 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label04-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png
index 03e7513..8d192ef4 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png
index d6fb59d..1708e60 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png
index 1120bbf..5393534 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-bidi-align-expected.png
index ec5dbe68..153176e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-bidi-align-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png
index ca356a1..23ae77c 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.png
index 2e3177f..1fbba75f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-update-text-popup-expected.txt b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-update-text-popup-expected.txt
index f947450..0961fd2 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-update-text-popup-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-update-text-popup-expected.txt
@@ -6,7 +6,7 @@
 C
 layer at (0,0) size 31x20
   LayoutNGBlockFlow (positioned) {DIV} at (8,50) size 31x20
-    LayoutMenuList {SELECT} at (0,0) size 31x20 [bgcolor=#DDDDDD] [border: (1px solid #A9A9A9)]
+    LayoutMenuList {SELECT} at (0,0) size 31x20 [bgcolor=#DDDDDD] [border: (1px solid #767676)]
       LayoutBlockFlow (anonymous) at (1,1) size 29x18
         LayoutText (anonymous) at (4,1) size 9x16
           text run at (4,1) width 9: "C"
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/option-strip-whitespace-expected.png
index 5c875122..72de36d 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/option-strip-whitespace-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-align-expected.png
index 7066a0a2..8c437f24 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-align-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png
index 2ed656a..95ac2c2a 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-initial-position-expected.png
index 8e460fd6..f3812e0 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-initial-position-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-selected-expected.png
index 12d32c9..6feaca9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-selected-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-writing-direction-natural-expected.png
index ee1bcf1..419234d 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-writing-direction-natural-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/submit/submit-appearance-basic-expected.png
index d6dad6e..347d511 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/submit/submit-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
index de3782e..4ad4c35 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
index 52dd3946..a2136c7e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
index 2209697..693fb4a2 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index 8256c93..fe8c896 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
index 2b57203..905959f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
index 145ecce..a8d72ac0 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
index 480fffa..aa5b4185 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
index 877e8e6..d0940d2 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
index 53155bd..24a260e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
index 2cef4c3..1d8cda9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
index e0b83a9c..5b3a042 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
index b21baa1..b94a2ff3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
index d42a0b2..04035069 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
index 55defa2..f2f522fe 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
index 6035191..89c489f5 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-disabled-color-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-disabled-color-expected.png
index d25916e..2aa57d7 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-disabled-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-disabled-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-basic-expected.png
index 881a676..57589ae 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-datalist-expected.png
index f2054aa..c508d1d 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/text-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-expected.png
index 88fcedce..db84572 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-quirks-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-quirks-expected.png
index 17bac48b2..927a8480 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-quirks-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/basic-textareas-quirks-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-appearance-basic-expected.png
index a2ae028..e126e63 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/time/time-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/time/time-appearance-basic-expected.png
index ac3d618c..80098f9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/time/time-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/time/time-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png
index feb881a..de840705 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/hidpi/resize-corner-hidpi-expected.png b/third_party/blink/web_tests/platform/linux/fast/hidpi/resize-corner-hidpi-expected.png
index d51e7f3..5f6ef45 100644
--- a/third_party/blink/web_tests/platform/linux/fast/hidpi/resize-corner-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/hidpi/resize-corner-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/invalid/014-expected.png b/third_party/blink/web_tests/platform/linux/fast/invalid/014-expected.png
index 1397a89..72522306 100644
--- a/third_party/blink/web_tests/platform/linux/fast/invalid/014-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/invalid/014-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/lists/dynamic-marker-crash-expected.png b/third_party/blink/web_tests/platform/linux/fast/lists/dynamic-marker-crash-expected.png
index 581ff60..ce2b53e7 100644
--- a/third_party/blink/web_tests/platform/linux/fast/lists/dynamic-marker-crash-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/lists/dynamic-marker-crash-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/multicol/input-with-overflow-second-column-expected.png b/third_party/blink/web_tests/platform/linux/fast/multicol/input-with-overflow-second-column-expected.png
index d771d84a..b6a3b06 100644
--- a/third_party/blink/web_tests/platform/linux/fast/multicol/input-with-overflow-second-column-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/multicol/input-with-overflow-second-column-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png b/third_party/blink/web_tests/platform/linux/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
index f47e9408..b0d5fb47 100644
--- a/third_party/blink/web_tests/platform/linux/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-x-y-expected.png b/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-x-y-expected.png
index 1268e77..1ec88cb3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-x-y-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-x-y-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png b/third_party/blink/web_tests/platform/linux/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png
index 6f7e513..28c9363 100644
--- a/third_party/blink/web_tests/platform/linux/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/overflow/scrollRevealButton-expected.png b/third_party/blink/web_tests/platform/linux/fast/overflow/scrollRevealButton-expected.png
index 2076833..fc366c3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/overflow/scrollRevealButton-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/overflow/scrollRevealButton-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/parser/bad-xml-slash-expected.png b/third_party/blink/web_tests/platform/linux/fast/parser/bad-xml-slash-expected.png
index cb033d3b..0e12fae0 100644
--- a/third_party/blink/web_tests/platform/linux/fast/parser/bad-xml-slash-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/parser/bad-xml-slash-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/parser/entity-comment-in-textarea-expected.png b/third_party/blink/web_tests/platform/linux/fast/parser/entity-comment-in-textarea-expected.png
index ec14dce6..ddf3ae17 100644
--- a/third_party/blink/web_tests/platform/linux/fast/parser/entity-comment-in-textarea-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/parser/entity-comment-in-textarea-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/parser/open-comment-in-textarea-expected.png b/third_party/blink/web_tests/platform/linux/fast/parser/open-comment-in-textarea-expected.png
index 9506af8b..b342357 100644
--- a/third_party/blink/web_tests/platform/linux/fast/parser/open-comment-in-textarea-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/parser/open-comment-in-textarea-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/replaced-breaking-mixture-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/replaced-breaking-mixture-expected.png
index de85195..0dcaec5 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/replaced-breaking-mixture-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/replaced-breaking-mixture-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/three-selects-break-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/three-selects-break-expected.png
index cb596c80..fcd9f4e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/three-selects-break-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/three-selects-break-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-checkbox-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-checkbox-expected.png
index f3abc35..10a5c9b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-checkbox-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-checkbox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-menulist-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-menulist-expected.png
index ad6913e..81702515 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-menulist-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-menulist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-radio-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-radio-expected.png
index a068891..9d15721b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-radio-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-radio-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-searchfield-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-searchfield-expected.png
index 918fa2c..d55c2f8 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-searchfield-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-searchfield-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textarea-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textarea-expected.png
index 8d62374..b040822 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textarea-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textarea-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textfield-expected.png b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textfield-expected.png
index 11631cd..04d046e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textfield-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/replaced/width100percent-textfield-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/selectors/064-expected.png b/third_party/blink/web_tests/platform/linux/fast/selectors/064-expected.png
index a018c5c..ad92d71 100644
--- a/third_party/blink/web_tests/platform/linux/fast/selectors/064-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/selectors/064-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png
index a8d8530..ca5d951 100644
--- a/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/003-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/003-expected.png
index 5fb6486..5b45d8b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/003-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/append-cells2-expected.png
index 1ba81894f..cefed4b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/append-cells2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/append-cells2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-expected.png
index a45848d..cbac883 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-vertical-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-vertical-expected.png
index 57d92703..f9eb22f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-vertical-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/colspanMinWidth-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/remove-td-display-none-expected.png
index f147479..3f0da88e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/remove-td-display-none-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/remove-td-display-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/spanOverlapRepaint-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/spanOverlapRepaint-expected.png
index 32f865f..71ad222 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/spanOverlapRepaint-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/spanOverlapRepaint-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/text-field-baseline-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/text-field-baseline-expected.png
index 594b44b..2a3e5c0c 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/text-field-baseline-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/text-field-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fragmentation/outline-crossing-columns-expected.png b/third_party/blink/web_tests/platform/linux/fragmentation/outline-crossing-columns-expected.png
index 37342ad..f58f1aca 100644
--- a/third_party/blink/web_tests/platform/linux/fragmentation/outline-crossing-columns-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fragmentation/outline-crossing-columns-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-no-summary4-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-no-summary4-expected.png
index 0912f25..3dc24da 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-no-summary4-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-no-summary4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-open-javascript-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-open-javascript-expected.png
index ec5bbec..062c160 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-open-javascript-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-open-javascript-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-open2-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-open2-expected.png
index 592b929..17a4393 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-open2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-open2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-open4-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-open4-expected.png
index 592b929..17a4393 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-open4-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-open4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-summary-child-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-summary-child-expected.png
index b2e330f..d235912b 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-summary-child-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-summary-child-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-text-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-text-expected.png
index b28407f3..64203ed7 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-text-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-replace-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/http/tests/filesystem/input-display-expected.png b/third_party/blink/web_tests/platform/linux/http/tests/filesystem/input-display-expected.png
index 9455260cf..ab7f3ede 100644
--- a/third_party/blink/web_tests/platform/linux/http/tests/filesystem/input-display-expected.png
+++ b/third_party/blink/web_tests/platform/linux/http/tests/filesystem/input-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png b/third_party/blink/web_tests/platform/linux/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png
index 59a5175..81f18931f 100644
--- a/third_party/blink/web_tests/platform/linux/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png
+++ b/third_party/blink/web_tests/platform/linux/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/12-55-expected.png b/third_party/blink/web_tests/platform/linux/images/12-55-expected.png
index c3400fe..a4aa71f 100644
--- a/third_party/blink/web_tests/platform/linux/images/12-55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/12-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/182-expected.png b/third_party/blink/web_tests/platform/linux/images/182-expected.png
index d1a9d50..2feeeb3 100644
--- a/third_party/blink/web_tests/platform/linux/images/182-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/182-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/2-dht-expected.png b/third_party/blink/web_tests/platform/linux/images/2-dht-expected.png
index 8239671..b50519d0 100644
--- a/third_party/blink/web_tests/platform/linux/images/2-dht-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/23-55-expected.png b/third_party/blink/web_tests/platform/linux/images/23-55-expected.png
index fc22825..fcfa5f7 100644
--- a/third_party/blink/web_tests/platform/linux/images/23-55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/23-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/55-expected.png b/third_party/blink/web_tests/platform/linux/images/55-expected.png
index 80aedd4b..4b445a7 100644
--- a/third_party/blink/web_tests/platform/linux/images/55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
index fc327dca..61082dd2 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/textarea-caret-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/textarea-caret-expected.png
index acaa154e..1b8a8550 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/textarea-caret-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/textarea-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
index e74b2c58..32a0884 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png
index ca4a8388..e03b89f2 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-with-composited-scroll-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-with-composited-scroll-expected.png
index 22b277f..a3f6a3a 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-with-composited-scroll-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/caret-with-composited-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
index 40c9d435..490f5840 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png
index 67cf5b0..fb8f70cf 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/subtree-root-skipped-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/subtree-root-skipped-expected.png
index 35f97012..79d08ee0 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/subtree-root-skipped-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/subtree-root-skipped-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png b/third_party/blink/web_tests/platform/linux/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
index 2a34951..15cd5be 100644
--- a/third_party/blink/web_tests/platform/linux/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png
index 49df978d..add7e7f 100644
--- a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/blink/web_tests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png
index 8eff760b..6af37c0 100644
--- a/third_party/blink/web_tests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/blink/web_tests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/inline-svg-in-xhtml-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/inline-svg-in-xhtml-expected.png
index 498dfa5..6c427ad 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/inline-svg-in-xhtml-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/inline-svg-in-xhtml-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/hixie/mixed/003-expected.png b/third_party/blink/web_tests/platform/linux/svg/hixie/mixed/003-expected.png
index 4fad073..64f46c2 100644
--- a/third_party/blink/web_tests/platform/linux/svg/hixie/mixed/003-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/hixie/mixed/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/45621-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/45621-expected.png
index 08fd354b..d4bcb86 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/45621-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/45621-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1188-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1188-expected.png
index e31860f9..c072cd6 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1188-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1188-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug12384-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug12384-expected.png
index b78a9f0..be57e15b 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug12384-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug12384-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1318-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1318-expected.png
index 4d5295e..b96f5efa 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1318-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug1318-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug138725-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug138725-expected.png
index 349fec8..d1438011 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug138725-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug138725-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug24200-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug24200-expected.png
index 3995b096..04f58e3 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug24200-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug24200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug2479-2-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug2479-2-expected.png
index 7ea72f7..8625446 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug2479-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug2479-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug26178-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug26178-expected.png
index 911ee1ab..2378fff 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug26178-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug26178-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug28928-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug28928-expected.png
index 01c41a8..c1bf0828 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug28928-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug28928-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug29326-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug29326-expected.png
index 118b12a21..ae39713a 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug29326-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug29326-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30559-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30559-expected.png
index a9abeb6..0d40938 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30559-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30559-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30692-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30692-expected.png
index e488285e..a9160150 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30692-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug30692-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug39209-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug39209-expected.png
index 4cb977d8..1f235ee 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug39209-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug39209-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4429-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4429-expected.png
index 545464e8..040524d 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4429-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4429-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4527-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4527-expected.png
index bbe303e2..8a06f176 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4527-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug4527-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-1-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-1-expected.png
index 9f73300..53feb43 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-2-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-2-expected.png
index d80d563..a1dcec1e 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug46368-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug51037-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug51037-expected.png
index 6d9148b..09ee9f3 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug51037-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug51037-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug55545-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug55545-expected.png
index c2a6ba0..a7c04dc2 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug55545-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug55545-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug59354-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug59354-expected.png
index 8f10876..d9f2a80 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug59354-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug59354-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug68912-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug68912-expected.png
index 5102aad5..8a536fc2 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug68912-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug68912-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug7342-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug7342-expected.png
index 1e30c6a..10d2697 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug7342-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug7342-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug96334-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug96334-expected.png
index 043b2e9f..8233243 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug96334-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug96334-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug99948-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug99948-expected.png
index 79a55f4d..3415fc20 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug99948-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/bugs/bug99948-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/collapsing_borders/bug41262-4-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/collapsing_borders/bug41262-4-expected.png
index 183c686..d743f62 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/collapsing_borders/bug41262-4-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/collapsing_borders/bug41262-4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/core/margins-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/core/margins-expected.png
index ae15e8f..5349a0f 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/core/margins-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/core/margins-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/dom/tableDom-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/dom/tableDom-expected.png
index 8a728a9..627f4ed2 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/dom/tableDom-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/dom/tableDom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla/other/move_row-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla/other/move_row-expected.png
index 384285f..9789913 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla/other/move_row-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla/other/move_row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug1725-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug1725-expected.png
index db06965..a66af11 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug1725-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug1725-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png
index 60b9f9c..bdf52132 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png
index 7f5c9a3..b7bb1dc 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions1-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions1-expected.png
index 1c805f77..1dc2172 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions2-expected.png b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions2-expected.png
index cbddd94..ca835564 100644
--- a/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/tables/mozilla_expected_failures/core/captions2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/transforms/3d/general/perspective-non-layer-expected.png b/third_party/blink/web_tests/platform/linux/transforms/3d/general/perspective-non-layer-expected.png
index 90dd058..6c4b722 100644
--- a/third_party/blink/web_tests/platform/linux/transforms/3d/general/perspective-non-layer-expected.png
+++ b/third_party/blink/web_tests/platform/linux/transforms/3d/general/perspective-non-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/transforms/transformed-focused-text-input-expected.png b/third_party/blink/web_tests/platform/linux/transforms/transformed-focused-text-input-expected.png
index c81d31bd..365b2c5 100644
--- a/third_party/blink/web_tests/platform/linux/transforms/transformed-focused-text-input-expected.png
+++ b/third_party/blink/web_tests/platform/linux/transforms/transformed-focused-text-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/001-expected.png b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/001-expected.png
new file mode 100644
index 0000000..8f0277e0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/fieldset/fieldset-align-expected.png b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/fieldset/fieldset-align-expected.png
new file mode 100644
index 0000000..f8031af
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/fieldset/fieldset-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select/select-autofilled-expected.png b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select/select-autofilled-expected.png
new file mode 100644
index 0000000..6946dd80
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select/select-autofilled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-off/text-input-elements-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
index 0e3e22f0..6327779f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-on/text-input-elements-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
index 310a6f2..eeafe6fc 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png
index 814d3b9a..602ea54 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/182-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/182-expected.png
index 779f7d9bd..6b068e51 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/182-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/182-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png
index ecdc6ff..88c3b54 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png
index 9045f85..49a286d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/55-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/55-expected.png
index dc8e9fa0..f1f232d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
new file mode 100644
index 0000000..aa9553ef
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
new file mode 100644
index 0000000..1bc93a2d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
new file mode 100644
index 0000000..cb47731f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
new file mode 100644
index 0000000..d35546ae
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
new file mode 100644
index 0000000..4187406
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
new file mode 100644
index 0000000..3139340
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
new file mode 100644
index 0000000..6aa044b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
new file mode 100644
index 0000000..e61c1c0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
new file mode 100644
index 0000000..da73f86
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
new file mode 100644
index 0000000..ec49d5f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
new file mode 100644
index 0000000..5d5a39be
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
new file mode 100644
index 0000000..89be398
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
new file mode 100644
index 0000000..115f0012
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
new file mode 100644
index 0000000..6a2fa4a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
new file mode 100644
index 0000000..2ce875e2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
new file mode 100644
index 0000000..1d31db6e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
new file mode 100644
index 0000000..30269dbf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
new file mode 100644
index 0000000..7006028
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..41b3861
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
new file mode 100644
index 0000000..213bd56
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
new file mode 100644
index 0000000..c921136
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
new file mode 100644
index 0000000..eb3f1e38
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..ead5a0af
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
new file mode 100644
index 0000000..8f4646b8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
new file mode 100644
index 0000000..f9bafd7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
new file mode 100644
index 0000000..d55a429e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
new file mode 100644
index 0000000..b9ea3e7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png
new file mode 100644
index 0000000..24b2c90
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
new file mode 100644
index 0000000..f935f545
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
new file mode 100644
index 0000000..1f1e22d5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
new file mode 100644
index 0000000..fc5d95d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
new file mode 100644
index 0000000..fd5070bc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-basic-expected.png
new file mode 100644
index 0000000..b169c147
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
new file mode 100644
index 0000000..2dc52f2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
new file mode 100644
index 0000000..ff2bc77
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
new file mode 100644
index 0000000..33c0994
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
new file mode 100644
index 0000000..c243b530
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
new file mode 100644
index 0000000..521f5e3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
new file mode 100644
index 0000000..318c7f0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
new file mode 100644
index 0000000..e37cfac5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
new file mode 100644
index 0000000..5c8e44a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
new file mode 100644
index 0000000..36ed333
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
new file mode 100644
index 0000000..7d810b3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png
new file mode 100644
index 0000000..c6ff932
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
new file mode 100644
index 0000000..3fcf495d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
new file mode 100644
index 0000000..daf2706
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png
new file mode 100644
index 0000000..4e71fce
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
new file mode 100644
index 0000000..787ee90
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
new file mode 100644
index 0000000..3edc4ce
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
new file mode 100644
index 0000000..7187b3c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
new file mode 100644
index 0000000..601e81b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png
new file mode 100644
index 0000000..03e7513
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
new file mode 100644
index 0000000..d6fb59d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
new file mode 100644
index 0000000..1120bbf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
new file mode 100644
index 0000000..ec5dbe68
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png
new file mode 100644
index 0000000..ca356a1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
new file mode 100644
index 0000000..2e3177f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
new file mode 100644
index 0000000..5c875122
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
new file mode 100644
index 0000000..7066a0a2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
new file mode 100644
index 0000000..2ed656a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
new file mode 100644
index 0000000..8e460fd6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
new file mode 100644
index 0000000..12d32c9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
new file mode 100644
index 0000000..ee1bcf1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
new file mode 100644
index 0000000..d6dad6e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..de3782e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..52dd3946
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..2209697
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..8256c93
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
new file mode 100644
index 0000000..2b57203
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..145ecce
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..480fffa
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..877e8e6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..53155bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..2cef4c3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..e0b83a9c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..b21baa1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..d42a0b2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..55defa2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..6035191
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/input-disabled-color-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/input-disabled-color-expected.png
new file mode 100644
index 0000000..d25916e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/input-disabled-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-basic-expected.png
new file mode 100644
index 0000000..881a676
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-datalist-expected.png
new file mode 100644
index 0000000..f2054aa
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-expected.png
new file mode 100644
index 0000000..88fcedce
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-quirks-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-quirks-expected.png
new file mode 100644
index 0000000..17bac48b2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-quirks-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-appearance-basic-expected.png
new file mode 100644
index 0000000..a2ae028
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/time/time-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/time/time-appearance-basic-expected.png
new file mode 100644
index 0000000..ac3d618c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/time/time-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/week/week-appearance-basic-expected.png
new file mode 100644
index 0000000..feb881a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/week/week-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png
index 05301fe..6c593c0 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/182-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/182-expected.png
index e54cd9405..d76f71a 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/182-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/182-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png
index 879d3a7..413ba93 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png
index 2f61225..210e889 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/55-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/55-expected.png
index 3318c278..b0cebffc 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/55-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/input-with-overflow-second-column-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/input-with-overflow-second-column-expected.png
index d771d84a..b6a3b06 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/input-with-overflow-second-column-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/input-with-overflow-second-column-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
index f47e9408..b0d5fb47 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fragmentation/outline-crossing-columns-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fragmentation/outline-crossing-columns-expected.png
index 37342ad..f58f1aca 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fragmentation/outline-crossing-columns-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_block_frag/fragmentation/outline-crossing-columns-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-mode-native-theme-off/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
deleted file mode 100644
index 8dd35947..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-mode-native-theme-on/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
deleted file mode 100644
index e133a9e9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-mode-native-theme-off/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
deleted file mode 100644
index 8dd35947..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-mode-native-theme-on/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
deleted file mode 100644
index e133a9e9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-mode-native-theme-off/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
deleted file mode 100644
index 8dd35947..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-mode-native-theme-on/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
deleted file mode 100644
index e133a9e9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/dark-mode-native-theme-off/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
deleted file mode 100644
index 8dd35947..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/dark-mode-native-theme-on/text-input-elements-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
deleted file mode 100644
index e133a9e9..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/blink/web_tests/platform/win/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
index b4272dc..c8ddef9 100644
--- a/third_party/blink/web_tests/platform/win/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ b/third_party/blink/web_tests/platform/win/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/compositing/overflow/theme-affects-visual-overflow-expected.png b/third_party/blink/web_tests/platform/win/compositing/overflow/theme-affects-visual-overflow-expected.png
index 3b8aefce..8e15644 100644
--- a/third_party/blink/web_tests/platform/win/compositing/overflow/theme-affects-visual-overflow-expected.png
+++ b/third_party/blink/web_tests/platform/win/compositing/overflow/theme-affects-visual-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
index 408337ae..fb11c48 100644
--- a/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ b/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css1/box_properties/acid_test-expected.png b/third_party/blink/web_tests/platform/win/css1/box_properties/acid_test-expected.png
index 180122d10..7d80dbd1 100644
--- a/third_party/blink/web_tests/platform/win/css1/box_properties/acid_test-expected.png
+++ b/third_party/blink/web_tests/platform/win/css1/box_properties/acid_test-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css2.1/t09-c5526c-display-00-e-expected.png b/third_party/blink/web_tests/platform/win/css2.1/t09-c5526c-display-00-e-expected.png
index d9808df..f39cd16b 100644
--- a/third_party/blink/web_tests/platform/win/css2.1/t09-c5526c-display-00-e-expected.png
+++ b/third_party/blink/web_tests/platform/win/css2.1/t09-c5526c-display-00-e-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/flexbox/button-expected.png b/third_party/blink/web_tests/platform/win/css3/flexbox/button-expected.png
index 1151921a..c083387 100644
--- a/third_party/blink/web_tests/platform/win/css3/flexbox/button-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/flexbox/button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-161-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-161-expected.png
index 7c7fed86..22d65ee5 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-161-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-161-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-23-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-23-expected.png
index b588e80..cdfc1ae 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-23-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-23-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-24-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-24-expected.png
index aabf317..8fba9bf 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-24-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-24-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-25-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-25-expected.png
index d286998..29fbc310 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-25-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-25-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-64-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-64-expected.png
index 832908c..65fea31 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-64-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-64-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-68-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-68-expected.png
index aabf317..8fba9bf 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-68-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-68-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-69-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-69-expected.png
index b588e80..cdfc1ae 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-69-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-69-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-70-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-70-expected.png
index 449c4a8..09ab2b2 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-70-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/html/css3-modsel-70-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-161-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-161-expected.png
index 7c7fed86..22d65ee5 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-161-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-161-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-23-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-23-expected.png
index b588e80..cdfc1ae 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-23-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-23-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-24-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-24-expected.png
index aabf317..8fba9bf 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-24-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-24-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-25-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-25-expected.png
index d286998..29fbc310 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-25-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-25-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-64-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-64-expected.png
index 832908c..65fea31 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-64-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-64-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-68-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-68-expected.png
index aabf317..8fba9bf 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-68-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-68-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-69-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-69-expected.png
index b588e80..cdfc1ae 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-69-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-69-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-70-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-70-expected.png
index 449c4a8..09ab2b2 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-70-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xhtml/css3-modsel-70-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-161-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-161-expected.png
index de2219b..a9b6c05 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-161-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-161-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-23-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-23-expected.png
index a2d16cf8..5154d9c0 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-23-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-23-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-24-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-24-expected.png
index 9eaa5b9..aa46237 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-24-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-24-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-25-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-25-expected.png
index d09b197..560316d6 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-25-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-25-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-64-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-64-expected.png
index 3001dded..d4b30e4 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-64-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-64-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-68-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-68-expected.png
index 9eaa5b9..aa46237 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-68-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-68-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-69-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-69-expected.png
index a2d16cf8..5154d9c0 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-69-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-69-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-70-expected.png b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-70-expected.png
index 9cb56aec..0b070db8 100644
--- a/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-70-expected.png
+++ b/third_party/blink/web_tests/platform/win/css3/selectors3/xml/css3-modsel-70-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-001-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-001-expected.png
index 1a0bd83..2cca4148 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-001-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-002-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-002-expected.png
index 1a0bd83..2cca4148 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-002-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-003-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-003-expected.png
index a8df94f7..c08e282e 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-003-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-004-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-004-expected.png
index 76b1f9f..17feb758 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-004-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-005-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-005-expected.png
index 6a56731..1c9d7fd 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-005-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-007-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-007-expected.png
index ac898f54..f4334c5e 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-007-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-007-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-010-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-010-expected.png
index 4ab27a7..bf0d432 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-010-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-010-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-012-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-012-expected.png
index 1a0bd83..2cca4148 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-012-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-012-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-position-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-position-expected.png
index f768b1c0..216560d8 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-position-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-input-expected.png b/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-input-expected.png
index b0c8b3c1d..0a8b8d3 100644
--- a/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-input-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-input-expected.png b/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-input-expected.png
index fecdb61..88587f1 100644
--- a/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-input-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/4960120-1-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/4960120-1-expected.png
index a310639..42cdcf0c 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/4960120-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/4960120-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/4806874-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/4806874-expected.png
index aa4d3b3..a295680 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/4806874-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/4806874-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/4975120-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/4975120-expected.png
index d672340..7c8e0f0 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/4975120-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/4975120-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png
index 0851088..16b50f59 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png b/third_party/blink/web_tests/platform/win/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png
index 1fc9f34..bcef6d56 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png
+++ b/third_party/blink/web_tests/platform/win/external/wpt/css/css-pseudo/spelling-error-002-manual-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/basic/011-expected.png b/third_party/blink/web_tests/platform/win/fast/block/basic/011-expected.png
index 180122d10..7d80dbd1 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/basic/011-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/basic/011-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/float/032-expected.png b/third_party/blink/web_tests/platform/win/fast/block/float/032-expected.png
index fa3ddb5..308d01f 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/float/032-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/float/032-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/float/overhanging-tall-block-expected.png b/third_party/blink/web_tests/platform/win/fast/block/float/overhanging-tall-block-expected.png
index 208ec010..5039419 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/float/overhanging-tall-block-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/float/overhanging-tall-block-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/positioning/inline-block-relposition-expected.png b/third_party/blink/web_tests/platform/win/fast/block/positioning/inline-block-relposition-expected.png
index a762a8fa..ae46c1f 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/positioning/inline-block-relposition-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/positioning/inline-block-relposition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/input-search-padding-expected.png b/third_party/blink/web_tests/platform/win/fast/css/input-search-padding-expected.png
index 03aa721..b667787 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/input-search-padding-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/input-search-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/line-height-expected.png b/third_party/blink/web_tests/platform/win/fast/css/line-height-expected.png
index 0a4fdb3..38d08c0 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/line-height-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/non-standard-checkbox-size-expected.png b/third_party/blink/web_tests/platform/win/fast/css/non-standard-checkbox-size-expected.png
index c2e05bd..4824da3 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/non-standard-checkbox-size-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/non-standard-checkbox-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/resize-corner-tracking-expected.png b/third_party/blink/web_tests/platform/win/fast/css/resize-corner-tracking-expected.png
index db4fed8..b444e0b 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/resize-corner-tracking-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/resize-corner-tracking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/rtl-ordering-expected.png b/third_party/blink/web_tests/platform/win/fast/css/rtl-ordering-expected.png
index 97cb832..f72a75fb 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/rtl-ordering-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/rtl-ordering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-expected.png
new file mode 100644
index 0000000..95b569f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
new file mode 100644
index 0000000..4ad508f8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
index 20293df..4529d58 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/HTMLProgressElement/progress-element-expected.png
index bdcae9f9..4edca46 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/dom/HTMLProgressElement/progress-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dynamic/008-expected.png b/third_party/blink/web_tests/platform/win/fast/dynamic/008-expected.png
index eb08d4e..b3a3b638 100644
--- a/third_party/blink/web_tests/platform/win/fast/dynamic/008-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/dynamic/008-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/files/file-in-input-display-expected.png b/third_party/blink/web_tests/platform/win/fast/files/file-in-input-display-expected.png
index 2637248..5c0c019f 100644
--- a/third_party/blink/web_tests/platform/win/fast/files/file-in-input-display-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/files/file-in-input-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/basic-buttons-expected.png
index 33c16ef..aa123c0 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/basic-buttons-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/basic-inputs-expected.png
index faf5e37..a92e7a4c 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/basic-inputs-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/button-sizes-expected.png
index 8d6b683..ed1c0a8e 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/button-sizes-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/button-style-color-expected.png
index f8ef9c4..bea8447 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/button-style-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/button-table-styles-expected.png
index 94ba820..11ffaaa4 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/button-table-styles-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/button-text-transform-expected.png
index e2699bf..6eaafb37 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/button-text-transform-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/button/button-align-expected.png
index bd2920c..3bc7dc0 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/button/button-align-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/button/button-white-space-expected.png
index 6211ac7..d76d6bf 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/button/button-white-space-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
index 2f5edca..589c8a3 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
index 6e1ff66..6dfaa5a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
index c43f5bd..6dfaa5a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
index a151009..1401ad42 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
index 3b54691..25fa22d 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
index 626b2f49..8f46bc3 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
index 2aee3a6..54aa571 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
index 18f89e4c..942da54 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
index 1993423..caa729f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
index 6858e670..05fa2a5 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png
index ffec41e..08107e5 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
index f088793..75bd2c73 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png
index 91a39c4..f016bf0 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
index 463045ab..62f2cb9 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-expected.png
index fada8ae..93536ba2 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
index fdea495..21da6fe 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
index 582ba47..82fab5a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
index b008419a..819e269f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
index 0057ae8df..dcebf18 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color/input-appearance-color-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color/input-appearance-color-expected.png
index 54d39b6..ea6f12f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color/input-appearance-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color/input-appearance-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/control-restrict-line-height-expected.png
index b055e8f..3af791ca 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/control-restrict-line-height-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
index 508fdcd..19832a6e 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
index 9545bfb..63c4ac7 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
index c9e997c..d0c1afac 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png
index 344ab83..4e5957c 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png
index 3464ea7..2e575c11 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
index d4f670ef..4f3f951 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
index c8411f0..d230dc1 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/file/file-input-direction-expected.png
index bcbebe48..79dc20d5 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/file/file-input-direction-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/form-element-geometry-expected.png
index ee239e6..12345d9 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/form-element-geometry-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/input-appearance-height-expected.png
index 7c85197..9c911aa8 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/input-appearance-height-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/input-button-sizes-expected.png
index dc77672..b9d8510d 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/input-button-sizes-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/input-value-expected.png
index 721c9162..ba0f011 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/input-value-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png
index a478503..7f735f4 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png
index 07d19d0..2be1038 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-datalist-expected.png
index f3553da..209b5e9b 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
index 6a39c9a..30e0f1f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/placeholder-position-expected.png
index 592ed80..ac038e65 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/placeholder-position-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/range/input-appearance-range-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/range/input-appearance-range-expected.png
index 4cd8333..626258ca 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/range/input-appearance-range-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/range/input-appearance-range-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/range/range-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/range/range-appearance-basic-expected.png
index 5779d77f..5fbded7f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/range/range-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/range/range-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/range/slider-padding-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/range/slider-padding-expected.png
index 589a880..964850a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/range/slider-padding-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/range/slider-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/search/search-vertical-alignment-expected.png
index 4e8e9e9..e935cb7 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/search/search-vertical-alignment-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label02-expected.png
index c357c1ac..325ae0f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label02-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label03-expected.png
index 1a81d4d..d8cd614 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label03-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label04-expected.png
index eebbf45..cffd5c6c 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label04-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png
index 681031a..7022d4f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png
index 78ba710..9bc666db 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png
index 2527aab..634c21cd 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-bidi-align-expected.png
index c4cab64..39596c7 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-bidi-align-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png
index 4fbe1fed..bdd7af3 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.png
index 7e8ab9d1..6220f5c 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-update-text-popup-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-update-text-popup-expected.txt
index c1b38931..f30ab54 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-update-text-popup-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-update-text-popup-expected.txt
@@ -6,7 +6,7 @@
 C
 layer at (0,0) size 33x20
   LayoutNGBlockFlow (positioned) {DIV} at (8,50) size 33x20
-    LayoutMenuList {SELECT} at (0,0) size 33x20 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
+    LayoutMenuList {SELECT} at (0,0) size 33x20 [bgcolor=#FFFFFF] [border: (1px solid #767676)]
       LayoutBlockFlow (anonymous) at (1,1) size 31x18
         LayoutText (anonymous) at (4,1) size 9x16
           text run at (4,1) width 9: "C"
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/option-strip-whitespace-expected.png
index f9a2c75..4b5c1b4 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/option-strip-whitespace-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/select-align-expected.png
index 266c3a5ae..373372c3 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-align-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png
index 548dfc7..ab738af 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/select-initial-position-expected.png
index ef52ed3b3..92dc661e 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-initial-position-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/select-selected-expected.png
index a3a6efa..ffa74b3 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-selected-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/select-writing-direction-natural-expected.png
index 7458ccf..4db8f4d 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-writing-direction-natural-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/submit/submit-appearance-basic-expected.png
index 8422839..35a66bd 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/submit/submit-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
index b4fc4645..fa76163 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
index 8d4e05cf..10676f5 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
index 3e56de92..d03fbe6 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index 66c01d1..150fe31b 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
index d540103..c424a33a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
index 1ad4dc3..b88a432 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
index 4cb8ad2..66a4e4f0 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
index 6c71e8b..85995c3 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
index 24afbdac..e963830 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
index 2dcc7a9..16ab55ba 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
index 9b755186..9239fe7 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
index 005c9bba..7c5758d 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
index 02e8ca0..a135fb6 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
index 7824a7c..68cdca4 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
index 4b21b50..ea6efdc 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/input-disabled-color-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/input-disabled-color-expected.png
index 12f0615a..b56bddc 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/text/input-disabled-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/text/input-disabled-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-basic-expected.png
index 0d8f43d..7ea41360 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-datalist-expected.png
index ad6241b..8f4603a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/text/text-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-expected.png
index c041028..02cb31f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-quirks-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-quirks-expected.png
index e4ecaa7..74cc335e 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-quirks-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/textarea/basic-textareas-quirks-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-appearance-basic-expected.png
index a3fd5ce..cefac39 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/time/time-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/time/time-appearance-basic-expected.png
index 40cbb90c..1c1c3fd8 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/time/time-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/time/time-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png
index 1b4e015..7e8690c 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/hidpi/resize-corner-hidpi-expected.png b/third_party/blink/web_tests/platform/win/fast/hidpi/resize-corner-hidpi-expected.png
index 21a89bf2..eb1e83e 100644
--- a/third_party/blink/web_tests/platform/win/fast/hidpi/resize-corner-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/hidpi/resize-corner-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/inline/positionedLifetime-expected.png b/third_party/blink/web_tests/platform/win/fast/inline/positionedLifetime-expected.png
index 9ad0451b8..9ec1293 100644
--- a/third_party/blink/web_tests/platform/win/fast/inline/positionedLifetime-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/inline/positionedLifetime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/invalid/014-expected.png b/third_party/blink/web_tests/platform/win/fast/invalid/014-expected.png
index 76bfc14..5e28ea3 100644
--- a/third_party/blink/web_tests/platform/win/fast/invalid/014-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/invalid/014-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/lists/dynamic-marker-crash-expected.png b/third_party/blink/web_tests/platform/win/fast/lists/dynamic-marker-crash-expected.png
index f4387ff5..c2c2d5c 100644
--- a/third_party/blink/web_tests/platform/win/fast/lists/dynamic-marker-crash-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/lists/dynamic-marker-crash-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/multicol/input-with-overflow-second-column-expected.png b/third_party/blink/web_tests/platform/win/fast/multicol/input-with-overflow-second-column-expected.png
index 9c4b3c3..a2ce852 100644
--- a/third_party/blink/web_tests/platform/win/fast/multicol/input-with-overflow-second-column-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/multicol/input-with-overflow-second-column-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png b/third_party/blink/web_tests/platform/win/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
index deb702a..be939a58 100644
--- a/third_party/blink/web_tests/platform/win/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/overflow/overflow-x-y-expected.png b/third_party/blink/web_tests/platform/win/fast/overflow/overflow-x-y-expected.png
index 2e8d2a9..85c35136 100644
--- a/third_party/blink/web_tests/platform/win/fast/overflow/overflow-x-y-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/overflow/overflow-x-y-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png b/third_party/blink/web_tests/platform/win/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png
index 4ab2e37..5cc3969 100644
--- a/third_party/blink/web_tests/platform/win/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/overflow/scrollRevealButton-expected.png b/third_party/blink/web_tests/platform/win/fast/overflow/scrollRevealButton-expected.png
index 498354b..797a0a31 100644
--- a/third_party/blink/web_tests/platform/win/fast/overflow/scrollRevealButton-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/overflow/scrollRevealButton-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/parser/bad-xml-slash-expected.png b/third_party/blink/web_tests/platform/win/fast/parser/bad-xml-slash-expected.png
index 1f67ca6..df7330b 100644
--- a/third_party/blink/web_tests/platform/win/fast/parser/bad-xml-slash-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/parser/bad-xml-slash-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/parser/entity-comment-in-textarea-expected.png b/third_party/blink/web_tests/platform/win/fast/parser/entity-comment-in-textarea-expected.png
index d36ce40..d3a52946 100644
--- a/third_party/blink/web_tests/platform/win/fast/parser/entity-comment-in-textarea-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/parser/entity-comment-in-textarea-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/parser/open-comment-in-textarea-expected.png b/third_party/blink/web_tests/platform/win/fast/parser/open-comment-in-textarea-expected.png
index 9249670..4c28784 100644
--- a/third_party/blink/web_tests/platform/win/fast/parser/open-comment-in-textarea-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/parser/open-comment-in-textarea-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/replaced-breaking-mixture-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/replaced-breaking-mixture-expected.png
index b209257..8de7794 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/replaced-breaking-mixture-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/replaced-breaking-mixture-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/three-selects-break-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/three-selects-break-expected.png
index 966c907..7e1fb27 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/three-selects-break-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/three-selects-break-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-checkbox-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-checkbox-expected.png
index 408cbc2..55ad739b 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-checkbox-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-checkbox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-menulist-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-menulist-expected.png
index a4aa009..d20151c 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-menulist-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-menulist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-radio-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-radio-expected.png
index a3abbb3c..c588c8d 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-radio-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-radio-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-searchfield-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-searchfield-expected.png
index 6ec363a..d272a1d 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-searchfield-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-searchfield-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textarea-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textarea-expected.png
index 912076f..8a4f68a 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textarea-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textarea-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textfield-expected.png b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textfield-expected.png
index e077fb01..381231e 100644
--- a/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textfield-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/replaced/width100percent-textfield-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/selectors/064-expected.png b/third_party/blink/web_tests/platform/win/fast/selectors/064-expected.png
index 832908c..65fea31 100644
--- a/third_party/blink/web_tests/platform/win/fast/selectors/064-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/selectors/064-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png
index b172d61..6e0879f 100644
--- a/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/003-expected.png b/third_party/blink/web_tests/platform/win/fast/table/003-expected.png
index 9982e14..e12e5b7 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/003-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/win/fast/table/append-cells2-expected.png
index ee7c93b..cee59311 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/append-cells2-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/append-cells2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-expected.png b/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-expected.png
index 02ee59b..17d8536 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-vertical-expected.png b/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-vertical-expected.png
index 64f2650..d6dc9028 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-vertical-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/colspanMinWidth-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/win/fast/table/remove-td-display-none-expected.png
index edb8db8..7033631 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/remove-td-display-none-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/remove-td-display-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/spanOverlapRepaint-expected.png b/third_party/blink/web_tests/platform/win/fast/table/spanOverlapRepaint-expected.png
index b92e03e..10d8634 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/spanOverlapRepaint-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/spanOverlapRepaint-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/text-field-baseline-expected.png b/third_party/blink/web_tests/platform/win/fast/table/text-field-baseline-expected.png
index b00e7ca..dabb1a2f 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/text-field-baseline-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/text-field-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fragmentation/outline-crossing-columns-expected.png b/third_party/blink/web_tests/platform/win/fragmentation/outline-crossing-columns-expected.png
index eba9d78..323cf91 100644
--- a/third_party/blink/web_tests/platform/win/fragmentation/outline-crossing-columns-expected.png
+++ b/third_party/blink/web_tests/platform/win/fragmentation/outline-crossing-columns-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-no-summary4-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-no-summary4-expected.png
index 081d3bbd..7ec5c84 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-no-summary4-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-no-summary4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-open-javascript-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-open-javascript-expected.png
index af16622d..c941480 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-open-javascript-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-open-javascript-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-open2-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-open2-expected.png
index f5c9022..9bb660e 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-open2-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-open2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-open4-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-open4-expected.png
index f5c9022..9bb660e 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-open4-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-open4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-summary-child-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-summary-child-expected.png
index a2ba64ce..fa58b375 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-summary-child-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-summary-child-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-text-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-text-expected.png
index 0f19091..1ac5844 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-text-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-replace-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/http/tests/filesystem/input-display-expected.png b/third_party/blink/web_tests/platform/win/http/tests/filesystem/input-display-expected.png
index 2637248..5c0c019f 100644
--- a/third_party/blink/web_tests/platform/win/http/tests/filesystem/input-display-expected.png
+++ b/third_party/blink/web_tests/platform/win/http/tests/filesystem/input-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png b/third_party/blink/web_tests/platform/win/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png
index e6f3b22..30d2f36f 100644
--- a/third_party/blink/web_tests/platform/win/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png
+++ b/third_party/blink/web_tests/platform/win/http/tests/webfont/popup-menu-load-webfont-after-open-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/12-55-expected.png b/third_party/blink/web_tests/platform/win/images/12-55-expected.png
index 6ab20f5..e944094 100644
--- a/third_party/blink/web_tests/platform/win/images/12-55-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/12-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/182-expected.png b/third_party/blink/web_tests/platform/win/images/182-expected.png
index 1e8c443..255c9b0 100644
--- a/third_party/blink/web_tests/platform/win/images/182-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/182-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/2-dht-expected.png b/third_party/blink/web_tests/platform/win/images/2-dht-expected.png
index 49a398f..194c1e9 100644
--- a/third_party/blink/web_tests/platform/win/images/2-dht-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/23-55-expected.png b/third_party/blink/web_tests/platform/win/images/23-55-expected.png
index c9f1bbd..d5c8568b 100644
--- a/third_party/blink/web_tests/platform/win/images/23-55-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/23-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/55-expected.png b/third_party/blink/web_tests/platform/win/images/55-expected.png
index 9eaec3d..7977361 100644
--- a/third_party/blink/web_tests/platform/win/images/55-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/caret-subpixel-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/caret-subpixel-expected.png
index 489425d..4b553fc8 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/caret-subpixel-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/caret-subpixel-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
index 80936462..24564960 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.png
index 22c0aa5f..182ad485 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.png
index f8eda322..a5e69ff 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-drag-release-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-drag-release-expected.png
index f6051db7..5da4a0c 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-drag-release-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-drag-release-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/textarea-caret-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/textarea-caret-expected.png
index 170eaf7..29bbc8c1 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/textarea-caret-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/textarea-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
index fee7d48..0f04f67 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png
index 44743af..a0d55c17 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.png
index 6642435c..6dab1e37 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
index 28a82b2b..c2a5851 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png
index 6007150..a8fec20e 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/subtree-root-skipped-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/subtree-root-skipped-expected.png
index a2c1111..5820f52 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/subtree-root-skipped-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/subtree-root-skipped-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png b/third_party/blink/web_tests/platform/win/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
index 17757aea..2473fce 100644
--- a/third_party/blink/web_tests/platform/win/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png
index 9c8b9af..5a5ce00 100644
--- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/theme/adjust-progress-bar-size-expected.png b/third_party/blink/web_tests/platform/win/paint/theme/adjust-progress-bar-size-expected.png
index 40b82506..20e43de 100644
--- a/third_party/blink/web_tests/platform/win/paint/theme/adjust-progress-bar-size-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/theme/adjust-progress-bar-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/blink/web_tests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png
index 7b8e71d..932f5931 100644
--- a/third_party/blink/web_tests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/blink/web_tests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/inline-svg-in-xhtml-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/inline-svg-in-xhtml-expected.png
index 8bbf476eb..a4d1a10 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/inline-svg-in-xhtml-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/inline-svg-in-xhtml-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/hixie/mixed/003-expected.png b/third_party/blink/web_tests/platform/win/svg/hixie/mixed/003-expected.png
index 80f5a5ab..02e3bc2 100644
--- a/third_party/blink/web_tests/platform/win/svg/hixie/mixed/003-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/hixie/mixed/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/45621-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/45621-expected.png
index 2311b293..d3e9f2e 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/45621-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/45621-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1188-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1188-expected.png
index b77e5db..573ab638 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1188-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1188-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug12384-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug12384-expected.png
index 98d929e..c14b831 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug12384-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug12384-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1318-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1318-expected.png
index b886b4d..fc80f2a 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1318-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug1318-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug138725-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug138725-expected.png
index 75485592..cb9a1e1 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug138725-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug138725-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug24200-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug24200-expected.png
index 77534bd..2bee20754 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug24200-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug24200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug2479-2-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug2479-2-expected.png
index 30f6551..ddd9507d 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug2479-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug2479-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug26178-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug26178-expected.png
index 67361f7..b11716d 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug26178-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug26178-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug28928-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug28928-expected.png
index 4b22998..fb8b978 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug28928-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug28928-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug29326-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug29326-expected.png
index 1a8e8e6..6521b7c 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug29326-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug29326-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30559-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30559-expected.png
index edf4a0b..76931b1 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30559-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30559-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30692-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30692-expected.png
index ddd07de..d0e60d6 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30692-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug30692-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug39209-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug39209-expected.png
index d909b95f..2dec41ca 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug39209-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug39209-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4429-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4429-expected.png
index 6f965f9..7186751 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4429-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4429-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4527-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4527-expected.png
index bf30d79..37f705e 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4527-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug4527-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-1-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-1-expected.png
index e210602..1faf14a 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-2-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-2-expected.png
index 06fb6183..b49405f 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug46368-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug51037-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug51037-expected.png
index b6f32a28..47cba64 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug51037-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug51037-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug55545-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug55545-expected.png
index 89f89ab..02e5802 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug55545-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug55545-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug59354-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug59354-expected.png
index e89ad2e..d0d9973 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug59354-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug59354-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug68912-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug68912-expected.png
index 7d0621c..c2ccf92 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug68912-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug68912-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug7342-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug7342-expected.png
index 216ad58..091519f 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug7342-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug7342-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug92647-2-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug92647-2-expected.png
index fd2874d..3ff2b94 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug92647-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug92647-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug96334-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug96334-expected.png
index 6a202ec..eac86f52 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug96334-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug96334-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug99948-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug99948-expected.png
index e53ea62..b2137c22 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug99948-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/bugs/bug99948-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/collapsing_borders/bug41262-4-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/collapsing_borders/bug41262-4-expected.png
index dca3712..8659e36 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/collapsing_borders/bug41262-4-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/collapsing_borders/bug41262-4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/core/margins-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/core/margins-expected.png
index 18af8f6..b480521 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/core/margins-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/core/margins-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/dom/tableDom-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/dom/tableDom-expected.png
index 2812c6b..99427081 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/dom/tableDom-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/dom/tableDom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla/other/move_row-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla/other/move_row-expected.png
index 8e7ebc1..dfeb0f0 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla/other/move_row-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla/other/move_row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug1725-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug1725-expected.png
index e1f2773..3a5d1eca 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug1725-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug1725-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png
index bf57365..584753e 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug58402-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png
index 7d04dffa..2a70812 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/bugs/bug92647-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions1-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions1-expected.png
index 5697f8f..717e0a8 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions1-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions2-expected.png b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions2-expected.png
index f5a566d5..57525359 100644
--- a/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions2-expected.png
+++ b/third_party/blink/web_tests/platform/win/tables/mozilla_expected_failures/core/captions2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/transforms/3d/general/perspective-non-layer-expected.png b/third_party/blink/web_tests/platform/win/transforms/3d/general/perspective-non-layer-expected.png
index ab07942..73b7058ac 100644
--- a/third_party/blink/web_tests/platform/win/transforms/3d/general/perspective-non-layer-expected.png
+++ b/third_party/blink/web_tests/platform/win/transforms/3d/general/perspective-non-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/transforms/transformed-focused-text-input-expected.png b/third_party/blink/web_tests/platform/win/transforms/transformed-focused-text-input-expected.png
index 063da1c..5717bdc2 100644
--- a/third_party/blink/web_tests/platform/win/transforms/transformed-focused-text-input-expected.png
+++ b/third_party/blink/web_tests/platform/win/transforms/transformed-focused-text-input-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/001-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/001-expected.png
new file mode 100644
index 0000000..05c1caf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/fieldset/fieldset-align-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/fieldset/fieldset-align-expected.png
new file mode 100644
index 0000000..67d356dd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/fieldset/fieldset-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select/select-autofilled-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select/select-autofilled-expected.png
new file mode 100644
index 0000000..31119ed9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select/select-autofilled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-off/text-input-elements-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
index 5b4aadf..c6c3abf5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-on/text-input-elements-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
index 8257781..bbb847a 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/12-55-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/12-55-expected.png
index 27e0e52..cb9db157 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/12-55-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/12-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/182-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/182-expected.png
index c237d57..275f787 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/182-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/182-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png
index e5d7e24..02ce6e0 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/23-55-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/23-55-expected.png
index 4f419c0..30c3bdf8 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/23-55-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/23-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/55-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/55-expected.png
index 57b46d8a..df323026 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/55-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
new file mode 100644
index 0000000..33c16ef
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
new file mode 100644
index 0000000..faf5e37
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
new file mode 100644
index 0000000..8d6b683
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
new file mode 100644
index 0000000..f8ef9c4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
new file mode 100644
index 0000000..94ba820
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
new file mode 100644
index 0000000..e2699bf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
new file mode 100644
index 0000000..bd2920c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
new file mode 100644
index 0000000..6211ac7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
new file mode 100644
index 0000000..2f5edca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
new file mode 100644
index 0000000..6e1ff66
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
new file mode 100644
index 0000000..c43f5bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
new file mode 100644
index 0000000..a151009
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
new file mode 100644
index 0000000..3b54691
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
new file mode 100644
index 0000000..626b2f49
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
new file mode 100644
index 0000000..2aee3a6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
new file mode 100644
index 0000000..18f89e4c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
new file mode 100644
index 0000000..1993423
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
new file mode 100644
index 0000000..6858e670
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..ffec41e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
new file mode 100644
index 0000000..f088793
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
new file mode 100644
index 0000000..91a39c4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
new file mode 100644
index 0000000..463045ab
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..fada8ae
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
new file mode 100644
index 0000000..fdea495
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
new file mode 100644
index 0000000..582ba47
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
new file mode 100644
index 0000000..b008419a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
new file mode 100644
index 0000000..0057ae8df
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png
new file mode 100644
index 0000000..54d39b6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
new file mode 100644
index 0000000..b055e8f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
new file mode 100644
index 0000000..508fdcd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
new file mode 100644
index 0000000..9545bfb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
new file mode 100644
index 0000000..c9e997c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-basic-expected.png
new file mode 100644
index 0000000..344ab83
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
new file mode 100644
index 0000000..3464ea7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
new file mode 100644
index 0000000..d4f670ef
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
new file mode 100644
index 0000000..c8411f0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
new file mode 100644
index 0000000..bcbebe48
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
new file mode 100644
index 0000000..ee239e6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
new file mode 100644
index 0000000..7c85197
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
new file mode 100644
index 0000000..dc77672
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
new file mode 100644
index 0000000..721c9162
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
new file mode 100644
index 0000000..a478503
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
new file mode 100644
index 0000000..07d19d0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png
new file mode 100644
index 0000000..f3553da
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
new file mode 100644
index 0000000..6a39c9a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
new file mode 100644
index 0000000..592ed80
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/input-appearance-range-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/input-appearance-range-expected.png
new file mode 100644
index 0000000..4cd8333
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/input-appearance-range-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/range-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/range-appearance-basic-expected.png
new file mode 100644
index 0000000..5779d77f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/range-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png
new file mode 100644
index 0000000..589a880
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
new file mode 100644
index 0000000..4e8e9e9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
new file mode 100644
index 0000000..c357c1ac
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
new file mode 100644
index 0000000..1a81d4d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
new file mode 100644
index 0000000..eebbf45
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png
new file mode 100644
index 0000000..681031a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
new file mode 100644
index 0000000..78ba710
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
new file mode 100644
index 0000000..2527aab
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
new file mode 100644
index 0000000..c4cab64
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png
new file mode 100644
index 0000000..4fbe1fed
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
new file mode 100644
index 0000000..7e8ab9d1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
new file mode 100644
index 0000000..f9a2c75
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
new file mode 100644
index 0000000..266c3a5ae
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
new file mode 100644
index 0000000..548dfc7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
new file mode 100644
index 0000000..ef52ed3b3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
new file mode 100644
index 0000000..a3a6efa
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
new file mode 100644
index 0000000..7458ccf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
new file mode 100644
index 0000000..8422839
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..b4fc4645
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..8d4e05cf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..3e56de92
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..66c01d1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
new file mode 100644
index 0000000..d540103
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..1ad4dc3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..4cb8ad2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..6c71e8b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..24afbdac
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..2dcc7a9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..9b755186
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..005c9bba
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..02e8ca0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..7824a7c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..4b21b50
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/input-disabled-color-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/input-disabled-color-expected.png
new file mode 100644
index 0000000..12f0615a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/input-disabled-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-basic-expected.png
new file mode 100644
index 0000000..0d8f43d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-datalist-expected.png
new file mode 100644
index 0000000..ad6241b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/text-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-expected.png
new file mode 100644
index 0000000..c041028
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-quirks-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-quirks-expected.png
new file mode 100644
index 0000000..e4ecaa7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/basic-textareas-quirks-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-appearance-basic-expected.png
new file mode 100644
index 0000000..a3fd5ce
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/time/time-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/time/time-appearance-basic-expected.png
new file mode 100644
index 0000000..40cbb90c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/time/time-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/week/week-appearance-basic-expected.png
new file mode 100644
index 0000000..1b4e015
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/week/week-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/12-55-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/12-55-expected.png
index 8cc327dd..3ac93c70 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/12-55-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/12-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/182-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/182-expected.png
index 6692850..6f80e6b 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/182-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/182-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/2-dht-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/2-dht-expected.png
index b90f0d95..62d5e98 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/2-dht-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/23-55-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/23-55-expected.png
index 96262c161..9ab3f2fb 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/23-55-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/23-55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/55-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/55-expected.png
index 60aedbe..a729cfc 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/55-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/55-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
index e08e836..a2c4ab71 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
index a7f4280..9043cdb 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
index 8f8552ae..9043cdb 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
index 38ca6574..fc2b5bb 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
index de58e887..25fb19b2 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
index f2c9ce4..87efeebb8 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
index 83a807c..c869120 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
index cbe09d6..869fd52 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
index 822d2c3..126baed9 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png
index 7462941..bf5394e 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
index 613ee2f..d89d19a 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png
index 969d84e..3f73a65 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
index 0e53db2..d8ea212 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
index 1b8eda27d..40087551 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png
index de69484..b835a870b 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png
index aa418a5..97e8e63 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/select/menulist-appearance-rtl-expected.png
index b5bdb69..24287df 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/select/menulist-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
index 4d006c1..ec52ecb 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
index 61751f5..a9defb6 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
index d2a3dec..6e62d5e5 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/blink/web_tests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png
index 0188c46..fcf5ad4d 100644
--- a/third_party/blink/web_tests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/blink/web_tests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/tables/mozilla/bugs/bug2479-2-expected.png b/third_party/blink/web_tests/platform/win7/tables/mozilla/bugs/bug2479-2-expected.png
index 42ec6d1..a5560b5 100644
--- a/third_party/blink/web_tests/platform/win7/tables/mozilla/bugs/bug2479-2-expected.png
+++ b/third_party/blink/web_tests/platform/win7/tables/mozilla/bugs/bug2479-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-mode-native-theme-off/text-input-elements-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
deleted file mode 100644
index 5b4aadf..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/dark-mode-native-theme-off/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-mode-native-theme-on/text-input-elements-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
deleted file mode 100644
index 8257781..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/dark-mode-native-theme-on/text-input-elements-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
new file mode 100644
index 0000000..e08e836
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
new file mode 100644
index 0000000..a7f4280
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
new file mode 100644
index 0000000..8f8552ae
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
new file mode 100644
index 0000000..38ca6574
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
new file mode 100644
index 0000000..de58e887
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
new file mode 100644
index 0000000..f2c9ce4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
new file mode 100644
index 0000000..83a807c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
new file mode 100644
index 0000000..cbe09d6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
new file mode 100644
index 0000000..822d2c3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..7462941
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
new file mode 100644
index 0000000..613ee2f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
new file mode 100644
index 0000000..969d84e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
new file mode 100644
index 0000000..0e53db2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
new file mode 100644
index 0000000..1b8eda27d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
new file mode 100644
index 0000000..de69484
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
new file mode 100644
index 0000000..aa418a5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
new file mode 100644
index 0000000..b5bdb69
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..4d006c1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
new file mode 100644
index 0000000..61751f5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
new file mode 100644
index 0000000..d2a3dec
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png
Binary files differ
diff --git a/third_party/dpkg-shlibdeps/LICENSE b/third_party/dpkg-shlibdeps/LICENSE
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/third_party/dpkg-shlibdeps/LICENSE
@@ -0,0 +1,339 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/third_party/dpkg-shlibdeps/METADATA b/third_party/dpkg-shlibdeps/METADATA
new file mode 100644
index 0000000..e20aab9
--- /dev/null
+++ b/third_party/dpkg-shlibdeps/METADATA
@@ -0,0 +1,17 @@
+name: "dpkg"
+description:
+    "package manager for Debian"
+
+third_party {
+  url {
+    type: HOMEPAGE
+    value: "https://wiki.debian.org/Teams/Dpkg"
+  }
+  url {
+    type: GIT
+    value: "https://git.dpkg.org/git/dpkg/dpkg.git"
+  }
+  version: "a0828e04289639f875cb924f8d1a65a634683b19"
+  last_upgrade_date { year: 2020 month: 1 day: 9 }
+  license_type: RESTRICTED
+}
diff --git a/third_party/dpkg-shlibdeps/OWNERS b/third_party/dpkg-shlibdeps/OWNERS
new file mode 100644
index 0000000..65ca995
--- /dev/null
+++ b/third_party/dpkg-shlibdeps/OWNERS
@@ -0,0 +1,4 @@
+thestig@chromium.org
+thomasanderson@chromium.org
+
+# COMPONENT: Tools
diff --git a/third_party/dpkg-shlibdeps/README.chromium b/third_party/dpkg-shlibdeps/README.chromium
new file mode 100644
index 0000000..937b252
--- /dev/null
+++ b/third_party/dpkg-shlibdeps/README.chromium
@@ -0,0 +1,29 @@
+Name: dpkg-shlibdeps
+URL: http://anonscm.debian.org/cgit/dpkg/dpkg.git
+Version: a0828e04289639f875cb924f8d1a65a634683b19
+License: GPL v2
+License File: NOT_SHIPPED
+Security Critical: no
+
+Description:
+Generate shared library substvar dependencies. This directory can be removed
+if/when the --ignore-weak-undefined option becomes available on the buildbots.
+
+Updating:
+Copy dpkg/COPYING and dpkg/scripts/dpkg-shlibdeps.pl to
+third_party/dpkg-shlibdeps/.
+
+Patches:
+- 0001-dkpg-shlibdeps-add-option-to-ignore-weak-undefined-symbols.patch
+  Prevents weak undefined symbols from introducing hard dependencies. Upstream
+  merge request:
+  https://salsa.debian.org/thomasanderson-guest/dpkg/merge_requests/1
+- 0002-fix-compatibility-for-chromium.patch
+  dpkg-shlibdeps.pl comes from dpkg-dev, which depends on libdpkg-perl that
+  provides perl modules for eg. locating shared libraries and getting a list of
+  symbols from them. The API of libdpkg-perl is not stable (but changes very
+  infrequently), so in some cases dpkg-shlibdeps.pl will be expecting APIs that
+  do not exist on the system. This patch is a minimal set of changes that fixes
+  compatibility for supported build environments (Ubuntu Xenial and later).
+  Specifically, provide the debug() function, and don't expect exec_abi to be a
+  member of Dpkg::Shlibs::Objdump::Object.
diff --git a/third_party/dpkg-shlibdeps/dpkg-shlibdeps.pl b/third_party/dpkg-shlibdeps/dpkg-shlibdeps.pl
new file mode 100755
index 0000000..b40667f
--- /dev/null
+++ b/third_party/dpkg-shlibdeps/dpkg-shlibdeps.pl
@@ -0,0 +1,938 @@
+#!/usr/bin/perl
+#
+# dpkg-shlibdeps
+#
+# Copyright © 1996 Ian Jackson
+# Copyright © 2000 Wichert Akkerman
+# Copyright © 2006 Frank Lichtenheld
+# Copyright © 2006-2010,2012-2015 Guillem Jover <guillem@debian.org>
+# Copyright © 2007, 2016 Raphaël Hertzog <hertzog@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+use warnings;
+use feature qw(state);
+
+use List::Util qw(any none);
+use Cwd qw(realpath);
+use File::Basename qw(dirname);
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Path qw(relative_to_pkg_root guess_pkg_root_dir
+		  check_files_are_the_same get_control_path);
+use Dpkg::Version;
+use Dpkg::Shlibs qw(find_library get_library_paths);
+use Dpkg::Shlibs::Objdump;
+use Dpkg::Shlibs::SymbolFile;
+use Dpkg::Substvars;
+use Dpkg::Arch qw(get_host_arch);
+use Dpkg::Deps;
+use Dpkg::Control::Info;
+use Dpkg::Control::Fields;
+
+
+use constant {
+    WARN_SYM_NOT_FOUND => 1,
+    WARN_DEP_AVOIDABLE => 2,
+    WARN_NOT_NEEDED => 4,
+};
+
+# By increasing importance
+my @depfields = qw(Suggests Recommends Depends Pre-Depends);
+my $i = 0; my %depstrength = map { $_ => $i++ } @depfields;
+
+textdomain('dpkg-dev');
+
+my $admindir = $Dpkg::ADMINDIR;
+my $shlibsoverride = "$Dpkg::CONFDIR/shlibs.override";
+my $shlibsdefault = "$Dpkg::CONFDIR/shlibs.default";
+my $shlibslocal = 'debian/shlibs.local';
+my $packagetype = 'deb';
+my $dependencyfield = 'Depends';
+my $varlistfile = 'debian/substvars';
+my $varlistfilenew;
+my $varnameprefix = 'shlibs';
+my $ignore_missing_info = 0;
+my $ignore_weak_undefined = 0;
+my $warnings = WARN_SYM_NOT_FOUND | WARN_DEP_AVOIDABLE;
+my $debug = 0;
+my @exclude = ();
+my @pkg_dir_to_search = ();
+my @pkg_dir_to_ignore = ();
+my $host_arch = get_host_arch();
+
+my (@pkg_shlibs, @pkg_symbols, @pkg_root_dirs);
+
+my ($stdout, %exec);
+foreach (@ARGV) {
+    if (m/^-T(.*)$/) {
+	$varlistfile = $1;
+    } elsif (m/^-p(\w[-:0-9A-Za-z]*)$/) {
+	$varnameprefix = $1;
+    } elsif (m/^-L(.*)$/) {
+	$shlibslocal = $1;
+    } elsif (m/^-l(.*)$/) {
+	Dpkg::Shlibs::add_library_dir($1);
+    } elsif (m/^-S(.*)$/) {
+	push @pkg_dir_to_search, $1;
+    } elsif (m/^-I(.*)$/) {
+	push @pkg_dir_to_ignore, $1;
+    } elsif (m/^-O$/) {
+	$stdout = 1;
+    } elsif (m/^-O(.+)$/) {
+	$varlistfile = $1;
+    } elsif (m/^-(?:\?|-help)$/) {
+	usage(); exit(0);
+    } elsif (m/^--version$/) {
+	version(); exit(0);
+    } elsif (m/^--admindir=(.*)$/) {
+	$admindir = $1;
+	if (not -d $admindir) {
+	    error(g_("administrative directory '%s' does not exist"), $admindir);
+	}
+	$ENV{DPKG_ADMINDIR} = $admindir;
+    } elsif (m/^-d(.*)$/) {
+	$dependencyfield = field_capitalize($1);
+	if (not defined $depstrength{$dependencyfield}) {
+	    warning(g_("unrecognized dependency field '%s'"), $dependencyfield);
+	}
+    } elsif (m/^-e(.*)$/) {
+	if (exists $exec{$1}) {
+	    # Affect the binary to the most important field
+	    if ($depstrength{$dependencyfield} > $depstrength{$exec{$1}}) {
+		$exec{$1} = $dependencyfield;
+	    }
+	} else {
+	    $exec{$1} = $dependencyfield;
+	}
+    } elsif (m/^--ignore-missing-info$/) {
+	$ignore_missing_info = 1;
+    } elsif (m/^--ignore-weak-undefined$/) {
+	$ignore_weak_undefined = 1;
+    } elsif (m/^--warnings=(\d+)$/) {
+	$warnings = $1;
+    } elsif (m/^-t(.*)$/) {
+	$packagetype = $1;
+    } elsif (m/^-v$/) {
+	$debug++;
+    } elsif (m/^-x(.*)$/) {
+	push @exclude, $1;
+    } elsif (m/^-/) {
+	usageerr(g_("unknown option '%s'"), $_);
+    } else {
+	if (exists $exec{$_}) {
+	    # Affect the binary to the most important field
+	    if ($depstrength{$dependencyfield} > $depstrength{$exec{$_}}) {
+		$exec{$_} = $dependencyfield;
+	    }
+	} else {
+	    $exec{$_} = $dependencyfield;
+	}
+    }
+}
+usageerr(g_('need at least one executable')) unless scalar keys %exec;
+
+report_options(debug_level => $debug);
+
+sub ignore_pkgdir {
+    my $path = shift;
+    return any { $path =~ /^\Q$_\E/ } @pkg_dir_to_ignore;
+}
+
+sub debug {
+    my $level = shift;
+    print @_ if $level <= $debug;
+}
+
+if (-d 'debian') {
+    push @pkg_symbols, grep { !ignore_pkgdir($_) } glob 'debian/*/DEBIAN/symbols';
+    push @pkg_shlibs, grep { !ignore_pkgdir($_) } glob 'debian/*/DEBIAN/shlibs';
+    my %uniq = map { guess_pkg_root_dir($_) => 1 } (@pkg_symbols, @pkg_shlibs);
+    push @pkg_root_dirs, keys %uniq;
+}
+
+my $control = Dpkg::Control::Info->new();
+my $fields = $control->get_source();
+my $bd_value = deps_concat($fields->{'Build-Depends'}, $fields->{'Build-Depends-Arch'});
+my $build_deps = deps_parse($bd_value, build_dep => 1, reduce_restrictions => 1);
+error(g_('error occurred while parsing %s'), 'Build-Depends/Build-Depends-Arch')
+    unless defined $build_deps;
+
+my %dependencies;
+
+# Statistics on soname seen in the whole run (with multiple analysis of
+# binaries)
+my %global_soname_notfound;
+my %global_soname_used;
+my %global_soname_needed;
+
+# Symfile and objdump caches
+my %symfile_cache;
+my %objdump_cache;
+my %symfile_has_soname_cache;
+
+# Used to count errors due to missing libraries
+my $error_count = 0;
+
+my $cur_field;
+foreach my $file (keys %exec) {
+    $cur_field = $exec{$file};
+    debug(1, ">> Scanning $file (for $cur_field field)");
+
+    my $obj = Dpkg::Shlibs::Objdump::Object->new($file);
+    my @sonames = $obj->get_needed_libraries;
+
+    # Load symbols files for all needed libraries (identified by SONAME)
+    my %libfiles;
+    my %altlibfiles;
+    my %soname_libs;
+    my %soname_notfound;
+    my %alt_soname;
+    foreach my $soname (@sonames) {
+	my @libs = my_find_library($soname, $obj->{RPATH}, $obj->{exec_abi} || $obj->{format}, $file);
+	unless (scalar @libs) {
+	    $soname_notfound{$soname} = 1;
+	    $global_soname_notfound{$soname} = 1;
+	    my $msg = g_('cannot find library %s needed by %s (ELF ' .
+	                 "format: '%s' abi: '%s'; RPATH: '%s')");
+	    if (scalar(split_soname($soname))) {
+		errormsg($msg, $soname, $file, $obj->{format}, join(':', @{$obj->{RPATH}}));
+		$error_count++;
+	    } else {
+		warning($msg, $soname, $file, $obj->{format}, join(':', @{$obj->{RPATH}}));
+	    }
+	    next;
+	}
+
+	# Track shared libraries for a given SONAME.
+	push @{$soname_libs{$soname}}, @libs;
+
+	# Track shared libraries for package mapping.
+	foreach my $lib (@libs) {
+	    $libfiles{$lib} = $soname;
+	    my $reallib = realpath($lib);
+	    if ($reallib ne $lib) {
+		$altlibfiles{$reallib} = $soname;
+	    }
+	    debug(1, "Library $soname found in $lib");
+        }
+    }
+    my $file2pkg = find_packages(keys %libfiles, keys %altlibfiles);
+    my $symfile = Dpkg::Shlibs::SymbolFile->new();
+    my $dumplibs_wo_symfile = Dpkg::Shlibs::Objdump->new();
+    SONAME: foreach my $soname (@sonames) {
+      # Select the first good entry from the ordered list that we got from
+      # find_library(), and skip to the next SONAME.
+
+      foreach my $lib (@{$soname_libs{$soname}}) {
+	if (none { $_ ne '' } @{$file2pkg->{$lib}}) {
+	    # The path of the library as calculated is not the
+	    # official path of a packaged file, try to fallback on
+	    # the realpath() first, maybe this one is part of a package
+	    my $reallib = realpath($lib);
+	    if (exists $file2pkg->{$reallib}) {
+		$file2pkg->{$lib} = $file2pkg->{$reallib};
+	    }
+	}
+	if (none { $_ ne '' } @{$file2pkg->{$lib}}) {
+	    # If the library is really not available in an installed package,
+	    # it's because it's in the process of being built
+	    # Empty package name will lead to consideration of symbols
+	    # file from the package being built only
+	    $file2pkg->{$lib} = [''];
+	    debug(1, "No associated package found for $lib");
+	}
+
+	# Load symbols/shlibs files from packages providing libraries
+        my $missing_wanted_shlibs_info = 0;
+	foreach my $pkg (@{$file2pkg->{$lib}}) {
+	    my $symfile_path;
+            my $haslocaldep = 0;
+            if (-e $shlibslocal and
+                defined(extract_from_shlibs($soname, $shlibslocal)))
+            {
+                $haslocaldep = 1;
+            }
+            if ($packagetype eq 'deb' and not $haslocaldep) {
+		# Use fine-grained dependencies only on real deb
+                # and only if the dependency is not provided by shlibs.local
+		$symfile_path = find_symbols_file($pkg, $soname, $lib);
+            }
+            if (defined($symfile_path)) {
+                # Load symbol information
+                debug(1, "Using symbols file $symfile_path for $soname");
+                $symfile_cache{$symfile_path} //=
+                   Dpkg::Shlibs::SymbolFile->new(file => $symfile_path);
+                $symfile->merge_object_from_symfile($symfile_cache{$symfile_path}, $soname);
+            }
+	    if (defined($symfile_path) && $symfile->has_object($soname)) {
+		# Initialize dependencies with the smallest minimal version
+                # of all symbols (unversioned dependency is not ok as the
+                # library might not have always been available in the
+                # package and we really need it)
+		my $dep = $symfile->get_dependency($soname);
+		my $minver = $symfile->get_smallest_version($soname) || '';
+		update_dependency_version($dep, $minver);
+		debug(2, " Minimal version of ($dep) initialized with ($minver)");
+
+                # Found a symbols file for the SONAME.
+                next SONAME;
+	    } else {
+		# No symbol file found, fall back to standard shlibs
+                debug(1, "Using shlibs+objdump for $soname (file $lib)");
+                $objdump_cache{$lib} //= Dpkg::Shlibs::Objdump::Object->new($lib);
+                my $libobj = $objdump_cache{$lib};
+                my $id = $dumplibs_wo_symfile->add_object($libobj);
+		if (($id ne $soname) and ($id ne $lib)) {
+		    warning(g_('%s has an unexpected SONAME (%s)'), $lib, $id);
+		    $alt_soname{$id} = $soname;
+		}
+
+		# Only try to generate a dependency for libraries with a SONAME
+                if (not $libobj->is_public_library()) {
+                    debug(1, "Skipping shlibs+objdump info for private library $lib");
+                    next;
+		}
+
+                # If we found a shlibs file for the SONAME, skip to the next.
+                next SONAME if add_shlibs_dep($soname, $pkg, $lib);
+
+                $missing_wanted_shlibs_info = 1;
+
+                debug(1, "No shlibs+objdump info available, trying next package for $lib");
+	    }
+	}
+
+        next if not $missing_wanted_shlibs_info;
+
+        # We will only reach this point, if we have found no symbols nor
+        # shlibs files for the given SONAME.
+
+        # This failure is fairly new, try to be kind by
+        # ignoring as many cases that can be safely ignored
+        my $ignore = 0;
+        # 1/ when the lib and the binary are in the same
+        # package
+        my $root_file = guess_pkg_root_dir($file);
+        my $root_lib = guess_pkg_root_dir($lib);
+        $ignore++ if defined $root_file and defined $root_lib
+            and check_files_are_the_same($root_file, $root_lib);
+        # 2/ when the lib is not versioned and can't be
+        # handled by shlibs
+        $ignore++ unless scalar split_soname($soname);
+        # 3/ when we have been asked to do so
+        $ignore++ if $ignore_missing_info;
+        error(g_('no dependency information found for %s ' .
+                 "(used by %s)\n" .
+                 'Hint: check if the library actually comes ' .
+                 'from a package.'), $lib, $file)
+            unless $ignore;
+      }
+    }
+
+    # Scan all undefined symbols of the binary and resolve to a
+    # dependency
+    my %soname_used;
+    foreach my $soname (@sonames) {
+        # Initialize statistics
+        $soname_used{$soname} = 0;
+        $global_soname_used{$soname} //= 0;
+        if (exists $global_soname_needed{$soname}) {
+            push @{$global_soname_needed{$soname}}, $file;
+        } else {
+            $global_soname_needed{$soname} = [ $file ];
+        }
+    }
+    my $nb_warnings = 0;
+    my $nb_skipped_warnings = 0;
+    # Disable warnings about missing symbols when we have not been able to
+    # find all libs
+    my $disable_warnings = scalar(keys(%soname_notfound));
+    my $in_public_dir = 1;
+    if (my $relname = relative_to_pkg_root($file)) {
+        my $parent_dir = '/' . dirname($relname);
+        $in_public_dir = any { $parent_dir eq $_ } get_library_paths();
+    } else {
+        warning(g_('binaries to analyze should already be ' .
+                   "installed in their package's directory"));
+    }
+    debug(2, 'Analyzing all undefined symbols');
+    foreach my $sym ($obj->get_undefined_dynamic_symbols()) {
+	next if $ignore_weak_undefined && $sym->{weak};
+	my $name = $sym->{name};
+	if ($sym->{version}) {
+	    $name .= '@' . "$sym->{version}";
+	} else {
+	    $name .= '@' . 'Base';
+	}
+        debug(2, " Looking up symbol $name");
+	my %symdep = $symfile->lookup_symbol($name, \@sonames);
+	if (keys %symdep) {
+	    my $depends = $symfile->get_dependency($symdep{soname},
+		$symdep{symbol}{dep_id});
+            debug(2, " Found in symbols file of $symdep{soname} (minver: " .
+                     "$symdep{symbol}{minver}, dep: $depends)");
+	    $soname_used{$symdep{soname}}++;
+	    $global_soname_used{$symdep{soname}}++;
+            if (exists $alt_soname{$symdep{soname}}) {
+                # Also count usage on alternate soname
+                $soname_used{$alt_soname{$symdep{soname}}}++;
+                $global_soname_used{$alt_soname{$symdep{soname}}}++;
+            }
+	    update_dependency_version($depends, $symdep{symbol}{minver});
+	} else {
+	    my $syminfo = $dumplibs_wo_symfile->locate_symbol($name);
+	    if (not defined($syminfo)) {
+                debug(2, ' Not found');
+                next unless ($warnings & WARN_SYM_NOT_FOUND);
+		next if $disable_warnings;
+		# Complain about missing symbols only for executables
+		# and public libraries
+		if ($obj->is_executable() or $obj->is_public_library()) {
+		    my $print_name = $name;
+		    # Drop the default suffix for readability
+		    $print_name =~ s/\@Base$//;
+		    unless ($sym->{weak}) {
+			if ($debug or ($in_public_dir and $nb_warnings < 10)
+                            or (not $in_public_dir and $nb_warnings < 1))
+                        {
+                            if ($in_public_dir) {
+			        warning(g_('symbol %s used by %s found in none of the ' .
+				           'libraries'), $print_name, $file);
+                            } else {
+			        warning(g_('%s contains an unresolvable reference to ' .
+                                           "symbol %s: it's probably a plugin"),
+                                        $file, $print_name);
+                            }
+			    $nb_warnings++;
+			} else {
+			    $nb_skipped_warnings++;
+			}
+		    }
+		}
+	    } else {
+                debug(2, " Found in $syminfo->{soname} ($syminfo->{objid})");
+		if (exists $alt_soname{$syminfo->{soname}}) {
+		    # Also count usage on alternate soname
+		    $soname_used{$alt_soname{$syminfo->{soname}}}++;
+		    $global_soname_used{$alt_soname{$syminfo->{soname}}}++;
+		}
+		$soname_used{$syminfo->{soname}}++;
+		$global_soname_used{$syminfo->{soname}}++;
+	    }
+	}
+    }
+    warning(P_('%d similar warning has been skipped (use -v to see it)',
+               '%d other similar warnings have been skipped (use -v to see ' .
+               'them all)', $nb_skipped_warnings), $nb_skipped_warnings)
+        if $nb_skipped_warnings;
+    foreach my $soname (@sonames) {
+	# Adjust minimal version of dependencies with information
+	# extracted from build-dependencies
+        my $dev_pkgs = $symfile->get_field($soname, 'Build-Depends-Packages') //
+                       $symfile->get_field($soname, 'Build-Depends-Package');
+        foreach my $dev_pkg (split /[,\s]+/, $dev_pkgs // '') {
+            debug(1, "Updating dependencies of $soname with build-dependencies");
+	    my $minver = get_min_version_from_deps($build_deps, $dev_pkg);
+	    if (defined $minver) {
+		foreach my $dep ($symfile->get_dependencies($soname)) {
+		    update_dependency_version($dep, $minver, 1);
+                    debug(1, " Minimal version of $dep updated with $minver");
+		}
+	    } else {
+                debug(1, " No minimal version found in $dev_pkg build-dependency");
+            }
+	}
+
+	# Warn about un-NEEDED libraries
+	unless ($soname_notfound{$soname} or $soname_used{$soname}) {
+	    # Ignore warning for libm.so.6 if also linked against libstdc++
+	    next if ($soname =~ /^libm\.so\.\d+$/ and
+	             any { m/^libstdc\+\+\.so\.\d+/ } @sonames);
+            next unless ($warnings & WARN_NOT_NEEDED);
+	    warning(g_('%s should not be linked against %s (it uses none of ' .
+	               "the library's symbols)"), $file, $soname);
+	}
+    }
+}
+
+# Warn of unneeded libraries at the "package" level (i.e. over all
+# binaries that we have inspected)
+foreach my $soname (keys %global_soname_needed) {
+    unless ($global_soname_notfound{$soname} or $global_soname_used{$soname}) {
+        next if ($soname =~ /^libm\.so\.\d+$/ and
+                 any { m/^libstdc\+\+\.so\.\d+/ } keys %global_soname_needed);
+        next unless ($warnings & WARN_DEP_AVOIDABLE);
+        warning(P_('package could avoid a useless dependency if %s was not ' .
+                   "linked against %s (it uses none of the library's symbols)",
+                   'package could avoid a useless dependency if %s were not ' .
+                   "linked against %s (they use none of the library's symbols)",
+                   scalar @{$global_soname_needed{$soname}}),
+                join(' ', @{$global_soname_needed{$soname}}), $soname);
+    }
+}
+
+# Quit now if any missing libraries
+if ($error_count >= 1) {
+    my $note = g_('Note: libraries are not searched in other binary packages ' .
+                  "that do not have any shlibs or symbols file.\n" .
+                  'To help dpkg-shlibdeps find private libraries, you might ' .
+                  'need to use -l.');
+    error(P_('cannot continue due to the error above',
+             'cannot continue due to the errors listed above',
+             $error_count) . "\n" . $note);
+}
+
+# Open substvars file
+
+my $substvars = Dpkg::Substvars->new();
+if ($stdout) {
+    $varlistfilenew = '-';
+} else {
+    $substvars->load($varlistfile) if -e $varlistfile;
+    $substvars->filter(remove => sub { $_[0] =~ m/^\Q$varnameprefix\E:/ });
+
+    $varlistfilenew = "$varlistfile.new";
+}
+
+# Write out the shlibs substvars
+my %depseen;
+
+sub filter_deps {
+    my ($dep, $field) = @_;
+    # Skip dependencies on excluded packages
+    foreach my $exc (@exclude) {
+	return 0 if $dep =~ /^\s*\Q$exc\E\b/;
+    }
+    # Don't include dependencies if they are already
+    # mentioned in a higher priority field
+    if (not exists($depseen{$dep})) {
+	$depseen{$dep} = $dependencies{$field}{$dep};
+	return 1;
+    } else {
+	# Since dependencies can be versioned, we have to
+	# verify if the dependency is stronger than the
+	# previously seen one
+	my $stronger;
+	if ($depseen{$dep} eq $dependencies{$field}{$dep}) {
+	    # If both versions are the same (possibly unversioned)
+	    $stronger = 0;
+	} elsif ($dependencies{$field}{$dep} eq '') {
+	    $stronger = 0; # If the dep is unversioned
+	} elsif ($depseen{$dep} eq '') {
+	    $stronger = 1; # If the dep seen is unversioned
+	} elsif (version_compare_relation($depseen{$dep}, REL_GT,
+                                          $dependencies{$field}{$dep})) {
+	    # The version of the dep seen is stronger...
+	    $stronger = 0;
+	} else {
+	    $stronger = 1;
+	}
+	$depseen{$dep} = $dependencies{$field}{$dep} if $stronger;
+	return $stronger;
+    }
+}
+
+foreach my $field (reverse @depfields) {
+    my $dep = '';
+    if (exists $dependencies{$field} and scalar keys %{$dependencies{$field}}) {
+	$dep = join ', ',
+	    map {
+		# Translate dependency templates into real dependencies
+		my $templ = $_;
+		if ($dependencies{$field}{$templ}->is_valid() and
+		    $dependencies{$field}{$templ}->as_string()) {
+		    $templ =~ s/#MINVER#/(>= $dependencies{$field}{$templ})/g;
+		} else {
+		    $templ =~ s/#MINVER#//g;
+		}
+		$templ =~ s/\s+/ /g;
+		$templ;
+	    } grep {
+		filter_deps($_, $field)
+	    } keys %{$dependencies{$field}};
+    }
+    if ($dep) {
+        my $obj = deps_parse($dep);
+        error(g_('invalid dependency got generated: %s'), $dep) unless defined $obj;
+        $obj->sort();
+        $substvars->set_as_used("$varnameprefix:$field", "$obj");
+    }
+}
+
+$substvars->save($varlistfilenew);
+
+# Replace old file by new one
+if (!$stdout) {
+    rename $varlistfilenew, $varlistfile
+        or syserr(g_("install new varlist file '%s'"), $varlistfile);
+}
+
+##
+## Functions
+##
+
+sub version {
+    printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+    printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+    printf g_(
+'Usage: %s [<option>...] <executable>|-e<executable> [<option>...]')
+    . "\n\n" . g_(
+"Positional options (order is significant):
+  <executable>             include dependencies for <executable>,
+  -e<executable>           (use -e if <executable> starts with '-')
+  -d<dependency-field>     next executable(s) set shlibs:<dependency-field>.")
+    . "\n\n" . g_(
+"Options:
+  -l<library-dir>          add directory to private shared library search list.
+  -p<varname-prefix>       set <varname-prefix>:* instead of shlibs:*.
+  -O[<file>]               write variable settings to stdout (or <file>).
+  -L<local-shlibs-file>    shlibs override file, not debian/shlibs.local.
+  -T<substvars-file>       update variables here, not debian/substvars.
+  -t<type>                 set package type (default is deb).
+  -x<package>              exclude package from the generated dependencies.
+  -S<package-build-dir>    search needed libraries in the given
+                             package build directory first.
+  -I<package-build-dir>    ignore needed libraries, shlibs and symbols files
+                             in the given build directory.
+  -v                       enable verbose mode (can be used multiple times).
+  --ignore-missing-info    don't fail if dependency information can't be found.
+  --ignore-weak-undefined  only allow strong undefined symbols to introduce
+                             dependencies.
+  --warnings=<value>       define set of active warnings (see manual page).
+  --admindir=<directory>   change the administrative directory.
+  -?, --help               show this help message.
+      --version            show the version.")
+    . "\n\n" . g_(
+'Dependency fields recognized are:
+  %s
+'), $Dpkg::PROGNAME, join('/', @depfields);
+}
+
+sub get_min_version_from_deps {
+    my ($dep, $pkg) = @_;
+    if ($dep->isa('Dpkg::Deps::Simple')) {
+	if (($dep->{package} eq $pkg) &&
+	    defined($dep->{relation}) &&
+	    (($dep->{relation} eq REL_GE) ||
+	     ($dep->{relation} eq REL_GT)))
+	{
+	    return $dep->{version};
+	}
+	return;
+    } else {
+	my $res;
+	foreach my $subdep ($dep->get_deps()) {
+	    my $minver = get_min_version_from_deps($subdep, $pkg);
+	    next if not defined $minver;
+	    if (defined $res) {
+		if (version_compare_relation($minver, REL_GT, $res)) {
+		    $res = $minver;
+		}
+	    } else {
+		$res = $minver;
+	    }
+	}
+	return $res;
+    }
+}
+
+sub update_dependency_version {
+    my ($dep, $minver, $existing_only) = @_;
+    return if not defined($minver);
+    $minver = Dpkg::Version->new($minver);
+    foreach my $subdep (split /\s*,\s*/, $dep) {
+	if (exists $dependencies{$cur_field}{$subdep} and
+	    defined($dependencies{$cur_field}{$subdep}))
+	{
+	    if ($dependencies{$cur_field}{$subdep} eq '' or $minver ne '' and
+		version_compare_relation($minver, REL_GT,
+				         $dependencies{$cur_field}{$subdep}))
+	    {
+		$dependencies{$cur_field}{$subdep} = $minver;
+	    }
+	} elsif (!$existing_only) {
+	    $dependencies{$cur_field}{$subdep} = $minver;
+	}
+    }
+}
+
+sub add_shlibs_dep {
+    my ($soname, $pkg, $libfile) = @_;
+    my @shlibs = ($shlibslocal, $shlibsoverride);
+    if ($pkg eq '') {
+	# If the file is not packaged, try to find out the shlibs file in
+	# the package being built where the lib has been found
+	my $pkg_root = guess_pkg_root_dir($libfile);
+	if (defined $pkg_root) {
+	    push @shlibs, "$pkg_root/DEBIAN/shlibs";
+	}
+	# Fallback to other shlibs files but it shouldn't be necessary
+	push @shlibs, @pkg_shlibs;
+    } else {
+	my $control_file = get_control_path($pkg, 'shlibs');
+	push @shlibs, $control_file if defined $control_file;
+    }
+    push @shlibs, $shlibsdefault;
+    debug(1, " Looking up shlibs dependency of $soname provided by '$pkg'");
+    foreach my $file (@shlibs) {
+	next if not -e $file;
+	my $dep = extract_from_shlibs($soname, $file);
+	if (defined($dep)) {
+	    debug(1, " Found $dep in $file");
+	    foreach (split(/,\s*/, $dep)) {
+		# Note: the value is empty for shlibs based dependency
+		# symbol based dependency will put a valid version as value
+		$dependencies{$cur_field}{$_} = Dpkg::Version->new('');
+	    }
+	    return 1;
+	}
+    }
+    debug(1, ' Found nothing');
+    return 0;
+}
+
+sub split_soname {
+    my $soname = shift;
+
+    if ($soname =~ /^(.*)\.so\.(.*)$/) {
+        # Shared library with stable <name>.so.<version> format.
+	return wantarray ? ($1, $2) : 1;
+    } elsif ($soname =~ /^(.*)-(\d.*)\.so$/) {
+        # Shared library/module with unstable <name>-<version>.so format.
+	return wantarray ? ($1, $2) : 1;
+    } else {
+        # Something else.
+	return wantarray ? () : 0;
+    }
+}
+
+sub extract_from_shlibs {
+    my ($soname, $shlibfile) = @_;
+
+    my $shlibs_re = qr{
+        ^\s*
+        (?:(\S+):\s+)?              # Optional type
+        (\S+)\s+                    # Library
+        (\S+)                       # Version
+        (?:
+          \s+
+          (\S.*\S)                  # Dependencies
+        )?
+        \s*$
+    }x;
+
+    # Split soname in name/version
+    my ($libname, $libversion) = split_soname($soname);
+    unless (defined $libname) {
+	warning(g_("can't extract name and version from library name '%s'"),
+	        $soname);
+	return;
+    }
+    # Open shlibs file
+    open(my $shlibs_fh, '<', $shlibfile)
+        or syserr(g_("unable to open shared libs info file '%s'"), $shlibfile);
+    my $dep;
+    while (<$shlibs_fh>) {
+	s/\s*\n$//;
+	next if m/^\#/;
+	if (!m/$shlibs_re/) {
+	    warning(g_("shared libs info file '%s' line %d: bad line '%s'"),
+	            $shlibfile, $., $_);
+	    next;
+	}
+	my $depread = $4 // '';
+	if (($libname eq $2) && ($libversion eq $3)) {
+	    # Define dep and end here if the package type explicitly
+	    # matches. Otherwise if the packagetype is not specified, use
+	    # the dep only as a default that can be overridden by a later
+	    # line
+	    if (defined($1)) {
+		if ($1 eq $packagetype) {
+		    $dep = $depread;
+		    last;
+		}
+	    } else {
+		$dep //= $depread;
+	    }
+	}
+    }
+    close($shlibs_fh);
+    return $dep;
+}
+
+sub find_symbols_file {
+    my ($pkg, $soname, $libfile) = @_;
+    my @files;
+    if ($pkg eq '') {
+	# If the file is not packaged, try to find out the symbols file in
+	# the package being built where the lib has been found
+	my $pkg_root = guess_pkg_root_dir($libfile);
+	if (defined $pkg_root) {
+	    push @files, "$pkg_root/DEBIAN/symbols";
+	}
+	# Fallback to other symbols files but it shouldn't be necessary
+	push @files, @pkg_symbols;
+    } else {
+	push @files, "$Dpkg::CONFDIR/symbols/$pkg.symbols.$host_arch",
+	    "$Dpkg::CONFDIR/symbols/$pkg.symbols";
+
+	state %control_file_cache;
+	if (not exists $control_file_cache{$pkg}) {
+	    $control_file_cache{$pkg} = get_control_path($pkg, 'symbols');
+	}
+	my $control_file = $control_file_cache{$pkg};
+	push @files, $control_file if defined $control_file;
+    }
+
+    foreach my $file (@files) {
+	if (-e $file and symfile_has_soname($file, $soname)) {
+	    return $file;
+	}
+    }
+    return;
+}
+
+sub symfile_has_soname {
+    my ($file, $soname) = @_;
+
+    if (exists $symfile_has_soname_cache{$file}{$soname}) {
+        return $symfile_has_soname_cache{$file}{$soname};
+    }
+
+    open(my $symfile_fh, '<', $file)
+        or syserr(g_('cannot open file %s'), $file);
+    my $result = 0;
+    while (<$symfile_fh>) {
+	if (/^\Q$soname\E /) {
+	    $result = 1;
+	    last;
+	}
+    }
+    close($symfile_fh);
+    $symfile_has_soname_cache{$file}{$soname} = $result;
+    return $result;
+}
+
+# find_library ($soname, \@rpath, $format)
+sub my_find_library {
+    my ($lib, $rpath, $format, $execfile) = @_;
+
+    # Create real RPATH in case $ORIGIN is used
+    # Note: ld.so also supports $PLATFORM and $LIB but they are
+    # used in real case (yet)
+    my $libdir = relative_to_pkg_root($execfile);
+    my $origin;
+    if (defined $libdir) {
+	$origin = "/$libdir";
+	$origin =~ s{/+[^/]*$}{};
+    }
+    my @RPATH = ();
+    foreach my $path (@{$rpath}) {
+	if ($path =~ /\$ORIGIN|\$\{ORIGIN\}/) {
+	    if (defined $origin) {
+		$path =~ s/\$ORIGIN/$origin/g;
+		$path =~ s/\$\{ORIGIN\}/$origin/g;
+	    } else {
+		warning(g_('$ORIGIN is used in RPATH of %s and the corresponding ' .
+		'directory could not be identified due to lack of DEBIAN ' .
+		"sub-directory in the root of package's build tree"), $execfile);
+	    }
+	}
+	push @RPATH, $path;
+    }
+
+    # Look into the packages we're currently building in the following
+    # order:
+    # - package build tree of the binary which is analyzed
+    # - package build tree given on the command line (option -S)
+    # - other package build trees that contain either a shlibs or a
+    #   symbols file
+    # But ignore:
+    # - package build tree given on the command line (option -I)
+
+    my @builddirs;
+    my $pkg_root = guess_pkg_root_dir($execfile);
+    push @builddirs, $pkg_root if defined $pkg_root;
+    push @builddirs, @pkg_dir_to_search;
+    push @builddirs, @pkg_root_dirs;
+    my %dir_checked;
+    foreach my $builddir (@builddirs) {
+	next if defined($dir_checked{$builddir});
+	next if ignore_pkgdir($builddir);
+	my @libs = find_library($lib, \@RPATH, $format, $builddir);
+	return @libs if scalar @libs;
+	$dir_checked{$builddir} = 1;
+    }
+
+    # Fallback in the root directory if we have not found what we were
+    # looking for in the packages
+    return find_library($lib, \@RPATH, $format, '');
+}
+
+my %cached_pkgmatch = ();
+
+sub find_packages {
+    my @files;
+    my $pkgmatch = {};
+
+    foreach my $path (@_) {
+	if (exists $cached_pkgmatch{$path}) {
+	    $pkgmatch->{$path} = $cached_pkgmatch{$path};
+	} else {
+	    push @files, $path;
+	    $cached_pkgmatch{$path} = ['']; # placeholder to cache misses too.
+	    $pkgmatch->{$path} = [''];      # might be replaced later on
+	}
+    }
+    return $pkgmatch unless scalar(@files);
+
+    my $pid = open(my $dpkg_fh, '-|');
+    syserr(g_('cannot fork for %s'), 'dpkg-query --search') unless defined $pid;
+    if (!$pid) {
+	# Child process running dpkg --search and discarding errors
+	close STDERR;
+	open STDERR, '>', '/dev/null'
+	    or syserr(g_('cannot open file %s'), '/dev/null');
+	$ENV{LC_ALL} = 'C';
+	exec 'dpkg-query', '--search', '--', @files
+	    or syserr(g_('unable to execute %s'), 'dpkg');
+    }
+    while (<$dpkg_fh>) {
+	chomp;
+	if (m/^local diversion |^diversion by/) {
+	    warning(g_('diversions involved - output may be incorrect'));
+	    print { *STDERR } " $_\n"
+		or syserr(g_('write diversion info to stderr'));
+	} elsif (m/^([-a-z0-9+.:, ]+): (\/.*)$/) {
+	    my ($pkgs, $path) = ($1, $2);
+	    my $realpath = realpath($path);
+	    $cached_pkgmatch{$path} = $pkgmatch->{$path} = [ split /, /, $pkgs ];
+	    $cached_pkgmatch{$realpath} = $pkgmatch->{$realpath} = [ split /, /, $pkgs ];
+	} else {
+	    warning(g_("unknown output from dpkg --search: '%s'"), $_);
+	}
+    }
+    close($dpkg_fh);
+    return $pkgmatch;
+}
diff --git a/third_party/dpkg-shlibdeps/patches/0001-dkpg-shlibdeps-add-option-to-ignore-weak-undefined-symbols.patch b/third_party/dpkg-shlibdeps/patches/0001-dkpg-shlibdeps-add-option-to-ignore-weak-undefined-symbols.patch
new file mode 100644
index 0000000..e01331f
--- /dev/null
+++ b/third_party/dpkg-shlibdeps/patches/0001-dkpg-shlibdeps-add-option-to-ignore-weak-undefined-symbols.patch
@@ -0,0 +1,71 @@
+From 59477dae6f2c68f0ebd9ccca18e737b67408bc11 Mon Sep 17 00:00:00 2001
+From: Tom Anderson <thomasanderson@chromium.org>
+Date: Wed, 8 Jan 2020 10:55:20 -0800
+Subject: [PATCH 1/2] dkpg-shlibdeps: Add option to ignore weak undefined
+ symbols
+
+Weak undefined symbols can be used to test feature support. For example:
+
+__attribute__((weak)) uint64_t gbm_bo_get_modifier(struct gbm_bo* bo);
+void foo(gbm_bo* bo) {
+    // gbm_create_device is a strong undefined symbol. The dynamic linker will
+    // fail if this is not available.
+    gbm_create_device(1234);
+    // gbm_bo_get_modifier is a weak undefined symbol. It will be NULL if it's
+    // not available.
+    if (gbm_bo_get_modifier)
+        gbm_bo_get_modifier(bo);
+}
+
+However currently, dpkg-shlibdeps would consider gbm_bo_get_modifier in the
+example to be a required symbol (and would increase the minimum required library
+version), even though the intention is to use it only if it is available.
+
+To address this, this change skips weak undefined symbols when checking for
+dependencies. Out of an abundance of caution, this behavior is guarded behind a
+new flag: --ignore-weak-undefined.
+---
+ scripts/dpkg-shlibdeps.pl | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl
+index 8142c85b4..e3d8c7200 100755
+--- a/scripts/dpkg-shlibdeps.pl
++++ b/scripts/dpkg-shlibdeps.pl
+@@ -67,6 +67,7 @@ my $varlistfile = 'debian/substvars';
+ my $varlistfilenew;
+ my $varnameprefix = 'shlibs';
+ my $ignore_missing_info = 0;
++my $ignore_weak_undefined = 0;
+ my $warnings = WARN_SYM_NOT_FOUND | WARN_DEP_AVOIDABLE;
+ my $debug = 0;
+ my @exclude = ();
+@@ -120,6 +121,8 @@ foreach (@ARGV) {
+ 	}
+     } elsif (m/^--ignore-missing-info$/) {
+ 	$ignore_missing_info = 1;
++    } elsif (m/^--ignore-weak-undefined$/) {
++	$ignore_weak_undefined = 1;
+     } elsif (m/^--warnings=(\d+)$/) {
+ 	$warnings = $1;
+     } elsif (m/^-t(.*)$/) {
+@@ -365,6 +368,7 @@ foreach my $file (keys %exec) {
+     }
+     debug(2, 'Analyzing all undefined symbols');
+     foreach my $sym ($obj->get_undefined_dynamic_symbols()) {
++	next if $ignore_weak_undefined && $sym->{weak};
+ 	my $name = $sym->{name};
+ 	if ($sym->{version}) {
+ 	    $name .= '@' . "$sym->{version}";
+@@ -610,6 +614,8 @@ sub usage {
+                              in the given build directory.
+   -v                       enable verbose mode (can be used multiple times).
+   --ignore-missing-info    don't fail if dependency information can't be found.
++  --ignore-weak-undefined  only allow strong undefined symbols to introduce
++                             dependencies.
+   --warnings=<value>       define set of active warnings (see manual page).
+   --admindir=<directory>   change the administrative directory.
+   -?, --help               show this help message.
+-- 
+2.24.1.735.g03f4e72817-goog
+
diff --git a/third_party/dpkg-shlibdeps/patches/0002-fix-compatibility-for-chromium.patch b/third_party/dpkg-shlibdeps/patches/0002-fix-compatibility-for-chromium.patch
new file mode 100644
index 0000000..2b782a3
--- /dev/null
+++ b/third_party/dpkg-shlibdeps/patches/0002-fix-compatibility-for-chromium.patch
@@ -0,0 +1,59 @@
+From 9f31bd9e8a69ee2821664e576d9fc7a957205230 Mon Sep 17 00:00:00 2001
+From: Tom Anderson <thomasanderson@chromium.org>
+Date: Wed, 8 Jan 2020 12:11:56 -0800
+Subject: [PATCH 2/2] Fix compatibility for Chromium
+
+Add debug() function in case the system dpkg doesn't have it.
+---
+ scripts/dpkg-shlibdeps.pl | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl
+index e3d8c7200..b40667f5a 100755
+--- a/scripts/dpkg-shlibdeps.pl
++++ b/scripts/dpkg-shlibdeps.pl
+@@ -21,7 +21,6 @@
+ # You should have received a copy of the GNU General Public License
+ # along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ 
+-use strict;
+ use warnings;
+ use feature qw(state);
+ 
+@@ -153,6 +152,11 @@ sub ignore_pkgdir {
+     return any { $path =~ /^\Q$_\E/ } @pkg_dir_to_ignore;
+ }
+ 
++sub debug {
++    my $level = shift;
++    print @_ if $level <= $debug;
++}
++
+ if (-d 'debian') {
+     push @pkg_symbols, grep { !ignore_pkgdir($_) } glob 'debian/*/DEBIAN/symbols';
+     push @pkg_shlibs, grep { !ignore_pkgdir($_) } glob 'debian/*/DEBIAN/shlibs';
+@@ -198,18 +202,17 @@ foreach my $file (keys %exec) {
+     my %soname_notfound;
+     my %alt_soname;
+     foreach my $soname (@sonames) {
+-	my @libs = my_find_library($soname, $obj->{RPATH}, $obj->{exec_abi}, $file);
++	my @libs = my_find_library($soname, $obj->{RPATH}, $obj->{exec_abi} || $obj->{format}, $file);
+ 	unless (scalar @libs) {
+ 	    $soname_notfound{$soname} = 1;
+ 	    $global_soname_notfound{$soname} = 1;
+ 	    my $msg = g_('cannot find library %s needed by %s (ELF ' .
+ 	                 "format: '%s' abi: '%s'; RPATH: '%s')");
+-	    my $exec_abi = unpack 'H*', $obj->{exec_abi};
+ 	    if (scalar(split_soname($soname))) {
+-		errormsg($msg, $soname, $file, $obj->{format}, $exec_abi, join(':', @{$obj->{RPATH}}));
++		errormsg($msg, $soname, $file, $obj->{format}, join(':', @{$obj->{RPATH}}));
+ 		$error_count++;
+ 	    } else {
+-		warning($msg, $soname, $file, $obj->{format}, $exec_abi, join(':', @{$obj->{RPATH}}));
++		warning($msg, $soname, $file, $obj->{format}, join(':', @{$obj->{RPATH}}));
+ 	    }
+ 	    next;
+ 	}
+-- 
+2.24.1.735.g03f4e72817-goog
+
diff --git a/third_party/libwebp/README.chromium b/third_party/libwebp/README.chromium
index 9f98e97..0a911d0 100644
--- a/third_party/libwebp/README.chromium
+++ b/third_party/libwebp/README.chromium
@@ -1,14 +1,14 @@
 Name: WebP image encoder/decoder
 Short Name: libwebp
 URL: http://developers.google.com/speed/webp
-Version: v1.0.3
+Version: v1.1.0
 License: BSD
 License File: LICENSE
 Security Critical: Yes
 
 Description:
 Source archive:
-  https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.3.tar.gz
+  https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.1.0.tar.gz
 
 WebP is an image format that does both lossy and lossless compression of
 digital photographic images. WebP consists of a codec based on VP8, that Google
@@ -23,6 +23,3 @@
    (crbug.com/654974)
  * Pulled in fuzzers from OSS-Fuzz
    https://github.com/google/oss-fuzz/tree/master/projects/libwebp
- * cherry-pick af650c0b Fix a Wxor-used-as-pow false positive
- * cherry-pick 0e48d889 bugfix: last alpha rows were incorrectly decoded
- * cherry-pick b0e09e34 dec_neon: Fix build failure under some toolchains
diff --git a/third_party/libwebp/examples/cwebp.c b/third_party/libwebp/examples/cwebp.c
index 30e7ec1e..aa96caf 100644
--- a/third_party/libwebp/examples/cwebp.c
+++ b/third_party/libwebp/examples/cwebp.c
@@ -128,7 +128,8 @@
 static void AllocExtraInfo(WebPPicture* const pic) {
   const int mb_w = (pic->width + 15) / 16;
   const int mb_h = (pic->height + 15) / 16;
-  pic->extra_info = (uint8_t*)malloc(mb_w * mb_h * sizeof(*pic->extra_info));
+  pic->extra_info =
+      (uint8_t*)WebPMalloc(mb_w * mb_h * sizeof(*pic->extra_info));
 }
 
 static void PrintByteCount(const int bytes[4], int total_size,
@@ -640,10 +641,10 @@
 
 //------------------------------------------------------------------------------
 
-int main(int argc, const char *argv[]) {
+int main(int argc, const char* argv[]) {
   int return_value = -1;
-  const char *in_file = NULL, *out_file = NULL, *dump_file = NULL;
-  FILE *out = NULL;
+  const char* in_file = NULL, *out_file = NULL, *dump_file = NULL;
+  FILE* out = NULL;
   int c;
   int short_output = 0;
   int quiet = 0;
@@ -1168,7 +1169,7 @@
 
  Error:
   WebPMemoryWriterClear(&memory_writer);
-  free(picture.extra_info);
+  WebPFree(picture.extra_info);
   MetadataFree(&metadata);
   WebPPictureFree(&picture);
   WebPPictureFree(&original_picture);
diff --git a/third_party/libwebp/examples/dwebp.c b/third_party/libwebp/examples/dwebp.c
index 7284f30..cc75cb77 100644
--- a/third_party/libwebp/examples/dwebp.c
+++ b/third_party/libwebp/examples/dwebp.c
@@ -132,7 +132,7 @@
                      format == RGB_565) ? 2
                   : 4;
     uint32_t stride = bpp * w + 7;   // <- just for exercising
-    external_buffer = (uint8_t*)malloc(stride * h);
+    external_buffer = (uint8_t*)WebPMalloc(stride * h);
     if (external_buffer == NULL) return NULL;
     output_buffer->u.RGBA.stride = stride;
     output_buffer->u.RGBA.size = stride * h;
@@ -145,7 +145,7 @@
     uint32_t total_size = stride * h * (has_alpha ? 2 : 1)
                         + 2 * uv_stride * (h + 1) / 2;
     assert(format >= YUV && format <= YUVA);
-    external_buffer = (uint8_t*)malloc(total_size);
+    external_buffer = (uint8_t*)WebPMalloc(total_size);
     if (external_buffer == NULL) return NULL;
     tmp = external_buffer;
     output_buffer->u.YUVA.y = tmp;
@@ -176,10 +176,10 @@
   return external_buffer;
 }
 
-int main(int argc, const char *argv[]) {
+int main(int argc, const char* argv[]) {
   int ok = 0;
-  const char *in_file = NULL;
-  const char *out_file = NULL;
+  const char* in_file = NULL;
+  const char* out_file = NULL;
 
   WebPDecoderConfig config;
   WebPDecBuffer* const output_buffer = &config.output;
@@ -412,8 +412,8 @@
   }
  Exit:
   WebPFreeDecBuffer(output_buffer);
-  free((void*)external_buffer);
-  free((void*)data);
+  WebPFree((void*)external_buffer);
+  WebPFree((void*)data);
   FREE_WARGV_AND_RETURN(ok ? 0 : -1);
 }
 
diff --git a/third_party/libwebp/examples/example_util.c b/third_party/libwebp/examples/example_util.c
index a1c84988..b0436541 100644
--- a/third_party/libwebp/examples/example_util.c
+++ b/third_party/libwebp/examples/example_util.c
@@ -75,7 +75,7 @@
 void ExUtilDeleteCommandLineArguments(CommandLineArguments* const args) {
   if (args != NULL) {
     if (args->own_argv_) {
-      free((void*)args->argv_);
+      WebPFree((void*)args->argv_);
       WebPDataClear(&args->argv_data_);
     }
     ResetCommandLineArguments(0, NULL, args);
@@ -102,7 +102,7 @@
       return 0;
     }
     args->own_argv_ = 1;
-    args->argv_ = (const char**)malloc(MAX_ARGC * sizeof(*args->argv_));
+    args->argv_ = (const char**)WebPMalloc(MAX_ARGC * sizeof(*args->argv_));
     if (args->argv_ == NULL) return 0;
 
     argc = 0;
diff --git a/third_party/libwebp/imageio/pnmdec.c b/third_party/libwebp/imageio/pnmdec.c
index 8f5a4a00..208c2cf 100644
--- a/third_party/libwebp/imageio/pnmdec.c
+++ b/third_party/libwebp/imageio/pnmdec.c
@@ -26,7 +26,7 @@
   DEPTH_FLAG      = 1 << 2,
   MAXVAL_FLAG     = 1 << 3,
   TUPLE_FLAG      = 1 << 4,
-  ALL_NEEDED_FLAGS = 0x1f
+  ALL_NEEDED_FLAGS = WIDTH_FLAG | HEIGHT_FLAG | DEPTH_FLAG | MAXVAL_FLAG
 } PNMFlags;
 
 typedef struct {
@@ -74,6 +74,7 @@
   char out[MAX_LINE_SIZE + 1];
   size_t out_size;
   int tmp;
+  int expected_depth = -1;
   assert(info != NULL);
   while (1) {
     off = ReadLine(info->data, off, info->data_size, out, &out_size);
@@ -95,13 +96,13 @@
       info->seen_flags |= MAXVAL_FLAG;
       info->max_value = tmp;
     } else if (!strcmp(out, "TUPLTYPE RGB_ALPHA")) {
-      info->bytes_per_px = 4;
+      expected_depth = 4;
       info->seen_flags |= TUPLE_FLAG;
     } else if (!strcmp(out, "TUPLTYPE RGB")) {
-      info->bytes_per_px = 3;
+      expected_depth = 3;
       info->seen_flags |= TUPLE_FLAG;
     } else if (!strcmp(out, "TUPLTYPE GRAYSCALE")) {
-      info->bytes_per_px = 1;
+      expected_depth = 1;
       info->seen_flags |= TUPLE_FLAG;
     } else if (!strcmp(out, "ENDHDR")) {
       break;
@@ -110,23 +111,24 @@
       int i;
       if (out_size > 20) sprintf(out + 20 - strlen(kEllipsis), kEllipsis);
       for (i = 0; i < (int)strlen(out); ++i) {
-        if (!isprint(out[i])) out[i] = ' ';
+        // isprint() might trigger a "char-subscripts" warning if given a char.
+        if (!isprint((int)out[i])) out[i] = ' ';
       }
       fprintf(stderr, "PAM header error: unrecognized entry [%s]\n", out);
       return 0;
     }
   }
-  if (!(info->seen_flags & TUPLE_FLAG)) {
-    if (info->depth > 0 && info->depth <= 4 && info->depth != 2) {
-      info->seen_flags |= TUPLE_FLAG;
-      info->bytes_per_px = info->depth * (info->max_value > 255 ? 2 : 1);
-    } else {
-      fprintf(stderr, "PAM: invalid bitdepth (%d).\n", info->depth);
-      return 0;
-    }
+  if (!(info->seen_flags & ALL_NEEDED_FLAGS)) {
+    fprintf(stderr, "PAM header error: missing tags%s%s%s%s\n",
+            (info->seen_flags & WIDTH_FLAG) ? "" : " WIDTH",
+            (info->seen_flags & HEIGHT_FLAG) ? "" : " HEIGHT",
+            (info->seen_flags & DEPTH_FLAG) ? "" : " DEPTH",
+            (info->seen_flags & MAXVAL_FLAG) ? "" : " MAXVAL");
+    return 0;
   }
-  if (info->seen_flags != ALL_NEEDED_FLAGS) {
-    fprintf(stderr, "PAM: incomplete header.\n");
+  if (expected_depth != -1 && info->depth != expected_depth) {
+    fprintf(stderr, "PAM header error: expected DEPTH %d but got DEPTH %d\n",
+            expected_depth, info->depth);
     return 0;
   }
   return off;
@@ -160,16 +162,15 @@
 
     // finish initializing missing fields
     info->depth = (info->type == 5) ? 1 : 3;
-    info->bytes_per_px = info->depth * (info->max_value > 255 ? 2 : 1);
   }
   // perform some basic numerical validation
   if (info->width <= 0 || info->height <= 0 ||
       info->type <= 0 || info->type >= 9 ||
       info->depth <= 0 || info->depth == 2 || info->depth > 4 ||
-      info->bytes_per_px < info->depth ||
       info->max_value <= 0 || info->max_value >= 65536) {
     return 0;
   }
+  info->bytes_per_px = info->depth * (info->max_value > 255 ? 2 : 1);
   return off;
 }
 
diff --git a/third_party/libwebp/imageio/tiffdec.c b/third_party/libwebp/imageio/tiffdec.c
index 5fd8b7fd..89819d4 100644
--- a/third_party/libwebp/imageio/tiffdec.c
+++ b/third_party/libwebp/imageio/tiffdec.c
@@ -156,7 +156,7 @@
              Metadata* const metadata) {
   MyData my_data = { data, (toff_t)data_size, 0 };
   TIFF* tif;
-  uint32_t width, height;
+  uint32_t image_width, image_height, tile_width, tile_height;
   uint16_t samples_per_px = 0;
   uint16_t extra_samples = 0;
   uint16_t* extra_samples_ptr = NULL;
@@ -189,15 +189,25 @@
   }
   if (samples_per_px < 3 || samples_per_px > 4) goto End;  // not supported
 
-  if (!(TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width) &&
-        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height))) {
+  if (!(TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &image_width) &&
+        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &image_height))) {
     fprintf(stderr, "Error! Cannot retrieve TIFF image dimensions.\n");
     goto End;
   }
-  if (!ImgIoUtilCheckSizeArgumentsOverflow((uint64_t)width * height,
+  if (!ImgIoUtilCheckSizeArgumentsOverflow((uint64_t)image_width * image_height,
                                            sizeof(*raster))) {
     goto End;
   }
+  // According to spec, a tile can be bigger than the image. However it should
+  // be a multiple of 16 and not way too large, so check that it's not more than
+  // twice the image size, for dimensions above some arbitrary minimum 32.
+  if ((TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tile_width) &&
+       tile_width > 32 && tile_width / 2 > image_width) ||
+      (TIFFGetField(tif, TIFFTAG_TILELENGTH, &tile_height) &&
+       tile_height > 32 && tile_height / 2 > image_height)) {
+    fprintf(stderr, "Error! TIFF tile dimensions are too big.\n");
+    goto End;
+  }
   if (samples_per_px > 3 && !TIFFGetField(tif, TIFFTAG_EXTRASAMPLES,
                                           &extra_samples, &extra_samples_ptr)) {
     fprintf(stderr, "Error! Cannot retrieve TIFF ExtraSamples info.\n");
@@ -205,27 +215,28 @@
   }
 
   // _Tiffmalloc uses a signed type for size.
-  alloc_size = (int64_t)((uint64_t)width * height * sizeof(*raster));
+  alloc_size =
+      (int64_t)((uint64_t)image_width * image_height * sizeof(*raster));
   if (alloc_size < 0 || alloc_size != (tsize_t)alloc_size) goto End;
 
   raster = (uint32*)_TIFFmalloc((tsize_t)alloc_size);
   if (raster != NULL) {
-    if (TIFFReadRGBAImageOriented(tif, width, height, raster,
+    if (TIFFReadRGBAImageOriented(tif, image_width, image_height, raster,
                                   ORIENTATION_TOPLEFT, 1)) {
-      const int stride = width * sizeof(*raster);
-      pic->width = width;
-      pic->height = height;
+      const int stride = image_width * sizeof(*raster);
+      pic->width = image_width;
+      pic->height = image_height;
       // TIFF data is ABGR
 #ifdef WORDS_BIGENDIAN
-      TIFFSwabArrayOfLong(raster, width * height);
+      TIFFSwabArrayOfLong(raster, image_width * image_height);
 #endif
       // if we have an alpha channel, we must un-multiply from rgbA to RGBA
       if (extra_samples == 1 && extra_samples_ptr != NULL &&
           extra_samples_ptr[0] == EXTRASAMPLE_ASSOCALPHA) {
         uint32_t y;
         uint8_t* tmp = (uint8_t*)raster;
-        for (y = 0; y < height; ++y) {
-          MultARGBRow(tmp, width);
+        for (y = 0; y < image_height; ++y) {
+          MultARGBRow(tmp, image_width);
           tmp += stride;
         }
       }
diff --git a/third_party/libwebp/src/dec/frame_dec.c b/third_party/libwebp/src/dec/frame_dec.c
index bda9e1a..04609a8e 100644
--- a/third_party/libwebp/src/dec/frame_dec.c
+++ b/third_party/libwebp/src/dec/frame_dec.c
@@ -732,7 +732,7 @@
   mem += f_info_size;
   dec->thread_ctx_.id_ = 0;
   dec->thread_ctx_.f_info_ = dec->f_info_;
-  if (dec->mt_method_ > 0) {
+  if (dec->filter_type_ > 0 && dec->mt_method_ > 0) {
     // secondary cache line. The deblocking process need to make use of the
     // filtering strength from previous macroblock row, while the new ones
     // are being decoded in parallel. We'll just swap the pointers.
diff --git a/third_party/libwebp/src/dec/idec_dec.c b/third_party/libwebp/src/dec/idec_dec.c
index 9bc91668..9035df5 100644
--- a/third_party/libwebp/src/dec/idec_dec.c
+++ b/third_party/libwebp/src/dec/idec_dec.c
@@ -166,9 +166,11 @@
   VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
   MemBuffer* const mem = &idec->mem_;
   const int need_compressed_alpha = NeedCompressedAlpha(idec);
-  const uint8_t* const old_start = mem->buf_ + mem->start_;
+  const uint8_t* const old_start =
+      (mem->buf_ == NULL) ? NULL : mem->buf_ + mem->start_;
   const uint8_t* const old_base =
       need_compressed_alpha ? dec->alpha_data_ : old_start;
+  assert(mem->buf_ != NULL || mem->start_ == 0);
   assert(mem->mode_ == MEM_MODE_APPEND);
   if (data_size > MAX_CHUNK_PAYLOAD) {
     // security safeguard: trying to allocate more than what the format
@@ -184,7 +186,7 @@
     uint8_t* const new_buf =
         (uint8_t*)WebPSafeMalloc(extra_size, sizeof(*new_buf));
     if (new_buf == NULL) return 0;
-    memcpy(new_buf, old_base, current_size);
+    if (old_base != NULL) memcpy(new_buf, old_base, current_size);
     WebPSafeFree(mem->buf_);
     mem->buf_ = new_buf;
     mem->buf_size_ = (size_t)extra_size;
@@ -192,6 +194,7 @@
     mem->end_ = current_size;
   }
 
+  assert(mem->buf_ != NULL);
   memcpy(mem->buf_ + mem->end_, data, data_size);
   mem->end_ += data_size;
   assert(mem->end_ <= mem->buf_size_);
@@ -204,7 +207,9 @@
                           const uint8_t* const data, size_t data_size) {
   MemBuffer* const mem = &idec->mem_;
   const uint8_t* const old_buf = mem->buf_;
-  const uint8_t* const old_start = old_buf + mem->start_;
+  const uint8_t* const old_start =
+      (old_buf == NULL) ? NULL : old_buf + mem->start_;
+  assert(old_buf != NULL || mem->start_ == 0);
   assert(mem->mode_ == MEM_MODE_MAP);
 
   if (data_size < mem->buf_size_) return 0;  // can't remap to a shorter buffer!
diff --git a/third_party/libwebp/src/dec/vp8i_dec.h b/third_party/libwebp/src/dec/vp8i_dec.h
index 3de8d86f..600a6844 100644
--- a/third_party/libwebp/src/dec/vp8i_dec.h
+++ b/third_party/libwebp/src/dec/vp8i_dec.h
@@ -31,8 +31,8 @@
 
 // version numbers
 #define DEC_MAJ_VERSION 1
-#define DEC_MIN_VERSION 0
-#define DEC_REV_VERSION 3
+#define DEC_MIN_VERSION 1
+#define DEC_REV_VERSION 0
 
 // YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
 // Constraints are: We need to store one 16x16 block of luma samples (y),
diff --git a/third_party/libwebp/src/dec/vp8li_dec.h b/third_party/libwebp/src/dec/vp8li_dec.h
index 0a4d613..72b2e86 100644
--- a/third_party/libwebp/src/dec/vp8li_dec.h
+++ b/third_party/libwebp/src/dec/vp8li_dec.h
@@ -37,7 +37,7 @@
   int                    bits_;   // subsampling bits defining transform window.
   int                    xsize_;  // transform window X index.
   int                    ysize_;  // transform window Y index.
-  uint32_t              *data_;   // transform data.
+  uint32_t*              data_;   // transform data.
 };
 
 typedef struct {
@@ -48,23 +48,23 @@
   int             huffman_mask_;
   int             huffman_subsample_bits_;
   int             huffman_xsize_;
-  uint32_t       *huffman_image_;
+  uint32_t*       huffman_image_;
   int             num_htree_groups_;
-  HTreeGroup     *htree_groups_;
-  HuffmanCode    *huffman_tables_;
+  HTreeGroup*     htree_groups_;
+  HuffmanCode*    huffman_tables_;
 } VP8LMetadata;
 
 typedef struct VP8LDecoder VP8LDecoder;
 struct VP8LDecoder {
   VP8StatusCode    status_;
   VP8LDecodeState  state_;
-  VP8Io           *io_;
+  VP8Io*           io_;
 
-  const WebPDecBuffer *output_;    // shortcut to io->opaque->output
+  const WebPDecBuffer* output_;    // shortcut to io->opaque->output
 
-  uint32_t        *pixels_;        // Internal data: either uint8_t* for alpha
+  uint32_t*        pixels_;        // Internal data: either uint8_t* for alpha
                                    // or uint32_t* for BGRA.
-  uint32_t        *argb_cache_;    // Scratch buffer for temporary BGRA storage.
+  uint32_t*        argb_cache_;    // Scratch buffer for temporary BGRA storage.
 
   VP8LBitReader    br_;
   int              incremental_;   // if true, incremental decoding is expected
@@ -86,8 +86,8 @@
   // or'd bitset storing the transforms types.
   uint32_t         transforms_seen_;
 
-  uint8_t         *rescaler_memory;  // Working memory for rescaling work.
-  WebPRescaler    *rescaler;         // Common rescaler for all channels.
+  uint8_t*         rescaler_memory;  // Working memory for rescaling work.
+  WebPRescaler*    rescaler;         // Common rescaler for all channels.
 };
 
 //------------------------------------------------------------------------------
diff --git a/third_party/libwebp/src/demux/demux.c b/third_party/libwebp/src/demux/demux.c
index ab6433e..1b3cc2e 100644
--- a/third_party/libwebp/src/demux/demux.c
+++ b/third_party/libwebp/src/demux/demux.c
@@ -24,8 +24,8 @@
 #include "src/webp/format_constants.h"
 
 #define DMUX_MAJ_VERSION 1
-#define DMUX_MIN_VERSION 0
-#define DMUX_REV_VERSION 3
+#define DMUX_MIN_VERSION 1
+#define DMUX_REV_VERSION 0
 
 typedef struct {
   size_t start_;        // start location of the data
diff --git a/third_party/libwebp/src/dsp/dec_neon.c b/third_party/libwebp/src/dsp/dec_neon.c
index 7d132afd..239ec41 100644
--- a/third_party/libwebp/src/dsp/dec_neon.c
+++ b/third_party/libwebp/src/dsp/dec_neon.c
@@ -1428,10 +1428,16 @@
 
   if (do_top) {
     const uint8x8_t A = vld1_u8(dst - BPS);  // top row
+#if defined(__aarch64__)
+    const uint16x8_t B = vmovl_u8(A);
+    const uint16_t p2 = vaddvq_u16(B);
+    sum_top = vdupq_n_u16(p2);
+#else
     const uint16x4_t p0 = vpaddl_u8(A);  // cascading summation of the top
     const uint16x4_t p1 = vpadd_u16(p0, p0);
     const uint16x4_t p2 = vpadd_u16(p1, p1);
     sum_top = vcombine_u16(p2, p2);
+#endif
   }
 
   if (do_left) {
diff --git a/third_party/libwebp/src/dsp/dsp.h b/third_party/libwebp/src/dsp/dsp.h
index fafc2d0..a784de33 100644
--- a/third_party/libwebp/src/dsp/dsp.h
+++ b/third_party/libwebp/src/dsp/dsp.h
@@ -246,9 +246,9 @@
 extern VP8WHT VP8FTransformWHT;
 // Predictions
 // *dst is the destination block. *top and *left can be NULL.
-typedef void (*VP8IntraPreds)(uint8_t *dst, const uint8_t* left,
+typedef void (*VP8IntraPreds)(uint8_t* dst, const uint8_t* left,
                               const uint8_t* top);
-typedef void (*VP8Intra4Preds)(uint8_t *dst, const uint8_t* top);
+typedef void (*VP8Intra4Preds)(uint8_t* dst, const uint8_t* top);
 extern VP8Intra4Preds VP8EncPredLuma4;
 extern VP8IntraPreds VP8EncPredLuma16;
 extern VP8IntraPreds VP8EncPredChroma8;
diff --git a/third_party/libwebp/src/dsp/lossless.c b/third_party/libwebp/src/dsp/lossless.c
index d05af84e..aad5f43 100644
--- a/third_party/libwebp/src/dsp/lossless.c
+++ b/third_party/libwebp/src/dsp/lossless.c
@@ -81,7 +81,7 @@
 
 // gcc <= 4.9 on ARM generates incorrect code in Select() when Sub3() is
 // inlined.
-#if defined(__arm__) && LOCAL_GCC_VERSION <= 0x409
+#if defined(__arm__) && defined(__GNUC__) && LOCAL_GCC_VERSION <= 0x409
 # define LOCAL_INLINE __attribute__ ((noinline))
 #else
 # define LOCAL_INLINE WEBP_INLINE
@@ -167,15 +167,20 @@
   return pred;
 }
 
-GENERATE_PREDICTOR_ADD(Predictor0_C, PredictorAdd0_C)
+static void PredictorAdd0_C(const uint32_t* in, const uint32_t* upper,
+                            int num_pixels, uint32_t* out) {
+  int x;
+  (void)upper;
+  for (x = 0; x < num_pixels; ++x) out[x] = VP8LAddPixels(in[x], ARGB_BLACK);
+}
 static void PredictorAdd1_C(const uint32_t* in, const uint32_t* upper,
                             int num_pixels, uint32_t* out) {
   int i;
   uint32_t left = out[-1];
+  (void)upper;
   for (i = 0; i < num_pixels; ++i) {
     out[i] = left = VP8LAddPixels(in[i], left);
   }
-  (void)upper;
 }
 GENERATE_PREDICTOR_ADD(Predictor2_C, PredictorAdd2_C)
 GENERATE_PREDICTOR_ADD(Predictor3_C, PredictorAdd3_C)
diff --git a/third_party/libwebp/src/dsp/lossless_common.h b/third_party/libwebp/src/dsp/lossless_common.h
index a2648d17..9c2ebe6 100644
--- a/third_party/libwebp/src/dsp/lossless_common.h
+++ b/third_party/libwebp/src/dsp/lossless_common.h
@@ -177,6 +177,7 @@
 static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
                           int num_pixels, uint32_t* out) {           \
   int x;                                                             \
+  assert(upper != NULL);                                             \
   for (x = 0; x < num_pixels; ++x) {                                 \
     const uint32_t pred = (PREDICTOR)(out[x - 1], upper + x);        \
     out[x] = VP8LAddPixels(in[x], pred);                             \
@@ -189,6 +190,7 @@
 static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \
                           int num_pixels, uint32_t* out) {           \
   int x;                                                             \
+  assert(upper != NULL);                                             \
   for (x = 0; x < num_pixels; ++x) {                                 \
     const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x);         \
     out[x] = VP8LSubPixels(in[x], pred);                             \
diff --git a/third_party/libwebp/src/dsp/lossless_enc_sse2.c b/third_party/libwebp/src/dsp/lossless_enc_sse2.c
index 8adc521..e676f6f 100644
--- a/third_party/libwebp/src/dsp/lossless_enc_sse2.c
+++ b/third_party/libwebp/src/dsp/lossless_enc_sse2.c
@@ -455,8 +455,9 @@
     _mm_storeu_si128((__m128i*)&out[i], res);
   }
   if (i != num_pixels) {
-    VP8LPredictorsSub_C[0](in + i, upper + i, num_pixels - i, out + i);
+    VP8LPredictorsSub_C[0](in + i, NULL, num_pixels - i, out + i);
   }
+  (void)upper;
 }
 
 #define GENERATE_PREDICTOR_1(X, IN)                                           \
diff --git a/third_party/libwebp/src/dsp/lossless_sse2.c b/third_party/libwebp/src/dsp/lossless_sse2.c
index 17d7576..aef0cee1 100644
--- a/third_party/libwebp/src/dsp/lossless_sse2.c
+++ b/third_party/libwebp/src/dsp/lossless_sse2.c
@@ -191,8 +191,9 @@
     _mm_storeu_si128((__m128i*)&out[i], res);
   }
   if (i != num_pixels) {
-    VP8LPredictorsAdd_C[0](in + i, upper + i, num_pixels - i, out + i);
+    VP8LPredictorsAdd_C[0](in + i, NULL, num_pixels - i, out + i);
   }
+  (void)upper;
 }
 
 // Predictor1: left.
diff --git a/third_party/libwebp/src/dsp/upsampling_msa.c b/third_party/libwebp/src/dsp/upsampling_msa.c
index 99eea70..f2e03e85 100644
--- a/third_party/libwebp/src/dsp/upsampling_msa.c
+++ b/third_party/libwebp/src/dsp/upsampling_msa.c
@@ -576,9 +576,9 @@
   const uint32_t l_uv = ((cur_u[0]) | ((cur_v[0]) << 16));               \
   const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2;            \
   const uint8_t* ptop_y = &top_y[1];                                     \
-  uint8_t *ptop_dst = top_dst + XSTEP;                                   \
+  uint8_t* ptop_dst = top_dst + XSTEP;                                   \
   const uint8_t* pbot_y = &bot_y[1];                                     \
-  uint8_t *pbot_dst = bot_dst + XSTEP;                                   \
+  uint8_t* pbot_dst = bot_dst + XSTEP;                                   \
                                                                          \
   FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst);                      \
   if (bot_y != NULL) {                                                   \
diff --git a/third_party/libwebp/src/dsp/upsampling_neon.c b/third_party/libwebp/src/dsp/upsampling_neon.c
index 17cbc9f..6ba71a7 100644
--- a/third_party/libwebp/src/dsp/upsampling_neon.c
+++ b/third_party/libwebp/src/dsp/upsampling_neon.c
@@ -58,8 +58,8 @@
 } while (0)
 
 // Turn the macro into a function for reducing code-size when non-critical
-static void Upsample16Pixels_NEON(const uint8_t *r1, const uint8_t *r2,
-                                  uint8_t *out) {
+static void Upsample16Pixels_NEON(const uint8_t* r1, const uint8_t* r2,
+                                  uint8_t* out) {
   UPSAMPLE_16PIXELS(r1, r2, out);
 }
 
@@ -190,14 +190,14 @@
 }
 
 #define NEON_UPSAMPLE_FUNC(FUNC_NAME, FMT, XSTEP)                       \
-static void FUNC_NAME(const uint8_t *top_y, const uint8_t *bottom_y,    \
-                      const uint8_t *top_u, const uint8_t *top_v,       \
-                      const uint8_t *cur_u, const uint8_t *cur_v,       \
-                      uint8_t *top_dst, uint8_t *bottom_dst, int len) { \
+static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y,    \
+                      const uint8_t* top_u, const uint8_t* top_v,       \
+                      const uint8_t* cur_u, const uint8_t* cur_v,       \
+                      uint8_t* top_dst, uint8_t* bottom_dst, int len) { \
   int block;                                                            \
   /* 16 byte aligned array to cache reconstructed u and v */            \
   uint8_t uv_buf[2 * 32 + 15];                                          \
-  uint8_t *const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15);     \
+  uint8_t* const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15);     \
   const int uv_len = (len + 1) >> 1;                                    \
   /* 9 pixels must be read-able for each block */                       \
   const int num_blocks = (uv_len - 1) >> 3;                             \
diff --git a/third_party/libwebp/src/enc/histogram_enc.c b/third_party/libwebp/src/enc/histogram_enc.c
index d89b985..a4e6bf3 100644
--- a/third_party/libwebp/src/enc/histogram_enc.c
+++ b/third_party/libwebp/src/enc/histogram_enc.c
@@ -641,7 +641,7 @@
 // Merges some histograms with same bin_id together if it's advantageous.
 // Sets the remaining histograms to NULL.
 static void HistogramCombineEntropyBin(VP8LHistogramSet* const image_histo,
-                                       int *num_used,
+                                       int* num_used,
                                        const uint16_t* const clusters,
                                        uint16_t* const cluster_mappings,
                                        VP8LHistogram* cur_combo,
diff --git a/third_party/libwebp/src/enc/picture_csp_enc.c b/third_party/libwebp/src/enc/picture_csp_enc.c
index 105718f..718e014e 100644
--- a/third_party/libwebp/src/enc/picture_csp_enc.c
+++ b/third_party/libwebp/src/enc/picture_csp_enc.c
@@ -1054,7 +1054,7 @@
     const int height = picture->height;
     const int argb_stride = 4 * picture->argb_stride;
     uint8_t* dst = (uint8_t*)picture->argb;
-    const uint8_t *cur_u = picture->u, *cur_v = picture->v, *cur_y = picture->y;
+    const uint8_t* cur_u = picture->u, *cur_v = picture->v, *cur_y = picture->y;
     WebPUpsampleLinePairFunc upsample =
         WebPGetLinePairConverter(ALPHA_OFFSET > 0);
 
diff --git a/third_party/libwebp/src/enc/vp8i_enc.h b/third_party/libwebp/src/enc/vp8i_enc.h
index 24e1944..fedcaeea2 100644
--- a/third_party/libwebp/src/enc/vp8i_enc.h
+++ b/third_party/libwebp/src/enc/vp8i_enc.h
@@ -31,8 +31,8 @@
 
 // version numbers
 #define ENC_MAJ_VERSION 1
-#define ENC_MIN_VERSION 0
-#define ENC_REV_VERSION 3
+#define ENC_MIN_VERSION 1
+#define ENC_REV_VERSION 0
 
 enum { MAX_LF_LEVELS = 64,       // Maximum loop filter level
        MAX_VARIABLE_LEVEL = 67,  // last (inclusive) level with variable cost
@@ -249,7 +249,7 @@
   int           percent0_;         // saved initial progress percent
 
   DError        left_derr_;        // left error diffusion (u/v)
-  DError       *top_derr_;         // top diffusion error - NULL if disabled
+  DError*       top_derr_;         // top diffusion error - NULL if disabled
 
   uint8_t* y_left_;    // left luma samples (addressable from index -1 to 15).
   uint8_t* u_left_;    // left u samples (addressable from index -1 to 7)
diff --git a/third_party/libwebp/src/mux/muxi.h b/third_party/libwebp/src/mux/muxi.h
index 7bc0b07..ad3e1bd 100644
--- a/third_party/libwebp/src/mux/muxi.h
+++ b/third_party/libwebp/src/mux/muxi.h
@@ -28,8 +28,8 @@
 // Defines and constants.
 
 #define MUX_MAJ_VERSION 1
-#define MUX_MIN_VERSION 0
-#define MUX_REV_VERSION 3
+#define MUX_MIN_VERSION 1
+#define MUX_REV_VERSION 0
 
 // Chunk object.
 typedef struct WebPChunk WebPChunk;
diff --git a/third_party/libwebp/src/mux/muxread.c b/third_party/libwebp/src/mux/muxread.c
index 268f6acb..ae3b876b 100644
--- a/third_party/libwebp/src/mux/muxread.c
+++ b/third_party/libwebp/src/mux/muxread.c
@@ -100,7 +100,7 @@
                          WebPMuxImage* const wpi) {
   const uint8_t* bytes = chunk->data_.bytes;
   size_t size = chunk->data_.size;
-  const uint8_t* const last = bytes + size;
+  const uint8_t* const last = (bytes == NULL) ? NULL : bytes + size;
   WebPChunk subchunk;
   size_t subchunk_size;
   WebPChunk** unknown_chunk_list = &wpi->unknown_;
diff --git a/third_party/libwebp/src/utils/color_cache_utils.h b/third_party/libwebp/src/utils/color_cache_utils.h
index ec21d51..b45d47c 100644
--- a/third_party/libwebp/src/utils/color_cache_utils.h
+++ b/third_party/libwebp/src/utils/color_cache_utils.h
@@ -26,7 +26,7 @@
 
 // Main color cache struct.
 typedef struct {
-  uint32_t *colors_;  // color entries
+  uint32_t* colors_;  // color entries
   int hash_shift_;    // Hash shift: 32 - hash_bits_.
   int hash_bits_;
 } VP8LColorCache;
diff --git a/third_party/libwebp/src/utils/thread_utils.c b/third_party/libwebp/src/utils/thread_utils.c
index 438296b..4e470e1 100644
--- a/third_party/libwebp/src/utils/thread_utils.c
+++ b/third_party/libwebp/src/utils/thread_utils.c
@@ -73,7 +73,7 @@
 #endif
 
 static int pthread_create(pthread_t* const thread, const void* attr,
-                          unsigned int (__stdcall *start)(void*), void* arg) {
+                          unsigned int (__stdcall* start)(void*), void* arg) {
   (void)attr;
 #ifdef USE_CREATE_THREAD
   *thread = CreateThread(NULL,   /* lpThreadAttributes */
diff --git a/third_party/libwebp/src/utils/utils.c b/third_party/libwebp/src/utils/utils.c
index 44d5c14..764f752 100644
--- a/third_party/libwebp/src/utils/utils.c
+++ b/third_party/libwebp/src/utils/utils.c
@@ -216,9 +216,14 @@
   free(ptr);
 }
 
-// Public API function.
+// Public API functions.
+
+void* WebPMalloc(size_t size) {
+  return WebPSafeMalloc(1, size);
+}
+
 void WebPFree(void* ptr) {
-  free(ptr);
+  WebPSafeFree(ptr);
 }
 
 //------------------------------------------------------------------------------
diff --git a/third_party/libwebp/src/webp/decode.h b/third_party/libwebp/src/webp/decode.h
index ae8bfe840..80dd0ef 100644
--- a/third_party/libwebp/src/webp/decode.h
+++ b/third_party/libwebp/src/webp/decode.h
@@ -20,7 +20,7 @@
 extern "C" {
 #endif
 
-#define WEBP_DECODER_ABI_VERSION 0x0208    // MAJOR(8b) + MINOR(8b)
+#define WEBP_DECODER_ABI_VERSION 0x0209    // MAJOR(8b) + MINOR(8b)
 
 // Note: forward declaring enumerations is not allowed in (strict) C and C++,
 // the types are left here for reference.
@@ -91,9 +91,6 @@
                                    uint8_t** u, uint8_t** v,
                                    int* stride, int* uv_stride);
 
-// Releases memory returned by the WebPDecode*() functions above.
-WEBP_EXTERN void WebPFree(void* ptr);
-
 // These five functions are variants of the above ones, that decode the image
 // directly into a pre-allocated buffer 'output_buffer'. The maximum storage
 // available in this buffer is indicated by 'output_buffer_size'. If this
diff --git a/third_party/libwebp/src/webp/encode.h b/third_party/libwebp/src/webp/encode.h
index 339f881..655166e 100644
--- a/third_party/libwebp/src/webp/encode.h
+++ b/third_party/libwebp/src/webp/encode.h
@@ -20,7 +20,7 @@
 extern "C" {
 #endif
 
-#define WEBP_ENCODER_ABI_VERSION 0x020e    // MAJOR(8b) + MINOR(8b)
+#define WEBP_ENCODER_ABI_VERSION 0x020f    // MAJOR(8b) + MINOR(8b)
 
 // Note: forward declaring enumerations is not allowed in (strict) C and C++,
 // the types are left here for reference.
@@ -79,9 +79,6 @@
                                           int width, int height, int stride,
                                           uint8_t** output);
 
-// Releases memory returned by the WebPEncode*() functions above.
-WEBP_EXTERN void WebPFree(void* ptr);
-
 //------------------------------------------------------------------------------
 // Coding parameters
 
@@ -306,7 +303,7 @@
   // YUV input (mostly used for input to lossy compression)
   WebPEncCSP colorspace;     // colorspace: should be YUV420 for now (=Y'CbCr).
   int width, height;         // dimensions (less or equal to WEBP_MAX_DIMENSION)
-  uint8_t *y, *u, *v;        // pointers to luma/chroma planes.
+  uint8_t* y, *u, *v;        // pointers to luma/chroma planes.
   int y_stride, uv_stride;   // luma/chroma strides.
   uint8_t* a;                // pointer to the alpha plane
   int a_stride;              // stride of the alpha plane
@@ -350,7 +347,7 @@
   uint32_t pad3[3];       // padding for later use
 
   // Unused for now
-  uint8_t *pad4, *pad5;
+  uint8_t* pad4, *pad5;
   uint32_t pad6[8];       // padding for later use
 
   // PRIVATE FIELDS
diff --git a/third_party/libwebp/src/webp/mux.h b/third_party/libwebp/src/webp/mux.h
index 66096a9..7d27489 100644
--- a/third_party/libwebp/src/webp/mux.h
+++ b/third_party/libwebp/src/webp/mux.h
@@ -57,7 +57,7 @@
   WebPMuxGetChunk(mux, "ICCP", &icc_profile);
   // ... (Consume icc_data).
   WebPMuxDelete(mux);
-  free(data);
+  WebPFree(data);
 */
 
 // Note: forward declaring enumerations is not allowed in (strict) C and C++,
@@ -245,7 +245,7 @@
     WebPMux* mux, const WebPMuxFrameInfo* frame, int copy_data);
 
 // Gets the nth frame from the mux object.
-// The content of 'frame->bitstream' is allocated using malloc(), and NOT
+// The content of 'frame->bitstream' is allocated using WebPMalloc(), and NOT
 // owned by the 'mux' object. It MUST be deallocated by the caller by calling
 // WebPDataClear().
 // nth=0 has a special meaning - last position.
@@ -376,10 +376,10 @@
 // Assembles all chunks in WebP RIFF format and returns in 'assembled_data'.
 // This function also validates the mux object.
 // Note: The content of 'assembled_data' will be ignored and overwritten.
-// Also, the content of 'assembled_data' is allocated using malloc(), and NOT
-// owned by the 'mux' object. It MUST be deallocated by the caller by calling
-// WebPDataClear(). It's always safe to call WebPDataClear() upon return,
-// even in case of error.
+// Also, the content of 'assembled_data' is allocated using WebPMalloc(), and
+// NOT owned by the 'mux' object. It MUST be deallocated by the caller by
+// calling WebPDataClear(). It's always safe to call WebPDataClear() upon
+// return, even in case of error.
 // Parameters:
 //   mux - (in/out) object whose chunks are to be assembled
 //   assembled_data - (out) assembled WebP data
diff --git a/third_party/libwebp/src/webp/mux_types.h b/third_party/libwebp/src/webp/mux_types.h
index ceea77d..2fe8195 100644
--- a/third_party/libwebp/src/webp/mux_types.h
+++ b/third_party/libwebp/src/webp/mux_types.h
@@ -14,7 +14,6 @@
 #ifndef WEBP_WEBP_MUX_TYPES_H_
 #define WEBP_WEBP_MUX_TYPES_H_
 
-#include <stdlib.h>  // free()
 #include <string.h>  // memset()
 #include "./types.h"
 
@@ -56,6 +55,7 @@
 
 // Data type used to describe 'raw' data, e.g., chunk data
 // (ICC profile, metadata) and WebP compressed image data.
+// 'bytes' memory must be allocated using WebPMalloc() and such.
 struct WebPData {
   const uint8_t* bytes;
   size_t size;
@@ -68,11 +68,11 @@
   }
 }
 
-// Clears the contents of the 'webp_data' object by calling free(). Does not
-// deallocate the object itself.
+// Clears the contents of the 'webp_data' object by calling WebPFree().
+// Does not deallocate the object itself.
 static WEBP_INLINE void WebPDataClear(WebPData* webp_data) {
   if (webp_data != NULL) {
-    free((void*)webp_data->bytes);
+    WebPFree((void*)webp_data->bytes);
     WebPDataInit(webp_data);
   }
 }
@@ -83,7 +83,7 @@
   if (src == NULL || dst == NULL) return 0;
   WebPDataInit(dst);
   if (src->bytes != NULL && src->size != 0) {
-    dst->bytes = (uint8_t*)malloc(src->size);
+    dst->bytes = (uint8_t*)WebPMalloc(src->size);
     if (dst->bytes == NULL) return 0;
     memcpy((void*)dst->bytes, src->bytes, src->size);
     dst->size = src->size;
diff --git a/third_party/libwebp/src/webp/types.h b/third_party/libwebp/src/webp/types.h
index 0ce2622..47f7f2b 100644
--- a/third_party/libwebp/src/webp/types.h
+++ b/third_party/libwebp/src/webp/types.h
@@ -7,7 +7,7 @@
 // be found in the AUTHORS file in the root of the source tree.
 // -----------------------------------------------------------------------------
 //
-//  Common types
+//  Common types + memory wrappers
 //
 // Author: Skal (pascal.massimino@gmail.com)
 
@@ -49,4 +49,20 @@
 // Macro to check ABI compatibility (same major revision number)
 #define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8))
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Allocates 'size' bytes of memory. Returns NULL upon error. Memory
+// must be deallocated by calling WebPFree(). This function is made available
+// by the core 'libwebp' library.
+WEBP_EXTERN void* WebPMalloc(size_t size);
+
+// Releases memory returned by the WebPDecode*() functions (from decode.h).
+WEBP_EXTERN void WebPFree(void* ptr);
+
+#ifdef __cplusplus
+}    // extern "C"
+#endif
+
 #endif  // WEBP_WEBP_TYPES_H_
diff --git a/third_party/libxml/README.chromium b/third_party/libxml/README.chromium
index cc11cbb..2aa8772 100644
--- a/third_party/libxml/README.chromium
+++ b/third_party/libxml/README.chromium
@@ -1,6 +1,6 @@
 Name: libxml
 URL: http://xmlsoft.org
-Version: 6a6fb8560e75c3b9c15744ef20df9fce9fcd8c6e
+Version: a7fe7ee45938c53a8dd028dd40baa461191a2fd2
 License: MIT
 License File: src/Copyright
 Security Critical: yes
diff --git a/third_party/libxml/src/libxml2.spec b/third_party/libxml/src/libxml2.spec
index 52cbeb83..e43a371 100644
--- a/third_party/libxml/src/libxml2.spec
+++ b/third_party/libxml/src/libxml2.spec
@@ -203,6 +203,6 @@
 %endif # with_python3
 
 %changelog
-* Tue Feb 19 2019 Daniel Veillard <veillard@redhat.com>
+* Fri Nov  8 2019 Daniel Veillard <veillard@redhat.com>
 - upstream release 2.9.9 see http://xmlsoft.org/news.html
 
diff --git a/third_party/libxml/src/parser.c b/third_party/libxml/src/parser.c
index 4e76709..3a8a0d7 100644
--- a/third_party/libxml/src/parser.c
+++ b/third_party/libxml/src/parser.c
@@ -2081,8 +2081,8 @@
 	xmlGROW (ctxt);
 
 static void xmlGROW (xmlParserCtxtPtr ctxt) {
-    ptrdiff_t curEnd = ctxt->input->end - ctxt->input->cur;
-    ptrdiff_t curBase = ctxt->input->cur - ctxt->input->base;
+    unsigned long curEnd = ctxt->input->end - ctxt->input->cur;
+    unsigned long curBase = ctxt->input->cur - ctxt->input->base;
 
     if (((curEnd > (unsigned long) XML_MAX_LOOKUP_LIMIT) ||
          (curBase > (unsigned long) XML_MAX_LOOKUP_LIMIT)) &&
@@ -8857,18 +8857,6 @@
  *     caller if it was copied, this can be detected by val[*len] == 0.
  */
 
-#define GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end) \
-    const xmlChar *oldbase = ctxt->input->base;\
-    GROW;\
-    if (ctxt->instate == XML_PARSER_EOF)\
-        return(NULL);\
-    if (oldbase != ctxt->input->base) {\
-        ptrdiff_t delta = ctxt->input->base - oldbase;\
-        start = start + delta;\
-        in = in + delta;\
-    }\
-    end = ctxt->input->end;
-
 static xmlChar *
 xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
                          int normalize)
@@ -8898,7 +8886,14 @@
     end = ctxt->input->end;
     start = in;
     if (in >= end) {
-        GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
+        const xmlChar *oldbase = ctxt->input->base;
+	GROW;
+	if (oldbase != ctxt->input->base) {
+	    long delta = ctxt->input->base - oldbase;
+	    start = start + delta;
+	    in = in + delta;
+	}
+	end = ctxt->input->end;
     }
     if (normalize) {
         /*
@@ -8915,7 +8910,16 @@
 	    in++;
 	    start = in;
 	    if (in >= end) {
-                GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
+		const xmlChar *oldbase = ctxt->input->base;
+		GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
+		if (oldbase != ctxt->input->base) {
+		    long delta = ctxt->input->base - oldbase;
+		    start = start + delta;
+		    in = in + delta;
+		}
+		end = ctxt->input->end;
                 if (((in - start) > XML_MAX_TEXT_LENGTH) &&
                     ((ctxt->options & XML_PARSE_HUGE) == 0)) {
                     xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
@@ -8929,7 +8933,16 @@
 	    col++;
 	    if ((*in++ == 0x20) && (*in == 0x20)) break;
 	    if (in >= end) {
-                GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
+		const xmlChar *oldbase = ctxt->input->base;
+		GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
+		if (oldbase != ctxt->input->base) {
+		    long delta = ctxt->input->base - oldbase;
+		    start = start + delta;
+		    in = in + delta;
+		}
+		end = ctxt->input->end;
                 if (((in - start) > XML_MAX_TEXT_LENGTH) &&
                     ((ctxt->options & XML_PARSE_HUGE) == 0)) {
                     xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
@@ -8958,7 +8971,7 @@
                 if (ctxt->instate == XML_PARSER_EOF)
                     return(NULL);
 		if (oldbase != ctxt->input->base) {
-		    ptrdiff_t delta = ctxt->input->base - oldbase;
+		    long delta = ctxt->input->base - oldbase;
 		    start = start + delta;
 		    in = in + delta;
 		    last = last + delta;
@@ -8985,7 +8998,16 @@
 	    in++;
 	    col++;
 	    if (in >= end) {
-                GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
+		const xmlChar *oldbase = ctxt->input->base;
+		GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
+		if (oldbase != ctxt->input->base) {
+		    long delta = ctxt->input->base - oldbase;
+		    start = start + delta;
+		    in = in + delta;
+		}
+		end = ctxt->input->end;
                 if (((in - start) > XML_MAX_TEXT_LENGTH) &&
                     ((ctxt->options & XML_PARSE_HUGE) == 0)) {
                     xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
diff --git a/third_party/libxml/src/xmlreader.c b/third_party/libxml/src/xmlreader.c
index 1f6d8f6..ad9ce01 100644
--- a/third_party/libxml/src/xmlreader.c
+++ b/third_party/libxml/src/xmlreader.c
@@ -32,7 +32,6 @@
 #include <libxml/xmlIO.h>
 #include <libxml/xmlreader.h>
 #include <libxml/parserInternals.h>
-
 #ifdef LIBXML_SCHEMAS_ENABLED
 #include <libxml/relaxng.h>
 #include <libxml/xmlschemas.h>
@@ -2267,16 +2266,16 @@
     if (reader->ctxt != NULL) {
         if (reader->dict == reader->ctxt->dict)
 	    reader->dict = NULL;
-#ifdef LIBXML_REGEXP_ENABLED
 	if ((reader->ctxt->vctxt.vstateTab != NULL) &&
 	    (reader->ctxt->vctxt.vstateMax > 0)){
+#ifdef LIBXML_REGEXP_ENABLED
             while (reader->ctxt->vctxt.vstateNr > 0)
                 xmlValidatePopElement(&reader->ctxt->vctxt, NULL, NULL, NULL);
+#endif
 	    xmlFree(reader->ctxt->vctxt.vstateTab);
 	    reader->ctxt->vctxt.vstateTab = NULL;
 	    reader->ctxt->vctxt.vstateMax = 0;
 	}
-#endif
 	if (reader->ctxt->myDoc != NULL) {
 	    if (reader->preserve == 0)
 		xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc);
diff --git a/third_party/libxslt/README.chromium b/third_party/libxslt/README.chromium
index 90ad6e88..90711e53 100644
--- a/third_party/libxslt/README.chromium
+++ b/third_party/libxslt/README.chromium
@@ -1,6 +1,6 @@
 Name: libxslt
 URL: http://xmlsoft.org/XSLT
-Version: affcee5347527605a955096bd05f6e21f1a4a1f6
+Version: 3653123f992db24cec417d12600f4c67388025e3
 Security Critical: yes
 License: MIT
 License File: src/Copyright
diff --git a/third_party/libxslt/linux/config.h b/third_party/libxslt/linux/config.h
index b5cc815..5162a227 100644
--- a/third_party/libxslt/linux/config.h
+++ b/third_party/libxslt/linux/config.h
@@ -140,7 +140,7 @@
 #define HAVE_VSPRINTF 1
 
 /* Define to 1 if you have the <xlocale.h> header file. */
-#define HAVE_XLOCALE_H 1
+/* #undef HAVE_XLOCALE_H */
 
 /* Define to 1 if you have the `_stat' function. */
 /* #undef HAVE__STAT */
@@ -158,7 +158,7 @@
 #define PACKAGE_NAME "libxslt"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libxslt 1.1.33"
+#define PACKAGE_STRING "libxslt 1.1.34"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "libxslt"
@@ -167,7 +167,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.1.33"
+#define PACKAGE_VERSION "1.1.34"
 
 /* Define to 1 if you have the ANSI C header files. */
 #define STDC_HEADERS 1
@@ -195,11 +195,14 @@
 
 
 /* Version number of package */
-#define VERSION "1.1.33"
+#define VERSION "1.1.34"
 
 /* Define if debugging support is enabled */
 /* #undef WITH_DEBUGGER */
 
+/* Define if profiling support is enabled */
+#define WITH_PROFILER /**/
+
 /* Define to 1 if on MINIX. */
 /* #undef _MINIX */
 
diff --git a/third_party/libxslt/linux/libexslt/exsltconfig.h b/third_party/libxslt/linux/libexslt/exsltconfig.h
index 4b27843..890ca85 100644
--- a/third_party/libxslt/linux/libexslt/exsltconfig.h
+++ b/third_party/libxslt/linux/libexslt/exsltconfig.h
@@ -18,7 +18,7 @@
  *
  * the version string like "1.2.3"
  */
-#define LIBEXSLT_DOTTED_VERSION "1.1.33"
+#define LIBEXSLT_DOTTED_VERSION "1.1.34"
 
 /**
  * LIBEXSLT_VERSION:
diff --git a/third_party/libxslt/linux/libxslt/xsltwin32config.h b/third_party/libxslt/linux/libxslt/xsltwin32config.h
index ceccadc..8085bc2f 100644
--- a/third_party/libxslt/linux/libxslt/xsltwin32config.h
+++ b/third_party/libxslt/linux/libxslt/xsltwin32config.h
@@ -23,21 +23,21 @@
  *
  * the version string like "1.2.3"
  */
-#define LIBXSLT_DOTTED_VERSION "1.1.33"
+#define LIBXSLT_DOTTED_VERSION "1.1.34"
 
 /**
  * LIBXSLT_VERSION:
  *
  * the version number: 1.2.3 value is 1002003
  */
-#define LIBXSLT_VERSION 10133
+#define LIBXSLT_VERSION 10134
 
 /**
  * LIBXSLT_VERSION_STRING:
  *
  * the version number string, 1.2.3 value is "1002003"
  */
-#define LIBXSLT_VERSION_STRING "10133"
+#define LIBXSLT_VERSION_STRING "10134"
 
 /**
  * LIBXSLT_VERSION_EXTRA:
diff --git a/third_party/libxslt/mac/config.h b/third_party/libxslt/mac/config.h
index 317d26e..b756b61 100644
--- a/third_party/libxslt/mac/config.h
+++ b/third_party/libxslt/mac/config.h
@@ -158,7 +158,7 @@
 #define PACKAGE_NAME "libxslt"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libxslt 1.1.33"
+#define PACKAGE_STRING "libxslt 1.1.34"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "libxslt"
@@ -167,7 +167,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.1.33"
+#define PACKAGE_VERSION "1.1.34"
 
 /* Define to 1 if you have the ANSI C header files. */
 #define STDC_HEADERS 1
@@ -195,11 +195,14 @@
 
 
 /* Version number of package */
-#define VERSION "1.1.33"
+#define VERSION "1.1.34"
 
 /* Define if debugging support is enabled */
 /* #undef WITH_DEBUGGER */
 
+/* Define if profiling support is enabled */
+#define WITH_PROFILER /**/
+
 /* Define to 1 if on MINIX. */
 /* #undef _MINIX */
 
diff --git a/third_party/libxslt/src/Makefile.am b/third_party/libxslt/src/Makefile.am
index ff10f57..2c417d0 100644
--- a/third_party/libxslt/src/Makefile.am
+++ b/third_party/libxslt/src/Makefile.am
@@ -38,6 +38,7 @@
 	    -e 's?\@XSLT_INCLUDEDIR\@?$(XSLT_INCLUDEDIR)?g' \
 	    -e 's?\@VERSION\@?$(VERSION)?g' \
 	    -e 's?\@XSLT_LIBS\@?$(XSLT_LIBS) $(EXTRA_LIBS)?g' \
+	    -e 's?\@XSLT_PRIVATE_LIBS\@?$(XSLT_PRIVATE_LIBS)?g' \
 	       < $(srcdir)/xsltConf.sh.in > xsltConf.tmp \
 	&& mv xsltConf.tmp xsltConf.sh
 
diff --git a/third_party/libxslt/src/config.h.in b/third_party/libxslt/src/config.h.in
index 7e35341..0dbe333 100644
--- a/third_party/libxslt/src/config.h.in
+++ b/third_party/libxslt/src/config.h.in
@@ -199,6 +199,9 @@
 /* Define if debugging support is enabled */
 #undef WITH_DEBUGGER
 
+/* Define if profiling support is enabled */
+#undef WITH_PROFILER
+
 /* Define to 1 if on MINIX. */
 #undef _MINIX
 
diff --git a/third_party/libxslt/src/configure.ac b/third_party/libxslt/src/configure.ac
index ed39a91..4f8d75d 100644
--- a/third_party/libxslt/src/configure.ac
+++ b/third_party/libxslt/src/configure.ac
@@ -3,7 +3,7 @@
 
 m4_define([MAJOR_VERSION], [1])
 m4_define([MINOR_VERSION], [1])
-m4_define([MICRO_VERSION], [33])
+m4_define([MICRO_VERSION], [34])
 
 AC_INIT([libxslt], [MAJOR_VERSION.MINOR_VERSION.MICRO_VERSION])
 AC_CONFIG_SRCDIR([libxslt/xslt.c])
@@ -403,6 +403,20 @@
 AC_SUBST(WITH_DEBUGGER)
 
 dnl
+dnl Is profiler support requested
+dnl
+AC_ARG_WITH(profiler, [  --with-profiler        Add the profiling support (on)])
+if test "$with_profiler" = "no" ; then
+    echo Disabling profiler
+    WITH_PROFILER=0
+else
+    echo Enabling profiler
+    WITH_PROFILER=1
+    AC_DEFINE([WITH_PROFILER],[], [Define if profiling support is enabled])
+fi
+AC_SUBST(WITH_PROFILER)
+
+dnl
 dnl The following new parameters were added to offer
 dnl the ability to specify the location of the libxml
 dnl library during linking and compilation.
@@ -460,7 +474,7 @@
                ;;
     esac
 else
-    CFLAGS="${CFLAGS} -Wall -Wformat=2 -Wmissing-format-attribute"
+    CFLAGS="${CFLAGS} -Wall -Wextra -Wformat=2 -Wmissing-format-attribute"
     case "${host}" in
           alpha*-*-linux* )
 	       CFLAGS="${CFLAGS} -mieee"
@@ -472,34 +486,59 @@
 fi
 
 dnl
+dnl Check which type of library to build. Default to building shared and static.
+dnl
+
+build_shared_libs="yes"
+build_static_libs="yes"
+
+if test "$enable_shared" = "no"; then
+    build_shared_libs="no"
+fi
+
+if test "$enable_static" = "no"; then
+    build_static_libs="no"
+fi
+
+if test "$build_shared_libs" = "no" -a "$build_static_libs" = "no"; then
+    build_static_libs="yes"
+fi
+
+dnl
 dnl Override other variables if LIBXML_SRC is set
 dnl
 
-if test "x$LIBXML_SRC" != "x"
-then
-	CWD=`pwd`
-	if cd $LIBXML_SRC
-	then
-		LIBXML_SRC=`pwd`
-		XML_CONFIG="${LIBXML_SRC}/xml2-config"
-		LIBXML_CFLAGS="-I${LIBXML_SRC}/include"
-		LIBXML_LIBS="-L${LIBXML_SRC} `$XML_CONFIG --libs`"
-                WITH_MODULES="`$XML_CONFIG --modules`"
-		cd $CWD
-	else
-		AC_MSG_ERROR([libxml source dir not found (${LIBXML_SRC}), typo?])
-	fi
+if test "x$LIBXML_SRC" != "x"; then
+    CWD=`pwd`
+    if cd $LIBXML_SRC; then
+        LIBXML_SRC=`pwd`
+        XML_CONFIG="${LIBXML_SRC}/xml2-config"
+        LIBXML_CFLAGS="-I${LIBXML_SRC}/include"
+        if test "$build_static_libs" = "no"; then
+            LIBXML_LIBS="-L${LIBXML_SRC} `$XML_CONFIG --libs --dynamic`"
+        else
+            LIBXML_LIBS="-L${LIBXML_SRC} `$XML_CONFIG --libs`"
+        fi
+        WITH_MODULES="`$XML_CONFIG --modules`"
+        cd $CWD
+    else
+        AC_MSG_ERROR([libxml source dir not found (${LIBXML_SRC}), typo?])
+    fi
 fi
 
 dnl
 dnl Try pkg-config first if nothing is set
 dnl
 
-if test "x$LIBXML_CONFIG_PREFIX" = "x" -a "x$LIBXML_LIBS" = "x"
-then
-	PKG_CHECK_MODULES([LIBXML], [libxml-2.0 >= $LIBXML_REQUIRED_VERSION], [
-		WITH_MODULES="`$PKG_CONFIG --variable=modules libxml-2.0`"
-	], [ ])
+if test "x$LIBXML_CONFIG_PREFIX" = "x" -a "x$LIBXML_LIBS" = "x"; then
+    if test "$build_static_libs" = "no"; then
+        PKG_CHECK_MODULES([LIBXML], [libxml-2.0 >= $LIBXML_REQUIRED_VERSION], [
+            WITH_MODULES="`$PKG_CONFIG --variable=modules libxml-2.0`"
+        ], [ ])
+    else
+        PKG_CHECK_MODULES_STATIC([LIBXML], [libxml-2.0 >= $LIBXML_REQUIRED_VERSION],
+        [ ], [ ])
+    fi
 fi
 
 dnl
@@ -509,15 +548,19 @@
 
 if test "x$LIBXML_LIBS" = "x" && ${XML_CONFIG} --libs print > /dev/null 2>&1
 then
-        AC_MSG_CHECKING(for libxml libraries >= $LIBXML_REQUIRED_VERSION)
-	XMLVERS=`$XML_CONFIG --version`
-	if test VERSION_TO_NUMBER(echo $XMLVERS) -ge VERSION_TO_NUMBER(echo $LIBXML_REQUIRED_VERSION)
-	then
-		AC_MSG_RESULT($XMLVERS found)
-	else
-		AC_MSG_ERROR(Version $XMLVERS found. You need at least libxml2 $LIBXML_REQUIRED_VERSION for this version of libxslt)
-	fi
-	LIBXML_LIBS="`$XML_CONFIG --libs`"
+    AC_MSG_CHECKING(for libxml libraries >= $LIBXML_REQUIRED_VERSION)
+    XMLVERS=`$XML_CONFIG --version`
+    if test VERSION_TO_NUMBER(echo $XMLVERS) -ge VERSION_TO_NUMBER(echo $LIBXML_REQUIRED_VERSION); then
+        AC_MSG_RESULT($XMLVERS found)
+    else
+        AC_MSG_ERROR(Version $XMLVERS found. You need at least libxml2 $LIBXML_REQUIRED_VERSION for this version of libxslt)
+    fi
+
+    if test "$build_static_libs" = "no"; then
+        LIBXML_LIBS="`$XML_CONFIG --libs --dynamic`"
+    else
+        LIBXML_LIBS="`$XML_CONFIG --libs`"
+    fi
 	LIBXML_CFLAGS="`$XML_CONFIG --cflags`"
         WITH_MODULES="`$XML_CONFIG --modules`"
 fi
@@ -540,7 +583,7 @@
 fi
 
 AC_MSG_CHECKING([whether shared libraries will be built (required for plugins)])
-if test "$enable_shared" = "no" -a "$with_plugins" = "yes"; then
+if test "$build_shared_libs" = "no" -a "$with_plugins" = "yes"; then
 	 AC_MSG_RESULT(no)
 	 AC_MSG_WARN([Disabling plugin support.])
 	 AC_MSG_WARN([Plugins require that shared libraries be built.])
@@ -598,17 +641,21 @@
 
 XSLT_LIBDIR='-L${libdir}'
 XSLT_INCLUDEDIR='-I${includedir}'
-XSLT_LIBS="-lxslt $LIBXML_LIBS $M_LIBS"
+XSLT_LIBS="-lxslt $LIBXML_LIBS"
+XSLT_PRIVATE_LIBS="$M_LIBS"
 AC_SUBST(XSLT_LIBDIR)
 AC_SUBST(XSLT_INCLUDEDIR)
 AC_SUBST(XSLT_LIBS)
+AC_SUBST(XSLT_PRIVATE_LIBS)
 
 EXSLT_LIBDIR='-L${libdir}'
 EXSLT_INCLUDEDIR='-I${includedir}'
-EXSLT_LIBS="-lexslt $XSLT_LIBS $LIBGCRYPT_LIBS"
+EXSLT_LIBS="-lexslt $XSLT_LIBS"
+EXSLT_PRIVATE_LIBS="$XSLT_PRIVATE_LIBS $LIBGCRYPT_LIBS"
 AC_SUBST(EXSLT_LIBDIR)
 AC_SUBST(EXSLT_INCLUDEDIR)
 AC_SUBST(EXSLT_LIBS)
+AC_SUBST(EXSLT_PRIVATE_LIBS)
 
 AC_SUBST(EXTRA_LIBS)
 
@@ -660,9 +707,12 @@
 tests/exslt/date/Makefile
 tests/exslt/dynamic/Makefile
 tests/plugins/Makefile
+tests/fuzz/Makefile
 doc/Makefile
 xslt-config
 libxslt.spec
 ])
+AC_CONFIG_LINKS([tests/fuzz/xpath.xml:tests/fuzz/xpath.xml])
+AC_CONFIG_LINKS([tests/fuzz/xslt.xml:tests/fuzz/xslt.xml])
 
 AC_OUTPUT
diff --git a/third_party/libxslt/src/libexslt.pc.in b/third_party/libxslt/src/libexslt.pc.in
index 16676ff..c0e954f0 100644
--- a/third_party/libxslt/src/libexslt.pc.in
+++ b/third_party/libxslt/src/libexslt.pc.in
@@ -8,5 +8,6 @@
 Version: @LIBEXSLT_VERSION@
 Description: EXSLT Extension library
 Requires: libxml-2.0
-Libs: @EXSLT_LIBDIR@ @EXSLT_LIBS@
 Cflags: @EXSLT_INCLUDEDIR@
+Libs: @EXSLT_LIBDIR@ @EXSLT_LIBS@
+Libs.private: @EXSLT_PRIVATE_LIBS@
diff --git a/third_party/libxslt/src/libexslt/crypto.c b/third_party/libxslt/src/libexslt/crypto.c
index ac39038..621fd90 100644
--- a/third_party/libxslt/src/libexslt/crypto.c
+++ b/third_party/libxslt/src/libexslt/crypto.c
@@ -755,7 +755,14 @@
     PLATFORM_RC4_DECRYPT (ctxt, padkey, bin, ret_len, ret, ret_len);
     ret[ret_len] = 0;
 
-    xmlXPathReturnString (ctxt, ret);
+    if (xmlCheckUTF8(ret) == 0) {
+	xsltTransformError(tctxt, NULL, tctxt->inst,
+	    "exsltCryptoRc4DecryptFunction: Invalid UTF-8\n");
+        xmlFree(ret);
+	xmlXPathReturnEmptyString(ctxt);
+    } else {
+        xmlXPathReturnString(ctxt, ret);
+    }
 
 done:
     if (key != NULL)
diff --git a/third_party/libxslt/src/libexslt/date.c b/third_party/libxslt/src/libexslt/date.c
index 32c9db70c..7e805bd 100644
--- a/third_party/libxslt/src/libexslt/date.c
+++ b/third_party/libxslt/src/libexslt/date.c
@@ -141,9 +141,9 @@
 #define IS_LEAP(y)						\
 	(((y & 3) == 0) && ((y % 25 != 0) || ((y & 15) == 0)))
 
-static const unsigned long daysInMonth[12] =
+static const long daysInMonth[12] =
 	{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-static const unsigned long daysInMonthLeap[12] =
+static const long daysInMonthLeap[12] =
 	{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
 #define MAX_DAYINMONTH(yr,mon)                                  \
@@ -177,9 +177,9 @@
 #define DAYS_PER_EPOCH          (400 * 365 + 100 - 4 + 1)
 #define YEARS_PER_EPOCH         400
 
-static const unsigned long dayInYearByMonth[12] =
+static const long dayInYearByMonth[12] =
 	{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
-static const unsigned long dayInLeapYearByMonth[12] =
+static const long dayInLeapYearByMonth[12] =
 	{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
 
 #define DAY_IN_YEAR(day, month, year)				\
@@ -187,6 +187,9 @@
                 dayInLeapYearByMonth[month - 1] :		\
                 dayInYearByMonth[month - 1]) + day)
 
+#define YEAR_MAX LONG_MAX
+#define YEAR_MIN (-LONG_MAX + 1)
+
 /**
  * _exsltDateParseGYear:
  * @dt:  pointer to a date structure
@@ -221,7 +224,7 @@
     firstChar = cur;
 
     while ((*cur >= '0') && (*cur <= '9')) {
-        if (dt->year >= LONG_MAX / 10)
+        if (dt->year >= YEAR_MAX / 10) /* Not really exact */
             return -1;
 	dt->year = dt->year * 10 + (*cur - '0');
 	cur++;
@@ -1474,11 +1477,12 @@
     long ret;
 
     if (yr <= 0) {
-        ret = ((yr-2 + ((yr/4)-(yr/100)+(yr/400)) + yday) % 7);
+        /* Compute modulus twice to avoid integer overflow */
+        ret = ((yr%7-2 + ((yr/4)-(yr/100)+(yr/400)) + yday) % 7);
         if (ret < 0)
             ret += 7;
     } else
-        ret = (((yr-1) + (((yr-1)/4)-((yr-1)/100)+((yr-1)/400)) + yday) % 7);
+        ret = (((yr%7-1) + (((yr-1)/4)-((yr-1)/100)+((yr-1)/400)) + yday) % 7);
 
     return ret;
 }
@@ -1532,8 +1536,8 @@
      * pathological cases.
      */
     carry += (dur->day / DAYS_PER_EPOCH) * YEARS_PER_EPOCH;
-    if ((carry > 0 && dt->year > LONG_MAX - carry) ||
-        (carry < 0 && dt->year < LONG_MIN - carry)) {
+    if ((carry > 0 && dt->year > YEAR_MAX - carry) ||
+        (carry < 0 && dt->year < YEAR_MIN - carry)) {
         /* Overflow */
         exsltDateFreeDate(ret);
         return NULL;
@@ -1583,7 +1587,7 @@
                 ret->mon -= 1;
             }
             else {
-                if (ret->year == LONG_MIN) {
+                if (ret->year == YEAR_MIN) {
                     exsltDateFreeDate(ret);
                     return NULL;
                 }
@@ -1597,7 +1601,7 @@
                 ret->mon += 1;
             }
             else {
-                if (ret->year == LONG_MAX) {
+                if (ret->year == YEAR_MAX) {
                     exsltDateFreeDate(ret);
                     return NULL;
                 }
diff --git a/third_party/libxslt/src/libexslt/dynamic.c b/third_party/libxslt/src/libexslt/dynamic.c
index a5b569a..a8cc72d9 100644
--- a/third_party/libxslt/src/libexslt/dynamic.c
+++ b/third_party/libxslt/src/libexslt/dynamic.c
@@ -127,7 +127,15 @@
         goto cleanup;
     }
 
-    if (str == NULL || !xmlStrlen(str) || !(comp = xmlXPathCompile(str)))
+    tctxt = xsltXPathGetTransformContext(ctxt);
+    if (tctxt == NULL) {
+	xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
+	      "dyn:map : internal error tctxt == NULL\n");
+	goto cleanup;
+    }
+
+    if (str == NULL || !xmlStrlen(str) ||
+        !(comp = xmlXPathCtxtCompile(tctxt->xpathCtxt, str)))
         goto cleanup;
 
     oldDoc = ctxt->context->doc;
@@ -139,12 +147,6 @@
 	 * since we really don't know we're going to be adding node(s)
 	 * down the road we create the RVT regardless
 	 */
-    tctxt = xsltXPathGetTransformContext(ctxt);
-    if (tctxt == NULL) {
-	xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
-	      "dyn:map : internal error tctxt == NULL\n");
-	goto cleanup;
-    }
     container = xsltCreateRVT(tctxt);
     if (container == NULL) {
 	xsltTransformError(tctxt, NULL, NULL,
diff --git a/third_party/libxslt/src/libexslt/functions.c b/third_party/libxslt/src/libexslt/functions.c
index 41d37493..2f744311 100644
--- a/third_party/libxslt/src/libexslt/functions.c
+++ b/third_party/libxslt/src/libexslt/functions.c
@@ -674,7 +674,7 @@
      */
     sel = xmlGetNsProp(inst, (const xmlChar *) "select", NULL);
     if (sel != NULL) {
-	ret->select = xmlXPathCompile (sel);
+	ret->select = xsltXPathCompileFlags(style, sel, 0);
 	xmlFree(sel);
     }
     /*
diff --git a/third_party/libxslt/src/libexslt/saxon.c b/third_party/libxslt/src/libexslt/saxon.c
index 00b74a4..e8b6440 100644
--- a/third_party/libxslt/src/libexslt/saxon.c
+++ b/third_party/libxslt/src/libexslt/saxon.c
@@ -105,7 +105,7 @@
     ret = xmlHashLookup(hash, arg);
 
     if (ret == NULL) {
-	 ret = xmlXPathCompile(arg);
+	 ret = xmlXPathCtxtCompile(tctxt->xpathCtxt, arg);
 	 if (ret == NULL) {
 	      xmlFree(arg);
               xmlXPathSetError(ctxt, XPATH_EXPR_ERROR);
diff --git a/third_party/libxslt/src/libxslt.pc.in b/third_party/libxslt/src/libxslt.pc.in
index 082d64c..81f8be12 100644
--- a/third_party/libxslt/src/libxslt.pc.in
+++ b/third_party/libxslt/src/libxslt.pc.in
@@ -8,5 +8,6 @@
 Version: @VERSION@
 Description: XSLT library version 2.
 Requires: libxml-2.0
-Libs: @XSLT_LIBDIR@ @XSLT_LIBS@ @EXTRA_LIBS@
 Cflags: @XSLT_INCLUDEDIR@
+Libs: @XSLT_LIBDIR@ @XSLT_LIBS@ @EXTRA_LIBS@
+Libs.private: @XSLT_PRIVATE_LIBS@
diff --git a/third_party/libxslt/src/libxslt.spec b/third_party/libxslt/src/libxslt.spec
index cfc24411..80b320f 100644
--- a/third_party/libxslt/src/libxslt.spec
+++ b/third_party/libxslt/src/libxslt.spec
@@ -1,6 +1,6 @@
 Summary: Library providing the GNOME XSLT engine
 Name: libxslt
-Version: 1.1.33
+Version: 1.1.34
 Release: 1%{?dist}%{?extra_release}
 License: MIT
 Group: Development/Libraries
@@ -70,7 +70,7 @@
 rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/%{name}{,-python}-%{version}
 
 %check
-make check
+make tests
 
 %clean
 rm -fr %{buildroot}
@@ -122,12 +122,11 @@
 %doc AUTHORS ChangeLog.gz NEWS README Copyright FEATURES
 %{_libdir}/python*/site-packages/libxslt.py*
 %{_libdir}/python*/site-packages/libxsltmod*
-%doc python/TODO
 %doc python/libxsltclass.txt
 %doc python/tests/*.py
 %doc python/tests/*.xml
 %doc python/tests/*.xsl
 
 %changelog
-* Thu Apr 11 2019 Daniel Veillard <veillard@redhat.com>
-- upstream release 1.1.33 see http://xmlsoft.org/XSLT/news.html
+* Fri Nov  8 2019 Daniel Veillard <veillard@redhat.com>
+- upstream release 1.1.34 see http://xmlsoft.org/XSLT/news.html
diff --git a/third_party/libxslt/src/libxslt.spec.in b/third_party/libxslt/src/libxslt.spec.in
index 96c0ca6..f4af4d4b 100644
--- a/third_party/libxslt/src/libxslt.spec.in
+++ b/third_party/libxslt/src/libxslt.spec.in
@@ -70,7 +70,7 @@
 rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/%{name}{,-python}-%{version}
 
 %check
-make check
+make tests
 
 %clean
 rm -fr %{buildroot}
@@ -122,7 +122,6 @@
 %doc AUTHORS ChangeLog.gz NEWS README Copyright FEATURES
 %{_libdir}/python*/site-packages/libxslt.py*
 %{_libdir}/python*/site-packages/libxsltmod*
-%doc python/TODO
 %doc python/libxsltclass.txt
 %doc python/tests/*.py
 %doc python/tests/*.xml
diff --git a/third_party/libxslt/src/libxslt/attrvt.c b/third_party/libxslt/src/libxslt/attrvt.c
index 125159c..a885526 100644
--- a/third_party/libxslt/src/libxslt/attrvt.c
+++ b/third_party/libxslt/src/libxslt/attrvt.c
@@ -48,7 +48,12 @@
     /*
      * the content is an alternate of string and xmlXPathCompExprPtr
      */
-    void *segments[MAX_AVT_SEG];
+#if __STDC_VERSION__ >= 199901L
+    /* Using a C99 flexible array member avoids false positives under UBSan */
+    void *segments[];
+#else
+    void *segments[1];
+#endif
 };
 
 /**
@@ -62,15 +67,16 @@
 static xsltAttrVTPtr
 xsltNewAttrVT(xsltStylesheetPtr style) {
     xsltAttrVTPtr cur;
+    size_t size = sizeof(xsltAttrVT) + MAX_AVT_SEG * sizeof(void*);
 
-    cur = (xsltAttrVTPtr) xmlMalloc(sizeof(xsltAttrVT));
+    cur = (xsltAttrVTPtr) xmlMalloc(size);
     if (cur == NULL) {
 	xsltTransformError(NULL, style, NULL,
 		"xsltNewAttrVTPtr : malloc failed\n");
 	if (style != NULL) style->errors++;
 	return(NULL);
     }
-    memset(cur, 0, sizeof(xsltAttrVT));
+    memset(cur, 0, size);
 
     cur->nb_seg = 0;
     cur->max_seg = MAX_AVT_SEG;
@@ -146,11 +152,14 @@
 static xsltAttrVTPtr
 xsltSetAttrVTsegment(xsltAttrVTPtr avt, void *val) {
     if (avt->nb_seg >= avt->max_seg) {
-	avt = (xsltAttrVTPtr) xmlRealloc(avt, sizeof(xsltAttrVT) +
-			avt->max_seg * sizeof(void *));
-	if (avt == NULL) {
+        size_t size = sizeof(xsltAttrVT) +
+                      (avt->max_seg + MAX_AVT_SEG) * sizeof(void *);
+	xsltAttrVTPtr tmp = (xsltAttrVTPtr) xmlRealloc(avt, size);
+	if (tmp == NULL) {
+            xsltFreeAttrVT(avt);
 	    return NULL;
 	}
+        avt = tmp;
 	memset(&avt->segments[avt->nb_seg], 0, MAX_AVT_SEG*sizeof(void *));
 	avt->max_seg += MAX_AVT_SEG;
     }
@@ -164,7 +173,7 @@
  * @attr: the attribute coming from the stylesheet.
  *
  * Precompile an attribute in a stylesheet, basically it checks if it is
- * an attrubute value template, and if yes establish some structures needed
+ * an attribute value template, and if yes, establish some structures needed
  * to process it at transformation time.
  */
 void
diff --git a/third_party/libxslt/src/libxslt/functions.c b/third_party/libxslt/src/libxslt/functions.c
index a21eedc..b350545a11 100644
--- a/third_party/libxslt/src/libxslt/functions.c
+++ b/third_party/libxslt/src/libxslt/functions.c
@@ -55,7 +55,7 @@
 
 /**
  * xsltXPathFunctionLookup:
- * @ctxt:  a void * but the XSLT transformation context actually
+ * @vctxt:  a void * but the XSLT transformation context actually
  * @name:  the function name
  * @ns_uri:  the function namespace URI
  *
diff --git a/third_party/libxslt/src/libxslt/keys.c b/third_party/libxslt/src/libxslt/keys.c
index 2881056..ecef538 100644
--- a/third_party/libxslt/src/libxslt/keys.c
+++ b/third_party/libxslt/src/libxslt/keys.c
@@ -241,6 +241,8 @@
  */
 static int
 skipPredicate(const xmlChar *cur, int end) {
+    int level = 0;
+
     if ((cur == NULL) || (end < 0)) return(-1);
     if (cur[end] != '[') return(end);
     end++;
@@ -251,12 +253,12 @@
 	        return(-1);
 	    continue;
 	} else if (cur[end] == '[') {
-	    end = skipPredicate(cur, end);
-	    if (end <= 0)
-	        return(-1);
-	    continue;
-	} else if (cur[end] == ']')
-	    return(end + 1);
+            level += 1;
+	} else if (cur[end] == ']') {
+            if (level == 0)
+	        return(end + 1);
+            level -= 1;
+        }
 	end++;
     }
     return(-1);
@@ -629,6 +631,7 @@
     xmlNodePtr oldContextNode;
     xsltDocumentPtr oldDocInfo;
     int	oldXPPos, oldXPSize;
+    xmlNodePtr oldXPNode;
     xmlDocPtr oldXPDoc;
     int oldXPNsNr;
     xmlNsPtr *oldXPNamespaces;
@@ -667,6 +670,7 @@
     oldDocInfo = ctxt->document;
     oldContextNode = ctxt->node;
 
+    oldXPNode = xpctxt->node;
     oldXPDoc = xpctxt->doc;
     oldXPPos = xpctxt->proximityPosition;
     oldXPSize = xpctxt->contextSize;
@@ -865,6 +869,7 @@
     /*
     * Restore context state.
     */
+    xpctxt->node = oldXPNode;
     xpctxt->doc = oldXPDoc;
     xpctxt->nsNr = oldXPNsNr;
     xpctxt->namespaces = oldXPNamespaces;
diff --git a/third_party/libxslt/src/libxslt/libxslt.syms b/third_party/libxslt/src/libxslt/libxslt.syms
index 684cd1b..94b1d8a 100644
--- a/third_party/libxslt/src/libxslt/libxslt.syms
+++ b/third_party/libxslt/src/libxslt/libxslt.syms
@@ -499,3 +499,13 @@
   xsltDecimalFormatGetByQName;
 } LIBXML2_1.1.27;
 
+LIBXML2_1.1.34 {
+    global:
+
+# xsltInternals
+  xsltParseStylesheetUser;
+
+# pattern
+  xsltCompMatchClearCache;
+} LIBXML2_1.1.30;
+
diff --git a/third_party/libxslt/src/libxslt/numbers.c b/third_party/libxslt/src/libxslt/numbers.c
index 89e1f668..92023f8a5 100644
--- a/third_party/libxslt/src/libxslt/numbers.c
+++ b/third_party/libxslt/src/libxslt/numbers.c
@@ -36,7 +36,7 @@
 
 #define SYMBOL_QUOTE		((xmlChar)'\'')
 
-#define DEFAULT_TOKEN		(xmlChar)'0'
+#define DEFAULT_TOKEN		'0'
 #define DEFAULT_SEPARATOR	"."
 
 #define MAX_TOKENS		1024
@@ -45,7 +45,7 @@
 typedef xsltFormatToken *xsltFormatTokenPtr;
 struct _xsltFormatToken {
     xmlChar	*separator;
-    xmlChar	 token;
+    int		 token;
     int		 width;
 };
 
@@ -107,20 +107,22 @@
      (xsltUTF8Charcmp((letter), (self)->patternSeparator) == 0))
 
 #define IS_DIGIT_ZERO(x) xsltIsDigitZero(x)
-#define IS_DIGIT_ONE(x) xsltIsDigitZero((xmlChar)(x)-1)
+#define IS_DIGIT_ONE(x) xsltIsDigitZero((x)-1)
 
 static int
 xsltIsDigitZero(unsigned int ch)
 {
     /*
      * Reference: ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
+     *
+     * There a many more digit ranges in newer Unicode versions. These
+     * are only the zeros that match Digit in XML 1.0 (IS_DIGIT macro).
      */
     switch (ch) {
     case 0x0030: case 0x0660: case 0x06F0: case 0x0966:
     case 0x09E6: case 0x0A66: case 0x0AE6: case 0x0B66:
     case 0x0C66: case 0x0CE6: case 0x0D66: case 0x0E50:
-    case 0x0E60: case 0x0F20: case 0x1040: case 0x17E0:
-    case 0x1810: case 0xFF10:
+    case 0x0ED0: case 0x0F20:
 	return TRUE;
     default:
 	return FALSE;
@@ -382,11 +384,14 @@
 		tokens->tokens[tokens->nTokens].token = val - 1;
 		ix += len;
 		val = xmlStringCurrentChar(NULL, format+ix, &len);
-	    }
-	} else if ( (val == (xmlChar)'A') ||
-		    (val == (xmlChar)'a') ||
-		    (val == (xmlChar)'I') ||
-		    (val == (xmlChar)'i') ) {
+	    } else {
+                tokens->tokens[tokens->nTokens].token = '0';
+                tokens->tokens[tokens->nTokens].width = 1;
+            }
+	} else if ( (val == 'A') ||
+		    (val == 'a') ||
+		    (val == 'I') ||
+		    (val == 'i') ) {
 	    tokens->tokens[tokens->nTokens].token = val;
 	    ix += len;
 	    val = xmlStringCurrentChar(NULL, format+ix, &len);
@@ -397,7 +402,7 @@
 	     *  not support a numbering sequence that starts with that
 	     *  token, it must use a format token of 1."
 	     */
-	    tokens->tokens[tokens->nTokens].token = (xmlChar)'0';
+	    tokens->tokens[tokens->nTokens].token = '0';
 	    tokens->tokens[tokens->nTokens].width = 1;
 	}
 	/*
@@ -824,6 +829,16 @@
 					      output);
 	    }
 	}
+
+        /*
+         * Unlike `match` patterns, `count` and `from` patterns can contain
+         * variable references, so we have to clear the pattern match
+         * cache if the "direct" matching algorithm was used.
+         */
+        if (data->countPat != NULL)
+            xsltCompMatchClearCache(ctxt, data->countPat);
+        if (data->fromPat != NULL)
+            xsltCompMatchClearCache(ctxt, data->fromPat);
     }
     /* Insert number as text node */
     xsltCopyTextString(ctxt, ctxt->insert, xmlBufferContent(output), 0);
@@ -844,7 +859,8 @@
 static int
 xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltFormatNumberInfoPtr info)
 {
-    int	count=0;	/* will hold total length of prefix/suffix */
+    /* will hold total length of prefix/suffix without quote characters */
+    int	count=0;
     int len;
 
     while (1) {
@@ -942,7 +958,6 @@
     xmlBufferPtr buffer;
     xmlChar *the_format, *prefix = NULL, *suffix = NULL;
     xmlChar *nprefix, *nsuffix = NULL;
-    xmlChar pchar;
     int	    prefix_length, suffix_length = 0, nprefix_length, nsuffix_length;
     double  scale;
     int	    j, len;
@@ -970,7 +985,7 @@
 		*result = xmlStrdup(BAD_CAST "-");
 	    else
 		*result = xmlStrdup(self->minusSign);
-	    /* no-break on purpose */
+	    /* Intentional fall-through */
 	case 1:
 	    if ((self == NULL) || (self->infinity == NULL))
 		*result = xmlStrcat(*result, BAD_CAST "Infinity");
@@ -1267,14 +1282,13 @@
 	xmlBufferAdd(buffer, self->minusSign, xmlUTF8Strsize(self->minusSign, 1));
 
     /* Put the prefix into the buffer */
-    for (j = 0; j < prefix_length; j++) {
-	if ((pchar = *prefix++) == SYMBOL_QUOTE) {
-	    len = xmlUTF8Strsize(prefix, 1);
-	    xmlBufferAdd(buffer, prefix, len);
-	    prefix += len;
-	    j += len - 1;	/* length of symbol less length of quote */
-	} else
-	    xmlBufferAdd(buffer, &pchar, 1);
+    for (j = 0; j < prefix_length; ) {
+	if (*prefix == SYMBOL_QUOTE)
+            prefix++;
+        len = xmlUTF8Strsize(prefix, 1);
+        xmlBufferAdd(buffer, prefix, len);
+        prefix += len;
+        j += len;
     }
 
     /* Next do the integer part of the number */
@@ -1283,13 +1297,14 @@
     number = floor((scale * number + 0.5)) / scale;
     if ((self->grouping != NULL) &&
         (self->grouping[0] != 0)) {
+        int gchar;
 
 	len = xmlStrlen(self->grouping);
-	pchar = xsltGetUTF8Char(self->grouping, &len);
+	gchar = xsltGetUTF8Char(self->grouping, &len);
 	xsltNumberFormatDecimal(buffer, floor(number), self->zeroDigit[0],
 				format_info.integer_digits,
 				format_info.group,
-				pchar, len);
+				gchar, len);
     } else
 	xsltNumberFormatDecimal(buffer, floor(number), self->zeroDigit[0],
 				format_info.integer_digits,
@@ -1332,14 +1347,13 @@
 	}
     }
     /* Put the suffix into the buffer */
-    for (j = 0; j < suffix_length; j++) {
-	if ((pchar = *suffix++) == SYMBOL_QUOTE) {
-            len = xmlUTF8Strsize(suffix, 1);
-	    xmlBufferAdd(buffer, suffix, len);
-	    suffix += len;
-	    j += len - 1;	/* length of symbol less length of escape */
-	} else
-	    xmlBufferAdd(buffer, &pchar, 1);
+    for (j = 0; j < suffix_length; ) {
+	if (*suffix == SYMBOL_QUOTE)
+            suffix++;
+        len = xmlUTF8Strsize(suffix, 1);
+        xmlBufferAdd(buffer, suffix, len);
+        suffix += len;
+        j += len;
     }
 
     *result = xmlStrdup(xmlBufferContent(buffer));
diff --git a/third_party/libxslt/src/libxslt/pattern.c b/third_party/libxslt/src/libxslt/pattern.c
index 7d66019..c649673 100644
--- a/third_party/libxslt/src/libxslt/pattern.c
+++ b/third_party/libxslt/src/libxslt/pattern.c
@@ -113,7 +113,6 @@
     xmlNsPtr *nsList;		/* the namespaces in scope */
     int nsNr;			/* the number of namespaces in scope */
     xsltStepOpPtr steps;        /* ops for computation */
-    int novar;                  /* doesn't contain variables */
 };
 
 typedef struct _xsltParserContext xsltParserContext;
@@ -342,20 +341,14 @@
 	    xsltAllocateExtra(ctxt->style);
     }
     if (op == XSLT_OP_PREDICATE) {
-	xmlXPathContextPtr xctxt;
+        int flags = 0;
 
-	if (ctxt->style != NULL)
-	    xctxt = xmlXPathNewContext(ctxt->style->doc);
-	else
-	    xctxt = xmlXPathNewContext(NULL);
 #ifdef XML_XPATH_NOVAR
 	if (novar != 0)
-	    xctxt->flags = XML_XPATH_NOVAR;
+	    flags = XML_XPATH_NOVAR;
 #endif
-	if (ctxt->style != NULL)
-	    xctxt->dict = ctxt->style->dict;
-	comp->steps[comp->nbStep].comp = xmlXPathCtxtCompile(xctxt, value);
-	xmlXPathFreeContext(xctxt);
+	comp->steps[comp->nbStep].comp = xsltXPathCompileFlags(ctxt->style,
+                value, flags);
 	if (comp->steps[comp->nbStep].comp == NULL) {
 	    xsltTransformError(NULL, ctxt->style, ctxt->elem,
 		    "Failed to compile predicate\n");
@@ -595,8 +588,7 @@
 	}
 	ix = 0;
 
-	if ((parent == NULL) || (node->doc == NULL) || isRVT ||
-            (comp->novar == 0))
+	if ((parent == NULL) || (node->doc == NULL) || isRVT)
 	    nocache = 1;
 
 	if (nocache == 0) {
@@ -1251,6 +1243,34 @@
     return(0);
 }
 
+/**
+ * xsltCompMatchClearCache:
+ * @ctxt:  a XSLT process context
+ * @comp: the precompiled pattern list
+ *
+ * Clear pattern match cache.
+ */
+void
+xsltCompMatchClearCache(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp) {
+    xsltStepOpPtr sel;
+    xmlXPathObjectPtr list;
+
+    if ((ctxt == NULL) || (comp == NULL))
+        return;
+
+    sel = &comp->steps[0];
+    list = (xmlXPathObjectPtr) XSLT_RUNTIME_EXTRA_LST(ctxt, sel->lenExtra);
+
+    if (list != NULL) {
+        xmlXPathFreeObject(list);
+
+        XSLT_RUNTIME_EXTRA_LST(ctxt, sel->lenExtra) = NULL;
+        XSLT_RUNTIME_EXTRA(ctxt, sel->previousExtra, ptr) = NULL;
+        XSLT_RUNTIME_EXTRA(ctxt, sel->indexExtra, ival) = 0;
+        XSLT_RUNTIME_EXTRA_FREE(ctxt, sel->lenExtra) = NULL;
+    }
+}
+
 /************************************************************************
  *									*
  *			Dedicated parser for templates			*
@@ -1795,9 +1815,7 @@
 	    PUSH(XSLT_OP_PARENT, NULL, NULL, novar);
 	    NEXT;
 	    SKIP_BLANKS;
-	    if ((CUR != 0) && (CUR != '|')) {
-		xsltCompileRelativePathPattern(ctxt, NULL, novar);
-	    }
+	    xsltCompileStepPattern(ctxt, NULL, novar);
 	} else {
 	    ctxt->error = 1;
 	}
@@ -1862,6 +1880,8 @@
 	    xsltCompileIdKeyPattern(ctxt, name, 1, novar, 0);
 	    xmlFree(name);
 	    name = NULL;
+            if (ctxt->error)
+                return;
 	    if ((CUR == '/') && (NXT(1) == '/')) {
 		PUSH(XSLT_OP_ANCESTOR, NULL, NULL, novar);
 		NEXT;
@@ -1972,7 +1992,6 @@
 		j++;
 	}
 	element->nsNr = j;
-        element->novar = novar;
 
 
 #ifdef WITH_XSLT_DEBUG_PATTERN
@@ -2137,8 +2156,15 @@
         xmlHashAddEntry2(style->namedTemplates, cur->name, cur->nameURI, cur);
     }
 
-    if (cur->match == NULL)
+    if (cur->match == NULL) {
+            if (cur->name == NULL) {
+                xsltTransformError(NULL, style, cur->elem,
+                    "xsl:template: need to specify match or name attribute\n");
+                style->errors++;
+                return(-1);
+            }
 	return(0);
+    }
 
     priority = cur->priority;
     pat = xsltCompilePatternInternal(cur->match, style->doc, cur->elem,
@@ -2364,6 +2390,7 @@
 		case XML_ELEMENT_NODE:
 		    if (node->name[0] == ' ')
 			break;
+                    /* Intentional fall-through */
 		case XML_ATTRIBUTE_NODE:
 		case XML_PI_NODE:
 		    name = node->name;
@@ -2401,7 +2428,7 @@
 	    list = NULL;
 	while (list != NULL) {
 	    if (xsltTestCompMatch(ctxt, list, node,
-			          ctxt->mode, ctxt->modeURI)) {
+			          ctxt->mode, ctxt->modeURI) == 1) {
 		ret = list->template;
 		priority = list->priority;
 		break;
@@ -2470,7 +2497,7 @@
 	while ((list != NULL) &&
 	       ((ret == NULL)  || (list->priority > priority))) {
 	    if (xsltTestCompMatch(ctxt, list, node,
-			          ctxt->mode, ctxt->modeURI)) {
+			          ctxt->mode, ctxt->modeURI) == 1) {
 		ret = list->template;
 		priority = list->priority;
 		break;
@@ -2487,7 +2514,7 @@
 	    while ((list != NULL) &&
 		   ((ret == NULL)  || (list->priority > priority))) {
 		if (xsltTestCompMatch(ctxt, list, node,
-				      ctxt->mode, ctxt->modeURI)) {
+				      ctxt->mode, ctxt->modeURI) == 1) {
 		    ret = list->template;
 		    priority = list->priority;
 		    break;
@@ -2500,7 +2527,7 @@
 	    while ((list != NULL) &&
 		   ((ret == NULL)  || (list->priority > priority))) {
 		if (xsltTestCompMatch(ctxt, list, node,
-				      ctxt->mode, ctxt->modeURI)) {
+				      ctxt->mode, ctxt->modeURI) == 1) {
 		    ret = list->template;
 		    priority = list->priority;
 		    break;
@@ -2515,7 +2542,7 @@
 	    while ((list != NULL) &&
 		   ((ret == NULL)  || (list->priority > priority))) {
 		if (xsltTestCompMatch(ctxt, list, node,
-				      ctxt->mode, ctxt->modeURI)) {
+				      ctxt->mode, ctxt->modeURI) == 1) {
 		    ret = list->template;
 		    priority = list->priority;
 		    break;
diff --git a/third_party/libxslt/src/libxslt/pattern.h b/third_party/libxslt/src/libxslt/pattern.h
index eb21be32..a0991c0c 100644
--- a/third_party/libxslt/src/libxslt/pattern.h
+++ b/third_party/libxslt/src/libxslt/pattern.h
@@ -45,6 +45,9 @@
 					 xmlNodePtr node,
 					 xsltCompMatchPtr comp);
 XSLTPUBFUN void XSLTCALL
+		xsltCompMatchClearCache	(xsltTransformContextPtr ctxt,
+					 xsltCompMatchPtr comp);
+XSLTPUBFUN void XSLTCALL
 		xsltNormalizeCompSteps	(void *payload,
 					 void *data,
 					 const xmlChar *name);
diff --git a/third_party/libxslt/src/libxslt/templates.c b/third_party/libxslt/src/libxslt/templates.c
index 88547ed8..48b73a5 100644
--- a/third_party/libxslt/src/libxslt/templates.c
+++ b/third_party/libxslt/src/libxslt/templates.c
@@ -332,7 +332,7 @@
 			nsNr = i;
 		    }
 		}
-		comp = xmlXPathCompile(expr);
+		comp = xmlXPathCtxtCompile(ctxt->xpathCtxt, expr);
                 val = xsltEvalXPathStringNs(ctxt, comp, nsNr, nsList);
 		xmlXPathFreeCompExpr(comp);
 		xmlFree(expr);
diff --git a/third_party/libxslt/src/libxslt/transform.c b/third_party/libxslt/src/libxslt/transform.c
index 0636dbd..d1c4793 100644
--- a/third_party/libxslt/src/libxslt/transform.c
+++ b/third_party/libxslt/src/libxslt/transform.c
@@ -232,6 +232,8 @@
         ctxt->vars = NULL;
 }
 
+#ifdef WITH_PROFILER
+
 /**
  * profPush:
  * @ctxt: the transformation context
@@ -340,6 +342,8 @@
     }
 }
 
+#endif /* WITH_PROFILER */
+
 /**
  * xsltPreCompEval:
  * @ctxt: transform context
@@ -1090,6 +1094,8 @@
 	    if ((copy->content = xmlStrdup(cur->content)) == NULL)
 		return NULL;
 	}
+
+	ctxt->lasttext = NULL;
     } else {
         /*
 	 * normal processing. keep counters to extend the text node
@@ -2205,6 +2211,7 @@
     }
 }
 
+#ifdef WITH_DEBUGGER
 static xmlNodePtr
 xsltDebuggerStartSequenceConstructor(xsltTransformContextPtr ctxt,
 				     xmlNodePtr contextNode,
@@ -2240,6 +2247,7 @@
     }
     return(debugedNode);
 }
+#endif /* WITH_DEBUGGER */
 
 /**
  * xsltLocalVariablePush:
@@ -2411,6 +2419,17 @@
     */
     cur = list;
     while (cur != NULL) {
+        if (ctxt->opLimit != 0) {
+            if (ctxt->opCount >= ctxt->opLimit) {
+		xsltTransformError(ctxt, NULL, cur,
+		    "xsltApplySequenceConstructor: "
+                    "Operation limit exceeded\n");
+	        ctxt->state = XSLT_STATE_STOPPED;
+                goto error;
+            }
+            ctxt->opCount += 1;
+        }
+
         ctxt->inst = cur;
 
 #ifdef WITH_DEBUGGER
@@ -2867,6 +2886,7 @@
                 /*
                  * Search if there are fallbacks
                  */
+                ctxt->insert = insert;
                 child = cur->children;
                 while (child != NULL) {
                     if ((IS_XSLT_ELEM(child)) &&
@@ -2878,6 +2898,7 @@
                     }
                     child = child->next;
                 }
+                ctxt->insert = oldInsert;
 
                 if (!found) {
                     xsltTransformError(ctxt, NULL, cur,
@@ -3086,10 +3107,12 @@
 		      xsltStackElemPtr withParams)
 {
     int oldVarsBase = 0;
-    long start = 0;
     xmlNodePtr cur;
     xsltStackElemPtr tmpParam = NULL;
     xmlDocPtr oldUserFragmentTop;
+#ifdef WITH_PROFILER
+    long start = 0;
+#endif
 
 #ifdef XSLT_REFACTORED
     xsltStyleItemParamPtr iparam;
@@ -3144,12 +3167,16 @@
     ctxt->varsBase = ctxt->varsNr;
 
     ctxt->node = contextNode;
+
+#ifdef WITH_PROFILER
     if (ctxt->profile) {
 	templ->nbCalls++;
 	start = xsltTimestamp();
 	profPush(ctxt, 0);
 	profCallgraphAdd(templ, ctxt->templ);
     }
+#endif
+
     /*
     * Push the xsl:template declaration onto the stack.
     */
@@ -3257,6 +3284,8 @@
     * Pop the xsl:template declaration from the stack.
     */
     templPop(ctxt);
+
+#ifdef WITH_PROFILER
     if (ctxt->profile) {
 	long spent, child, total, end;
 
@@ -3277,6 +3306,7 @@
 	if (ctxt->profNr > 0)
 	    ctxt->profTab[ctxt->profNr - 1] += total;
     }
+#endif
 
 #ifdef WITH_DEBUGGER
     if ((ctxt->debugStatus != XSLT_DEBUG_NONE) && (addCallResult)) {
@@ -3434,7 +3464,7 @@
 		 * XPath expression.
 		 * (see http://xml.apache.org/xalan-j/extensionslib.html#redirect)
 		 */
-		cmp = xmlXPathCompile(URL);
+		cmp = xmlXPathCtxtCompile(ctxt->xpathCtxt, URL);
                 val = xsltEvalXPathString(ctxt, cmp);
 		xmlXPathFreeCompExpr(cmp);
 		xmlFree(URL);
@@ -4998,7 +5028,7 @@
 			    break;
 			}
 		    }
-		    /* no break on purpose */
+		    /* Intentional fall-through */
 		case XML_ELEMENT_NODE:
 		case XML_DOCUMENT_NODE:
 		case XML_HTML_DOCUMENT_NODE:
@@ -5898,8 +5928,16 @@
     ctxt->initialContextDoc = doc;
     ctxt->initialContextNode = (xmlNodePtr) doc;
 
-    if (profile != NULL)
+    if (profile != NULL) {
+#ifdef WITH_PROFILER
         ctxt->profile = 1;
+#else
+        xsltTransformError(ctxt, NULL, (xmlNodePtr) doc,
+                "xsltApplyStylesheetInternal: "
+                "libxslt compiled without profiler\n");
+        goto error;
+#endif
+    }
 
     if (output != NULL)
         ctxt->outputFile = output;
@@ -6174,9 +6212,12 @@
         }
     }
     xmlXPathFreeNodeSet(ctxt->nodeList);
+
+#ifdef WITH_PROFILER
     if (profile != NULL) {
         xsltSaveProfiling(ctxt, profile);
     }
+#endif
 
     /*
      * Be pedantic.
diff --git a/third_party/libxslt/src/libxslt/variables.c b/third_party/libxslt/src/libxslt/variables.c
index 8f88e57..4c972a4 100644
--- a/third_party/libxslt/src/libxslt/variables.c
+++ b/third_party/libxslt/src/libxslt/variables.c
@@ -205,7 +205,8 @@
  * This function is unsupported in newer releases of libxslt.
  */
 int
-xsltExtensionInstructionResultFinalize(xsltTransformContextPtr ctxt)
+xsltExtensionInstructionResultFinalize(
+        xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED)
 {
     xmlGenericError(xmlGenericErrorContext,
             "xsltExtensionInstructionResultFinalize is unsupported "
@@ -230,8 +231,9 @@
  * libxslt.
  */
 int
-xsltExtensionInstructionResultRegister(xsltTransformContextPtr ctxt,
-				       xmlXPathObjectPtr obj)
+xsltExtensionInstructionResultRegister(
+        xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED,
+	xmlXPathObjectPtr obj ATTRIBUTE_UNUSED)
 {
     return(0);
 }
@@ -858,7 +860,7 @@
 	if ((comp != NULL) && (comp->comp != NULL)) {
 	    xpExpr = comp->comp;
 	} else {
-	    xpExpr = xmlXPathCompile(variable->select);
+	    xpExpr = xmlXPathCtxtCompile(ctxt->xpathCtxt, variable->select);
 	}
 	if (xpExpr == NULL)
 	    return(NULL);
@@ -1099,7 +1101,7 @@
 	if ((comp != NULL) && (comp->comp != NULL)) {
 	    xpExpr = comp->comp;
 	} else {
-	    xpExpr = xmlXPathCompile(elem->select);
+	    xpExpr = xmlXPathCtxtCompile(ctxt->xpathCtxt, elem->select);
 	}
 	if (xpExpr == NULL)
 	    goto error;
@@ -1550,7 +1552,7 @@
 
     result = NULL;
     if (eval != 0) {
-        xpExpr = xmlXPathCompile(value);
+        xpExpr = xmlXPathCtxtCompile(ctxt->xpathCtxt, value);
 	if (xpExpr != NULL) {
 	    xmlDocPtr oldXPDoc;
 	    xmlNodePtr oldXPContextNode;
@@ -1967,7 +1969,7 @@
  * @inst:  the xsl:with-param instruction element
  *
  * Processes an xsl:with-param instruction at transformation time.
- * The value is compute, but not recorded.
+ * The value is computed, but not recorded.
  * NOTE that this is also called with an *xsl:param* element
  * from exsltFuncFunctionFunction().
  *
diff --git a/third_party/libxslt/src/libxslt/xslt.c b/third_party/libxslt/src/libxslt/xslt.c
index a234eb7..7a1ce011 100644
--- a/third_party/libxslt/src/libxslt/xslt.c
+++ b/third_party/libxslt/src/libxslt/xslt.c
@@ -592,10 +592,6 @@
     }
     if (cctxt->tmpList != NULL)
 	xsltPointerListFree(cctxt->tmpList);
-#ifdef XSLT_REFACTORED_XPATHCOMP
-    if (cctxt->xpathCtxt != NULL)
-	xmlXPathFreeContext(cctxt->xpathCtxt);
-#endif
     if (cctxt->nsAliases != NULL)
 	xsltFreeNsAliasList(cctxt->nsAliases);
 
@@ -631,15 +627,6 @@
     if (ret->tmpList == NULL) {
 	goto internal_err;
     }
-#ifdef XSLT_REFACTORED_XPATHCOMP
-    /*
-    * Create the XPath compilation context in order
-    * to speed up precompilation of XPath expressions.
-    */
-    ret->xpathCtxt = xmlXPathNewContext(NULL);
-    if (ret->xpathCtxt == NULL)
-	goto internal_err;
-#endif
 
     return(ret);
 
@@ -761,14 +748,15 @@
 #endif
 
 /**
- * xsltNewStylesheet:
+ * xsltNewStylesheetInternal:
+ * @parent:  the parent stylesheet or NULL
  *
  * Create a new XSLT Stylesheet
  *
  * Returns the newly allocated xsltStylesheetPtr or NULL in case of error
  */
-xsltStylesheetPtr
-xsltNewStylesheet(void) {
+static xsltStylesheetPtr
+xsltNewStylesheetInternal(xsltStylesheetPtr parent) {
     xsltStylesheetPtr ret = NULL;
 
     ret = (xsltStylesheetPtr) xmlMalloc(sizeof(xsltStylesheet));
@@ -779,6 +767,7 @@
     }
     memset(ret, 0, sizeof(xsltStylesheet));
 
+    ret->parent = parent;
     ret->omitXmlDeclaration = -1;
     ret->standalone = -1;
     ret->decimalFormat = xsltNewDecimalFormat(NULL, NULL);
@@ -799,6 +788,21 @@
 	"creating dictionary for stylesheet\n");
 #endif
 
+    if (parent == NULL) {
+        ret->principal = ret;
+
+        ret->xpathCtxt = xmlXPathNewContext(NULL);
+        if (ret->xpathCtxt == NULL) {
+            xsltTransformError(NULL, NULL, NULL,
+                    "xsltNewStylesheet: xmlXPathNewContext failed\n");
+            goto internal_err;
+        }
+        if (xmlXPathContextSetCache(ret->xpathCtxt, 1, -1, 0) == -1)
+            goto internal_err;
+    } else {
+        ret->principal = parent->principal;
+    }
+
     xsltInit();
 
     return(ret);
@@ -810,6 +814,18 @@
 }
 
 /**
+ * xsltNewStylesheet:
+ *
+ * Create a new XSLT Stylesheet
+ *
+ * Returns the newly allocated xsltStylesheetPtr or NULL in case of error
+ */
+xsltStylesheetPtr
+xsltNewStylesheet(void) {
+    return xsltNewStylesheetInternal(NULL);
+}
+
+/**
  * xsltAllocateExtra:
  * @style:  an XSLT stylesheet
  *
@@ -1065,6 +1081,9 @@
 #endif
     xmlDictFree(style->dict);
 
+    if (style->xpathCtxt != NULL)
+	xmlXPathFreeContext(style->xpathCtxt);
+
     memset(style, -1, sizeof(xsltStylesheet));
     xmlFree(style);
 }
@@ -1349,8 +1368,8 @@
 			*  via the stylesheet's error handling.
 			*/
 			xsltTransformError(NULL, style, cur,
-			    "Attribute 'cdata-section-elements': The value "
-			    "'%s' is not a valid QName.\n", element);
+			    "Attribute 'cdata-section-elements': "
+			    "Not a valid QName.\n");
 			style->errors++;
 		    } else {
 			xmlNsPtr ns;
@@ -5479,7 +5498,7 @@
 
 /**
  * xsltIncludeComp:
- * @cctxt: the compilation contenxt
+ * @cctxt: the compilation context
  * @node:  the xsl:include node
  *
  * Process the xslt include node on the source node
@@ -6532,54 +6551,67 @@
     if (doc == NULL)
 	return(NULL);
 
-    retStyle = xsltNewStylesheet();
+    retStyle = xsltNewStylesheetInternal(parentStyle);
     if (retStyle == NULL)
 	return(NULL);
-    /*
-    * Set the importing stylesheet module; also used to detect recursion.
-    */
-    retStyle->parent = parentStyle;
+
+    if (xsltParseStylesheetUser(retStyle, doc) != 0) {
+        xsltFreeStylesheet(retStyle);
+        return(NULL);
+    }
+
+    return(retStyle);
+}
+
+/**
+ * xsltParseStylesheetUser:
+ * @style: pointer to the stylesheet
+ * @doc:  an xmlDoc parsed XML
+ *
+ * Parse an XSLT stylesheet with a user-provided stylesheet struct.
+ *
+ * Returns 0 if successful, -1 in case of error.
+ */
+int
+xsltParseStylesheetUser(xsltStylesheetPtr style, xmlDocPtr doc) {
+    if ((style == NULL) || (doc == NULL))
+	return(-1);
+
     /*
     * Adjust the string dict.
     */
     if (doc->dict != NULL) {
-        xmlDictFree(retStyle->dict);
-	retStyle->dict = doc->dict;
+        xmlDictFree(style->dict);
+	style->dict = doc->dict;
 #ifdef WITH_XSLT_DEBUG
         xsltGenericDebug(xsltGenericDebugContext,
 	    "reusing dictionary from %s for stylesheet\n",
 	    doc->URL);
 #endif
-	xmlDictReference(retStyle->dict);
+	xmlDictReference(style->dict);
     }
 
     /*
     * TODO: Eliminate xsltGatherNamespaces(); we must not restrict
     *  the stylesheet to containt distinct namespace prefixes.
     */
-    xsltGatherNamespaces(retStyle);
+    xsltGatherNamespaces(style);
 
 #ifdef XSLT_REFACTORED
     {
 	xsltCompilerCtxtPtr cctxt;
 	xsltStylesheetPtr oldCurSheet;
 
-	if (parentStyle == NULL) {
+	if (style->parent == NULL) {
 	    xsltPrincipalStylesheetDataPtr principalData;
 	    /*
-	    * Principal stylesheet
-	    * --------------------
-	    */
-	    retStyle->principal = retStyle;
-	    /*
 	    * Create extra data for the principal stylesheet.
 	    */
 	    principalData = xsltNewPrincipalStylesheetData();
 	    if (principalData == NULL) {
-		xsltFreeStylesheet(retStyle);
-		return(NULL);
+		return(-1);
 	    }
-	    retStyle->principalData = principalData;
+	    style->principalData = principalData;
 	    /*
 	    * Create the compilation context
 	    * ------------------------------
@@ -6587,14 +6619,13 @@
 	    * This is currently the only function where the
 	    * compilation context is created.
 	    */
-	    cctxt = xsltCompilationCtxtCreate(retStyle);
+	    cctxt = xsltCompilationCtxtCreate(style);
 	    if (cctxt == NULL) {
-		xsltFreeStylesheet(retStyle);
-		return(NULL);
+		return(-1);
 	    }
-	    retStyle->compCtxt = (void *) cctxt;
-	    cctxt->style = retStyle;
-	    cctxt->dict = retStyle->dict;
+	    style->compCtxt = (void *) cctxt;
+	    cctxt->style = style;
+	    cctxt->dict = style->dict;
 	    cctxt->psData = principalData;
 	    /*
 	    * Push initial dummy node info.
@@ -6605,22 +6636,21 @@
 	    /*
 	    * Imported stylesheet.
 	    */
-	    retStyle->principal = parentStyle->principal;
-	    cctxt = parentStyle->compCtxt;
-	    retStyle->compCtxt = cctxt;
+	    cctxt = style->parent->compCtxt;
+	    style->compCtxt = cctxt;
 	}
 	/*
 	* Save the old and set the current stylesheet structure in the
 	* compilation context.
 	*/
 	oldCurSheet = cctxt->style;
-	cctxt->style = retStyle;
+	cctxt->style = style;
 
-	retStyle->doc = doc;
-	xsltParseStylesheetProcess(retStyle, doc);
+	style->doc = doc;
+	xsltParseStylesheetProcess(style, doc);
 
 	cctxt->style = oldCurSheet;
-	if (parentStyle == NULL) {
+	if (style->parent == NULL) {
 	    /*
 	    * Pop the initial dummy node info.
 	    */
@@ -6631,65 +6661,54 @@
 	    * stylesheets.
 	    * TODO: really?
 	    */
-	    /* retStyle->compCtxt = NULL; */
+	    /* style->compCtxt = NULL; */
 	}
-	/*
-	* Free the stylesheet if there were errors.
-	*/
-	if (retStyle != NULL) {
-	    if (retStyle->errors != 0) {
-#ifdef XSLT_REFACTORED_XSLT_NSCOMP
-		/*
-		* Restore all changes made to namespace URIs of ns-decls.
-		*/
-		if (cctxt->psData->nsMap)
-		    xsltRestoreDocumentNamespaces(cctxt->psData->nsMap, doc);
-#endif
-		/*
-		* Detach the doc from the stylesheet; otherwise the doc
-		* will be freed in xsltFreeStylesheet().
-		*/
-		retStyle->doc = NULL;
-		/*
-		* Cleanup the doc if its the main stylesheet.
-		*/
-		if (parentStyle == NULL) {
-		    xsltCleanupStylesheetTree(doc, xmlDocGetRootElement(doc));
-		    if (retStyle->compCtxt != NULL) {
-			xsltCompilationCtxtFree(retStyle->compCtxt);
-			retStyle->compCtxt = NULL;
-		    }
-		}
 
-		xsltFreeStylesheet(retStyle);
-		retStyle = NULL;
-	    }
-	}
+#ifdef XSLT_REFACTORED_XSLT_NSCOMP
+        if (style->errors != 0) {
+            /*
+            * Restore all changes made to namespace URIs of ns-decls.
+            */
+            if (cctxt->psData->nsMap)
+                xsltRestoreDocumentNamespaces(cctxt->psData->nsMap, doc);
+        }
+#endif
+
+        if (style->parent == NULL) {
+            xsltCompilationCtxtFree(style->compCtxt);
+            style->compCtxt = NULL;
+        }
     }
 
 #else /* XSLT_REFACTORED */
     /*
     * Old behaviour.
     */
-    retStyle->doc = doc;
-    if (xsltParseStylesheetProcess(retStyle, doc) == NULL) {
-		retStyle->doc = NULL;
-		xsltFreeStylesheet(retStyle);
-		retStyle = NULL;
-    }
-    if (retStyle != NULL) {
-	if (retStyle->errors != 0) {
-	    retStyle->doc = NULL;
-	    if (parentStyle == NULL)
-		xsltCleanupStylesheetTree(doc,
-		    xmlDocGetRootElement(doc));
-	    xsltFreeStylesheet(retStyle);
-	    retStyle = NULL;
-	}
+    style->doc = doc;
+    if (xsltParseStylesheetProcess(style, doc) == NULL) {
+        style->doc = NULL;
+        return(-1);
     }
 #endif /* else of XSLT_REFACTORED */
 
-    return(retStyle);
+    if (style->errors != 0) {
+        /*
+        * Detach the doc from the stylesheet; otherwise the doc
+        * will be freed in xsltFreeStylesheet().
+        */
+        style->doc = NULL;
+        /*
+        * Cleanup the doc if its the main stylesheet.
+        */
+        if (style->parent == NULL)
+            xsltCleanupStylesheetTree(doc, xmlDocGetRootElement(doc));
+        return(-1);
+    }
+
+    if (style->parent == NULL)
+        xsltResolveStylesheetAttributeSet(style);
+
+    return(0);
 }
 
 /**
@@ -6707,27 +6726,9 @@
 
 xsltStylesheetPtr
 xsltParseStylesheetDoc(xmlDocPtr doc) {
-    xsltStylesheetPtr ret;
-
     xsltInitGlobals();
 
-    ret = xsltParseStylesheetImportedDoc(doc, NULL);
-    if (ret == NULL)
-	return(NULL);
-
-    xsltResolveStylesheetAttributeSet(ret);
-#ifdef XSLT_REFACTORED
-    /*
-    * Free the compilation context.
-    * TODO: Check if it's better to move this cleanup to
-    *   xsltParseStylesheetImportedDoc().
-    */
-    if (ret->compCtxt != NULL) {
-	xsltCompilationCtxtFree(XSLT_CCTXT(ret));
-	ret->compCtxt = NULL;
-    }
-#endif
-    return(ret);
+    return(xsltParseStylesheetImportedDoc(doc, NULL));
 }
 
 /**
diff --git a/third_party/libxslt/src/libxslt/xsltInternals.h b/third_party/libxslt/src/libxslt/xsltInternals.h
index f9066ad..14a971a 100644
--- a/third_party/libxslt/src/libxslt/xsltInternals.h
+++ b/third_party/libxslt/src/libxslt/xsltInternals.h
@@ -105,14 +105,6 @@
  */
 /* #define XSLT_REFACTORED_XSLT_NSCOMP */
 
-/**
- * XSLT_REFACTORED_XPATHCOMP:
- *
- * Internal define to enable the optimization of the
- * compilation of XPath expressions.
- */
-#define XSLT_REFACTORED_XPATHCOMP
-
 #ifdef XSLT_REFACTORED_XSLT_NSCOMP
 
 extern const xmlChar *xsltConstNamespaceNameXSLT;
@@ -478,7 +470,7 @@
  */
 struct _xsltElemPreComp {
     xsltElemPreCompPtr next;		/* next item in the global chained
-					   list hold by xsltStylesheet. */
+					   list held by xsltStylesheet. */
     xsltStyleType type;		/* type of the element */
     xsltTransformFunction func;	/* handling function */
     xmlNodePtr inst;			/* the node in the stylesheet's tree
@@ -590,7 +582,7 @@
  */
 struct _xsltStylePreComp {
     xsltElemPreCompPtr next;    /* next item in the global chained
-				   list hold by xsltStylesheet */
+				   list held by xsltStylesheet */
     xsltStyleType type;         /* type of the item */
     xsltTransformFunction func; /* handling function */
     xmlNodePtr inst;		/* the node in the stylesheet's tree
@@ -1346,9 +1338,6 @@
     */
     int strict;
     xsltPrincipalStylesheetDataPtr psData;
-#ifdef XSLT_REFACTORED_XPATHCOMP
-    xmlXPathContextPtr xpathCtxt;
-#endif
     xsltStyleItemUknownPtr unknownItem;
     int hasNsAliases; /* Indicator if there was an xsl:namespace-alias. */
     xsltNsAliasPtr nsAliases;
@@ -1642,6 +1631,8 @@
     int forwards_compatible;
 
     xmlHashTablePtr namedTemplates; /* hash table of named templates */
+
+    xmlXPathContextPtr xpathCtxt;
 };
 
 typedef struct _xsltTransformCache xsltTransformCache;
@@ -1789,6 +1780,8 @@
     int depth;          /* Needed to catch recursions */
     int maxTemplateDepth;
     int maxTemplateVars;
+    unsigned long opLimit;
+    unsigned long opCount;
 };
 
 /**
@@ -1871,6 +1864,9 @@
 XSLTPUBFUN xsltStylesheetPtr XSLTCALL
 			xsltParseStylesheetImportedDoc(xmlDocPtr doc,
 						xsltStylesheetPtr style);
+XSLTPUBFUN int XSLTCALL
+			xsltParseStylesheetUser(xsltStylesheetPtr style,
+						xmlDocPtr doc);
 XSLTPUBFUN xsltStylesheetPtr XSLTCALL
 			xsltLoadStylesheetPI	(xmlDocPtr doc);
 XSLTPUBFUN void XSLTCALL
diff --git a/third_party/libxslt/src/libxslt/xsltconfig.h b/third_party/libxslt/src/libxslt/xsltconfig.h
index 6cd7aa5..e10800d9 100644
--- a/third_party/libxslt/src/libxslt/xsltconfig.h
+++ b/third_party/libxslt/src/libxslt/xsltconfig.h
@@ -20,21 +20,21 @@
  *
  * the version string like "1.2.3"
  */
-#define LIBXSLT_DOTTED_VERSION "1.1.33"
+#define LIBXSLT_DOTTED_VERSION "1.1.34"
 
 /**
  * LIBXSLT_VERSION:
  *
  * the version number: 1.2.3 value is 10203
  */
-#define LIBXSLT_VERSION 10133
+#define LIBXSLT_VERSION 10134
 
 /**
  * LIBXSLT_VERSION_STRING:
  *
  * the version number string, 1.2.3 value is "10203"
  */
-#define LIBXSLT_VERSION_STRING "10133"
+#define LIBXSLT_VERSION_STRING "10134"
 
 /**
  * LIBXSLT_VERSION_EXTRA:
@@ -111,6 +111,19 @@
 #endif
 
 /**
+ * WITH_PROFILER:
+ *
+ * Activate the compilation of the profiler. Speed penalty
+ * is insignifiant.
+ * On by default unless --without-profiler is passed to configure
+ */
+#if 1
+#ifndef WITH_PROFILER
+#define WITH_PROFILER
+#endif
+#endif
+
+/**
  * WITH_MODULES:
  *
  * Whether module support is configured into libxslt
@@ -120,7 +133,7 @@
 #ifndef WITH_MODULES
 #define WITH_MODULES
 #endif
-#define LIBXSLT_DEFAULT_PLUGINS_PATH() "NULL"
+#define LIBXSLT_DEFAULT_PLUGINS_PATH() "/usr/local/lib/libxslt-plugins"
 #endif
 
 /**
diff --git a/third_party/libxslt/src/libxslt/xsltconfig.h.in b/third_party/libxslt/src/libxslt/xsltconfig.h.in
index f381ded..726e444 100644
--- a/third_party/libxslt/src/libxslt/xsltconfig.h.in
+++ b/third_party/libxslt/src/libxslt/xsltconfig.h.in
@@ -111,6 +111,19 @@
 #endif
 
 /**
+ * WITH_PROFILER:
+ *
+ * Activate the compilation of the profiler. Speed penalty
+ * is insignifiant.
+ * On by default unless --without-profiler is passed to configure
+ */
+#if @WITH_PROFILER@
+#ifndef WITH_PROFILER
+#define WITH_PROFILER
+#endif
+#endif
+
+/**
  * WITH_MODULES:
  *
  * Whether module support is configured into libxslt
diff --git a/third_party/libxslt/src/libxslt/xsltutils.c b/third_party/libxslt/src/libxslt/xsltutils.c
index adefde9..94097b9 100644
--- a/third_party/libxslt/src/libxslt/xsltutils.c
+++ b/third_party/libxslt/src/libxslt/xsltutils.c
@@ -1578,7 +1578,15 @@
 	    xmlOutputBufferWriteString(buf, "?>\n");
 	}
 	if (result->children != NULL) {
-	    xmlNodePtr child = result->children;
+            xmlNodePtr children = result->children;
+	    xmlNodePtr child = children;
+
+            /*
+             * Hack to avoid quadratic behavior when scanning
+             * result->children in xmlGetIntSubset called by
+             * xmlNodeDumpOutput.
+             */
+            result->children = NULL;
 
 	    while (child != NULL) {
 		xmlNodeDumpOutput(buf, result, child, 0, (indent == 1),
@@ -1591,6 +1599,8 @@
 	    }
 	    if (indent)
 			xmlOutputBufferWriteString(buf, "\n");
+
+            result->children = children;
 	}
 	xmlOutputBufferFlush(buf);
     }
@@ -1788,6 +1798,8 @@
     return 0;
 }
 
+#ifdef WITH_PROFILER
+
 /************************************************************************
  *									*
  *		Generating profiling information			*
@@ -2265,6 +2277,8 @@
     return ret;
 }
 
+#endif /* WITH_PROFILER */
+
 /************************************************************************
  *									*
  *		Hooks for libxml2 XPath					*
@@ -2288,25 +2302,7 @@
     xmlXPathCompExprPtr ret;
 
     if (style != NULL) {
-#ifdef XSLT_REFACTORED_XPATHCOMP
-	if (XSLT_CCTXT(style)) {
-	    /*
-	    * Proposed by Jerome Pesenti
-	    * --------------------------
-	    * For better efficiency we'll reuse the compilation
-	    * context's XPath context. For the common stylesheet using
-	    * XPath expressions this will reduce compilation time to
-	    * about 50%.
-	    *
-	    * See http://mail.gnome.org/archives/xslt/2006-April/msg00037.html
-	    */
-	    xpathCtxt = XSLT_CCTXT(style)->xpathCtxt;
-	    xpathCtxt->doc = style->doc;
-	} else
-	    xpathCtxt = xmlXPathNewContext(style->doc);
-#else
-	xpathCtxt = xmlXPathNewContext(style->doc);
-#endif
+        xpathCtxt = style->principal->xpathCtxt;
 	if (xpathCtxt == NULL)
 	    return NULL;
 	xpathCtxt->dict = style->dict;
@@ -2322,13 +2318,9 @@
     */
     ret = xmlXPathCtxtCompile(xpathCtxt, str);
 
-#ifdef XSLT_REFACTORED_XPATHCOMP
-    if ((style == NULL) || (! XSLT_CCTXT(style))) {
+    if (style == NULL) {
 	xmlXPathFreeContext(xpathCtxt);
     }
-#else
-    xmlXPathFreeContext(xpathCtxt);
-#endif
     /*
      * TODO: there is a lot of optimizations which should be possible
      *       like variable slot precomputations, function precomputations, etc.
@@ -2358,6 +2350,23 @@
  *									*
  ************************************************************************/
 
+int xslDebugStatus;
+
+/**
+ * xsltGetDebuggerStatus:
+ *
+ * Get xslDebugStatus.
+ *
+ * Returns the value of xslDebugStatus.
+ */
+int
+xsltGetDebuggerStatus(void)
+{
+    return(xslDebugStatus);
+}
+
+#ifdef WITH_DEBUGGER
+
 /*
  * There is currently only 3 debugging callback defined
  * Debugger callbacks are disabled by default
@@ -2378,8 +2387,6 @@
     NULL  /* drop */
 };
 
-int xslDebugStatus;
-
 /**
  * xsltSetDebuggerStatus:
  * @value : the value to be set
@@ -2393,19 +2400,6 @@
 }
 
 /**
- * xsltGetDebuggerStatus:
- *
- * Get xslDebugStatus.
- *
- * Returns the value of xslDebugStatus.
- */
-int
-xsltGetDebuggerStatus(void)
-{
-    return(xslDebugStatus);
-}
-
-/**
  * xsltSetDebuggerCallbacks:
  * @no : number of callbacks
  * @block : the block of callbacks
@@ -2479,3 +2473,5 @@
 	xsltDebuggerCurrentCallbacks.drop();
 }
 
+#endif /* WITH_DEBUGGER */
+
diff --git a/third_party/libxslt/src/libxslt/xsltutils.h b/third_party/libxslt/src/libxslt/xsltutils.h
index 789865a..ea6c374 100644
--- a/third_party/libxslt/src/libxslt/xsltutils.h
+++ b/third_party/libxslt/src/libxslt/xsltutils.h
@@ -80,7 +80,7 @@
       ((n)->type == XML_PI_NODE)))
 
 /*
- * Our own version of namespaced atributes lookup.
+ * Our own version of namespaced attributes lookup.
  */
 XSLTPUBFUN xmlChar * XSLTCALL
 		xsltGetNsProp	(xmlNodePtr node,
diff --git a/third_party/libxslt/src/win32/libxslt.def.src b/third_party/libxslt/src/win32/libxslt.def.src
index fe7e767c..b4846a6 100644
--- a/third_party/libxslt/src/win32/libxslt.def.src
+++ b/third_party/libxslt/src/win32/libxslt.def.src
@@ -44,6 +44,7 @@
 xsltCleanupGlobals
 xsltCleanupTemplates
 xsltComment
+xsltCompMatchClearCache
 xsltCompileAttr
 xsltCompilePattern
 xsltComputeSortResult
@@ -176,6 +177,7 @@
 xsltParseStylesheetOutput
 xsltParseStylesheetParam
 xsltParseStylesheetProcess
+xsltParseStylesheetUser
 xsltParseStylesheetVariable
 xsltParseTemplateContent
 xsltPointerListAddSize
diff --git a/third_party/libxslt/src/xsltConf.sh.in b/third_party/libxslt/src/xsltConf.sh.in
index 666774b..f7e8fa1 100644
--- a/third_party/libxslt/src/xsltConf.sh.in
+++ b/third_party/libxslt/src/xsltConf.sh.in
@@ -3,5 +3,6 @@
 #
 XSLT_LIBDIR="@XSLT_LIBDIR@"
 XSLT_LIBS="@XSLT_LIBS@"
+XSLT_PRIVATE_LIBS="@XSLT_PRIVATE_LIBS@"
 XSLT_INCLUDEDIR="@XSLT_INCLUDEDIR@"
 MODULE_VERSION="xslt-@VERSION@"
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 1b82a685..248013e4 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -1844,6 +1844,10 @@
 
     'official_goma_mac_perf': [
       'official', 'goma', 'no_keystone_registration_framework',
+      # The mac perf bots can't use the 10.15 SDK yet.
+      # Remove this once they've been upgraded to versions of MacOS + xcode
+      # that support the 10.15 SDK. See https://crbug.com/1023913 for more.
+      'mac_sdk_10_14',
     ],
 
     'official_goma_perf': [
@@ -2352,6 +2356,10 @@
       'gn_args': 'mac_deterministic_build=true',
     },
 
+    'mac_sdk_10_14': {
+      'gn_args': 'mac_sdk_official_version="10.14"',
+    },
+
     'mac_strip': {
       'gn_args': 'enable_stripping=true',
     },
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 2b54a42..61db5d8 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -25994,6 +25994,7 @@
   <int value="67" label="PublicKeyCredentials"/>
   <int value="68" label="Clipboard"/>
   <int value="69" label="ClientHintUAMobile"/>
+  <int value="70" label="FontAccess"/>
 </enum>
 
 <enum name="FeaturePolicyImageCompressionFormat">
@@ -36399,6 +36400,7 @@
       label="ProcessSharingWithStrictSiteInstances:disabled"/>
   <int value="-1895719323" label="VrBrowsingTabsView:enabled"/>
   <int value="-1894699049" label="AudioFocusEnforcement:disabled"/>
+  <int value="-1894054576" label="FontAccess:enabled"/>
   <int value="-1893668420"
       label="AutofillSaveCreditCardUsesStrikeSystem:enabled"/>
   <int value="-1893019071" label="CSSOMViewScrollCoordinates:disabled"/>
@@ -37419,6 +37421,7 @@
   <int value="-667018797"
       label="OmniboxUIExperimentBlueTitlesAndGrayUrlsOnPageSuggestions:disabled"/>
   <int value="-666508951" label="CrOSContainer:enabled"/>
+  <int value="-665514294" label="FontAccess:disabled"/>
   <int value="-663476391" label="enable-pixel-canvas-recording:enabled"/>
   <int value="-662720891" label="PreviewsCoinFlipHoldback_UKMOnly:enabled"/>
   <int value="-662064703" label="MediaSessionService:enabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 88b6186..243713f3 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -15745,6 +15745,12 @@
     The idea behind this elaborated unit is that the bigger the area of a canvas
     the longer the operation GetImageData takes, so we want a way to measure the
     overall performance regardless of the size of the canvas.
+
+    Warning: This metric may include reports from clients with low-resolution
+    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
+    will cause this metric to have an abnormal distribution. When considering
+    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
+    solution.
   </summary>
 </histogram>
 
@@ -15846,6 +15852,12 @@
     The idea behind this elaborated unit is that the bigger the area of a canvas
     the longer the operation PutImageData takes, so we want a way to measure the
     overall performance regardless of the size of the canvas.
+
+    Warning: This metric may include reports from clients with low-resolution
+    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
+    will cause this metric to have an abnormal distribution. When considering
+    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
+    solution.
   </summary>
 </histogram>
 
@@ -15857,6 +15869,12 @@
     Records the CPU, GPU and combined raster time for a random sampling of
     canvas frames for accelerated and deferred canvases. Records wall time for a
     random sampling of unaccelerated canvases.
+
+    Warning: This metric may include reports from clients with low-resolution
+    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
+    will cause this metric to have an abnormal distribution. When considering
+    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
+    solution.
   </summary>
 </histogram>
 
@@ -16055,6 +16073,12 @@
     The idea behind this unit is that the bigger the area of a canvas the longer
     the operation ToDataURL takes, so we want a way to measure the overall
     performance regardless of the size of the canvas.
+
+    Warning: This metric may include reports from clients with low-resolution
+    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
+    will cause this metric to have an abnormal distribution. When considering
+    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
+    solution.
   </summary>
 </histogram>
 
@@ -20935,6 +20959,12 @@
   <summary>
     Time spent in microseconds to perform calls to measure TextMetrics for
     Canvas2d. It's measured each time TextMetrics is called.
+
+    Warning: This metric may include reports from clients with low-resolution
+    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
+    will cause this metric to have an abnormal distribution. When considering
+    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
+    solution.
   </summary>
 </histogram>
 
@@ -20945,6 +20975,12 @@
   <summary>
     Time spent in microseconds to perform calls to SetFont in Canvas for
     Canvas2d. It's measured each time SetFont is called.
+
+    Warning: This metric may include reports from clients with low-resolution
+    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
+    will cause this metric to have an abnormal distribution. When considering
+    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
+    solution.
   </summary>
 </histogram>
 
@@ -100545,6 +100581,12 @@
   <summary>
     Time spent in microseconds to perform call SetFont in canvas for
     OffscreenCanvas. It's measured each time SetFont is called.
+
+    Warning: This metric may include reports from clients with low-resolution
+    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
+    will cause this metric to have an abnormal distribution. When considering
+    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
+    solution.
   </summary>
 </histogram>
 
@@ -108750,8 +108792,9 @@
 </histogram>
 
 <histogram name="PasswordManager.EditsInSaveBubble"
-    enum="PasswordManagerEditsInSaveBubbleEnum" expires_after="M81">
+    enum="PasswordManagerEditsInSaveBubbleEnum" expires_after="2021-01-30">
   <owner>battre@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Indication whether users change the credentials (username and password) in
     the save bubble of the password manager, considering only cases where the
@@ -108903,7 +108946,7 @@
 </histogram>
 
 <histogram name="PasswordManager.FillingAssistance"
-    enum="PasswordManagerFillingAssistance" expires_after="2021-02-01">
+    enum="PasswordManagerFillingAssistance" expires_after="2021-01-30">
   <owner>dvadym@chromium.org</owner>
   <owner>battre@chromium.org</owner>
   <summary>
@@ -109959,23 +110002,25 @@
 </histogram>
 
 <histogram name="PasswordManager.RequirementsSpecFetcher.HttpResponseCode"
-    enum="HttpResponseCode" expires_after="M81">
+    enum="HttpResponseCode" expires_after="2021-01-30">
   <owner>battre@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     HTTP response code of fetching a password requirements file.
   </summary>
 </histogram>
 
 <histogram name="PasswordManager.RequirementsSpecFetcher.NetErrorCode"
-    enum="NetErrorCodes" expires_after="2020-03-22">
+    enum="NetErrorCodes" expires_after="2021-01-30">
   <owner>battre@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     Network error code of fetching a password requirements file.
   </summary>
 </histogram>
 
 <histogram name="PasswordManager.RequirementsSpecFetcher.NetworkDuration"
-    units="ms" expires_after="M87">
+    units="ms" expires_after="2021-01-30">
   <owner>battre@chromium.org</owner>
   <owner>dvadym@chromium.org</owner>
   <summary>
@@ -109985,7 +110030,7 @@
 </histogram>
 
 <histogram name="PasswordManager.RequirementsSpecFetcher.Result"
-    enum="PasswordRequirementsFetcherResult" expires_after="M87">
+    enum="PasswordRequirementsFetcherResult" expires_after="2021-01-30">
   <owner>battre@chromium.org</owner>
   <owner>dvadym@chromium.org</owner>
   <summary>
@@ -110537,7 +110582,7 @@
 </histogram>
 
 <histogram base="true" name="PasswordManager.TimesPasswordUsed" units="units"
-    expires_after="M81">
+    expires_after="2021-01-30">
   <owner>battre@chromium.org</owner>
   <owner>dvadym@chromium.org</owner>
   <summary>
diff --git a/tools/perf/core/bot_platforms.py b/tools/perf/core/bot_platforms.py
index c1b57d6..618012e 100644
--- a/tools/perf/core/bot_platforms.py
+++ b/tools/perf/core/bot_platforms.py
@@ -349,8 +349,8 @@
      # Running a sample benchmark to help testing out the work on
      # trace_processor_shell: crbug.com/1028612
     _GetBenchmarkConfig('tracing.tracing_with_background_memory_infra')])
-_ANDROID_PIXEL2_AAB_FYI_BENCHMARK_CONFIGS = PerfSuite([
-    _GetBenchmarkConfig('rendering.mobile', True)])
+_ANDROID_PIXEL2_AAB_FYI_BENCHMARK_CONFIGS = PerfSuite(
+    [_GetBenchmarkConfig('startup.mobile')])
 _ANDROID_PIXEL2_FYI_BENCHMARK_CONFIGS = PerfSuite([
     _GetBenchmarkConfig('v8.browsing_mobile'),
     _GetBenchmarkConfig('system_health.memory_mobile'),
diff --git a/tools/perf/core/shard_maps/android-pixel2-perf-aab-fyi_map.json b/tools/perf/core/shard_maps/android-pixel2-perf-aab-fyi_map.json
index fcd35746..e2b5ae26 100644
--- a/tools/perf/core/shard_maps/android-pixel2-perf-aab-fyi_map.json
+++ b/tools/perf/core/shard_maps/android-pixel2-perf-aab-fyi_map.json
@@ -1,17 +1,17 @@
 {
     "0": {
         "benchmarks": {
-            "rendering.mobile": {
-                "abridged": true
+            "startup.mobile": {
+                "abridged": false
             }
         }
     },
     "extra_infos": {
-        "num_stories": 16,
-        "predicted_min_shard_time": 320,
+        "num_stories": 4,
+        "predicted_min_shard_time": 80,
         "predicted_min_shard_index": 0,
-        "predicted_max_shard_time": 320,
+        "predicted_max_shard_time": 80,
         "predicted_max_shard_index": 0,
-        "shard #0": 320
+        "shard #0": 80
     }
 }
\ No newline at end of file
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index 7aa8f04..49b6531 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -481,10 +481,6 @@
 # Benchmark: v8.runtime_stats.top_25
 crbug.com/954229 [ mac ] v8.runtime_stats.top_25/* [ Skip ]
 
-# Benchmark: webrtc
-crbug.com/1039726 [ win10 ] webrtc/multiple_peerconnections [ Skip ]
-
-
 ##### Perf FYI benchmarks go after here #####
 # Benchmark: loading.desktop_layout_ng
 crbug.com/879833 [ linux ] loading.desktop_layout_ng/Walgreens_cold [ Skip ]
diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc
index bd84cba3..84fb6fd 100644
--- a/ui/base/ui_base_features.cc
+++ b/ui/base/ui_base_features.cc
@@ -151,7 +151,9 @@
                                            base::FEATURE_DISABLED_BY_DEFAULT};
 
 bool IsFormControlsRefreshEnabled() {
-  return base::FeatureList::IsEnabled(features::kFormControlsRefresh);
+  static const bool form_controls_refresh_enabled =
+      base::FeatureList::IsEnabled(features::kFormControlsRefresh);
+  return form_controls_refresh_enabled;
 }
 
 bool IsAutomaticUiAdjustmentsForTouchEnabled() {
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index 8eb0e90..0d730311 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -1174,14 +1174,29 @@
 
   base::WeakPtr<Layer> weak_this = weak_ptr_factory_.GetWeakPtr();
 
-  // NOTE: Some animation observers destroy the layer when the animation ends.
-  if (animator_) {
-    animator_->StopAnimatingProperty(LayerAnimationElement::TRANSFORM);
+  // Some animation observers may mutate the tree (e.g. destroy the layer,
+  // change ancestor/sibling z-order etc) when the animation ends. This break
+  // the tree traversal and could lead to a crash. Collect all descendants (and
+  // their mask layers) in a flattened WeakPtr list at the root level then stop
+  // animations to let potential tree mutations happen before traversing the
+  // tree. See https://crbug.com/1037852.
+  const bool is_root_layer = !parent();
+  if (is_root_layer) {
+    std::vector<base::WeakPtr<Layer>> flattened;
+    GetFlattenedWeakList(&flattened);
+    for (auto& weak_layer : flattened) {
+      // Skip if layer is gone or not animating.
+      if (!weak_layer || !weak_layer->animator_)
+        continue;
 
-    // Do not proceed if the layer was destroyed due to an animation
-    // observer.
-    if (!weak_this)
-      return;
+      weak_layer->animator_->StopAnimatingProperty(
+          LayerAnimationElement::TRANSFORM);
+
+      // Do not proceed if the root layer was destroyed due to an animation
+      // observer.
+      if (!weak_this)
+        return;
+    }
   }
 
   const float old_device_scale_factor = device_scale_factor_;
@@ -1628,4 +1643,14 @@
   subtree_reflected_layer_ = nullptr;
 }
 
+void Layer::GetFlattenedWeakList(
+    std::vector<base::WeakPtr<Layer>>* flattened_list) {
+  flattened_list->emplace_back(weak_ptr_factory_.GetWeakPtr());
+  if (layer_mask_)
+    flattened_list->emplace_back(layer_mask_->weak_ptr_factory_.GetWeakPtr());
+
+  for (auto* child : children_)
+    child->GetFlattenedWeakList(flattened_list);
+}
+
 }  // namespace ui
diff --git a/ui/compositor/layer.h b/ui/compositor/layer.h
index 098ad9c..b5d04ab 100644
--- a/ui/compositor/layer.h
+++ b/ui/compositor/layer.h
@@ -598,6 +598,10 @@
 
   bool IsHitTestableForCC() const { return visible_ && accept_events_; }
 
+  // Gets a flattened WeakPtr list of all layers and layer masks in the tree
+  // rooted from |this|.
+  void GetFlattenedWeakList(std::vector<base::WeakPtr<Layer>>* flattened_list);
+
   const LayerType type_;
 
   Compositor* compositor_;
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index cd9c540..f0ab12f 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -21,6 +22,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
@@ -423,6 +425,26 @@
   DISALLOW_COPY_AND_ASSIGN(TestCompositorAnimationObserver);
 };
 
+// An animation observer that invokes a callback when the animation ends.
+class TestCallbackAnimationObserver : public ImplicitAnimationObserver {
+ public:
+  TestCallbackAnimationObserver() = default;
+
+  void SetCallback(base::OnceClosure callback) {
+    callback_ = std::move(callback);
+  }
+
+  // ui::ImplicitAnimationObserver overrides:
+  void OnImplicitAnimationsCompleted() override {}
+  void OnLayerAnimationEnded(LayerAnimationSequence* sequence) override {
+    if (callback_)
+      std::move(callback_).Run();
+  }
+
+ private:
+  base::OnceClosure callback_;
+};
+
 }  // namespace
 
 INSTANTIATE_TEST_SUITE_P(All, LayerWithRealCompositorTest, ::testing::Bool());
@@ -2536,42 +2558,23 @@
   EXPECT_TRUE(l1->cc_layer_for_testing()->masks_to_bounds());
 }
 
-// An animation observer that deletes the layer when the animation ends.
-class TestAnimationObserver : public ImplicitAnimationObserver {
- public:
-  TestAnimationObserver() = default;
-
-  Layer* layer() const { return layer_.get(); }
-
-  void SetLayer(std::unique_ptr<Layer> layer) { layer_ = std::move(layer); }
-
-  // ui::ImplicitAnimationObserver overrides:
-  void OnImplicitAnimationsCompleted() override {}
-
- protected:
-  void OnLayerAnimationEnded(LayerAnimationSequence* sequence) override {
-    layer_.reset();
-  }
-
- private:
-  std::unique_ptr<Layer> layer_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestAnimationObserver);
-};
-
 // Triggerring a OnDeviceScaleFactorChanged while a layer is undergoing
-// transform animation, may cause a crash. This is because the layer may be
-// deleted by the animation observer leading to a seg fault.
-TEST_P(LayerWithRealCompositorTest, DeletingLayerDuringScaleFactorChange) {
-  TestAnimationObserver animation_observer;
+// transform animation, may cause a crash. This is because an animation observer
+// may mutate the tree, e.g. deleting a layer, changing ancestor z-order etc,
+// which breaks the tree traversal and might lead to a use-after-free seg fault.
+TEST_P(LayerWithRealCompositorTest, TreeMutationDuringScaleFactorChange) {
+  TestCallbackAnimationObserver animation_observer;
 
   std::unique_ptr<Layer> root = CreateLayer(LAYER_SOLID_COLOR);
-  animation_observer.SetLayer(CreateLayer(LAYER_SOLID_COLOR));
-
-  Layer* layer_to_delete = animation_observer.layer();
-
   GetCompositor()->SetRootLayer(root.get());
-  root->Add(layer_to_delete);
+
+  // Tests scenarios that |layer_to_delete| is deleted when animation ends.
+
+  std::unique_ptr<Layer> layer_to_delete = CreateLayer(LAYER_SOLID_COLOR);
+  animation_observer.SetCallback(
+      base::BindLambdaForTesting([&]() { layer_to_delete.reset(); }));
+
+  root->Add(layer_to_delete.get());
 
   EXPECT_EQ(gfx::Transform(), layer_to_delete->GetTargetTransform());
 
@@ -2591,13 +2594,16 @@
 
   // This call should not crash.
   root->OnDeviceScaleFactorChanged(2.f);
+  // |layer_to_delete| should be gone.
+  EXPECT_FALSE(layer_to_delete);
 
-  animation_observer.SetLayer(CreateLayer(LAYER_SOLID_COLOR));
-  layer_to_delete = animation_observer.layer();
+  layer_to_delete = CreateLayer(LAYER_SOLID_COLOR);
+  animation_observer.SetCallback(
+      base::BindLambdaForTesting([&]() { layer_to_delete.reset(); }));
 
   std::unique_ptr<Layer> child = CreateLayer(LAYER_SOLID_COLOR);
 
-  root->Add(layer_to_delete);
+  root->Add(layer_to_delete.get());
   layer_to_delete->Add(child.get());
 
   long_duration_animation =
@@ -2612,13 +2618,16 @@
 
   // This call should not crash.
   root->OnDeviceScaleFactorChanged(1.5f);
+  // |layer_to_delete| should be gone.
+  EXPECT_FALSE(layer_to_delete);
 
-  animation_observer.SetLayer(CreateLayer(LAYER_SOLID_COLOR));
-  layer_to_delete = animation_observer.layer();
+  layer_to_delete = CreateLayer(LAYER_SOLID_COLOR);
+  animation_observer.SetCallback(
+      base::BindLambdaForTesting([&]() { layer_to_delete.reset(); }));
 
   std::unique_ptr<Layer> child2 = CreateLayer(LAYER_SOLID_COLOR);
 
-  root->Add(layer_to_delete);
+  root->Add(layer_to_delete.get());
   layer_to_delete->Add(child.get());
   layer_to_delete->Add(child2.get());
 
@@ -2634,6 +2643,29 @@
 
   // This call should not crash.
   root->OnDeviceScaleFactorChanged(2.f);
+  // |layer_to_delete| should be gone.
+  EXPECT_FALSE(layer_to_delete);
+
+  // Tests scenarios that the tree is changed when animation ends.
+
+  root->Add(child.get());
+  root->Add(child2.get());
+
+  animation_observer.SetCallback(base::BindLambdaForTesting(
+      [&]() { root->StackChildrenAtBottom({child2.get()}); }));
+
+  long_duration_animation =
+      std::make_unique<ui::ScopedAnimationDurationScaleMode>(
+          ui::ScopedAnimationDurationScaleMode::SLOW_DURATION);
+  {
+    ui::ScopedLayerAnimationSettings animation(child->GetAnimator());
+    animation.AddObserver(&animation_observer);
+    animation.SetTransitionDuration(base::TimeDelta::FromMilliseconds(1000));
+    child->SetTransform(transform);
+  }
+
+  // This call should not crash.
+  root->OnDeviceScaleFactorChanged(1.5f);
 }
 
 // Tests that the animators in the layer tree is added to the
diff --git a/ui/compositor/overscroll/scroll_input_handler.cc b/ui/compositor/overscroll/scroll_input_handler.cc
index 5279c0b..f1965d2 100644
--- a/ui/compositor/overscroll/scroll_input_handler.cc
+++ b/ui/compositor/overscroll/scroll_input_handler.cc
@@ -68,8 +68,7 @@
                                        cc::InputHandler::WHEEL);
 
   cc::ScrollState scroll_state = CreateScrollState(event, false);
-  input_handler_weak_ptr_->ScrollUpdate(&scroll_state, cc::InputHandler::WHEEL,
-                                        base::TimeDelta());
+  input_handler_weak_ptr_->ScrollUpdate(&scroll_state, base::TimeDelta());
   input_handler_weak_ptr_->ScrollEnd(/*should_snap=*/false);
 
   return true;
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc
index f278b402..57fbc512 100644
--- a/ui/events/blink/input_handler_proxy.cc
+++ b/ui/events/blink/input_handler_proxy.cc
@@ -916,9 +916,8 @@
   base::TimeTicks event_time = gesture_event.TimeStamp();
   base::TimeDelta delay = base::TimeTicks::Now() - event_time;
 
-  cc::InputHandlerScrollResult scroll_result = input_handler_->ScrollUpdate(
-      &scroll_state, GestureScrollInputType(gesture_event.SourceDevice()),
-      delay);
+  cc::InputHandlerScrollResult scroll_result =
+      input_handler_->ScrollUpdate(&scroll_state, delay);
 
   HandleOverscroll(gesture_event.PositionInWidget(), scroll_result);
 
@@ -1172,10 +1171,8 @@
     const gfx::Vector2dF& delta) {
   cc::ScrollState scroll_state = CreateScrollStateForInertialUpdate(delta);
 
-  // TODO(bokan): We should be passing in the source device that was used to
-  // scroll during the gesture.
-  cc::InputHandlerScrollResult scroll_result = input_handler_->ScrollUpdate(
-      &scroll_state, cc::InputHandler::TOUCHSCREEN, base::TimeDelta());
+  cc::InputHandlerScrollResult scroll_result =
+      input_handler_->ScrollUpdate(&scroll_state, base::TimeDelta());
   return scroll_result.current_visual_offset;
 }
 
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc
index f3b36185..bd6c11e 100644
--- a/ui/events/blink/input_handler_proxy_unittest.cc
+++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -115,11 +115,8 @@
   MOCK_METHOD2(RootScrollBegin,
                ScrollStatus(cc::ScrollState*,
                             cc::InputHandler::ScrollInputType type));
-  MOCK_METHOD3(
-      ScrollUpdate,
-      cc::InputHandlerScrollResult(cc::ScrollState*,
-                                   cc::InputHandler::ScrollInputType type,
-                                   base::TimeDelta));
+  MOCK_METHOD2(ScrollUpdate,
+               cc::InputHandlerScrollResult(cc::ScrollState*, base::TimeDelta));
   MOCK_METHOD1(ScrollEnd, void(bool));
   MOCK_METHOD0(ScrollingShouldSwitchtoMainThread, bool());
 
@@ -635,7 +632,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_not_scroll_));
   EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
       .WillOnce(testing::Return(false));
@@ -654,7 +651,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
   EXPECT_EQ(expected_disposition_,
             input_handler_->RouteToTypeSpecificHandler(gesture_));
@@ -801,7 +798,7 @@
       .WillOnce(DoAll(testing::SetArgPointee<1>(gfx::Vector2dF(0, 0)),
                       testing::SetArgPointee<2>(gfx::Vector2dF(0, 100)),
                       testing::Return(true)));
-  EXPECT_CALL(mock_input_handler_, ScrollUpdate(_, _, _)).Times(1);
+  EXPECT_CALL(mock_input_handler_, ScrollUpdate(_, _)).Times(1);
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   EXPECT_EQ(expected_disposition_,
             input_handler_->RouteToTypeSpecificHandler(gesture_));
@@ -817,7 +814,7 @@
   EXPECT_CALL(mock_input_handler_,
               GetSnapFlingInfoAndSetAnimatingSnapTarget(_, _, _))
       .Times(0);
-  EXPECT_CALL(mock_input_handler_, ScrollUpdate(_, _, _)).Times(0);
+  EXPECT_CALL(mock_input_handler_, ScrollUpdate(_, _)).Times(0);
   EXPECT_EQ(expected_disposition_,
             input_handler_->RouteToTypeSpecificHandler(gesture_));
   VERIFY_AND_RESET_MOCKS();
@@ -919,7 +916,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
   EXPECT_EQ(expected_disposition_,
             input_handler_->RouteToTypeSpecificHandler(gesture_));
@@ -976,7 +973,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
   EXPECT_EQ(expected_disposition_,
             input_handler_->RouteToTypeSpecificHandler(gesture_));
@@ -986,7 +983,7 @@
   // The scroll handling switches to the main thread, a GSB is sent to the main
   // thread to initiate the hit testing and compute the scroll chain.
   expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE;
-  EXPECT_CALL(mock_input_handler_, ScrollUpdate(_, _, _)).Times(0);
+  EXPECT_CALL(mock_input_handler_, ScrollUpdate(_, _)).Times(0);
   EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
       .WillOnce(testing::Return(true));
   EXPECT_CALL(mock_client_, GenerateScrollBeginAndSendToMainThread(_));
@@ -1500,7 +1497,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
   EXPECT_CALL(mock_input_handler_, ScrollEnd(true));
 
@@ -1539,7 +1536,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
   EXPECT_CALL(mock_input_handler_, SetNeedsAnimateInput()).Times(1);
 
@@ -1563,7 +1560,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll_));
   EXPECT_CALL(mock_input_handler_, ScrollEnd(true)).Times(2);
   EXPECT_CALL(mock_input_handler_, SetNeedsAnimateInput()).Times(1);
@@ -1611,7 +1608,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
   EXPECT_CALL(mock_input_handler_, ScrollEnd(true));
 
@@ -1749,7 +1746,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll_));
   EXPECT_CALL(mock_input_handler_, ScrollEnd(true))
       .Times(::testing::AtLeast(1));
@@ -1829,7 +1826,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll_));
   EXPECT_CALL(mock_input_handler_, ScrollEnd(true))
       .Times(::testing::AtLeast(1));
@@ -1892,7 +1889,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
   EXPECT_CALL(mock_input_handler_, ScrollEnd(true));
 
@@ -1929,7 +1926,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_not_scroll_));
 
   HandleGestureEvent(WebInputEvent::kGestureScrollBegin);
@@ -1995,7 +1992,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
 
   // No prediction when start with a GSB
@@ -2042,7 +2039,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll_));
 
   HandleGestureEvent(WebInputEvent::kGestureScrollBegin);
@@ -2644,7 +2641,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll));
 
   base::HistogramTester histogram_tester;
@@ -2703,7 +2700,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll));
 
   base::HistogramTester histogram_tester;
@@ -2744,7 +2741,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll));
 
   base::HistogramTester histogram_tester;
@@ -2784,7 +2781,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll));
 
   base::HistogramTester histogram_tester;
@@ -2823,7 +2820,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll));
 
   base::HistogramTester histogram_tester;
@@ -2854,7 +2851,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll));
 
   base::HistogramTester histogram_tester;
@@ -2891,7 +2888,7 @@
   EXPECT_CALL(
       mock_input_handler_,
       ScrollUpdate(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0)),
-                   _, _))
+                   _))
       .WillRepeatedly(testing::Return(scroll_result_did_scroll));
 
   base::HistogramTester histogram_tester;
diff --git a/ui/events/keycodes/dom/dom_code.h b/ui/events/keycodes/dom/dom_code.h
index 138be7a..4fbf542 100644
--- a/ui/events/keycodes/dom/dom_code.h
+++ b/ui/events/keycodes/dom/dom_code.h
@@ -7,11 +7,11 @@
 
 namespace ui {
 
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) id = usb
-#define USB_KEYMAP_DECLARATION enum class DomCode
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) id = usb
+#define DOM_CODE_DECLARATION enum class DomCode
 #include "ui/events/keycodes/dom/dom_code_data.inc"
-#undef USB_KEYMAP
-#undef USB_KEYMAP_DECLARATION
+#undef DOM_CODE
+#undef DOM_CODE_DECLARATION
 
 }  // namespace ui
 
diff --git a/ui/events/keycodes/dom/dom_code_data.inc b/ui/events/keycodes/dom/dom_code_data.inc
index 65bd4e8e..17ebad5f 100644
--- a/ui/events/keycodes/dom/dom_code_data.inc
+++ b/ui/events/keycodes/dom/dom_code_data.inc
@@ -4,7 +4,7 @@
 
 // This file has no header guard because it is explicitly intended
 // to be included more than once with different definitions of the
-// macros USB_KEYMAP and USB_KEYMAP_DECLARATION.
+// macros DOM_CODE and DOM_CODE_DECLARATION.
 
 // Data in this file was created by referencing:
 //  [0] USB HID Usage Tables,
@@ -80,15 +80,15 @@
 //       Apple keyboards with USB 0x070049 [Insert] labelled "Help" have not
 //       been made since 2007.
 
-USB_KEYMAP_DECLARATION {
+DOM_CODE_DECLARATION {
 
   //            USB     evdev    XKB     Win     Mac   Code
-  USB_KEYMAP(0x000000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NONE), // Invalid
+  DOM_CODE(0x000000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NONE), // Invalid
 
 #if defined(OS_ANDROID)
-#define USB_KEYMAP_ANDROID
+#define DOM_CODE_ANDROID
 #include "ui/events/keycodes/dom/keycode_conversion_data_android_generated.inc"
-#undef USB_KEYMAP_ANDROID
+#undef DOM_CODE_ANDROID
 #endif
 
   // =========================================
@@ -96,13 +96,13 @@
   // =========================================
 
   //            USB     evdev    XKB     Win     Mac   Code
-  USB_KEYMAP(0x000010, 0x0000, 0x0000, 0x0000, 0xffff, "Hyper", HYPER),
-  USB_KEYMAP(0x000011, 0x0000, 0x0000, 0x0000, 0xffff, "Super", SUPER),
-  USB_KEYMAP(0x000012, 0x0000, 0x0000, 0x0000, 0xffff, "Fn", FN),
-  USB_KEYMAP(0x000013, 0x0000, 0x0000, 0x0000, 0xffff, "FnLock", FN_LOCK),
-  USB_KEYMAP(0x000014, 0x0000, 0x0000, 0x0000, 0xffff, "Suspend", SUSPEND),
-  USB_KEYMAP(0x000015, 0x0000, 0x0000, 0x0000, 0xffff, "Resume", RESUME),
-  USB_KEYMAP(0x000016, 0x0000, 0x0000, 0x0000, 0xffff, "Turbo", TURBO),
+  DOM_CODE(0x000010, 0x0000, 0x0000, 0x0000, 0xffff, "Hyper", HYPER),
+  DOM_CODE(0x000011, 0x0000, 0x0000, 0x0000, 0xffff, "Super", SUPER),
+  DOM_CODE(0x000012, 0x0000, 0x0000, 0x0000, 0xffff, "Fn", FN),
+  DOM_CODE(0x000013, 0x0000, 0x0000, 0x0000, 0xffff, "FnLock", FN_LOCK),
+  DOM_CODE(0x000014, 0x0000, 0x0000, 0x0000, 0xffff, "Suspend", SUSPEND),
+  DOM_CODE(0x000015, 0x0000, 0x0000, 0x0000, 0xffff, "Resume", RESUME),
+  DOM_CODE(0x000016, 0x0000, 0x0000, 0x0000, 0xffff, "Turbo", TURBO),
 
   // =========================================
   // USB Usage Page 0x01: Generic Desktop Page
@@ -111,9 +111,9 @@
   // Sleep could be encoded as USB#0c0032, but there's no corresponding WakeUp
   // in the 0x0c USB page.
   //            USB     evdev    XKB     Win     Mac
-  USB_KEYMAP(0x010082, 0x008e, 0x0096, 0xe05f, 0xffff, "Sleep", SLEEP), // SystemSleep
-  USB_KEYMAP(0x010083, 0x008f, 0x0097, 0xe063, 0xffff, "WakeUp", WAKE_UP),
-  USB_KEYMAP(0x0100b5, 0x00e3, 0x00eb, 0x0000, 0xffff, "DisplayToggleIntExt",
+  DOM_CODE(0x010082, 0x008e, 0x0096, 0xe05f, 0xffff, "Sleep", SLEEP), // SystemSleep
+  DOM_CODE(0x010083, 0x008f, 0x0097, 0xe063, 0xffff, "WakeUp", WAKE_UP),
+  DOM_CODE(0x0100b5, 0x00e3, 0x00eb, 0x0000, 0xffff, "DisplayToggleIntExt",
              DISPLAY_TOGGLE_INT_EXT),  // System Display Toggle Int/Ext
 
 
@@ -132,62 +132,62 @@
   // Mac#0066 kVK_JIS_Eisu (USB#07008a Henkan?)
 
   //            USB     evdev    XKB     Win     Mac
-  USB_KEYMAP(0x070000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_RESERVED),
-  USB_KEYMAP(0x070001, 0x0000, 0x0000, 0x00ff, 0xffff, NULL, USB_ERROR_ROLL_OVER),
-  USB_KEYMAP(0x070002, 0x0000, 0x0000, 0x00fc, 0xffff, NULL, USB_POST_FAIL),
-  USB_KEYMAP(0x070003, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_ERROR_UNDEFINED),
-  USB_KEYMAP(0x070004, 0x001e, 0x0026, 0x001e, 0x0000, "KeyA", US_A), // aA
-  USB_KEYMAP(0x070005, 0x0030, 0x0038, 0x0030, 0x000b, "KeyB", US_B), // bB
-  USB_KEYMAP(0x070006, 0x002e, 0x0036, 0x002e, 0x0008, "KeyC", US_C), // cC
-  USB_KEYMAP(0x070007, 0x0020, 0x0028, 0x0020, 0x0002, "KeyD", US_D), // dD
+  DOM_CODE(0x070000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_RESERVED),
+  DOM_CODE(0x070001, 0x0000, 0x0000, 0x00ff, 0xffff, NULL, USB_ERROR_ROLL_OVER),
+  DOM_CODE(0x070002, 0x0000, 0x0000, 0x00fc, 0xffff, NULL, USB_POST_FAIL),
+  DOM_CODE(0x070003, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_ERROR_UNDEFINED),
+  DOM_CODE(0x070004, 0x001e, 0x0026, 0x001e, 0x0000, "KeyA", US_A), // aA
+  DOM_CODE(0x070005, 0x0030, 0x0038, 0x0030, 0x000b, "KeyB", US_B), // bB
+  DOM_CODE(0x070006, 0x002e, 0x0036, 0x002e, 0x0008, "KeyC", US_C), // cC
+  DOM_CODE(0x070007, 0x0020, 0x0028, 0x0020, 0x0002, "KeyD", US_D), // dD
 
-  USB_KEYMAP(0x070008, 0x0012, 0x001a, 0x0012, 0x000e, "KeyE", US_E), // eE
-  USB_KEYMAP(0x070009, 0x0021, 0x0029, 0x0021, 0x0003, "KeyF", US_F), // fF
-  USB_KEYMAP(0x07000a, 0x0022, 0x002a, 0x0022, 0x0005, "KeyG", US_G), // gG
-  USB_KEYMAP(0x07000b, 0x0023, 0x002b, 0x0023, 0x0004, "KeyH", US_H), // hH
-  USB_KEYMAP(0x07000c, 0x0017, 0x001f, 0x0017, 0x0022, "KeyI", US_I), // iI
-  USB_KEYMAP(0x07000d, 0x0024, 0x002c, 0x0024, 0x0026, "KeyJ", US_J), // jJ
-  USB_KEYMAP(0x07000e, 0x0025, 0x002d, 0x0025, 0x0028, "KeyK", US_K), // kK
-  USB_KEYMAP(0x07000f, 0x0026, 0x002e, 0x0026, 0x0025, "KeyL", US_L), // lL
+  DOM_CODE(0x070008, 0x0012, 0x001a, 0x0012, 0x000e, "KeyE", US_E), // eE
+  DOM_CODE(0x070009, 0x0021, 0x0029, 0x0021, 0x0003, "KeyF", US_F), // fF
+  DOM_CODE(0x07000a, 0x0022, 0x002a, 0x0022, 0x0005, "KeyG", US_G), // gG
+  DOM_CODE(0x07000b, 0x0023, 0x002b, 0x0023, 0x0004, "KeyH", US_H), // hH
+  DOM_CODE(0x07000c, 0x0017, 0x001f, 0x0017, 0x0022, "KeyI", US_I), // iI
+  DOM_CODE(0x07000d, 0x0024, 0x002c, 0x0024, 0x0026, "KeyJ", US_J), // jJ
+  DOM_CODE(0x07000e, 0x0025, 0x002d, 0x0025, 0x0028, "KeyK", US_K), // kK
+  DOM_CODE(0x07000f, 0x0026, 0x002e, 0x0026, 0x0025, "KeyL", US_L), // lL
 
-  USB_KEYMAP(0x070010, 0x0032, 0x003a, 0x0032, 0x002e, "KeyM", US_M), // mM
-  USB_KEYMAP(0x070011, 0x0031, 0x0039, 0x0031, 0x002d, "KeyN", US_N), // nN
-  USB_KEYMAP(0x070012, 0x0018, 0x0020, 0x0018, 0x001f, "KeyO", US_O), // oO
-  USB_KEYMAP(0x070013, 0x0019, 0x0021, 0x0019, 0x0023, "KeyP", US_P), // pP
-  USB_KEYMAP(0x070014, 0x0010, 0x0018, 0x0010, 0x000c, "KeyQ", US_Q), // qQ
-  USB_KEYMAP(0x070015, 0x0013, 0x001b, 0x0013, 0x000f, "KeyR", US_R), // rR
-  USB_KEYMAP(0x070016, 0x001f, 0x0027, 0x001f, 0x0001, "KeyS", US_S), // sS
-  USB_KEYMAP(0x070017, 0x0014, 0x001c, 0x0014, 0x0011, "KeyT", US_T), // tT
+  DOM_CODE(0x070010, 0x0032, 0x003a, 0x0032, 0x002e, "KeyM", US_M), // mM
+  DOM_CODE(0x070011, 0x0031, 0x0039, 0x0031, 0x002d, "KeyN", US_N), // nN
+  DOM_CODE(0x070012, 0x0018, 0x0020, 0x0018, 0x001f, "KeyO", US_O), // oO
+  DOM_CODE(0x070013, 0x0019, 0x0021, 0x0019, 0x0023, "KeyP", US_P), // pP
+  DOM_CODE(0x070014, 0x0010, 0x0018, 0x0010, 0x000c, "KeyQ", US_Q), // qQ
+  DOM_CODE(0x070015, 0x0013, 0x001b, 0x0013, 0x000f, "KeyR", US_R), // rR
+  DOM_CODE(0x070016, 0x001f, 0x0027, 0x001f, 0x0001, "KeyS", US_S), // sS
+  DOM_CODE(0x070017, 0x0014, 0x001c, 0x0014, 0x0011, "KeyT", US_T), // tT
 
-  USB_KEYMAP(0x070018, 0x0016, 0x001e, 0x0016, 0x0020, "KeyU", US_U), // uU
-  USB_KEYMAP(0x070019, 0x002f, 0x0037, 0x002f, 0x0009, "KeyV", US_V), // vV
-  USB_KEYMAP(0x07001a, 0x0011, 0x0019, 0x0011, 0x000d, "KeyW", US_W), // wW
-  USB_KEYMAP(0x07001b, 0x002d, 0x0035, 0x002d, 0x0007, "KeyX", US_X), // xX
-  USB_KEYMAP(0x07001c, 0x0015, 0x001d, 0x0015, 0x0010, "KeyY", US_Y), // yY
-  USB_KEYMAP(0x07001d, 0x002c, 0x0034, 0x002c, 0x0006, "KeyZ", US_Z), // zZ
-  USB_KEYMAP(0x07001e, 0x0002, 0x000a, 0x0002, 0x0012, "Digit1", DIGIT1), // 1!
-  USB_KEYMAP(0x07001f, 0x0003, 0x000b, 0x0003, 0x0013, "Digit2", DIGIT2), // 2@
+  DOM_CODE(0x070018, 0x0016, 0x001e, 0x0016, 0x0020, "KeyU", US_U), // uU
+  DOM_CODE(0x070019, 0x002f, 0x0037, 0x002f, 0x0009, "KeyV", US_V), // vV
+  DOM_CODE(0x07001a, 0x0011, 0x0019, 0x0011, 0x000d, "KeyW", US_W), // wW
+  DOM_CODE(0x07001b, 0x002d, 0x0035, 0x002d, 0x0007, "KeyX", US_X), // xX
+  DOM_CODE(0x07001c, 0x0015, 0x001d, 0x0015, 0x0010, "KeyY", US_Y), // yY
+  DOM_CODE(0x07001d, 0x002c, 0x0034, 0x002c, 0x0006, "KeyZ", US_Z), // zZ
+  DOM_CODE(0x07001e, 0x0002, 0x000a, 0x0002, 0x0012, "Digit1", DIGIT1), // 1!
+  DOM_CODE(0x07001f, 0x0003, 0x000b, 0x0003, 0x0013, "Digit2", DIGIT2), // 2@
 
-  USB_KEYMAP(0x070020, 0x0004, 0x000c, 0x0004, 0x0014, "Digit3", DIGIT3), // 3#
-  USB_KEYMAP(0x070021, 0x0005, 0x000d, 0x0005, 0x0015, "Digit4", DIGIT4), // 4$
-  USB_KEYMAP(0x070022, 0x0006, 0x000e, 0x0006, 0x0017, "Digit5", DIGIT5), // 5%
-  USB_KEYMAP(0x070023, 0x0007, 0x000f, 0x0007, 0x0016, "Digit6", DIGIT6), // 6^
-  USB_KEYMAP(0x070024, 0x0008, 0x0010, 0x0008, 0x001a, "Digit7", DIGIT7), // 7&
-  USB_KEYMAP(0x070025, 0x0009, 0x0011, 0x0009, 0x001c, "Digit8", DIGIT8), // 8*
-  USB_KEYMAP(0x070026, 0x000a, 0x0012, 0x000a, 0x0019, "Digit9", DIGIT9), // 9(
-  USB_KEYMAP(0x070027, 0x000b, 0x0013, 0x000b, 0x001d, "Digit0", DIGIT0), // 0)
+  DOM_CODE(0x070020, 0x0004, 0x000c, 0x0004, 0x0014, "Digit3", DIGIT3), // 3#
+  DOM_CODE(0x070021, 0x0005, 0x000d, 0x0005, 0x0015, "Digit4", DIGIT4), // 4$
+  DOM_CODE(0x070022, 0x0006, 0x000e, 0x0006, 0x0017, "Digit5", DIGIT5), // 5%
+  DOM_CODE(0x070023, 0x0007, 0x000f, 0x0007, 0x0016, "Digit6", DIGIT6), // 6^
+  DOM_CODE(0x070024, 0x0008, 0x0010, 0x0008, 0x001a, "Digit7", DIGIT7), // 7&
+  DOM_CODE(0x070025, 0x0009, 0x0011, 0x0009, 0x001c, "Digit8", DIGIT8), // 8*
+  DOM_CODE(0x070026, 0x000a, 0x0012, 0x000a, 0x0019, "Digit9", DIGIT9), // 9(
+  DOM_CODE(0x070027, 0x000b, 0x0013, 0x000b, 0x001d, "Digit0", DIGIT0), // 0)
 
-  USB_KEYMAP(0x070028, 0x001c, 0x0024, 0x001c, 0x0024, "Enter", ENTER),
-  USB_KEYMAP(0x070029, 0x0001, 0x0009, 0x0001, 0x0035, "Escape", ESCAPE),
-  USB_KEYMAP(0x07002a, 0x000e, 0x0016, 0x000e, 0x0033, "Backspace", BACKSPACE),
-  USB_KEYMAP(0x07002b, 0x000f, 0x0017, 0x000f, 0x0030, "Tab", TAB),
-  USB_KEYMAP(0x07002c, 0x0039, 0x0041, 0x0039, 0x0031, "Space", SPACE), // Spacebar
-  USB_KEYMAP(0x07002d, 0x000c, 0x0014, 0x000c, 0x001b, "Minus", MINUS), // -_
-  USB_KEYMAP(0x07002e, 0x000d, 0x0015, 0x000d, 0x0018, "Equal", EQUAL), // =+
-  USB_KEYMAP(0x07002f, 0x001a, 0x0022, 0x001a, 0x0021, "BracketLeft", BRACKET_LEFT),
+  DOM_CODE(0x070028, 0x001c, 0x0024, 0x001c, 0x0024, "Enter", ENTER),
+  DOM_CODE(0x070029, 0x0001, 0x0009, 0x0001, 0x0035, "Escape", ESCAPE),
+  DOM_CODE(0x07002a, 0x000e, 0x0016, 0x000e, 0x0033, "Backspace", BACKSPACE),
+  DOM_CODE(0x07002b, 0x000f, 0x0017, 0x000f, 0x0030, "Tab", TAB),
+  DOM_CODE(0x07002c, 0x0039, 0x0041, 0x0039, 0x0031, "Space", SPACE), // Spacebar
+  DOM_CODE(0x07002d, 0x000c, 0x0014, 0x000c, 0x001b, "Minus", MINUS), // -_
+  DOM_CODE(0x07002e, 0x000d, 0x0015, 0x000d, 0x0018, "Equal", EQUAL), // =+
+  DOM_CODE(0x07002f, 0x001a, 0x0022, 0x001a, 0x0021, "BracketLeft", BRACKET_LEFT),
 
-  USB_KEYMAP(0x070030, 0x001b, 0x0023, 0x001b, 0x001e, "BracketRight", BRACKET_RIGHT),
-  USB_KEYMAP(0x070031, 0x002b, 0x0033, 0x002b, 0x002a, "Backslash", BACKSLASH), // \|
+  DOM_CODE(0x070030, 0x001b, 0x0023, 0x001b, 0x001e, "BracketRight", BRACKET_RIGHT),
+  DOM_CODE(0x070031, 0x002b, 0x0033, 0x002b, 0x002a, "Backslash", BACKSLASH), // \|
   // USB#070032 never appears on keyboards that have USB#070031.
   // Platforms use the same scancode as for the two keys.
   // Hence this code can only be generated synthetically
@@ -195,250 +195,250 @@
   // The keycap varies on international keyboards:
   //   Dan: '*  Dutch: <>  Ger: #'  UK: #~
   // TODO(garykac): Verify Mac intl keyboard.
-  USB_KEYMAP(0x070032, 0x0000, 0x0000, 0x0000, 0xffff, "IntlHash", INTL_HASH),
-  USB_KEYMAP(0x070033, 0x0027, 0x002f, 0x0027, 0x0029, "Semicolon", SEMICOLON), // ;:
-  USB_KEYMAP(0x070034, 0x0028, 0x0030, 0x0028, 0x0027, "Quote", QUOTE), // '"
-  USB_KEYMAP(0x070035, 0x0029, 0x0031, 0x0029, 0x0032, "Backquote", BACKQUOTE), // `~
-  USB_KEYMAP(0x070036, 0x0033, 0x003b, 0x0033, 0x002b, "Comma", COMMA), // ,<
-  USB_KEYMAP(0x070037, 0x0034, 0x003c, 0x0034, 0x002f, "Period", PERIOD), // .>
+  DOM_CODE(0x070032, 0x0000, 0x0000, 0x0000, 0xffff, "IntlHash", INTL_HASH),
+  DOM_CODE(0x070033, 0x0027, 0x002f, 0x0027, 0x0029, "Semicolon", SEMICOLON), // ;:
+  DOM_CODE(0x070034, 0x0028, 0x0030, 0x0028, 0x0027, "Quote", QUOTE), // '"
+  DOM_CODE(0x070035, 0x0029, 0x0031, 0x0029, 0x0032, "Backquote", BACKQUOTE), // `~
+  DOM_CODE(0x070036, 0x0033, 0x003b, 0x0033, 0x002b, "Comma", COMMA), // ,<
+  DOM_CODE(0x070037, 0x0034, 0x003c, 0x0034, 0x002f, "Period", PERIOD), // .>
 
-  USB_KEYMAP(0x070038, 0x0035, 0x003d, 0x0035, 0x002c, "Slash", SLASH), // /?
+  DOM_CODE(0x070038, 0x0035, 0x003d, 0x0035, 0x002c, "Slash", SLASH), // /?
   // TODO(garykac): CapsLock requires special handling for each platform.
-  USB_KEYMAP(0x070039, 0x003a, 0x0042, 0x003a, 0x0039, "CapsLock", CAPS_LOCK),
-  USB_KEYMAP(0x07003a, 0x003b, 0x0043, 0x003b, 0x007a, "F1", F1),
-  USB_KEYMAP(0x07003b, 0x003c, 0x0044, 0x003c, 0x0078, "F2", F2),
-  USB_KEYMAP(0x07003c, 0x003d, 0x0045, 0x003d, 0x0063, "F3", F3),
-  USB_KEYMAP(0x07003d, 0x003e, 0x0046, 0x003e, 0x0076, "F4", F4),
-  USB_KEYMAP(0x07003e, 0x003f, 0x0047, 0x003f, 0x0060, "F5", F5),
-  USB_KEYMAP(0x07003f, 0x0040, 0x0048, 0x0040, 0x0061, "F6", F6),
+  DOM_CODE(0x070039, 0x003a, 0x0042, 0x003a, 0x0039, "CapsLock", CAPS_LOCK),
+  DOM_CODE(0x07003a, 0x003b, 0x0043, 0x003b, 0x007a, "F1", F1),
+  DOM_CODE(0x07003b, 0x003c, 0x0044, 0x003c, 0x0078, "F2", F2),
+  DOM_CODE(0x07003c, 0x003d, 0x0045, 0x003d, 0x0063, "F3", F3),
+  DOM_CODE(0x07003d, 0x003e, 0x0046, 0x003e, 0x0076, "F4", F4),
+  DOM_CODE(0x07003e, 0x003f, 0x0047, 0x003f, 0x0060, "F5", F5),
+  DOM_CODE(0x07003f, 0x0040, 0x0048, 0x0040, 0x0061, "F6", F6),
 
-  USB_KEYMAP(0x070040, 0x0041, 0x0049, 0x0041, 0x0062, "F7", F7),
-  USB_KEYMAP(0x070041, 0x0042, 0x004a, 0x0042, 0x0064, "F8", F8),
-  USB_KEYMAP(0x070042, 0x0043, 0x004b, 0x0043, 0x0065, "F9", F9),
-  USB_KEYMAP(0x070043, 0x0044, 0x004c, 0x0044, 0x006d, "F10", F10),
-  USB_KEYMAP(0x070044, 0x0057, 0x005f, 0x0057, 0x0067, "F11", F11),
-  USB_KEYMAP(0x070045, 0x0058, 0x0060, 0x0058, 0x006f, "F12", F12),
+  DOM_CODE(0x070040, 0x0041, 0x0049, 0x0041, 0x0062, "F7", F7),
+  DOM_CODE(0x070041, 0x0042, 0x004a, 0x0042, 0x0064, "F8", F8),
+  DOM_CODE(0x070042, 0x0043, 0x004b, 0x0043, 0x0065, "F9", F9),
+  DOM_CODE(0x070043, 0x0044, 0x004c, 0x0044, 0x006d, "F10", F10),
+  DOM_CODE(0x070044, 0x0057, 0x005f, 0x0057, 0x0067, "F11", F11),
+  DOM_CODE(0x070045, 0x0058, 0x0060, 0x0058, 0x006f, "F12", F12),
   // PrintScreen is effectively F13 on Mac OS X.
-  USB_KEYMAP(0x070046, 0x0063, 0x006b, 0xe037, 0xffff, "PrintScreen", PRINT_SCREEN),
-  USB_KEYMAP(0x070047, 0x0046, 0x004e, 0x0046, 0xffff, "ScrollLock", SCROLL_LOCK),
+  DOM_CODE(0x070046, 0x0063, 0x006b, 0xe037, 0xffff, "PrintScreen", PRINT_SCREEN),
+  DOM_CODE(0x070047, 0x0046, 0x004e, 0x0046, 0xffff, "ScrollLock", SCROLL_LOCK),
 
-  USB_KEYMAP(0x070048, 0x0077, 0x007f, 0x0045, 0xffff, "Pause", PAUSE),
+  DOM_CODE(0x070048, 0x0077, 0x007f, 0x0045, 0xffff, "Pause", PAUSE),
   // USB#0x070049 Insert, labeled "Help/Insert" on Mac -- see note M1 at top.
-  USB_KEYMAP(0x070049, 0x006e, 0x0076, 0xe052, 0x0072, "Insert", INSERT),
-  USB_KEYMAP(0x07004a, 0x0066, 0x006e, 0xe047, 0x0073, "Home", HOME),
-  USB_KEYMAP(0x07004b, 0x0068, 0x0070, 0xe049, 0x0074, "PageUp", PAGE_UP),
+  DOM_CODE(0x070049, 0x006e, 0x0076, 0xe052, 0x0072, "Insert", INSERT),
+  DOM_CODE(0x07004a, 0x0066, 0x006e, 0xe047, 0x0073, "Home", HOME),
+  DOM_CODE(0x07004b, 0x0068, 0x0070, 0xe049, 0x0074, "PageUp", PAGE_UP),
   // Delete (Forward Delete) named DEL because DELETE conflicts with <windows.h>
-  USB_KEYMAP(0x07004c, 0x006f, 0x0077, 0xe053, 0x0075, "Delete", DEL),
-  USB_KEYMAP(0x07004d, 0x006b, 0x0073, 0xe04f, 0x0077, "End", END),
-  USB_KEYMAP(0x07004e, 0x006d, 0x0075, 0xe051, 0x0079, "PageDown", PAGE_DOWN),
-  USB_KEYMAP(0x07004f, 0x006a, 0x0072, 0xe04d, 0x007c, "ArrowRight", ARROW_RIGHT),
+  DOM_CODE(0x07004c, 0x006f, 0x0077, 0xe053, 0x0075, "Delete", DEL),
+  DOM_CODE(0x07004d, 0x006b, 0x0073, 0xe04f, 0x0077, "End", END),
+  DOM_CODE(0x07004e, 0x006d, 0x0075, 0xe051, 0x0079, "PageDown", PAGE_DOWN),
+  DOM_CODE(0x07004f, 0x006a, 0x0072, 0xe04d, 0x007c, "ArrowRight", ARROW_RIGHT),
 
-  USB_KEYMAP(0x070050, 0x0069, 0x0071, 0xe04b, 0x007b, "ArrowLeft", ARROW_LEFT),
-  USB_KEYMAP(0x070051, 0x006c, 0x0074, 0xe050, 0x007d, "ArrowDown", ARROW_DOWN),
-  USB_KEYMAP(0x070052, 0x0067, 0x006f, 0xe048, 0x007e, "ArrowUp", ARROW_UP),
-  USB_KEYMAP(0x070053, 0x0045, 0x004d, 0xe045, 0x0047, "NumLock", NUM_LOCK),
-  USB_KEYMAP(0x070054, 0x0062, 0x006a, 0xe035, 0x004b, "NumpadDivide", NUMPAD_DIVIDE),
-  USB_KEYMAP(0x070055, 0x0037, 0x003f, 0x0037, 0x0043, "NumpadMultiply",
+  DOM_CODE(0x070050, 0x0069, 0x0071, 0xe04b, 0x007b, "ArrowLeft", ARROW_LEFT),
+  DOM_CODE(0x070051, 0x006c, 0x0074, 0xe050, 0x007d, "ArrowDown", ARROW_DOWN),
+  DOM_CODE(0x070052, 0x0067, 0x006f, 0xe048, 0x007e, "ArrowUp", ARROW_UP),
+  DOM_CODE(0x070053, 0x0045, 0x004d, 0xe045, 0x0047, "NumLock", NUM_LOCK),
+  DOM_CODE(0x070054, 0x0062, 0x006a, 0xe035, 0x004b, "NumpadDivide", NUMPAD_DIVIDE),
+  DOM_CODE(0x070055, 0x0037, 0x003f, 0x0037, 0x0043, "NumpadMultiply",
              NUMPAD_MULTIPLY),  // Keypad_*
-  USB_KEYMAP(0x070056, 0x004a, 0x0052, 0x004a, 0x004e, "NumpadSubtract",
+  DOM_CODE(0x070056, 0x004a, 0x0052, 0x004a, 0x004e, "NumpadSubtract",
              NUMPAD_SUBTRACT),  // Keypad_-
-  USB_KEYMAP(0x070057, 0x004e, 0x0056, 0x004e, 0x0045, "NumpadAdd", NUMPAD_ADD),
+  DOM_CODE(0x070057, 0x004e, 0x0056, 0x004e, 0x0045, "NumpadAdd", NUMPAD_ADD),
 
-  USB_KEYMAP(0x070058, 0x0060, 0x0068, 0xe01c, 0x004c, "NumpadEnter", NUMPAD_ENTER),
-  USB_KEYMAP(0x070059, 0x004f, 0x0057, 0x004f, 0x0053, "Numpad1", NUMPAD1), // +End
-  USB_KEYMAP(0x07005a, 0x0050, 0x0058, 0x0050, 0x0054, "Numpad2", NUMPAD2), // +Down
-  USB_KEYMAP(0x07005b, 0x0051, 0x0059, 0x0051, 0x0055, "Numpad3", NUMPAD3), // +PageDn
-  USB_KEYMAP(0x07005c, 0x004b, 0x0053, 0x004b, 0x0056, "Numpad4", NUMPAD4), // +Left
-  USB_KEYMAP(0x07005d, 0x004c, 0x0054, 0x004c, 0x0057, "Numpad5", NUMPAD5), //
-  USB_KEYMAP(0x07005e, 0x004d, 0x0055, 0x004d, 0x0058, "Numpad6", NUMPAD6), // +Right
-  USB_KEYMAP(0x07005f, 0x0047, 0x004f, 0x0047, 0x0059, "Numpad7", NUMPAD7), // +Home
+  DOM_CODE(0x070058, 0x0060, 0x0068, 0xe01c, 0x004c, "NumpadEnter", NUMPAD_ENTER),
+  DOM_CODE(0x070059, 0x004f, 0x0057, 0x004f, 0x0053, "Numpad1", NUMPAD1), // +End
+  DOM_CODE(0x07005a, 0x0050, 0x0058, 0x0050, 0x0054, "Numpad2", NUMPAD2), // +Down
+  DOM_CODE(0x07005b, 0x0051, 0x0059, 0x0051, 0x0055, "Numpad3", NUMPAD3), // +PageDn
+  DOM_CODE(0x07005c, 0x004b, 0x0053, 0x004b, 0x0056, "Numpad4", NUMPAD4), // +Left
+  DOM_CODE(0x07005d, 0x004c, 0x0054, 0x004c, 0x0057, "Numpad5", NUMPAD5), //
+  DOM_CODE(0x07005e, 0x004d, 0x0055, 0x004d, 0x0058, "Numpad6", NUMPAD6), // +Right
+  DOM_CODE(0x07005f, 0x0047, 0x004f, 0x0047, 0x0059, "Numpad7", NUMPAD7), // +Home
 
-  USB_KEYMAP(0x070060, 0x0048, 0x0050, 0x0048, 0x005b, "Numpad8", NUMPAD8), // +Up
-  USB_KEYMAP(0x070061, 0x0049, 0x0051, 0x0049, 0x005c, "Numpad9", NUMPAD9), // +PageUp
-  USB_KEYMAP(0x070062, 0x0052, 0x005a, 0x0052, 0x0052, "Numpad0", NUMPAD0), // +Insert
-  USB_KEYMAP(0x070063, 0x0053, 0x005b, 0x0053, 0x0041, "NumpadDecimal",
+  DOM_CODE(0x070060, 0x0048, 0x0050, 0x0048, 0x005b, "Numpad8", NUMPAD8), // +Up
+  DOM_CODE(0x070061, 0x0049, 0x0051, 0x0049, 0x005c, "Numpad9", NUMPAD9), // +PageUp
+  DOM_CODE(0x070062, 0x0052, 0x005a, 0x0052, 0x0052, "Numpad0", NUMPAD0), // +Insert
+  DOM_CODE(0x070063, 0x0053, 0x005b, 0x0053, 0x0041, "NumpadDecimal",
              NUMPAD_DECIMAL),  // Keypad_. Delete
   // USB#070064 is not present on US keyboard.
   // This key is typically located near LeftShift key.
   // The keycap varies on international keyboards:
   //   Dan: <> Dutch: ][ Ger: <> UK: \|
-  USB_KEYMAP(0x070064, 0x0056, 0x005e, 0x0056, 0x000a, "IntlBackslash", INTL_BACKSLASH),
+  DOM_CODE(0x070064, 0x0056, 0x005e, 0x0056, 0x000a, "IntlBackslash", INTL_BACKSLASH),
   // USB#0x070065 Application Menu (next to RWin key) -- see note L2 at top.
-  USB_KEYMAP(0x070065, 0x007f, 0x0087, 0xe05d, 0x006e, "ContextMenu", CONTEXT_MENU),
-  USB_KEYMAP(0x070066, 0x0074, 0x007c, 0xe05e, 0xffff, "Power", POWER),
-  USB_KEYMAP(0x070067, 0x0075, 0x007d, 0x0059, 0x0051, "NumpadEqual", NUMPAD_EQUAL),
+  DOM_CODE(0x070065, 0x007f, 0x0087, 0xe05d, 0x006e, "ContextMenu", CONTEXT_MENU),
+  DOM_CODE(0x070066, 0x0074, 0x007c, 0xe05e, 0xffff, "Power", POWER),
+  DOM_CODE(0x070067, 0x0075, 0x007d, 0x0059, 0x0051, "NumpadEqual", NUMPAD_EQUAL),
 
-  USB_KEYMAP(0x070068, 0x00b7, 0x00bf, 0x0064, 0x0069, "F13", F13),
-  USB_KEYMAP(0x070069, 0x00b8, 0x00c0, 0x0065, 0x006b, "F14", F14),
-  USB_KEYMAP(0x07006a, 0x00b9, 0x00c1, 0x0066, 0x0071, "F15", F15),
-  USB_KEYMAP(0x07006b, 0x00ba, 0x00c2, 0x0067, 0x006a, "F16", F16),
-  USB_KEYMAP(0x07006c, 0x00bb, 0x00c3, 0x0068, 0x0040, "F17", F17),
-  USB_KEYMAP(0x07006d, 0x00bc, 0x00c4, 0x0069, 0x004f, "F18", F18),
-  USB_KEYMAP(0x07006e, 0x00bd, 0x00c5, 0x006a, 0x0050, "F19", F19),
-  USB_KEYMAP(0x07006f, 0x00be, 0x00c6, 0x006b, 0x005a, "F20", F20),
+  DOM_CODE(0x070068, 0x00b7, 0x00bf, 0x0064, 0x0069, "F13", F13),
+  DOM_CODE(0x070069, 0x00b8, 0x00c0, 0x0065, 0x006b, "F14", F14),
+  DOM_CODE(0x07006a, 0x00b9, 0x00c1, 0x0066, 0x0071, "F15", F15),
+  DOM_CODE(0x07006b, 0x00ba, 0x00c2, 0x0067, 0x006a, "F16", F16),
+  DOM_CODE(0x07006c, 0x00bb, 0x00c3, 0x0068, 0x0040, "F17", F17),
+  DOM_CODE(0x07006d, 0x00bc, 0x00c4, 0x0069, 0x004f, "F18", F18),
+  DOM_CODE(0x07006e, 0x00bd, 0x00c5, 0x006a, 0x0050, "F19", F19),
+  DOM_CODE(0x07006f, 0x00be, 0x00c6, 0x006b, 0x005a, "F20", F20),
 
-  USB_KEYMAP(0x070070, 0x00bf, 0x00c7, 0x006c, 0xffff, "F21", F21),
-  USB_KEYMAP(0x070071, 0x00c0, 0x00c8, 0x006d, 0xffff, "F22", F22),
-  USB_KEYMAP(0x070072, 0x00c1, 0x00c9, 0x006e, 0xffff, "F23", F23),
+  DOM_CODE(0x070070, 0x00bf, 0x00c7, 0x006c, 0xffff, "F21", F21),
+  DOM_CODE(0x070071, 0x00c0, 0x00c8, 0x006d, 0xffff, "F22", F22),
+  DOM_CODE(0x070072, 0x00c1, 0x00c9, 0x006e, 0xffff, "F23", F23),
   // USB#0x070073 -- see note W1 at top.
-  USB_KEYMAP(0x070073, 0x00c2, 0x00ca, 0x0076, 0xffff, "F24", F24),
-  USB_KEYMAP(0x070074, 0x0086, 0x008e, 0x0000, 0xffff, "Open", OPEN), // Execute
+  DOM_CODE(0x070073, 0x00c2, 0x00ca, 0x0076, 0xffff, "F24", F24),
+  DOM_CODE(0x070074, 0x0086, 0x008e, 0x0000, 0xffff, "Open", OPEN), // Execute
   // USB#0x070075 Help -- see note M1 at top.
-  USB_KEYMAP(0x070075, 0x008a, 0x0092, 0xe03b, 0xffff, "Help", HELP),
+  DOM_CODE(0x070075, 0x008a, 0x0092, 0xe03b, 0xffff, "Help", HELP),
   // USB#0x070076 Keyboard Menu -- see note L2 at top.
-  //USB_KEYMAP(0x070076, 0x0000, 0x0000, 0x0000, 0xffff, NULL, MENU), // Menu
-  USB_KEYMAP(0x070077, 0x0084, 0x008c, 0x0000, 0xffff, "Select", SELECT), // Select
+  //DOM_CODE(0x070076, 0x0000, 0x0000, 0x0000, 0xffff, NULL, MENU), // Menu
+  DOM_CODE(0x070077, 0x0084, 0x008c, 0x0000, 0xffff, "Select", SELECT), // Select
 
-  //USB_KEYMAP(0x070078, 0x0080, 0x0088, 0x0000, 0xffff, NULL, STOP), // Stop
-  USB_KEYMAP(0x070079, 0x0081, 0x0089, 0x0000, 0xffff, "Again", AGAIN), // Again
-  USB_KEYMAP(0x07007a, 0x0083, 0x008b, 0xe008, 0xffff, "Undo", UNDO),
-  USB_KEYMAP(0x07007b, 0x0089, 0x0091, 0xe017, 0xffff, "Cut", CUT),
-  USB_KEYMAP(0x07007c, 0x0085, 0x008d, 0xe018, 0xffff, "Copy", COPY),
-  USB_KEYMAP(0x07007d, 0x0087, 0x008f, 0xe00a, 0xffff, "Paste", PASTE),
-  USB_KEYMAP(0x07007e, 0x0088, 0x0090, 0x0000, 0xffff, "Find", FIND), // Find
-  USB_KEYMAP(0x07007f, 0x0071, 0x0079, 0xe020, 0x004a, "AudioVolumeMute", VOLUME_MUTE),
+  //DOM_CODE(0x070078, 0x0080, 0x0088, 0x0000, 0xffff, NULL, STOP), // Stop
+  DOM_CODE(0x070079, 0x0081, 0x0089, 0x0000, 0xffff, "Again", AGAIN), // Again
+  DOM_CODE(0x07007a, 0x0083, 0x008b, 0xe008, 0xffff, "Undo", UNDO),
+  DOM_CODE(0x07007b, 0x0089, 0x0091, 0xe017, 0xffff, "Cut", CUT),
+  DOM_CODE(0x07007c, 0x0085, 0x008d, 0xe018, 0xffff, "Copy", COPY),
+  DOM_CODE(0x07007d, 0x0087, 0x008f, 0xe00a, 0xffff, "Paste", PASTE),
+  DOM_CODE(0x07007e, 0x0088, 0x0090, 0x0000, 0xffff, "Find", FIND), // Find
+  DOM_CODE(0x07007f, 0x0071, 0x0079, 0xe020, 0x004a, "AudioVolumeMute", VOLUME_MUTE),
 
-  USB_KEYMAP(0x070080, 0x0073, 0x007b, 0xe030, 0x0048, "AudioVolumeUp", VOLUME_UP),
-  USB_KEYMAP(0x070081, 0x0072, 0x007a, 0xe02e, 0x0049, "AudioVolumeDown", VOLUME_DOWN),
-  //USB_KEYMAP(0x070082, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LOCKING_CAPS_LOCK),
-  //USB_KEYMAP(0x070083, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LOCKING_NUM_LOCK),
-  //USB_KEYMAP(0x070084, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LOCKING_SCROLL_LOCK),
-  USB_KEYMAP(0x070085, 0x0079, 0x0081, 0x007e, 0x005f, "NumpadComma", NUMPAD_COMMA),
+  DOM_CODE(0x070080, 0x0073, 0x007b, 0xe030, 0x0048, "AudioVolumeUp", VOLUME_UP),
+  DOM_CODE(0x070081, 0x0072, 0x007a, 0xe02e, 0x0049, "AudioVolumeDown", VOLUME_DOWN),
+  //DOM_CODE(0x070082, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LOCKING_CAPS_LOCK),
+  //DOM_CODE(0x070083, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LOCKING_NUM_LOCK),
+  //DOM_CODE(0x070084, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LOCKING_SCROLL_LOCK),
+  DOM_CODE(0x070085, 0x0079, 0x0081, 0x007e, 0x005f, "NumpadComma", NUMPAD_COMMA),
 
   // International1
   // USB#070086 is used on AS/400 keyboards. Standard Keypad_= is USB#070067.
-  //USB_KEYMAP(0x070086, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_EQUAL),
+  //DOM_CODE(0x070086, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_EQUAL),
   // USB#070087 is used for Brazilian /? and Japanese _ 'ro'.
-  USB_KEYMAP(0x070087, 0x0059, 0x0061, 0x0073, 0x005e, "IntlRo", INTL_RO),
+  DOM_CODE(0x070087, 0x0059, 0x0061, 0x0073, 0x005e, "IntlRo", INTL_RO),
   // International2
   // USB#070088 is used as Japanese Hiragana/Katakana key.
-  USB_KEYMAP(0x070088, 0x005d, 0x0065, 0x0070, 0x0068, "KanaMode", KANA_MODE),
+  DOM_CODE(0x070088, 0x005d, 0x0065, 0x0070, 0x0068, "KanaMode", KANA_MODE),
   // International3
   // USB#070089 is used as Japanese Yen key.
-  USB_KEYMAP(0x070089, 0x007c, 0x0084, 0x007d, 0x005d, "IntlYen", INTL_YEN),
+  DOM_CODE(0x070089, 0x007c, 0x0084, 0x007d, 0x005d, "IntlYen", INTL_YEN),
   // International4
   // USB#07008a is used as Japanese Henkan (Convert) key.
-  USB_KEYMAP(0x07008a, 0x005c, 0x0064, 0x0079, 0xffff, "Convert", CONVERT),
+  DOM_CODE(0x07008a, 0x005c, 0x0064, 0x0079, 0xffff, "Convert", CONVERT),
   // International5
   // USB#07008b is used as Japanese Muhenkan (No-convert) key.
-  USB_KEYMAP(0x07008b, 0x005e, 0x0066, 0x007b, 0xffff, "NonConvert", NON_CONVERT),
-  //USB_KEYMAP(0x07008c, 0x005f, 0x0067, 0x005c, 0xffff, NULL, INTERNATIONAL6),
-  //USB_KEYMAP(0x07008d, 0x0000, 0x0000, 0x0000, 0xffff, NULL, INTERNATIONAL7),
-  //USB_KEYMAP(0x07008e, 0x0000, 0x0000, 0x0000, 0xffff, NULL, INTERNATIONAL8),
-  //USB_KEYMAP(0x07008f, 0x0000, 0x0000, 0x0000, 0xffff, NULL, INTERNATIONAL9),
+  DOM_CODE(0x07008b, 0x005e, 0x0066, 0x007b, 0xffff, "NonConvert", NON_CONVERT),
+  //DOM_CODE(0x07008c, 0x005f, 0x0067, 0x005c, 0xffff, NULL, INTERNATIONAL6),
+  //DOM_CODE(0x07008d, 0x0000, 0x0000, 0x0000, 0xffff, NULL, INTERNATIONAL7),
+  //DOM_CODE(0x07008e, 0x0000, 0x0000, 0x0000, 0xffff, NULL, INTERNATIONAL8),
+  //DOM_CODE(0x07008f, 0x0000, 0x0000, 0x0000, 0xffff, NULL, INTERNATIONAL9),
 
   // LANG1
   // USB#070090 is used as Korean Hangul/English toggle key.
-  USB_KEYMAP(0x070090, 0x007a, 0x0082, 0x0072, 0xffff, "Lang1", LANG1),
+  DOM_CODE(0x070090, 0x007a, 0x0082, 0x0072, 0xffff, "Lang1", LANG1),
   // LANG2
   // USB#070091 is used as Korean Hanja conversion key.
-  USB_KEYMAP(0x070091, 0x007b, 0x0083, 0x0071, 0xffff, "Lang2", LANG2),
+  DOM_CODE(0x070091, 0x007b, 0x0083, 0x0071, 0xffff, "Lang2", LANG2),
   // LANG3
   // USB#070092 is used as Japanese Katakana key.
-  USB_KEYMAP(0x070092, 0x005a, 0x0062, 0x0078, 0xffff, "Lang3", LANG3),
+  DOM_CODE(0x070092, 0x005a, 0x0062, 0x0078, 0xffff, "Lang3", LANG3),
   // LANG4
   // USB#070093 is used as Japanese Hiragana key.
-  USB_KEYMAP(0x070093, 0x005b, 0x0063, 0x0077, 0xffff, "Lang4", LANG4),
+  DOM_CODE(0x070093, 0x005b, 0x0063, 0x0077, 0xffff, "Lang4", LANG4),
   // LANG5
   // USB#070094 is used as Japanese Zenkaku/Hankaku (Fullwidth/halfwidth) key.
   // Not mapped on Windows -- see note W1 at top.
-  USB_KEYMAP(0x070094, 0x0055, 0x005d, 0x0000, 0xffff, "Lang5", LANG5),
-  //USB_KEYMAP(0x070095, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG6), // LANG6
-  //USB_KEYMAP(0x070096, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG7), // LANG7
-  //USB_KEYMAP(0x070097, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG8), // LANG8
-  //USB_KEYMAP(0x070098, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG9), // LANG9
+  DOM_CODE(0x070094, 0x0055, 0x005d, 0x0000, 0xffff, "Lang5", LANG5),
+  //DOM_CODE(0x070095, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG6), // LANG6
+  //DOM_CODE(0x070096, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG7), // LANG7
+  //DOM_CODE(0x070097, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG8), // LANG8
+  //DOM_CODE(0x070098, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LANG9), // LANG9
 
-  //USB_KEYMAP(0x070099, 0x0000, 0x0000, 0x0000, 0xffff, NULL, ALTERNATE_ERASE),
-  //USB_KEYMAP(0x07009a, 0x0000, 0x0000, 0x0000, 0xffff, NULL, SYS_REQ), // /Attention
-  USB_KEYMAP(0x07009b, 0x0000, 0x0000, 0x0000, 0xffff, "Abort", ABORT), // Cancel
+  //DOM_CODE(0x070099, 0x0000, 0x0000, 0x0000, 0xffff, NULL, ALTERNATE_ERASE),
+  //DOM_CODE(0x07009a, 0x0000, 0x0000, 0x0000, 0xffff, NULL, SYS_REQ), // /Attention
+  DOM_CODE(0x07009b, 0x0000, 0x0000, 0x0000, 0xffff, "Abort", ABORT), // Cancel
   // USB#0x07009c Keyboard Clear -- see note L1 at top.
-  //USB_KEYMAP(0x07009c, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CLEAR), // Clear
-  //USB_KEYMAP(0x07009d, 0x0000, 0x0000, 0x0000, 0xffff, NULL, PRIOR), // Prior
-  //USB_KEYMAP(0x07009e, 0x0000, 0x0000, 0x0000, 0xffff, NULL, RETURN), // Return
-  //USB_KEYMAP(0x07009f, 0x0000, 0x0000, 0x0000, 0xffff, NULL, SEPARATOR), // Separator
+  //DOM_CODE(0x07009c, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CLEAR), // Clear
+  //DOM_CODE(0x07009d, 0x0000, 0x0000, 0x0000, 0xffff, NULL, PRIOR), // Prior
+  //DOM_CODE(0x07009e, 0x0000, 0x0000, 0x0000, 0xffff, NULL, RETURN), // Return
+  //DOM_CODE(0x07009f, 0x0000, 0x0000, 0x0000, 0xffff, NULL, SEPARATOR), // Separator
 
-  //USB_KEYMAP(0x0700a0, 0x0000, 0x0000, 0x0000, 0xffff, NULL, OUT), // Out
-  //USB_KEYMAP(0x0700a1, 0x0000, 0x0000, 0x0000, 0xffff, NULL, OPER), // Oper
-  //USB_KEYMAP(0x0700a2, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CLEAR_AGAIN),
+  //DOM_CODE(0x0700a0, 0x0000, 0x0000, 0x0000, 0xffff, NULL, OUT), // Out
+  //DOM_CODE(0x0700a1, 0x0000, 0x0000, 0x0000, 0xffff, NULL, OPER), // Oper
+  //DOM_CODE(0x0700a2, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CLEAR_AGAIN),
   // USB#0x0700a3 Props -- see note L2 at top.
-  USB_KEYMAP(0x0700a3, 0x0000, 0x0000, 0x0000, 0xffff, "Props", PROPS), // CrSel/Props
-  //USB_KEYMAP(0x0700a4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, EX_SEL), // ExSel
+  DOM_CODE(0x0700a3, 0x0000, 0x0000, 0x0000, 0xffff, "Props", PROPS), // CrSel/Props
+  //DOM_CODE(0x0700a4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, EX_SEL), // ExSel
 
-  //USB_KEYMAP(0x0700b0, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_00),
-  //USB_KEYMAP(0x0700b1, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_000),
-  //USB_KEYMAP(0x0700b2, 0x0000, 0x0000, 0x0000, 0xffff, NULL, THOUSANDS_SEPARATOR),
-  //USB_KEYMAP(0x0700b3, 0x0000, 0x0000, 0x0000, 0xffff, NULL, DECIMAL_SEPARATOR),
-  //USB_KEYMAP(0x0700b4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CURRENCY_UNIT),
-  //USB_KEYMAP(0x0700b5, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CURRENCY_SUBUNIT),
-  USB_KEYMAP(0x0700b6, 0x00b3, 0x00bb, 0x0000, 0xffff, "NumpadParenLeft",
+  //DOM_CODE(0x0700b0, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_00),
+  //DOM_CODE(0x0700b1, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_000),
+  //DOM_CODE(0x0700b2, 0x0000, 0x0000, 0x0000, 0xffff, NULL, THOUSANDS_SEPARATOR),
+  //DOM_CODE(0x0700b3, 0x0000, 0x0000, 0x0000, 0xffff, NULL, DECIMAL_SEPARATOR),
+  //DOM_CODE(0x0700b4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CURRENCY_UNIT),
+  //DOM_CODE(0x0700b5, 0x0000, 0x0000, 0x0000, 0xffff, NULL, CURRENCY_SUBUNIT),
+  DOM_CODE(0x0700b6, 0x00b3, 0x00bb, 0x0000, 0xffff, "NumpadParenLeft",
              NUMPAD_PAREN_LEFT),   // Keypad_(
-  USB_KEYMAP(0x0700b7, 0x00b4, 0x00bc, 0x0000, 0xffff, "NumpadParenRight",
+  DOM_CODE(0x0700b7, 0x00b4, 0x00bc, 0x0000, 0xffff, "NumpadParenRight",
              NUMPAD_PAREN_RIGHT),  // Keypad_)
 
-  //USB_KEYMAP(0x0700b8, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_BRACE_LEFT),
-  //USB_KEYMAP(0x0700b9, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_BRACE_RIGHT),
-  //USB_KEYMAP(0x0700ba, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_TAB),
-  USB_KEYMAP(0x0700bb, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadBackspace",
+  //DOM_CODE(0x0700b8, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_BRACE_LEFT),
+  //DOM_CODE(0x0700b9, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_BRACE_RIGHT),
+  //DOM_CODE(0x0700ba, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_TAB),
+  DOM_CODE(0x0700bb, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadBackspace",
              NUMPAD_BACKSPACE),  // Keypad_Backspace
-  //USB_KEYMAP(0x0700bc, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_A),
-  //USB_KEYMAP(0x0700bd, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_B),
-  //USB_KEYMAP(0x0700be, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_C),
-  //USB_KEYMAP(0x0700bf, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_D),
+  //DOM_CODE(0x0700bc, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_A),
+  //DOM_CODE(0x0700bd, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_B),
+  //DOM_CODE(0x0700be, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_C),
+  //DOM_CODE(0x0700bf, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_D),
 
-  //USB_KEYMAP(0x0700c0, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_E),
-  //USB_KEYMAP(0x0700c1, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_F),
-  //USB_KEYMAP(0x0700c2, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_XOR),
-  //USB_KEYMAP(0x0700c3, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_CARAT),
-  //USB_KEYMAP(0x0700c4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_PERCENT),
-  //USB_KEYMAP(0x0700c5, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_LESS_THAN),
-  //USB_KEYMAP(0x0700c6, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_GREATER_THAN),
-  //USB_KEYMAP(0x0700c7, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_AMERSAND),
+  //DOM_CODE(0x0700c0, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_E),
+  //DOM_CODE(0x0700c1, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_F),
+  //DOM_CODE(0x0700c2, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_XOR),
+  //DOM_CODE(0x0700c3, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_CARAT),
+  //DOM_CODE(0x0700c4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_PERCENT),
+  //DOM_CODE(0x0700c5, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_LESS_THAN),
+  //DOM_CODE(0x0700c6, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_GREATER_THAN),
+  //DOM_CODE(0x0700c7, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_AMERSAND),
 
-  //USB_KEYMAP(0x0700c8, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_DOUBLE_AMPERSAND),
-  //USB_KEYMAP(0x0700c9, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_VERTICAL_BAR),
-  //USB_KEYMAP(0x0700ca, 0x0000, 0x0000, 0x0000, 0xffff, NULL,
+  //DOM_CODE(0x0700c8, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_DOUBLE_AMPERSAND),
+  //DOM_CODE(0x0700c9, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_VERTICAL_BAR),
+  //DOM_CODE(0x0700ca, 0x0000, 0x0000, 0x0000, 0xffff, NULL,
   //           NUMPAD_DOUBLE_VERTICAL_BAR),  // Keypad_||
-  //USB_KEYMAP(0x0700cb, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_COLON),
-  //USB_KEYMAP(0x0700cc, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_NUMBER),
-  //USB_KEYMAP(0x0700cd, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_SPACE),
-  //USB_KEYMAP(0x0700ce, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_AT),
-  //USB_KEYMAP(0x0700cf, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_EXCLAMATION),
+  //DOM_CODE(0x0700cb, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_COLON),
+  //DOM_CODE(0x0700cc, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_NUMBER),
+  //DOM_CODE(0x0700cd, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_SPACE),
+  //DOM_CODE(0x0700ce, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_AT),
+  //DOM_CODE(0x0700cf, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_EXCLAMATION),
 
-  USB_KEYMAP(0x0700d0, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryStore",
+  DOM_CODE(0x0700d0, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryStore",
              NUMPAD_MEMORY_STORE),  // Keypad_MemoryStore
-  USB_KEYMAP(0x0700d1, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryRecall",
+  DOM_CODE(0x0700d1, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryRecall",
              NUMPAD_MEMORY_RECALL),  // Keypad_MemoryRecall
-  USB_KEYMAP(0x0700d2, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryClear",
+  DOM_CODE(0x0700d2, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryClear",
              NUMPAD_MEMORY_CLEAR),  // Keypad_MemoryClear
-  USB_KEYMAP(0x0700d3, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryAdd",
+  DOM_CODE(0x0700d3, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryAdd",
              NUMPAD_MEMORY_ADD),  // Keypad_MemoryAdd
-  USB_KEYMAP(0x0700d4, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemorySubtract",
+  DOM_CODE(0x0700d4, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemorySubtract",
              NUMPAD_MEMORY_SUBTRACT),  // Keypad_MemorySubtract
-  //USB_KEYMAP(0x0700d5, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_MEMORY_MULTIPLE),
-  //USB_KEYMAP(0x0700d6, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_MEMORY_DIVIDE),
-  USB_KEYMAP(0x0700d7, 0x0076, 0x007e, 0x0000, 0xffff, NULL, NUMPAD_SIGN_CHANGE), // +/-
+  //DOM_CODE(0x0700d5, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_MEMORY_MULTIPLE),
+  //DOM_CODE(0x0700d6, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_MEMORY_DIVIDE),
+  DOM_CODE(0x0700d7, 0x0076, 0x007e, 0x0000, 0xffff, NULL, NUMPAD_SIGN_CHANGE), // +/-
   // USB#0x0700d8 Keypad Clear -- see note L1 at top.
-  USB_KEYMAP(0x0700d8, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClear", NUMPAD_CLEAR),
-  USB_KEYMAP(0x0700d9, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClearEntry",
+  DOM_CODE(0x0700d8, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClear", NUMPAD_CLEAR),
+  DOM_CODE(0x0700d9, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClearEntry",
              NUMPAD_CLEAR_ENTRY),  // Keypad_ClearEntry
-  //USB_KEYMAP(0x0700da, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_BINARY),
-  //USB_KEYMAP(0x0700db, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_OCTAL),
-  //USB_KEYMAP(0x0700dc, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_DECIMAL),
-  //USB_KEYMAP(0x0700dd, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_HEXADECIMAL),
+  //DOM_CODE(0x0700da, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_BINARY),
+  //DOM_CODE(0x0700db, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_OCTAL),
+  //DOM_CODE(0x0700dc, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_DECIMAL),
+  //DOM_CODE(0x0700dd, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NUMPAD_HEXADECIMAL),
 
   // USB#0700de - #0700df are reserved.
-  USB_KEYMAP(0x0700e0, 0x001d, 0x0025, 0x001d, 0x003b, "ControlLeft", CONTROL_LEFT),
-  USB_KEYMAP(0x0700e1, 0x002a, 0x0032, 0x002a, 0x0038, "ShiftLeft", SHIFT_LEFT),
+  DOM_CODE(0x0700e0, 0x001d, 0x0025, 0x001d, 0x003b, "ControlLeft", CONTROL_LEFT),
+  DOM_CODE(0x0700e1, 0x002a, 0x0032, 0x002a, 0x0038, "ShiftLeft", SHIFT_LEFT),
   // USB#0700e2: left Alt key (Mac left Option key).
-  USB_KEYMAP(0x0700e2, 0x0038, 0x0040, 0x0038, 0x003a, "AltLeft", ALT_LEFT),
+  DOM_CODE(0x0700e2, 0x0038, 0x0040, 0x0038, 0x003a, "AltLeft", ALT_LEFT),
   // USB#0700e3: left GUI key, e.g. Windows, Mac Command, ChromeOS Search.
-  USB_KEYMAP(0x0700e3, 0x007d, 0x0085, 0xe05b, 0x0037, "MetaLeft", META_LEFT),
-  USB_KEYMAP(0x0700e4, 0x0061, 0x0069, 0xe01d, 0x003e, "ControlRight", CONTROL_RIGHT),
-  USB_KEYMAP(0x0700e5, 0x0036, 0x003e, 0x0036, 0x003c, "ShiftRight", SHIFT_RIGHT),
+  DOM_CODE(0x0700e3, 0x007d, 0x0085, 0xe05b, 0x0037, "MetaLeft", META_LEFT),
+  DOM_CODE(0x0700e4, 0x0061, 0x0069, 0xe01d, 0x003e, "ControlRight", CONTROL_RIGHT),
+  DOM_CODE(0x0700e5, 0x0036, 0x003e, 0x0036, 0x003c, "ShiftRight", SHIFT_RIGHT),
   // USB#0700e6: right Alt key (Mac right Option key).
-  USB_KEYMAP(0x0700e6, 0x0064, 0x006c, 0xe038, 0x003d, "AltRight", ALT_RIGHT),
+  DOM_CODE(0x0700e6, 0x0064, 0x006c, 0xe038, 0x003d, "AltRight", ALT_RIGHT),
   // USB#0700e7: right GUI key, e.g. Windows, Mac Command, ChromeOS Search.
-  USB_KEYMAP(0x0700e7, 0x007e, 0x0086, 0xe05c, 0x0036, "MetaRight", META_RIGHT),
+  DOM_CODE(0x0700e7, 0x007e, 0x0086, 0xe05c, 0x0036, "MetaRight", META_RIGHT),
 
   // USB#0700e8 - #07ffff are reserved
 
@@ -466,129 +466,129 @@
   // KEY_BRIGHTNESS* added in Linux 3.16
   // http://www.usb.org/developers/hidpage/HUTRR41.pdf
   //            USB     evdev    XKB     Win     Mac   Code
-  USB_KEYMAP(0x0c0060, 0x0166, 0x016e, 0x0000, 0xffff, NULL, INFO),
-  USB_KEYMAP(0x0c0061, 0x0172, 0x017a, 0x0000, 0xffff, NULL, CLOSED_CAPTION_TOGGLE),
-  USB_KEYMAP(0x0c006f, 0x00e1, 0x00e9, 0x0000, 0xffff, "BrightnessUp", BRIGHTNESS_UP),
-  USB_KEYMAP(0x0c0070, 0x00e0, 0x00e8, 0x0000, 0xffff, "BrightnessDown",
+  DOM_CODE(0x0c0060, 0x0166, 0x016e, 0x0000, 0xffff, NULL, INFO),
+  DOM_CODE(0x0c0061, 0x0172, 0x017a, 0x0000, 0xffff, NULL, CLOSED_CAPTION_TOGGLE),
+  DOM_CODE(0x0c006f, 0x00e1, 0x00e9, 0x0000, 0xffff, "BrightnessUp", BRIGHTNESS_UP),
+  DOM_CODE(0x0c0070, 0x00e0, 0x00e8, 0x0000, 0xffff, "BrightnessDown",
              BRIGHTNESS_DOWN),  // Display Brightness Decrement
-  USB_KEYMAP(0x0c0072, 0x01af, 0x01b7, 0x0000, 0xffff, NULL, BRIGHTNESS_TOGGLE),
-  USB_KEYMAP(0x0c0073, 0x0250, 0x0258, 0x0000, 0xffff, NULL, BRIGHTNESS_MINIMIUM),
-  USB_KEYMAP(0x0c0074, 0x0251, 0x0259, 0x0000, 0xffff, NULL, BRIGHTNESS_MAXIMUM),
-  USB_KEYMAP(0x0c0075, 0x00f4, 0x00fc, 0x0000, 0xffff, NULL, BRIGHTNESS_AUTO),
-  USB_KEYMAP(0x0c0083, 0x0195, 0x019d, 0x0000, 0xffff, NULL, MEDIA_LAST),
-  USB_KEYMAP(0x0c008c, 0x00a9, 0x00b1, 0x0000, 0xffff, NULL, LAUNCH_PHONE),
-  USB_KEYMAP(0x0c008d, 0x016a, 0x0172, 0x0000, 0xffff, NULL, PROGRAM_GUIDE),
-  USB_KEYMAP(0x0c0094, 0x00ae, 0x00b6, 0x0000, 0xffff, NULL, EXIT),
-  USB_KEYMAP(0x0c009c, 0x019a, 0x01a2, 0x0000, 0xffff, NULL, CHANNEL_UP),
-  USB_KEYMAP(0x0c009d, 0x019b, 0x01a3, 0x0000, 0xffff, NULL, CHANNEL_DOWN),
+  DOM_CODE(0x0c0072, 0x01af, 0x01b7, 0x0000, 0xffff, NULL, BRIGHTNESS_TOGGLE),
+  DOM_CODE(0x0c0073, 0x0250, 0x0258, 0x0000, 0xffff, NULL, BRIGHTNESS_MINIMIUM),
+  DOM_CODE(0x0c0074, 0x0251, 0x0259, 0x0000, 0xffff, NULL, BRIGHTNESS_MAXIMUM),
+  DOM_CODE(0x0c0075, 0x00f4, 0x00fc, 0x0000, 0xffff, NULL, BRIGHTNESS_AUTO),
+  DOM_CODE(0x0c0083, 0x0195, 0x019d, 0x0000, 0xffff, NULL, MEDIA_LAST),
+  DOM_CODE(0x0c008c, 0x00a9, 0x00b1, 0x0000, 0xffff, NULL, LAUNCH_PHONE),
+  DOM_CODE(0x0c008d, 0x016a, 0x0172, 0x0000, 0xffff, NULL, PROGRAM_GUIDE),
+  DOM_CODE(0x0c0094, 0x00ae, 0x00b6, 0x0000, 0xffff, NULL, EXIT),
+  DOM_CODE(0x0c009c, 0x019a, 0x01a2, 0x0000, 0xffff, NULL, CHANNEL_UP),
+  DOM_CODE(0x0c009d, 0x019b, 0x01a3, 0x0000, 0xffff, NULL, CHANNEL_DOWN),
 
   //              USB     evdev    XKB     Win     Mac
-  USB_KEYMAP(0x0c00b0, 0x00cf, 0x00d7, 0x0000, 0xffff, "MediaPlay", MEDIA_PLAY),
-  //USB_KEYMAP(0x0c00b1, 0x0077, 0x007f, 0x0000, 0xffff, "MediaPause", MEDIA_PAUSE),
-  USB_KEYMAP(0x0c00b2, 0x00a7, 0x00af, 0x0000, 0xffff, "MediaRecord", MEDIA_RECORD),
-  USB_KEYMAP(0x0c00b3, 0x00d0, 0x00d8, 0x0000, 0xffff, "MediaFastForward", MEDIA_FAST_FORWARD),
-  USB_KEYMAP(0x0c00b4, 0x00a8, 0x00b0, 0x0000, 0xffff, "MediaRewind", MEDIA_REWIND),
-  USB_KEYMAP(0x0c00b5, 0x00a3, 0x00ab, 0xe019, 0xffff, "MediaTrackNext",
+  DOM_CODE(0x0c00b0, 0x00cf, 0x00d7, 0x0000, 0xffff, "MediaPlay", MEDIA_PLAY),
+  //DOM_CODE(0x0c00b1, 0x0077, 0x007f, 0x0000, 0xffff, "MediaPause", MEDIA_PAUSE),
+  DOM_CODE(0x0c00b2, 0x00a7, 0x00af, 0x0000, 0xffff, "MediaRecord", MEDIA_RECORD),
+  DOM_CODE(0x0c00b3, 0x00d0, 0x00d8, 0x0000, 0xffff, "MediaFastForward", MEDIA_FAST_FORWARD),
+  DOM_CODE(0x0c00b4, 0x00a8, 0x00b0, 0x0000, 0xffff, "MediaRewind", MEDIA_REWIND),
+  DOM_CODE(0x0c00b5, 0x00a3, 0x00ab, 0xe019, 0xffff, "MediaTrackNext",
              MEDIA_TRACK_NEXT),
-  USB_KEYMAP(0x0c00b6, 0x00a5, 0x00ad, 0xe010, 0xffff, "MediaTrackPrevious",
+  DOM_CODE(0x0c00b6, 0x00a5, 0x00ad, 0xe010, 0xffff, "MediaTrackPrevious",
              MEDIA_TRACK_PREVIOUS),
-  USB_KEYMAP(0x0c00b7, 0x00a6, 0x00ae, 0xe024, 0xffff, "MediaStop", MEDIA_STOP),
-  USB_KEYMAP(0x0c00b8, 0x00a1, 0x00a9, 0xe02c, 0xffff, "Eject", EJECT),
-  USB_KEYMAP(0x0c00cd, 0x00a4, 0x00ac, 0xe022, 0xffff, "MediaPlayPause",
+  DOM_CODE(0x0c00b7, 0x00a6, 0x00ae, 0xe024, 0xffff, "MediaStop", MEDIA_STOP),
+  DOM_CODE(0x0c00b8, 0x00a1, 0x00a9, 0xe02c, 0xffff, "Eject", EJECT),
+  DOM_CODE(0x0c00cd, 0x00a4, 0x00ac, 0xe022, 0xffff, "MediaPlayPause",
              MEDIA_PLAY_PAUSE),
-  USB_KEYMAP(0x0c00cf, 0x0246, 0x024e, 0x0000, 0xffff, NULL, SPEECH_INPUT_TOGGLE),
-  USB_KEYMAP(0x0c00e5, 0x00d1, 0x00d9, 0x0000, 0xffff, NULL, BASS_BOOST),
-  //USB_KEYMAP(0x0c00e6, 0x0000, 0x0000, 0x0000, 0xffff, NULL, SURROUND_MODE),
-  //USB_KEYMAP(0x0c0150, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BALANCE_RIGHT),
-  //USB_KEYMAP(0x0c0151, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BALANCE_LEFT ),
-  //USB_KEYMAP(0x0c0152, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BASS_INCREMENT),
-  //USB_KEYMAP(0x0c0153, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BASS_DECREMENT),
-  //USB_KEYMAP(0x0c0154, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_TREBLE_INCREMENT),
-  //USB_KEYMAP(0x0c0155, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_TREBLE_DECREMENT),
+  DOM_CODE(0x0c00cf, 0x0246, 0x024e, 0x0000, 0xffff, NULL, SPEECH_INPUT_TOGGLE),
+  DOM_CODE(0x0c00e5, 0x00d1, 0x00d9, 0x0000, 0xffff, NULL, BASS_BOOST),
+  //DOM_CODE(0x0c00e6, 0x0000, 0x0000, 0x0000, 0xffff, NULL, SURROUND_MODE),
+  //DOM_CODE(0x0c0150, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BALANCE_RIGHT),
+  //DOM_CODE(0x0c0151, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BALANCE_LEFT ),
+  //DOM_CODE(0x0c0152, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BASS_INCREMENT),
+  //DOM_CODE(0x0c0153, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_BASS_DECREMENT),
+  //DOM_CODE(0x0c0154, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_TREBLE_INCREMENT),
+  //DOM_CODE(0x0c0155, 0x0000, 0x0000, 0x0000, 0xffff, NULL, AUDIO_TREBLE_DECREMENT),
   // USB#0c0183: AL Consumer Control Configuration
-  USB_KEYMAP(0x0c0183, 0x00ab, 0x00b3, 0xe06d, 0xffff, "MediaSelect", MEDIA_SELECT),
-  USB_KEYMAP(0x0c0184, 0x01a5, 0x01ad, 0x0000, 0xffff, NULL, LAUNCH_WORD_PROCESSOR),
-  USB_KEYMAP(0x0c0186, 0x01a7, 0x01af, 0x0000, 0xffff, NULL, LAUNCH_SPREADSHEET),
+  DOM_CODE(0x0c0183, 0x00ab, 0x00b3, 0xe06d, 0xffff, "MediaSelect", MEDIA_SELECT),
+  DOM_CODE(0x0c0184, 0x01a5, 0x01ad, 0x0000, 0xffff, NULL, LAUNCH_WORD_PROCESSOR),
+  DOM_CODE(0x0c0186, 0x01a7, 0x01af, 0x0000, 0xffff, NULL, LAUNCH_SPREADSHEET),
   // USB#0x0c018a AL_EmailReader
-  USB_KEYMAP(0x0c018a, 0x009b, 0x00a3, 0xe06c, 0xffff, "LaunchMail", LAUNCH_MAIL),
+  DOM_CODE(0x0c018a, 0x009b, 0x00a3, 0xe06c, 0xffff, "LaunchMail", LAUNCH_MAIL),
   // USB#0x0c018d: AL Contacts/Address Book
-  USB_KEYMAP(0x0c018d, 0x01ad, 0x01b5, 0x0000, 0xffff, NULL, LAUNCH_CONTACTS),
+  DOM_CODE(0x0c018d, 0x01ad, 0x01b5, 0x0000, 0xffff, NULL, LAUNCH_CONTACTS),
   // USB#0x0c018e: AL Calendar/Schedule
-  USB_KEYMAP(0x0c018e, 0x018d, 0x0195, 0x0000, 0xffff, NULL, LAUNCH_CALENDAR),
+  DOM_CODE(0x0c018e, 0x018d, 0x0195, 0x0000, 0xffff, NULL, LAUNCH_CALENDAR),
   // USB#0x0c018f AL Task/Project Manager
-  //USB_KEYMAP(0x0c018f, 0x0241, 0x0249, 0x0000, 0xffff, NULL, LAUNCH_TASK_MANAGER),
+  //DOM_CODE(0x0c018f, 0x0241, 0x0249, 0x0000, 0xffff, NULL, LAUNCH_TASK_MANAGER),
   // USB#0x0c0190: AL Log/Journal/Timecard
-  //USB_KEYMAP(0x0c0190, 0x0242, 0x024a, 0x0000, 0xffff, NULL, LAUNCH_LOG),
+  //DOM_CODE(0x0c0190, 0x0242, 0x024a, 0x0000, 0xffff, NULL, LAUNCH_LOG),
   // USB#0x0c0192: AL_Calculator
-  USB_KEYMAP(0x0c0192, 0x008c, 0x0094, 0xe021, 0xffff, "LaunchApp2", LAUNCH_APP2),
+  DOM_CODE(0x0c0192, 0x008c, 0x0094, 0xe021, 0xffff, "LaunchApp2", LAUNCH_APP2),
   // USB#0c0194: My Computer (AL_LocalMachineBrowser)
-  USB_KEYMAP(0x0c0194, 0x0090, 0x0098, 0xe06b, 0xffff, "LaunchApp1", LAUNCH_APP1),
-  USB_KEYMAP(0x0c0196, 0x0096, 0x009e, 0x0000, 0xffff, NULL, LAUNCH_INTERNET_BROWSER),
-  USB_KEYMAP(0x0c019C, 0x01b1, 0x01b9, 0x0000, 0xffff, NULL, LOG_OFF),
+  DOM_CODE(0x0c0194, 0x0090, 0x0098, 0xe06b, 0xffff, "LaunchApp1", LAUNCH_APP1),
+  DOM_CODE(0x0c0196, 0x0096, 0x009e, 0x0000, 0xffff, NULL, LAUNCH_INTERNET_BROWSER),
+  DOM_CODE(0x0c019C, 0x01b1, 0x01b9, 0x0000, 0xffff, NULL, LOG_OFF),
   // USB#0x0c019e: AL Terminal Lock/Screensaver
-  USB_KEYMAP(0x0c019e, 0x0098, 0x00a0, 0x0000, 0xffff, NULL, LOCK_SCREEN),
+  DOM_CODE(0x0c019e, 0x0098, 0x00a0, 0x0000, 0xffff, NULL, LOCK_SCREEN),
   // USB#0x0c019f AL Control Panel
-  USB_KEYMAP(0x0c019f, 0x0243, 0x024b, 0x0000, 0xffff, "LaunchControlPanel",
+  DOM_CODE(0x0c019f, 0x0243, 0x024b, 0x0000, 0xffff, "LaunchControlPanel",
              LAUNCH_CONTROL_PANEL),
   // USB#0x0c01a2: AL Select Task/Application
-  USB_KEYMAP(0x0c01a2, 0x0244, 0x024c, 0x0000, 0xffff, "SelectTask", SELECT_TASK),
+  DOM_CODE(0x0c01a2, 0x0244, 0x024c, 0x0000, 0xffff, "SelectTask", SELECT_TASK),
   // USB#0x0c01a7: AL_Documents
-  USB_KEYMAP(0x0c01a7, 0x00eb, 0x00f3, 0x0000, 0xffff, NULL, LAUNCH_DOCUMENTS),
-  USB_KEYMAP(0x0c01ab, 0x01b0, 0x01b8, 0x0000, 0xffff, NULL, SPELL_CHECK),
+  DOM_CODE(0x0c01a7, 0x00eb, 0x00f3, 0x0000, 0xffff, NULL, LAUNCH_DOCUMENTS),
+  DOM_CODE(0x0c01ab, 0x01b0, 0x01b8, 0x0000, 0xffff, NULL, SPELL_CHECK),
   // USB#0x0c01ae: AL Keyboard Layout
-  USB_KEYMAP(0x0c01ae, 0x0176, 0x017e, 0x0000, 0xffff, NULL, LAUNCH_KEYBOARD_LAYOUT),
-  USB_KEYMAP(0x0c01b1, 0x0245, 0x024d, 0x0000, 0xffff, "LaunchScreenSaver",
+  DOM_CODE(0x0c01ae, 0x0176, 0x017e, 0x0000, 0xffff, NULL, LAUNCH_KEYBOARD_LAYOUT),
+  DOM_CODE(0x0c01b1, 0x0245, 0x024d, 0x0000, 0xffff, "LaunchScreenSaver",
              LAUNCH_SCREEN_SAVER),  // AL Screen Saver
-  USB_KEYMAP(0x0c01cb, 0x0247, 0x024f, 0x0000, 0xffff, "LaunchAssistant",
+  DOM_CODE(0x0c01cb, 0x0247, 0x024f, 0x0000, 0xffff, "LaunchAssistant",
              LAUNCH_ASSISTANT),  // AL Context-aware desktop assistant
    // USB#0c01b4: Home Directory (AL_FileBrowser) (Explorer)
-  //USB_KEYMAP(0x0c01b4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LAUNCH_FILE_BROWSER),
+  //DOM_CODE(0x0c01b4, 0x0000, 0x0000, 0x0000, 0xffff, NULL, LAUNCH_FILE_BROWSER),
   // USB#0x0c01b7: AL Audio Browser
-  USB_KEYMAP(0x0c01b7, 0x0188, 0x0190, 0x0000, 0xffff, NULL, LAUNCH_AUDIO_BROWSER),
+  DOM_CODE(0x0c01b7, 0x0188, 0x0190, 0x0000, 0xffff, NULL, LAUNCH_AUDIO_BROWSER),
   // USB#0x0c0201: AC New
-  USB_KEYMAP(0x0c0201, 0x00b5, 0x00bd, 0x0000, 0xffff, NULL, NEW),
+  DOM_CODE(0x0c0201, 0x00b5, 0x00bd, 0x0000, 0xffff, NULL, NEW),
   // USB#0x0c0203: AC Close
-  USB_KEYMAP(0x0c0203, 0x00ce, 0x00d6, 0x0000, 0xffff, NULL, CLOSE),
+  DOM_CODE(0x0c0203, 0x00ce, 0x00d6, 0x0000, 0xffff, NULL, CLOSE),
   // USB#0x0c0207: AC Close
-  USB_KEYMAP(0x0c0207, 0x00ea, 0x00f2, 0x0000, 0xffff, NULL, SAVE),
+  DOM_CODE(0x0c0207, 0x00ea, 0x00f2, 0x0000, 0xffff, NULL, SAVE),
   // USB#0x0c0208: AC Print
-  USB_KEYMAP(0x0c0208, 0x00d2, 0x00da, 0x0000, 0xffff, NULL, PRINT),
+  DOM_CODE(0x0c0208, 0x00d2, 0x00da, 0x0000, 0xffff, NULL, PRINT),
   // USB#0x0c0221:  AC_Search
-  USB_KEYMAP(0x0c0221, 0x00d9, 0x00e1, 0xe065, 0xffff, "BrowserSearch", BROWSER_SEARCH),
+  DOM_CODE(0x0c0221, 0x00d9, 0x00e1, 0xe065, 0xffff, "BrowserSearch", BROWSER_SEARCH),
   // USB#0x0c0223:  AC_Home
-  USB_KEYMAP(0x0c0223, 0x00ac, 0x00b4, 0xe032, 0xffff, "BrowserHome", BROWSER_HOME),
+  DOM_CODE(0x0c0223, 0x00ac, 0x00b4, 0xe032, 0xffff, "BrowserHome", BROWSER_HOME),
   // USB#0x0c0224:  AC_Back
-  USB_KEYMAP(0x0c0224, 0x009e, 0x00a6, 0xe06a, 0xffff, "BrowserBack", BROWSER_BACK),
+  DOM_CODE(0x0c0224, 0x009e, 0x00a6, 0xe06a, 0xffff, "BrowserBack", BROWSER_BACK),
   // USB#0x0c0225:  AC_Forward
-  USB_KEYMAP(0x0c0225, 0x009f, 0x00a7, 0xe069, 0xffff, "BrowserForward",
+  DOM_CODE(0x0c0225, 0x009f, 0x00a7, 0xe069, 0xffff, "BrowserForward",
              BROWSER_FORWARD),
   // USB#0x0c0226:  AC_Stop
-  USB_KEYMAP(0x0c0226, 0x0080, 0x0088, 0xe068, 0xffff, "BrowserStop", BROWSER_STOP),
+  DOM_CODE(0x0c0226, 0x0080, 0x0088, 0xe068, 0xffff, "BrowserStop", BROWSER_STOP),
   // USB#0x0c0227:  AC_Refresh (Reload)
-  USB_KEYMAP(0x0c0227, 0x00ad, 0x00b5, 0xe067, 0xffff, "BrowserRefresh",
+  DOM_CODE(0x0c0227, 0x00ad, 0x00b5, 0xe067, 0xffff, "BrowserRefresh",
              BROWSER_REFRESH),
   // USB#0x0c022a:  AC_Bookmarks (Favorites)
-  USB_KEYMAP(0x0c022a, 0x009c, 0x00a4, 0xe066, 0xffff, "BrowserFavorites",
+  DOM_CODE(0x0c022a, 0x009c, 0x00a4, 0xe066, 0xffff, "BrowserFavorites",
              BROWSER_FAVORITES),
-  USB_KEYMAP(0x0c022d, 0x01a2, 0x01aa, 0x0000, 0xffff, NULL, ZOOM_IN),
-  USB_KEYMAP(0x0c022e, 0x01a3, 0x01ab, 0x0000, 0xffff, NULL, ZOOM_OUT),
+  DOM_CODE(0x0c022d, 0x01a2, 0x01aa, 0x0000, 0xffff, NULL, ZOOM_IN),
+  DOM_CODE(0x0c022e, 0x01a3, 0x01ab, 0x0000, 0xffff, NULL, ZOOM_OUT),
   // USB#0x0c0230:  AC Full Screen View
-  //USB_KEYMAP(0x0c0230, 0x0000, 0x0000, 0x0000, 0xffff, NULL, ZOOM_FULL),
+  //DOM_CODE(0x0c0230, 0x0000, 0x0000, 0x0000, 0xffff, NULL, ZOOM_FULL),
   // USB#0x0c0231:  AC Normal View
-  //USB_KEYMAP(0x0c0231, 0x0000, 0x0000, 0x0000, 0xffff, NULL, ZOOM_NORMAL),
-  USB_KEYMAP(0x0c0232, 0x0174, 0x017c, 0x0000, 0xffff, "ZoomToggle",
+  //DOM_CODE(0x0c0231, 0x0000, 0x0000, 0x0000, 0xffff, NULL, ZOOM_NORMAL),
+  DOM_CODE(0x0c0232, 0x0174, 0x017c, 0x0000, 0xffff, "ZoomToggle",
              ZOOM_TOGGLE),  // AC View Toggle
   // USB#0x0c0279:  AC Redo/Repeat
-  USB_KEYMAP(0x0c0279, 0x00b6, 0x00be, 0x0000, 0xffff, NULL, REDO),
+  DOM_CODE(0x0c0279, 0x00b6, 0x00be, 0x0000, 0xffff, NULL, REDO),
   // USB#0x0c0289:  AC_Reply
-  USB_KEYMAP(0x0c0289, 0x00e8, 0x00f0, 0x0000, 0xffff, "MailReply", MAIL_REPLY),
+  DOM_CODE(0x0c0289, 0x00e8, 0x00f0, 0x0000, 0xffff, "MailReply", MAIL_REPLY),
   // USB#0x0c028b:  AC_ForwardMsg (MailForward)
-  USB_KEYMAP(0x0c028b, 0x00e9, 0x00f1, 0x0000, 0xffff, "MailForward", MAIL_FORWARD),
+  DOM_CODE(0x0c028b, 0x00e9, 0x00f1, 0x0000, 0xffff, "MailForward", MAIL_FORWARD),
   // USB#0x0c028c:  AC_Send
-  USB_KEYMAP(0x0c028c, 0x00e7, 0x00ef, 0x0000, 0xffff, "MailSend", MAIL_SEND),
+  DOM_CODE(0x0c028c, 0x00e7, 0x00ef, 0x0000, 0xffff, "MailSend", MAIL_SEND),
   // USB#0x0c029d:  AC Next Keyboard Layout Select
-  USB_KEYMAP(0x0c029d, 0x0248, 0x0250, 0x0000, 0xffff, "KeyboardLayoutSelect",
+  DOM_CODE(0x0c029d, 0x0248, 0x0250, 0x0000, 0xffff, "KeyboardLayoutSelect",
              KEYBOARD_LAYOUT_SELECT),
-  USB_KEYMAP(0x0c029f, 0x0078, 0x0080, 0x0000, 0xffff, "ShowAllWindows",
+  DOM_CODE(0x0c029f, 0x0078, 0x0080, 0x0000, 0xffff, "ShowAllWindows",
              SHOW_ALL_WINDOWS),  // AC Desktop Show All Windows
 };
diff --git a/ui/events/keycodes/dom/dom_codes.h b/ui/events/keycodes/dom/dom_codes.h
index 481ac5d7..7428fd1 100644
--- a/ui/events/keycodes/dom/dom_codes.h
+++ b/ui/events/keycodes/dom/dom_codes.h
@@ -10,12 +10,12 @@
 namespace ui {
 
 #define DOM_CODE_TYPE(x) static_cast<DomCode>(x)
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) DOM_CODE_TYPE(usb)
-#define USB_KEYMAP_DECLARATION constexpr DomCode dom_codes[] =
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) DOM_CODE_TYPE(usb)
+#define DOM_CODE_DECLARATION constexpr DomCode dom_codes[] =
 #include "ui/events/keycodes/dom/dom_code_data.inc"
 #undef DOM_CODE_TYPE
-#undef USB_KEYMAP
-#undef USB_KEYMAP_DECLARATION
+#undef DOM_CODE
+#undef DOM_CODE_DECLARATION
 
 }  // namespace ui
 
diff --git a/ui/events/keycodes/dom/keycode_converter.cc b/ui/events/keycodes/dom/keycode_converter.cc
index 1eeb38e..709b339 100644
--- a/ui/events/keycodes/dom/keycode_converter.cc
+++ b/ui/events/keycodes/dom/keycode_converter.cc
@@ -18,20 +18,25 @@
 // Table of USB codes (equivalent to DomCode values), native scan codes,
 // and DOM Level 3 |code| strings.
 #if defined(OS_WIN)
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, win, code}
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+  { usb, win, code }
 #elif defined(OS_LINUX)
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, xkb, code}
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+  { usb, xkb, code }
 #elif defined(OS_MACOSX)
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, mac, code}
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+  { usb, mac, code }
 #elif defined(OS_ANDROID)
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, evdev, code}
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+  { usb, evdev, code }
 #else
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, 0, code}
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+  { usb, 0, code }
 #endif
-#define USB_KEYMAP_DECLARATION const KeycodeMapEntry usb_keycode_map[] =
+#define DOM_CODE_DECLARATION const KeycodeMapEntry usb_keycode_map[] =
 #include "ui/events/keycodes/dom/dom_code_data.inc"
-#undef USB_KEYMAP
-#undef USB_KEYMAP_DECLARATION
+#undef DOM_CODE
+#undef DOM_CODE_DECLARATION
 
 const size_t kKeycodeMapEntries = base::size(usb_keycode_map);
 
diff --git a/ui/events/keycodes/dom/keycode_converter_unittest.cc b/ui/events/keycodes/dom/keycode_converter_unittest.cc
index 22e44ac..3ea80e3c 100644
--- a/ui/events/keycodes/dom/keycode_converter_unittest.cc
+++ b/ui/events/keycodes/dom/keycode_converter_unittest.cc
@@ -22,7 +22,7 @@
 
 // Number of native codes expected to be mapped for each kind of native code.
 // These are in the same order as the columns in dom_code_data.inc
-// as reflected in the USB_KEYMAP() macro below.
+// as reflected in the DOM_CODE() macro below.
 const size_t expected_mapped_key_count[] = {
   212,  // evdev
   212,  // xkb
@@ -39,13 +39,15 @@
   int native_keycode[kNativeColumns];
 };
 
-#define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) \
-  { usb, code, #id, { evdev, xkb, win, mac } }
-#define USB_KEYMAP_DECLARATION \
+#define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+  {                                                   \
+    usb, code, #id, { evdev, xkb, win, mac }          \
+  }
+#define DOM_CODE_DECLARATION \
   const KeycodeConverterData kKeycodeConverterData[] =
 #include "ui/events/keycodes/dom/dom_code_data.inc"
-#undef USB_KEYMAP
-#undef USB_KEYMAP_DECLARATION
+#undef DOM_CODE
+#undef DOM_CODE_DECLARATION
 
 const uint32_t kUsbNonExistentKeycode = 0xffffff;
 const uint32_t kUsbUsBackslash =        0x070031;
diff --git a/ui/gfx/color_utils.cc b/ui/gfx/color_utils.cc
index c058749..52ce495 100644
--- a/ui/gfx/color_utils.cc
+++ b/ui/gfx/color_utils.cc
@@ -400,6 +400,10 @@
                             SkColorGetB(color));
 }
 
+SkColor GetDarkestColor() {
+  return g_darkest_color;
+}
+
 SkColor SetDarkestColorForTesting(SkColor color) {
   const SkColor previous_darkest_color = g_darkest_color;
   g_darkest_color = color;
diff --git a/ui/gfx/color_utils.h b/ui/gfx/color_utils.h
index a0853455..c76c196f 100644
--- a/ui/gfx/color_utils.h
+++ b/ui/gfx/color_utils.h
@@ -171,6 +171,9 @@
 // Creates an rgb string for an SkColor. For example: '255,0,255'.
 GFX_EXPORT std::string SkColorToRgbString(SkColor color);
 
+// Returns the darkest available color.
+GFX_EXPORT SkColor GetDarkestColor();
+
 // Sets the darkest available color to |color|.  Returns the previous darkest
 // color.
 GFX_EXPORT SkColor SetDarkestColorForTesting(SkColor color);
diff --git a/ui/gfx/color_utils_unittest.cc b/ui/gfx/color_utils_unittest.cc
index da410180..b4b3956 100644
--- a/ui/gfx/color_utils_unittest.cc
+++ b/ui/gfx/color_utils_unittest.cc
@@ -205,6 +205,14 @@
   EXPECT_EQ(color_string, "50,100,150");
 }
 
+TEST(ColorUtils, GetAndSetDarkestColor) {
+  const SkColor old_darkest_color = GetDarkestColor();
+  EXPECT_EQ(old_darkest_color, SetDarkestColorForTesting(SK_ColorLTGRAY));
+  EXPECT_EQ(SK_ColorLTGRAY, GetDarkestColor());
+  EXPECT_EQ(SK_ColorLTGRAY, SetDarkestColorForTesting(old_darkest_color));
+  EXPECT_EQ(old_darkest_color, GetDarkestColor());
+}
+
 TEST(ColorUtils, IsDarkDarkestColorChange) {
   ASSERT_FALSE(IsDark(SK_ColorLTGRAY));
   const SkColor old_darkest_color = SetDarkestColorForTesting(SK_ColorLTGRAY);
diff --git a/ui/ozone/platform/drm/OWNERS b/ui/ozone/platform/drm/OWNERS
index 363a93a..5392283 100644
--- a/ui/ozone/platform/drm/OWNERS
+++ b/ui/ozone/platform/drm/OWNERS
@@ -1,2 +1,4 @@
 dcastagna@chromium.org
 dnicoara@chromium.org
+
+# COMPONENT: OS>Systems>Display
diff --git a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js
index bedad2c..beacbc0c 100644
--- a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js
+++ b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js
@@ -48,17 +48,6 @@
 
     placeholder: String,
 
-    /**
-     * Used to track in real time if the |value| in cr-searchable-drop-down
-     * matches the value in the underlying cr-input.These values will differ
-     * after a user types in input that does not match a valid dropdown option.
-     */
-    invalid: {
-      type: Boolean,
-      value: false,
-      notify: true,
-    },
-
     /** @type {!Array<string>} */
     items: {
       type: Array,
@@ -87,10 +76,7 @@
     },
 
     /** @private {string} */
-    searchTerm_: {
-      type: String,
-      observer: 'updateInvalid_',
-    },
+    searchTerm_: String,
 
     /** @private {boolean} */
     dropdownRefitPending_: Boolean,
@@ -434,17 +420,6 @@
   onBlur_ : function () {
     if (!this.updateValueOnInput) {
       this.$.search.value = this.value;
-      this.searchTerm_ = '';
     }
-  },
-
-  /**
-   * If |updateValueOnInput| is true then any value is allowable so always set
-   * |invalid| to false.
-   * @private
-   */
-  updateInvalid_: function () {
-    this.invalid =
-        !this.updateValueOnInput && this.value != this.$.search.value;
   }
 });